summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2014-05-01 15:40:05 +0200
committerPeter Wu <peter@lekensteyn.nl>2014-05-01 15:40:05 +0200
commit24fc22336273e919517cde2e8a81b5e4222f9e91 (patch)
tree13d38d13f1fe0aa005446bcdf35953dedd20a335
parent69fec2b8561010b6d352a30a25914ab12fc27af0 (diff)
downloadTwitterDataAnalytics-24fc22336273e919517cde2e8a81b5e4222f9e91.tar.gz
Allow result and exception handler to be changed
-rw-r--r--src/io/StreamImpl.java36
-rw-r--r--src/main/TweetShell.java7
2 files changed, 35 insertions, 8 deletions
diff --git a/src/io/StreamImpl.java b/src/io/StreamImpl.java
index c378ea3..d72f926 100644
--- a/src/io/StreamImpl.java
+++ b/src/io/StreamImpl.java
@@ -35,13 +35,17 @@ public class StreamImpl implements Stream {
private final Set<String> keywords = new HashSet<>();
/**
+ * Used for thread-safe modifications.
+ */
+ private final Object listenerSync = new Object();
+ /**
* The target that is interested in received tweets.
*/
- private final ResultListener resultListener;
+ private ResultListener resultListener;
/**
* The target that is interesting in receiving changes.
*/
- private final ExceptionListener exceptionListener;
+ private ExceptionListener exceptionListener;
/**
* Used for signing messages.
*/
@@ -53,13 +57,25 @@ public class StreamImpl implements Stream {
*/
private WorkerContainer workerContainer;
- public StreamImpl(ResultListener resultListener, ExceptionListener el,
- OAuthRequester oauth) {
- this.resultListener = resultListener;
- this.exceptionListener = el;
+ public StreamImpl(OAuthRequester oauth) {
this.oauth = oauth;
}
+ /**
+ * Sets the listener for new tweets.
+ *
+ * @param resultListener
+ */
+ public void setResultListener(ResultListener resultListener) {
+ this.resultListener = resultListener;
+ }
+
+ public void setExceptionListener(ExceptionListener exceptionListener) {
+ synchronized (listenerSync) {
+ this.exceptionListener = exceptionListener;
+ }
+ }
+
@Override
public void watchKeyword(String keyword) {
keywords.add(keyword);
@@ -229,7 +245,13 @@ public class StreamImpl implements Stream {
}
}
connection.disconnect();
- exceptionListener.exceptionGenerated(ex);
+ // synchronize just in case the exception listener gets modified
+ // while hell breaks lose.
+ synchronized (listenerSync) {
+ if (exceptionListener != null) {
+ exceptionListener.exceptionGenerated(ex);
+ }
+ }
}
}
diff --git a/src/main/TweetShell.java b/src/main/TweetShell.java
index 533939b..b318544 100644
--- a/src/main/TweetShell.java
+++ b/src/main/TweetShell.java
@@ -36,7 +36,12 @@ public class TweetShell implements TwitterApi.PinSupplier {
if (stream_cached == null) {
OAuthRequester requester = (OAuthRequester) getApi().getRequester();
StreamHandler handler = new StreamHandler();
- stream_cached = new StreamImpl(handler, handler, requester);
+ stream_cached = new StreamImpl(requester);
+ StreamImpl streamObserver = (StreamImpl) stream_cached;
+ streamObserver.setExceptionListener(handler);
+ // TODO: wire up DataWriter and add a command ("target"?) to set a
+ // point to save results
+ streamObserver.setResultListener(handler);
}
return stream_cached;
}