summaryrefslogtreecommitdiff
path: root/src/provider/CompositeResultListener.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/provider/CompositeResultListener.java')
-rw-r--r--src/provider/CompositeResultListener.java56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/provider/CompositeResultListener.java b/src/provider/CompositeResultListener.java
new file mode 100644
index 0000000..3db91da
--- /dev/null
+++ b/src/provider/CompositeResultListener.java
@@ -0,0 +1,56 @@
+package provider;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+import org.json.JSONObject;
+
+/**
+ * ResultListener that can contain multiple registrations.
+ *
+ * @author Peter Wu
+ */
+public class CompositeResultListener implements ResultListener {
+
+ private final List<ResultListener> listeners;
+
+ public CompositeResultListener() {
+ this.listeners = new ArrayList<>();
+ }
+
+ public void register(ResultListener rl) {
+ listeners.add(rl);
+ }
+
+ public void unregister(ResultListener rl) {
+ listeners.remove(rl);
+ }
+
+ public List<ResultListener> getRegistered() {
+ return new ArrayList<>(listeners);
+ }
+
+ public ResultListener findListener(Class<? extends ResultListener> rlCls) {
+ for (ResultListener rl : listeners) {
+ if (rlCls.isInstance(rl)) {
+ return rl;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public void tweetGenerated(JSONObject obj) {
+ for (ResultListener rl : listeners) {
+ rl.tweetGenerated(obj);
+ }
+ }
+
+ @Override
+ public void profileGenerated(JSONObject obj) {
+ for (ResultListener rl : listeners) {
+ rl.profileGenerated(obj);
+ }
+ }
+}