From 44be6e6cd7671dd243056107ffa6201504f7fbce Mon Sep 17 00:00:00 2001 From: Ben Culkin Date: Sun, 25 Jun 2023 15:50:38 -0400 Subject: Update a number of things --- src/main/java/bjc/esodata/DefaultSpool.java | 80 +++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 src/main/java/bjc/esodata/DefaultSpool.java (limited to 'src/main/java/bjc/esodata/DefaultSpool.java') diff --git a/src/main/java/bjc/esodata/DefaultSpool.java b/src/main/java/bjc/esodata/DefaultSpool.java new file mode 100644 index 0000000..372275d --- /dev/null +++ b/src/main/java/bjc/esodata/DefaultSpool.java @@ -0,0 +1,80 @@ +package bjc.esodata; + +import java.util.Iterator; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.function.Consumer; + +/** + * A default implementation of {@link Spool} using a {@link LinkedBlockingDeque} + * as the backing storage. + * + * @author bjcul + * + * @param The type contained in the spool + */ +public class DefaultSpool implements Spool, AutoCloseable { + private String label; + private String group; + + private BlockingQueue container; + + private boolean closed; + + /** + * Create a new spool without label or group + */ + public DefaultSpool() { + this(null, null); + } + + /** + * Create a new spool with a given label and group. + * + * @param label The label of the spool + * @param group The group for the spool + */ + public DefaultSpool(String label, String group) { + this.label = label; + this.group = group; + + this.container = new LinkedBlockingDeque<>(); + this.closed = false; + } + + @Override + public String label() { + return label; + } + + @Override + public String group() { + return group; + } + + @Override + public Consumer getInput() { + return (val) -> { + if (closed) { + throw new ClosedSpoolException(); + } + container.add(val); + }; + } + + @Override + public Iterator getOutput() { + return container.iterator(); + } + + @Override + public boolean isClosed() { + return false; + } + + @Override + public void close() throws Exception { + closed = true; + } + +} -- cgit v1.2.3