diff options
author | Trygve Laugstøl <trygvis@inamo.no> | 2012-11-17 23:51:24 +0100 |
---|---|---|
committer | Trygve Laugstøl <trygvis@inamo.no> | 2012-11-17 23:51:24 +0100 |
commit | c266c3e36007d968d3126b4f8475d3e29e219a19 (patch) | |
tree | ffa93f9a2c97dc23d47fb981cc97e4446dbdb106 /src/main/java/io/trygvis/esper/testing/object/ObjectManager.java | |
parent | 751e580672cc384e20f62e9440d44bdcb04f1ef0 (diff) | |
download | esper-testing-c266c3e36007d968d3126b4f8475d3e29e219a19.tar.gz esper-testing-c266c3e36007d968d3126b4f8475d3e29e219a19.tar.bz2 esper-testing-c266c3e36007d968d3126b4f8475d3e29e219a19.tar.xz esper-testing-c266c3e36007d968d3126b4f8475d3e29e219a19.zip |
o Creating jobs for polling a jenkins servers and jobs.
Diffstat (limited to 'src/main/java/io/trygvis/esper/testing/object/ObjectManager.java')
-rw-r--r-- | src/main/java/io/trygvis/esper/testing/object/ObjectManager.java | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/src/main/java/io/trygvis/esper/testing/object/ObjectManager.java b/src/main/java/io/trygvis/esper/testing/object/ObjectManager.java new file mode 100644 index 0000000..cd0dd1e --- /dev/null +++ b/src/main/java/io/trygvis/esper/testing/object/ObjectManager.java @@ -0,0 +1,60 @@ +package io.trygvis.esper.testing.object; + +import java.io.*; +import java.util.*; + +public class ObjectManager<K, V extends Closeable> implements Closeable { + private final String type; + private final ObjectFactory<K, V> objectFactory; + private Map<K, V> objects = new HashMap<>(); + private boolean closed = false; + + public ObjectManager(String type, Set<K> initialKeys, ObjectFactory<K, V> objectFactory) { + this.type = type; + this.objectFactory = objectFactory; + + update(initialKeys); + } + + public synchronized void update(Collection<K> newKeys) { + if (closed) { + throw new RuntimeException("This instance is closed: type=" + type); + } + Set<K> found = new HashSet<>(newKeys); + found.removeAll(objects.keySet()); + + Set<K> gone = new HashSet<>(objects.keySet()); + gone.removeAll(newKeys); + + for (K k : gone) { + try { + System.out.println("Removing " + type + " with id=" + k); + objects.remove(k).close(); + } catch (IOException e) { + e.printStackTrace(System.out); + } + } + + for (K k : found) { + System.out.println("Adding " + type + " with id=" + k); + objects.put(k, objectFactory.create(k)); + } + } + + public synchronized void close() throws IOException { + if (closed) { + System.out.println("Already closed: type=" + type); + return; + } + update(Collections.<K>emptyList()); + closed = true; + } + + public synchronized Collection<V> getObjects() { + return new ArrayList<>(objects.values()); + } + + public void setObjects(Map<K, V> objects) { + this.objects = objects; + } +} |