Skip to content

Commit

Permalink
TFJ-422 DataObjectFactory now works with UserStream
Browse files Browse the repository at this point in the history
  • Loading branch information
yusuke committed Nov 20, 2010
1 parent 82b11cc commit 053b2f1
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 46 deletions.
107 changes: 61 additions & 46 deletions twitter4j-core/src/main/java/twitter4j/StatusStreamImpl.java
Expand Up @@ -43,6 +43,7 @@

/**
* StatusStream implementation. This class is NOT intended to be extended but left non-final for the ease of mock testing.
*
* @author Yusuke Yamamoto - yusuke at mac.com
* @since Twitter4J 2.1.2
*/
Expand Down Expand Up @@ -105,7 +106,7 @@ private void handleNextElement(List<StatusListener> listeners) throws TwitterExc
logger.debug("received:", line);
try {
JSONObject json = new JSONObject(line);
if (!json.isNull ("sender")) {
if (!json.isNull("sender")) {
for (StatusListener listener : listeners) {
if (listener instanceof UserStreamListener) {
((UserStreamListener) listener).onDirectMessage(new DirectMessageJSONImpl(json));
Expand All @@ -118,21 +119,23 @@ private void handleNextElement(List<StatusListener> listeners) throws TwitterExc
} else if (!json.isNull("direct_message")) {
for (StatusListener listener : listeners) {
if (listener instanceof UserStreamListener) {
((UserStreamListener) listener).onDirectMessage(new DirectMessageJSONImpl(json.getJSONObject("direct_message")));
JSONObject directMessageJSON = json.getJSONObject("direct_message");
DirectMessage directMessage = new DirectMessageJSONImpl(directMessageJSON);
DataObjectFactoryUtil.registerJSONObject(directMessage, directMessageJSON);
((UserStreamListener) listener).onDirectMessage(directMessage);
}
}
} else if (!json.isNull("delete")) {
for (StatusListener listener : listeners) {
listener.onDeletionNotice(new StatusDeletionNoticeImpl(json));
}
}
else if (!json.isNull("limit")) {
} else if (!json.isNull("limit")) {
for (StatusListener listener : listeners) {
listener.onTrackLimitationNotice(ParseUtil.getInt("track", json.getJSONObject("limit")));
}
} else if (!json.isNull ("scrub_geo")) {
// Not implemented yet
System.out.println ("Geo-tagging deletion notice (not implemented yet): " + line);
} else if (!json.isNull("scrub_geo")) {
// Not implemented yet
System.out.println("Geo-tagging deletion notice (not implemented yet): " + line);
} else if (!json.isNull("friends")) {
JSONArray friends = json.getJSONArray("friends");
int[] friendIds = new int[friends.length()];
Expand All @@ -146,26 +149,29 @@ else if (!json.isNull("limit")) {
}
} else if (!json.isNull("event")) {
String event = json.getString("event");
User source = new UserJSONImpl(json.getJSONObject("source"));
User target = new UserJSONImpl(json.getJSONObject("target"));

JSONObject sourceJSON = json.getJSONObject("source");
JSONObject targetJSON = json.getJSONObject("target");
User source = new UserJSONImpl(sourceJSON);
User target = new UserJSONImpl(targetJSON);
DataObjectFactoryUtil.registerJSONObject(source, sourceJSON);
DataObjectFactoryUtil.registerJSONObject(target, targetJSON);
if ("favorite".equals(event)) {
Status targetObject = new StatusJSONImpl(json.getJSONObject("target_object"));
Status targetObject = extractTargetObject(json);
for (StatusListener listener : listeners) {
if (listener instanceof UserStreamListener) {
((UserStreamListener) listener).onFavorite(source, target, targetObject);
}
}
} else if ("unfavorite".equals(event)) {
Status targetObject = new StatusJSONImpl(json.getJSONObject("target_object"));
Status targetObject = extractTargetObject(json);
for (StatusListener listener : listeners) {
if (listener instanceof UserStreamListener) {
((UserStreamListener) listener).onUnfavorite(source, target, targetObject);
}
}
} else if ("retweet".equals(event)) {
// note: retweet events also show up as statuses
Status targetObject = new StatusJSONImpl(json.getJSONObject("target_object"));
Status targetObject = extractTargetObject(json);
for (StatusListener listener : listeners) {
if (listener instanceof UserStreamListener) {
((UserStreamListener) listener).onRetweet(source, target, targetObject);
Expand All @@ -184,49 +190,50 @@ else if (!json.isNull("limit")) {
}
}
} else if (event.startsWith("list_")) {
UserList targetObject = new UserListJSONImpl (json.getJSONObject ("target_object"));

if ("list_user_subscribed".equals (event)) {
for (StatusListener listener : listeners) {
if (listener instanceof UserStreamListener) {
((UserStreamListener) listener).onUserListSubscribed(source, target, targetObject);
}
}
} else if ("list_created".equals (event)) {
for (StatusListener listener : listeners) {
if (listener instanceof UserStreamListener) {
((UserStreamListener) listener).onUserListCreated(source, targetObject);
}
}
} else if ("list_updated".equals (event)) {
for (StatusListener listener : listeners) {
if (listener instanceof UserStreamListener) {
((UserStreamListener) listener).onUserListUpdated(source, targetObject);
}
}
} else if ("list_destroyed".equals (event)) {
for (StatusListener listener : listeners) {
if (listener instanceof UserStreamListener) {
((UserStreamListener) listener).onUserListDestroyed(source, targetObject);
}
}
}
} else if ("block".equals(event)) {
JSONObject targetObjectJSON = json.getJSONObject("target_object");
UserList targetObject = new UserListJSONImpl(targetObjectJSON);
DataObjectFactoryUtil.registerJSONObject(targetObject, targetObjectJSON);
if ("list_user_subscribed".equals(event)) {
for (StatusListener listener : listeners) {
if (listener instanceof UserStreamListener) {
((UserStreamListener) listener).onUserListSubscribed(source, target, targetObject);
}
}
} else if ("list_created".equals(event)) {
for (StatusListener listener : listeners) {
if (listener instanceof UserStreamListener) {
((UserStreamListener) listener).onUserListCreated(source, targetObject);
}
}
} else if ("list_updated".equals(event)) {
for (StatusListener listener : listeners) {
if (listener instanceof UserStreamListener) {
((UserStreamListener) listener).onUserListUpdated(source, targetObject);
}
}
} else if ("list_destroyed".equals(event)) {
for (StatusListener listener : listeners) {
if (listener instanceof UserStreamListener) {
((UserStreamListener) listener).onUserListDestroyed(source, targetObject);
}
}
}
} else if ("block".equals(event)) {
for (StatusListener listener : listeners) {
if (listener instanceof UserStreamListener) {
((UserStreamListener) listener).onBlock(source, target);
}
}
} else if ("unblock".equals (event)) {
} else if ("unblock".equals(event)) {
for (StatusListener listener : listeners) {
if (listener instanceof UserStreamListener) {
((UserStreamListener) listener).onUnblock(source, target);
}
}
} else {
logger.info("Received unknown event type '" + event + "': " + line);
}
} else {
logger.info("Received unknown event type '" + event + "': " + line);
}
} else {
// tmp: just checking what kind of unknown event we're receiving on this stream
logger.info("Received unknown event: " + line);
}
Expand All @@ -243,12 +250,20 @@ else if (!json.isNull("limit")) {
}
boolean isUnexceptedException = streamAlive;
streamAlive = false;
if(isUnexceptedException){
if (isUnexceptedException) {
throw new TwitterException("Stream closed.", ioe);
}
}
}

Status extractTargetObject(JSONObject json) throws JSONException, TwitterException {
JSONObject statusJSON = json.getJSONObject("target_object");
Status targetObject = new StatusJSONImpl(statusJSON);
DataObjectFactoryUtil.registerJSONObject(targetObject, statusJSON);
return targetObject;
}


/**
* {@inheritDoc}
*/
Expand Down
12 changes: 12 additions & 0 deletions twitter4j-core/src/test/java/twitter4j/StreamAPITest.java
Expand Up @@ -422,25 +422,37 @@ public void onException(Exception ex) {
}

public void onUserListSubscribed(User subscriber, User listOwner, UserList list) {
assertNotNull(DataObjectFactory.getRawJSON(subscriber));
assertNotNull(DataObjectFactory.getRawJSON(listOwner));
assertNotNull(DataObjectFactory.getRawJSON(list));
this.subscriber = subscriber;
this.listOwner = listOwner;
this.list = list;
notifyResponse();
}

public void onUserListCreated(User listOwner, UserList list) {
assertNotNull(DataObjectFactory.getRawJSON(subscriber));
assertNotNull(DataObjectFactory.getRawJSON(listOwner));
assertNotNull(DataObjectFactory.getRawJSON(list));
this.listOwner = listOwner;
this.list = list;
notifyResponse();
}

public void onUserListUpdated(User listOwner, UserList list) {
assertNotNull(DataObjectFactory.getRawJSON(subscriber));
assertNotNull(DataObjectFactory.getRawJSON(listOwner));
assertNotNull(DataObjectFactory.getRawJSON(list));
this.listOwner = listOwner;
this.list = list;
notifyResponse();
}

public void onUserListDestroyed(User listOwner, UserList list) {
assertNotNull(DataObjectFactory.getRawJSON(subscriber));
assertNotNull(DataObjectFactory.getRawJSON(listOwner));
assertNotNull(DataObjectFactory.getRawJSON(list));
this.listOwner = listOwner;
this.list = list;
notifyResponse();
Expand Down

0 comments on commit 053b2f1

Please sign in to comment.