Add metadata listeners to components.
[sonitus.git] / src / main / java / net / pterodactylus / sonitus / data / source / MultiSource.java
index 0779b1a..1d8f289 100644 (file)
@@ -26,9 +26,11 @@ import java.util.List;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.logging.Logger;
 
+import net.pterodactylus.sonitus.data.AbstractControlledComponent;
 import net.pterodactylus.sonitus.data.Controller;
 import net.pterodactylus.sonitus.data.Metadata;
 import net.pterodactylus.sonitus.data.Source;
+import net.pterodactylus.sonitus.data.event.MetadataUpdated;
 import net.pterodactylus.sonitus.data.event.SourceFinishedEvent;
 
 import com.google.common.eventbus.EventBus;
@@ -41,7 +43,7 @@ import com.google.inject.Inject;
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
-public class MultiSource implements Source {
+public class MultiSource extends AbstractControlledComponent implements Source {
 
        /** The logger. */
        private static final Logger logger = Logger.getLogger(MultiSource.class.getName());
@@ -55,6 +57,12 @@ public class MultiSource implements Source {
        /** Whether the source was changed. */
        private boolean sourceChanged;
 
+       /**
+        * Creates a new multi source.
+        *
+        * @param eventBus
+        *              The event bus
+        */
        @Inject
        public MultiSource(EventBus eventBus) {
                this.eventBus = eventBus;
@@ -79,6 +87,8 @@ public class MultiSource implements Source {
                                sourceChanged = true;
                                this.source.notifyAll();
                        }
+                       fireMetadataUpdated(source.metadata());
+                       eventBus.post(new MetadataUpdated(this, source.metadata()));
                        logger.info(String.format("Next Source set: %s", source));
                }
        }
@@ -88,7 +98,12 @@ public class MultiSource implements Source {
        //
 
        @Override
-       public List<Controller> controllers() {
+       public String name() {
+               return "Multisource";
+       }
+
+       @Override
+       public List<Controller<?>> controllers() {
                return Collections.emptyList();
        }