X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Fnet%2Fpterodactylus%2Fsonitus%2Fdata%2FAbstractControlledComponent.java;h=fe338c114bc6f92bbfafaf281b660136885ef6b2;hb=70ea21939e6071954eeb05f2a42e7a92a02013f2;hp=2c63a08c629379064caf2c34fd8624e5e8b1e8e3;hpb=87436ac0b103a112722c1df835e11ec928e57d38;p=sonitus.git diff --git a/src/main/java/net/pterodactylus/sonitus/data/AbstractControlledComponent.java b/src/main/java/net/pterodactylus/sonitus/data/AbstractControlledComponent.java index 2c63a08..fe338c1 100644 --- a/src/main/java/net/pterodactylus/sonitus/data/AbstractControlledComponent.java +++ b/src/main/java/net/pterodactylus/sonitus/data/AbstractControlledComponent.java @@ -18,6 +18,7 @@ package net.pterodactylus.sonitus.data; import java.util.List; +import java.util.concurrent.atomic.AtomicReference; import com.google.common.collect.Lists; @@ -29,8 +30,24 @@ import com.google.common.collect.Lists; */ public abstract class AbstractControlledComponent implements ControlledComponent { + /** The name of this filter. */ + private final String name; + /** The list of metadata listeners. */ - private final List metadataListeners = Lists.newArrayList(); + private final List metadataListeners = Lists.newCopyOnWriteArrayList(); + + /** The current metadata. */ + private final AtomicReference metadata = new AtomicReference(); + + /** + * Creates a new abstract controlled component. + * + * @param name + * The name of the component + */ + protected AbstractControlledComponent(String name) { + this.name = name; + } // // LISTENER MANAGEMENT @@ -47,6 +64,29 @@ public abstract class AbstractControlledComponent implements ControlledComponent } // + // CONTROLLEDCOMPONENT METHODS + // + + @Override + public String name() { + return name; + } + + @Override + public Metadata metadata() { + return metadata.get(); + } + + @Override + public void metadataUpdated(Metadata metadata) { + if (metadata.equals(this.metadata.get())) { + return; + } + this.metadata.set(metadata); + fireMetadataUpdated(metadata); + } + + // // EVENT METHODS //