From c266c3e36007d968d3126b4f8475d3e29e219a19 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Sat, 17 Nov 2012 23:51:24 +0100 Subject: o Creating jobs for polling a jenkins servers and jobs. --- .../esper/testing/object/ObjectManager.java | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/main/java/io/trygvis/esper/testing/object/ObjectManager.java (limited to 'src/main/java/io/trygvis/esper/testing/object/ObjectManager.java') 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 implements Closeable { + private final String type; + private final ObjectFactory objectFactory; + private Map objects = new HashMap<>(); + private boolean closed = false; + + public ObjectManager(String type, Set initialKeys, ObjectFactory objectFactory) { + this.type = type; + this.objectFactory = objectFactory; + + update(initialKeys); + } + + public synchronized void update(Collection newKeys) { + if (closed) { + throw new RuntimeException("This instance is closed: type=" + type); + } + Set found = new HashSet<>(newKeys); + found.removeAll(objects.keySet()); + + Set 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.emptyList()); + closed = true; + } + + public synchronized Collection getObjects() { + return new ArrayList<>(objects.values()); + } + + public void setObjects(Map objects) { + this.objects = objects; + } +} -- cgit v1.2.3