Add metadata listeners to components.
[sonitus.git] / src / main / java / net / pterodactylus / sonitus / data / sink / FileSink.java
index 9bebc6b..b3b1ff0 100644 (file)
@@ -23,9 +23,13 @@ import java.util.Collections;
 import java.util.List;
 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.Sink;
+import net.pterodactylus.sonitus.data.event.MetadataUpdated;
+
+import com.google.common.eventbus.EventBus;
 
 /**
  * {@link net.pterodactylus.sonitus.data.Sink} that writes all received data
@@ -33,23 +37,33 @@ import net.pterodactylus.sonitus.data.Sink;
  *
  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
  */
-public class FileSink implements Sink {
+public class FileSink extends AbstractControlledComponent implements Sink {
 
        /** The logger. */
        private static final Logger logger = Logger.getLogger(FileSink.class.getName());
 
+       /** The event bus. */
+       private final EventBus eventBus;
+
        /** The path of the file to write to. */
        private final String path;
 
+       /** The output stream writing to the file. */
        private FileOutputStream fileOutputStream;
 
+       /** The current metadata. */
+       private Metadata metadata;
+
        /**
         * Creates a new file sink that will write to the given path.
         *
+        * @param eventBus
+        *              The event bus
         * @param path
         *              The path of the file to write to
         */
-       public FileSink(String path) {
+       public FileSink(EventBus eventBus, String path) {
+               this.eventBus = eventBus;
                this.path = path;
        }
 
@@ -63,6 +77,11 @@ public class FileSink implements Sink {
        }
 
        @Override
+       public Metadata metadata() {
+               return metadata;
+       }
+
+       @Override
        public List<Controller<?>> controllers() {
                return Collections.emptyList();
        }
@@ -74,6 +93,7 @@ public class FileSink implements Sink {
        @Override
        public void open(Metadata metadata) throws IOException {
                fileOutputStream = new FileOutputStream(path);
+               metadataUpdated(metadata);
        }
 
        @Override
@@ -87,7 +107,9 @@ public class FileSink implements Sink {
 
        @Override
        public void metadataUpdated(Metadata metadata) {
-               /* ignore. */
+               this.metadata = metadata;
+               fireMetadataUpdated(metadata);
+               eventBus.post(new MetadataUpdated(this, metadata));
        }
 
        @Override