You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streams.apache.org by sb...@apache.org on 2014/11/16 01:56:19 UTC
[01/10] incubator-streams git commit: STREAMS-220 | Rewrote
FacebookPostActivitySerializer to guarantee final Activity data shape
Repository: incubator-streams
Updated Branches:
refs/heads/STREAMS-68,218 8737bdadf -> ce2a794dc
STREAMS-220 | Rewrote FacebookPostActivitySerializer to guarantee final Activity data shape
Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/01efddab
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/01efddab
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/01efddab
Branch: refs/heads/STREAMS-68,218
Commit: 01efddab57355035ea480046d10122fa22e60eff
Parents: bfa9466
Author: Robert Douglas <rd...@w2ogroup.com>
Authored: Wed Nov 12 12:29:55 2014 -0600
Committer: Robert Douglas <rd...@w2ogroup.com>
Committed: Wed Nov 12 12:29:55 2014 -0600
----------------------------------------------------------------------
.../api/FacebookPostActivitySerializer.java | 243 +------------------
.../serializer/FacebookActivityUtil.java | 147 ++++++++++-
.../facebook/test/FacebookPostSerDeTest.java | 28 ++-
3 files changed, 163 insertions(+), 255 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/01efddab/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPostActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPostActivitySerializer.java b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPostActivitySerializer.java
index aff87eb..2bc0867 100644
--- a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPostActivitySerializer.java
+++ b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPostActivitySerializer.java
@@ -15,37 +15,22 @@
* specific language governing permissions and limitations
* under the License.
*/
-
package org.apache.streams.facebook.api;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
import org.apache.commons.lang.NotImplementedException;
import org.apache.streams.data.ActivitySerializer;
import org.apache.streams.exceptions.ActivitySerializerException;
import org.apache.streams.facebook.Post;
+import org.apache.streams.facebook.serializer.FacebookActivityUtil;
import org.apache.streams.jackson.StreamsJacksonMapper;
import org.apache.streams.pojo.json.*;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.joda.time.format.ISODateTimeFormat;
-import java.util.HashMap;
-import java.util.Iterator;
import java.util.List;
-import java.util.Map;
-import static org.apache.streams.data.util.ActivityUtil.*;
-
-/**
- * Serializes activity posts
- * sblackmon: This class needs a rewrite
- */
public class FacebookPostActivitySerializer implements ActivitySerializer<org.apache.streams.facebook.Post> {
public static final DateTimeFormatter FACEBOOK_FORMAT = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ");
@@ -70,25 +55,10 @@ public class FacebookPostActivitySerializer implements ActivitySerializer<org.ap
@Override
public Activity deserialize(Post post) throws ActivitySerializerException {
-
Activity activity = new Activity();
- activity.setPublished(post.getCreatedTime());
- activity.setUpdated(post.getUpdatedTime());
- addActor(activity, mapper.convertValue(post.getFrom(), ObjectNode.class));
- setProvider(activity);
- setObjectType(post.getType(), activity);
- parseObject(activity, mapper.convertValue(post, ObjectNode.class));
- fixContentFromSummary(activity);
- activity.setVerb("post");
- List<String> links = Lists.newLinkedList();
- links.add(post.getLink());
- activity.setLinks(links);
- ensureExtensions(activity).put("facebook", post);
- if(post.getLikes() != null) {
- Map<String, Object> likes = Maps.newHashMap();
- likes.put("count", post.getLikes().size());
- ensureExtensions(activity).put("likes", likes);
- }
+
+ FacebookActivityUtil.updateActivity(post, activity);
+
return activity;
}
@@ -96,209 +66,4 @@ public class FacebookPostActivitySerializer implements ActivitySerializer<org.ap
public List<Activity> deserializeAll(List<Post> serializedList) {
throw new NotImplementedException("Not currently supported by this deserializer");
}
-
- private void fixContentFromSummary(Activity activity) {
- //we MUST have a content field set, so choose the best option
- if(activity.getContent() == null) {
- activity.setContent(activity.getAdditionalProperties().containsKey("summary") ?
- (String) activity.getAdditionalProperties().get("summary") :
- activity.getObject().getSummary());
- }
- }
-
- private void fixObjectId(Activity activity) {
- //An artifact of schema generation, the default value is {link}
- if(activity.getObject().getId().equals("{link}")) {
- activity.getObject().setId(null);
- }
- }
-
- private void setObjectType(String type, Activity activity) {
- ActivityObject object = new ActivityObject();
- activity.setObject(object);
- object.setObjectType(type);
- }
-
- private void setProvider(Activity activity) {
- Provider provider = new Provider();
- provider.setId("id:provider:"+PROVIDER_NAME);
- provider.setDisplayName(PROVIDER_NAME);
- activity.setProvider(provider);
- }
-
- private String getObjectType(JsonNode node) {
- Iterator<Map.Entry<String, JsonNode>> fields = node.fields();
- ensureMoreFields(fields);
- Map.Entry<String, JsonNode> field = fields.next();
- //ensureNoMoreFields(fields);
- return node.asText();
- }
-
- private void parseObject(Activity activity, JsonNode jsonNode) throws ActivitySerializerException {
- for(Iterator<Map.Entry<String, JsonNode>> fields = jsonNode.fields(); fields.hasNext();) {
- Map.Entry<String, JsonNode> field = fields.next();
- String key = field.getKey();
- JsonNode value = field.getValue();
- mapField(activity, key, value);
- }
- }
-
- private void mapField(Activity activity, String name, JsonNode value) throws ActivitySerializerException {
- if("application".equals(name)) {
- addGenerator(activity, value);
- } else if ("caption".equals(name)) {
- addSummary(activity, value);
- } else if ("comments".equals(name)) {
- addAttachments(activity, value);
- } else if ("description".equals(name)) {
- addObjectSummary(activity, value);
- } else if ("from".equals(name)) {
- addActor(activity, value);
- } else if ("icon".equals(name)) {
- addIcon(activity, value);
- } else if ("id".equals(name)) {
- addId(activity, value);
- } else if ("is_hidden".equals(name)) {
- addObjectHiddenExtension(activity, value);
- } else if ("like_count".equals(name)) {
- addLikeExtension(activity, value);
- } else if ("link".equals(name)) {
- addObjectLink(activity, value);
- } else if ("message".equals(name)) {
- activity.setContent(value.asText());
- } else if ("name".equals(name)) {
- addObjectName(activity, value);
- } else if ("object_id".equals(name)) {
- addObjectId(activity, value);
- } else if ("picture".equals(name)) {
- addObjectImage(activity, value);
- } else if ("place".equals(name)) {
- addLocationExtension(activity, value);
- } else if ("shares".equals(name)) {
- addRebroadcastExtension(activity, value);
- } else if ("source".equals(name)) {
- addObjectLink(activity, value);
- } else if ("story".equals(name)) {
- addTitle(activity, value);
- }
- }
-
- private void addSummary(Activity activity, JsonNode value) {
- activity.setAdditionalProperty("summary", value.asText());
- }
-
- private void addTitle(Activity activity, JsonNode value) {
- activity.setTitle(value.asText());
- }
-
- private void addLikeExtension(Activity activity, JsonNode value) {
- Map<String, Object> extensions = ensureExtensions(activity);
- Map<String, Object> likes = Maps.newHashMap();
- likes.put("count", value.asLong());
- extensions.put(LIKES_EXTENSION, likes);
- }
-
- private void addLocationExtension(Activity activity, JsonNode value) {
- Map<String, Object> extensions = ensureExtensions(activity);
- if(value.has("location")) {
- Map<String, Object> location = new HashMap<String, Object>();
- JsonNode fbLocation = value.get("location");
- if(fbLocation.has("country")) {
- location.put(LOCATION_EXTENSION_COUNTRY, fbLocation.get("country"));
- }
- if(fbLocation.has("latitude") && fbLocation.has("longitude")) {
- location.put(LOCATION_EXTENSION_COORDINATES, String.format("%s,%s", fbLocation.get("longitude"), fbLocation.get("latitude")));
- }
- extensions.put(LOCATION_EXTENSION, location);
- }
- }
-
- private void addObjectImage(Activity activity, JsonNode value) {
- Image image = new Image();
- image.setUrl(value.asText());
- activity.getObject().setImage(image);
- }
-
- private void addObjectId(Activity activity, JsonNode value) {
- activity.getObject().setId(getObjectId("facebook", activity.getObject().getObjectType(), value.asText()));
- }
-
- private void addObjectName(Activity activity, JsonNode value) {
- activity.getObject().setDisplayName(value.asText());
- }
-
- private void addId(Activity activity, JsonNode value) {
- activity.setId("id:"+PROVIDER_NAME+":"+value.asText());
- }
-
- private void addObjectLink(Activity activity, JsonNode value) {
- activity.getObject().setUrl(value.asText());
- }
-
- private void addRebroadcastExtension(Activity activity, JsonNode value) {
- Map<String, Object> extensions = ensureExtensions(activity);
- if(value.has("count")) {
- Map<String, Object> rebroadCast = Maps.newHashMap();
- rebroadCast.put("count", value.get("count").asLong());
- rebroadCast.put("perspectival", true);
- extensions.put(REBROADCAST_EXTENSION, rebroadCast);
- }
- }
-
- private void addObjectHiddenExtension(Activity activity, JsonNode value) {
- Map<String, Object> extensions = ensureExtensions(activity);
- extensions.put("hidden", value.asBoolean());
- }
-
- private void addIcon(Activity activity, JsonNode value) {
- Icon icon = new Icon();
- //Apparently the Icon didn't map from the schema very well
- icon.setAdditionalProperty("url", value.asText());
- activity.setIcon(icon);
- }
-
- private void addActor(Activity activity, JsonNode value) {
- Actor actor = new Actor();
- if(value.has("name")) {
- actor.setDisplayName(value.get("name").asText());
- }
- if(value.has("id")) {
- actor.setId("id:"+PROVIDER_NAME+":"+value.get("id").asText());
- }
- activity.setActor(actor);
- }
-
- private void addObjectSummary(Activity activity, JsonNode value) {
- activity.getObject().setSummary(value.asText());
- }
-
- private void addGenerator(Activity activity, JsonNode value) {
- Generator generator = new Generator();
- if(value.has("id")) {
- generator.setId(getObjectId(PROVIDER_NAME, "generator", value.get("id").asText()));
- }
- if(value.has("name")) {
- generator.setDisplayName(value.get("name").asText());
- }
- if(value.has("namespace")) {
- generator.setSummary(value.get("namespace").asText());
- }
- activity.setGenerator(generator);
- }
-
- private void addAttachments(Activity activity, JsonNode value) {
- //No direct mapping at this time
- }
-
- private static void ensureMoreFields(Iterator<Map.Entry<String, JsonNode>> fields) {
- if(!fields.hasNext()) {
- throw new IllegalStateException("Facebook activity must have one and only one root element");
- }
- }
- private static void ensureNoMoreFields(Iterator<Map.Entry<String, JsonNode>> fields) {
- if(fields.hasNext()) {
- throw new IllegalStateException("Facebook activity must have one and only one root element");
- }
- }
-
}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/01efddab/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookActivityUtil.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookActivityUtil.java b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookActivityUtil.java
index 06053b5..af650ba 100644
--- a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookActivityUtil.java
+++ b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookActivityUtil.java
@@ -15,27 +15,29 @@
* specific language governing permissions and limitations
* under the License.
*/
-
package org.apache.streams.facebook.serializer;
import com.google.common.base.Joiner;
import com.google.common.base.Optional;
import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import org.apache.streams.exceptions.ActivitySerializerException;
-import org.apache.streams.facebook.Cover;
-import org.apache.streams.facebook.Location;
-import org.apache.streams.facebook.Page;
-import org.apache.streams.pojo.json.Activity;
-import org.apache.streams.pojo.json.Actor;
-import org.apache.streams.pojo.json.Image;
-import org.apache.streams.pojo.json.Provider;
+import org.apache.streams.facebook.*;
+import org.apache.streams.facebook.Place;
+import org.apache.streams.facebook.Post;
+import org.apache.streams.pojo.json.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
-import static org.apache.streams.data.util.ActivityUtil.ensureExtensions;
+import static org.apache.streams.data.util.ActivityUtil.*;
public class FacebookActivityUtil {
+ private static final Logger LOGGER = LoggerFactory.getLogger(FacebookActivityUtil.class);
+
/**
* Updates the given Activity object with the values from the Page
* @param page the object to use as the source
@@ -49,6 +51,61 @@ public class FacebookActivityUtil {
}
/**
+ * Updates the given Activity object with the values from the Post
+ * @param post
+ * @param activity
+ * @throws ActivitySerializerException
+ */
+ public static void updateActivity(Post post, Activity activity) throws ActivitySerializerException {
+ activity.setActor(buildActor(post));
+ activity.setId(formatId(post.getId()));
+ activity.setProvider(getProvider());
+ activity.setUpdated(post.getUpdatedTime());
+ activity.setPublished(post.getCreatedTime());
+
+ if(post.getLink() != null && post.getLink().length() > 0) {
+ List<String> links = Lists.newArrayList();
+ links.add(post.getLink());
+ activity.setLinks(links);
+ }
+
+ activity.setContent(post.getMessage());
+
+ activity.setVerb("post");
+ activity.setObject(buildObject(post));
+ buildExtensions(activity, post);
+ }
+
+ /**
+ * Builds out the {@link org.apache.streams.pojo.json.ActivityObject} from the given {@link org.apache.streams.pojo.json.Post}
+ * @param post
+ * @return {@link org.apache.streams.pojo.json.ActivityObject}
+ */
+ public static ActivityObject buildObject(Post post) {
+ ActivityObject activityObject = new ActivityObject();
+
+ try {
+ activityObject.setContent(post.getMessage());
+ activityObject.setPublished(post.getCreatedTime());
+ activityObject.setUpdated(post.getUpdatedTime());
+ activityObject.setDisplayName(post.getFrom().getName());
+ activityObject.setId(formatId(post.getId()));
+ activityObject.setObjectType(post.getType());
+ activityObject.setUrl(post.getLink());
+
+ if(activityObject.getObjectType().equals("photo")) {
+ Image image = new Image();
+ image.setUrl(activityObject.getUrl());
+ activityObject.setImage(image);
+ }
+ } catch (Exception e) {
+ LOGGER.error("Exception while trying to build Activity object for post: {}, exception: {}", post, e);
+ }
+
+ return activityObject;
+ }
+
+ /**
* Gets the common facebook {@link org.apache.streams.pojo.json.Provider} object
* @return a provider object representing Facebook
*/
@@ -95,6 +152,31 @@ public class FacebookActivityUtil {
}
/**
+ * Builds an {@link org.apache.streams.pojo.json.Actor} object from the {@link org.apache.streams.pojo.json.Post}
+ * @param post
+ * @return {@link org.apache.streams.pojo.json.Actor}
+ */
+ public static Actor buildActor(Post post) {
+ Actor actor = new Actor();
+
+ try {
+ actor.setId(formatId(
+ Optional.fromNullable(
+ post.getFrom().getId())
+ .or(Optional.of(post.getFrom().getId().toString()))
+ .orNull()
+ ));
+
+ actor.setDisplayName(post.getFrom().getName());
+ actor.setAdditionalProperty("handle", post.getFrom().getName());
+ } catch (Exception e) {
+ LOGGER.error("Exception trying to build actor for Post: {}, {}", post, e);
+ }
+
+ return actor;
+ }
+
+ /**
* Builds the actor extensions given the page object
* @param actor
* @param page
@@ -115,6 +197,53 @@ public class FacebookActivityUtil {
}
/**
+ * Fills out the extensions attribute of the passed in {@link org.apache.streams.pojo.json.Activity}
+ * @param activity
+ * @param post
+ */
+ public static void buildExtensions(Activity activity, Post post) {
+ Map<String, Object> extensions = ensureExtensions(activity);
+
+ if(post.getLikes() != null) {
+ Map<String, Object> likes = Maps.newHashMap();
+ org.apache.streams.facebook.Like like = post.getLikes().get(0);
+
+ if(like.getAdditionalProperties().containsKey("data")) {
+ extensions.put("likes", likes);
+ }
+ }
+
+ if(post.getShares() != null) {
+ Map<String, Object> shares = Maps.newHashMap();
+ shares.put("count", ((Map<String, Object>)post.getShares()).get("count"));
+ extensions.put("rebroadcasts", shares);
+ }
+
+ if(post.getTo() != null) {
+ To to = post.getTo();
+ List<Datum> data = to.getData();
+ extensions.put("user_mentions", Lists.newArrayList());
+
+ for(Datum d : data) {
+ Map<String, String> mention = Maps.newHashMap();
+
+ mention.put("id", d.getId());
+ mention.put("displayName", d.getName());
+ mention.put("handle", d.getName());
+
+ ((List<Map<String,String>>)extensions.get("user_mentions")).add(mention);
+ }
+ }
+
+ if(post.getPlace() != null) {
+ Place place = post.getPlace();
+ if(place.getAdditionalProperties().containsKey("location")) {
+ extensions.put(LOCATION_EXTENSION, place.getAdditionalProperties().get("location"));
+ }
+ }
+ }
+
+ /**
* Formats the ID to conform with the Apache Streams activity ID convention
* @param idparts the parts of the ID to join
* @return a valid Activity ID in format "id:facebook:part1:part2:...partN"
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/01efddab/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookPostSerDeTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookPostSerDeTest.java b/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookPostSerDeTest.java
index bbe2eeb..8a557d7 100644
--- a/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookPostSerDeTest.java
+++ b/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookPostSerDeTest.java
@@ -24,7 +24,9 @@ import com.google.common.base.Joiner;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.input.BoundedInputStream;
import org.apache.streams.facebook.Post;
+import org.apache.streams.facebook.serializer.FacebookActivityUtil;
import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.apache.streams.pojo.json.Activity;
import org.junit.Assert;
import org.junit.Test;
import org.junit.Ignore;
@@ -33,13 +35,9 @@ import org.slf4j.LoggerFactory;
import java.io.InputStream;
-/**
-* Created with IntelliJ IDEA.
-* User: sblackmon
-* Date: 8/20/13
-* Time: 5:57 PM
-* To change this template use File | Settings | File Templates.
-*/
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
public class FacebookPostSerDeTest {
private final static Logger LOGGER = LoggerFactory.getLogger(FacebookPostSerDeTest.class);
@@ -73,6 +71,22 @@ public class FacebookPostSerDeTest {
LOGGER.debug(mapper.writeValueAsString(serde));
+ Activity activity = new Activity();
+ FacebookActivityUtil.updateActivity(ser, activity);
+
+ assertNotNull(activity);
+ assertNotNull(activity.getActor().getId());
+ assertNotNull(activity.getActor().getDisplayName());
+ assertNotNull(activity.getId());
+ assert(activity.getVerb().equals("post"));
+ assertNotNull(activity.getObject());
+ assertNotNull(activity.getUpdated());
+ assertNotNull(activity.getPublished());
+ assertEquals(activity.getProvider().getId(), "id:providers:facebook");
+ assertEquals(activity.getProvider().getDisplayName(), "Facebook");
+ assertEquals(activity.getLinks().size(), 1);
+ assertNotNull(activity.getAdditionalProperties().get("extensions"));
+
} catch( Exception e ) {
System.out.println(e);
e.printStackTrace();
[07/10] incubator-streams git commit: improved error handling
serialize twitter type support classes
Posted by sb...@apache.org.
improved error handling
serialize twitter type support classes
Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/93026a7c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/93026a7c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/93026a7c
Branch: refs/heads/STREAMS-68,218
Commit: 93026a7c2110df4ff441d2732f68085ebf933d53
Parents: 8737bda
Author: Steve Blackmon <sb...@w2odigital.com>
Authored: Sat Nov 15 12:51:11 2014 -0600
Committer: Steve Blackmon <sb...@w2odigital.com>
Committed: Sat Nov 15 12:51:50 2014 -0600
----------------------------------------------------------------------
.../converter/ActivityConverterProcessor.java | 23 ++++++++++++++--
.../converter/TypeConverterProcessor.java | 5 ++--
.../streams-provider-twitter/pom.xml | 6 +++-
.../serializer/TwitterConverterResolver.java | 29 ++++++--------------
.../serializer/TwitterDocumentClassifier.java | 11 +++++---
5 files changed, 43 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/93026a7c/streams-components/streams-converters/src/main/java/org/apache/streams/converter/ActivityConverterProcessor.java
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/src/main/java/org/apache/streams/converter/ActivityConverterProcessor.java b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/ActivityConverterProcessor.java
index 46ba788..629f979 100644
--- a/streams-components/streams-converters/src/main/java/org/apache/streams/converter/ActivityConverterProcessor.java
+++ b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/ActivityConverterProcessor.java
@@ -74,6 +74,9 @@ public class ActivityConverterProcessor extends TypeConverterProcessor {
break;
}
+ //Preconditions.checkNotNull(datumClass);
+ if( datumClass == null) return result;
+
// This implementation is primitive, greedy, takes first it can resolve
Class converterClass = null;
for( ActivityConverterResolver resolver : resolvers ) {
@@ -82,25 +85,39 @@ public class ActivityConverterProcessor extends TypeConverterProcessor {
break;
}
+ //Preconditions.checkNotNull(converterClass);
+ if( converterClass == null) return result;
+
ActivityConverter converter = ActivityConverterFactory.getInstance(converterClass);
+ //Preconditions.checkNotNull(converter);
+ if( converter == null) return result;
+
Object typedDoc;
if( datumClass.isInstance(inDoc) )
typedDoc = inDoc;
else
typedDoc = TypeConverterUtil.convert(inDoc, datumClass, mapper);
+ //Preconditions.checkNotNull(typedDoc);
+ if( typedDoc == null) return result;
+
Activity activity = converter.deserialize(typedDoc);
+ //Preconditions.checkNotNull(activity);
+ if( activity == null) return result;
+
entry.setDocument(activity);
result.add(entry);
- } catch( Throwable e ) {
- LOGGER.warn("Unable to serialize!", e.getMessage());
+ } catch( Exception e ) {
+ LOGGER.warn("Unable to serialize! " + e.getMessage());
+ e.printStackTrace();
+ } finally {
+ return result;
}
- return result;
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/93026a7c/streams-components/streams-converters/src/main/java/org/apache/streams/converter/TypeConverterProcessor.java
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/src/main/java/org/apache/streams/converter/TypeConverterProcessor.java b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/TypeConverterProcessor.java
index 6bfeead..5ff5567 100644
--- a/streams-components/streams-converters/src/main/java/org/apache/streams/converter/TypeConverterProcessor.java
+++ b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/TypeConverterProcessor.java
@@ -19,7 +19,6 @@ under the License.
package org.apache.streams.converter;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.Lists;
import org.apache.streams.core.StreamsDatum;
import org.apache.streams.core.StreamsProcessor;
@@ -27,13 +26,13 @@ import org.apache.streams.jackson.StreamsJacksonMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
+import java.io.Serializable;
import java.util.List;
/**
*
*/
-public class TypeConverterProcessor implements StreamsProcessor {
+public class TypeConverterProcessor implements StreamsProcessor, Serializable {
private final static Logger LOGGER = LoggerFactory.getLogger(TypeConverterProcessor.class);
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/93026a7c/streams-contrib/streams-provider-twitter/pom.xml
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/pom.xml b/streams-contrib/streams-provider-twitter/pom.xml
index 1c0e8cb..660afbc 100644
--- a/streams-contrib/streams-provider-twitter/pom.xml
+++ b/streams-contrib/streams-provider-twitter/pom.xml
@@ -80,7 +80,11 @@
<artifactId>hbc-core</artifactId>
<version>2.1.0</version>
</dependency>
-
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.2</version>
+ </dependency>
<dependency>
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-core</artifactId>
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/93026a7c/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterConverterResolver.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterConverterResolver.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterConverterResolver.java
index f14c9f5..5a58e42 100644
--- a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterConverterResolver.java
+++ b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterConverterResolver.java
@@ -18,25 +18,9 @@
package org.apache.streams.twitter.serializer;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
-import org.apache.commons.lang.StringUtils;
-import org.apache.streams.data.ActivityConverter;
import org.apache.streams.data.ActivityConverterResolver;
-import org.apache.streams.data.DocumentClassifier;
import org.apache.streams.exceptions.ActivitySerializerException;
-import org.apache.streams.jackson.StreamsJacksonMapper;
-import org.apache.streams.twitter.pojo.Delete;
-import org.apache.streams.twitter.pojo.FriendList;
-import org.apache.streams.twitter.pojo.Retweet;
-import org.apache.streams.twitter.pojo.Tweet;
-import org.apache.streams.twitter.pojo.User;
-import org.apache.streams.twitter.pojo.UserstreamEvent;
-
-import java.io.IOException;
-import java.io.Serializable;
+import org.apache.streams.twitter.pojo.*;
/**
* Created by sblackmon on 12/13/13.
@@ -50,10 +34,12 @@ public class TwitterConverterResolver implements ActivityConverterResolver {
private static TwitterConverterResolver instance = new TwitterConverterResolver();
public static TwitterConverterResolver getInstance() {
+
+ if( instance == null )
+ instance = new TwitterConverterResolver();
return instance;
- }
- private static ObjectMapper mapper = new StreamsJacksonMapper(StreamsTwitterMapper.TWITTER_FORMAT);
+ }
@Override
public Class bestSerializer(Class documentClass) throws ActivitySerializerException {
@@ -66,7 +52,10 @@ public class TwitterConverterResolver implements ActivityConverterResolver {
return TwitterJsonUserActivityConverter.class;
else if (documentClass == UserstreamEvent.class)
return TwitterJsonUserstreameventActivityConverter.class;
- else return TwitterJsonTweetActivityConverter.class;
+ else if (documentClass == FriendList.class)
+ return null;
+ else
+ return TwitterJsonTweetActivityConverter.class;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/93026a7c/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterDocumentClassifier.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterDocumentClassifier.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterDocumentClassifier.java
index b9ca789..1719491 100644
--- a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterDocumentClassifier.java
+++ b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterDocumentClassifier.java
@@ -23,13 +23,11 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.base.Preconditions;
import com.google.common.collect.Lists;
import org.apache.commons.lang.StringUtils;
-import org.apache.streams.data.ActivityConverter;
import org.apache.streams.data.DocumentClassifier;
import org.apache.streams.jackson.StreamsJacksonMapper;
import org.apache.streams.twitter.pojo.*;
import java.io.IOException;
-import java.io.Serializable;
/**
* Created by sblackmon on 12/13/13.
@@ -40,13 +38,16 @@ public class TwitterDocumentClassifier implements DocumentClassifier {
}
- private static TwitterDocumentClassifier instance = new TwitterDocumentClassifier();
+ private static TwitterDocumentClassifier instance;
public static TwitterDocumentClassifier getInstance() {
+
+ if( instance == null )
+ instance = new TwitterDocumentClassifier();
return instance;
}
- private static ObjectMapper mapper = new StreamsJacksonMapper(Lists.newArrayList(StreamsTwitterMapper.TWITTER_FORMAT));
+ private static ObjectMapper mapper;
public Class detectClass(Object document) {
@@ -56,6 +57,8 @@ public class TwitterDocumentClassifier implements DocumentClassifier {
String json = (String)document;
Preconditions.checkArgument(StringUtils.isNotEmpty(json));
+ mapper = new StreamsJacksonMapper(Lists.newArrayList(StreamsTwitterMapper.TWITTER_FORMAT));
+
ObjectNode objectNode;
try {
objectNode = (ObjectNode) mapper.readTree(json);
[10/10] incubator-streams git commit: improved configuration scheme
Posted by sb...@apache.org.
improved configuration scheme
Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/ce2a794d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/ce2a794d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/ce2a794d
Branch: refs/heads/STREAMS-68,218
Commit: ce2a794dc9c79a28d3650377c58942fb95d82eb2
Parents: df648a8
Author: Steve Blackmon <sb...@w2odigital.com>
Authored: Sat Nov 15 18:56:05 2014 -0600
Committer: Steve Blackmon <sb...@w2odigital.com>
Committed: Sat Nov 15 18:56:05 2014 -0600
----------------------------------------------------------------------
...ActivityConverterProcessorConfiguration.json | 23 ++++++++++++++++++++
1 file changed, 23 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/ce2a794d/streams-components/streams-converters/src/main/jsonschema/org/apache/streams/components/http/ActivityConverterProcessorConfiguration.json
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/src/main/jsonschema/org/apache/streams/components/http/ActivityConverterProcessorConfiguration.json b/streams-components/streams-converters/src/main/jsonschema/org/apache/streams/components/http/ActivityConverterProcessorConfiguration.json
new file mode 100644
index 0000000..ab173b4
--- /dev/null
+++ b/streams-components/streams-converters/src/main/jsonschema/org/apache/streams/components/http/ActivityConverterProcessorConfiguration.json
@@ -0,0 +1,23 @@
+{
+ "type": "object",
+ "$schema": "http://json-schema.org/draft-03/schema",
+ "id": "#",
+ "javaType" : "org.apache.streams.converter.ActivityConverterProcessorConfiguration",
+ "javaInterfaces": ["java.io.Serializable"],
+ "properties": {
+ "classifiers": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "javaType": "org.apache.streams.data.DocumentClassifier"
+ }
+ },
+ "resolvers": {
+ "type": "array",
+ "items": {
+ "type": "object",
+ "javaType": "org.apache.streams.data.ActivityConverterResolver"
+ }
+ }
+ }
+}
\ No newline at end of file
[05/10] incubator-streams git commit: Merge remote-tracking branch
'robdouglas/STREAMS-220'
Posted by sb...@apache.org.
Merge remote-tracking branch 'robdouglas/STREAMS-220'
Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/b410556f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/b410556f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/b410556f
Branch: refs/heads/STREAMS-68,218
Commit: b410556f871228cf4b65eabd2a12ca915d4df0bf
Parents: dc7ba80 5611aa7
Author: Ryan Ebanks <ry...@gmail.com>
Authored: Fri Nov 14 11:37:43 2014 -0600
Committer: Ryan Ebanks <ry...@gmail.com>
Committed: Fri Nov 14 11:37:43 2014 -0600
----------------------------------------------------------------------
.../api/FacebookPostActivitySerializer.java | 243 +------------------
.../serializer/FacebookActivityUtil.java | 153 +++++++++++-
.../facebook/test/FacebookPostSerDeTest.java | 28 ++-
3 files changed, 169 insertions(+), 255 deletions(-)
----------------------------------------------------------------------
[06/10] incubator-streams git commit: Merge remote-tracking branch
'rbnks/RSS-PROVIDER-TEST-FIX'
Posted by sb...@apache.org.
Merge remote-tracking branch 'rbnks/RSS-PROVIDER-TEST-FIX'
Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/9b89c089
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/9b89c089
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/9b89c089
Branch: refs/heads/STREAMS-68,218
Commit: 9b89c0898d0b0ad02550a6cada3ef83911ed140d
Parents: b410556 a698a07
Author: Ryan Ebanks <ry...@gmail.com>
Authored: Fri Nov 14 17:11:10 2014 -0600
Committer: Ryan Ebanks <ry...@gmail.com>
Committed: Fri Nov 14 17:11:10 2014 -0600
----------------------------------------------------------------------
.../org/apache/streams/rss/provider/RssStreamProviderTest.java | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
[09/10] incubator-streams git commit: Merge branch 'master' into
STREAMS-68, 218
Posted by sb...@apache.org.
Merge branch 'master' into STREAMS-68,218
Conflicts:
streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPostActivityConverter.java
Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/df648a80
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/df648a80
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/df648a80
Branch: refs/heads/STREAMS-68,218
Commit: df648a80d17c36220cba95a77331c1bbdcfd3532
Parents: a24b3be 9b89c08
Author: Steve Blackmon <sb...@w2odigital.com>
Authored: Sat Nov 15 18:55:54 2014 -0600
Committer: Steve Blackmon <sb...@w2odigital.com>
Committed: Sat Nov 15 18:55:54 2014 -0600
----------------------------------------------------------------------
.../api/FacebookPostActivityConverter.java | 244 +------------------
.../serializer/FacebookActivityUtil.java | 153 +++++++++++-
.../facebook/test/FacebookPostSerDeTest.java | 28 ++-
.../rss/provider/RssStreamProviderTest.java | 6 +-
4 files changed, 175 insertions(+), 256 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/df648a80/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPostActivityConverter.java
----------------------------------------------------------------------
diff --cc streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPostActivityConverter.java
index ad64768,0000000..a41c405
mode 100644,000000..100644
--- a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPostActivityConverter.java
+++ b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPostActivityConverter.java
@@@ -1,313 -1,0 +1,79 @@@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
-
+package org.apache.streams.facebook.api;
+
-
- import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fasterxml.jackson.databind.node.ObjectNode;
- import com.google.common.collect.Lists;
- import com.google.common.collect.Maps;
+import org.apache.commons.lang.NotImplementedException;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.exceptions.ActivitySerializerException;
+import org.apache.streams.facebook.Post;
++import org.apache.streams.facebook.serializer.FacebookActivityUtil;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.apache.streams.pojo.json.*;
+import org.joda.time.format.DateTimeFormat;
+import org.joda.time.format.DateTimeFormatter;
+import org.joda.time.format.ISODateTimeFormat;
+
- import java.util.HashMap;
- import java.util.Iterator;
+import java.util.List;
- import java.util.Map;
+
- import static org.apache.streams.data.util.ActivityUtil.*;
-
- /**
- * Serializes activity posts
- * sblackmon: This class needs a rewrite
- */
- public class FacebookPostActivityConverter implements ActivityConverter<Post> {
++public class FacebookPostActivitySerializer implements ActivitySerializer<org.apache.streams.facebook.Post> {
+
+ public FacebookPostActivityConverter() {
+
+ }
+
+ private static FacebookPostActivityConverter instance = new FacebookPostActivityConverter();
+
+ public static FacebookPostActivityConverter getInstance() {
+ return instance;
+ }
+
+ public static final DateTimeFormatter FACEBOOK_FORMAT = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ");
+ public static final DateTimeFormatter ACTIVITY_FORMAT = ISODateTimeFormat.basicDateTime();
+
+ public static final String PROVIDER_NAME = "Facebook";
+
+ public static ObjectMapper mapper;
+ static {
+ mapper = StreamsJacksonMapper.getInstance();
+ }
+
+ @Override
+ public String serializationFormat() {
+ return "facebook_post_json_v1";
+ }
+
+ @Override
+ public Post serialize(Activity deserialized) throws ActivitySerializerException {
+ throw new NotImplementedException("Not currently supported by this deserializer");
+ }
+
+ @Override
+ public Activity deserialize(Post post) throws ActivitySerializerException {
-
+ Activity activity = new Activity();
- activity.setPublished(post.getCreatedTime());
- activity.setUpdated(post.getUpdatedTime());
- addActor(activity, mapper.convertValue(post.getFrom(), ObjectNode.class));
- setProvider(activity);
- setObjectType(post.getType(), activity);
- parseObject(activity, mapper.convertValue(post, ObjectNode.class));
- fixContentFromSummary(activity);
- activity.setVerb("post");
- List<String> links = Lists.newLinkedList();
- links.add(post.getLink());
- activity.setLinks(links);
- ensureExtensions(activity).put("facebook", post);
- if(post.getLikes() != null) {
- Map<String, Object> likes = Maps.newHashMap();
- likes.put("count", post.getLikes().size());
- ensureExtensions(activity).put("likes", likes);
- }
++
++ FacebookActivityUtil.updateActivity(post, activity);
++
+ return activity;
+ }
+
+ @Override
+ public List<Activity> deserializeAll(List<Post> serializedList) {
+ throw new NotImplementedException("Not currently supported by this deserializer");
+ }
-
- private void fixContentFromSummary(Activity activity) {
- //we MUST have a content field set, so choose the best option
- if(activity.getContent() == null) {
- activity.setContent(activity.getAdditionalProperties().containsKey("summary") ?
- (String) activity.getAdditionalProperties().get("summary") :
- activity.getObject().getSummary());
- }
- }
-
- private void fixObjectId(Activity activity) {
- //An artifact of schema generation, the default value is {link}
- if(activity.getObject().getId().equals("{link}")) {
- activity.getObject().setId(null);
- }
- }
-
- private void setObjectType(String type, Activity activity) {
- ActivityObject object = new ActivityObject();
- activity.setObject(object);
- object.setObjectType(type);
- }
-
- private void setProvider(Activity activity) {
- Provider provider = new Provider();
- provider.setId("id:provider:"+PROVIDER_NAME);
- provider.setDisplayName(PROVIDER_NAME);
- activity.setProvider(provider);
- }
-
- private String getObjectType(JsonNode node) {
- Iterator<Map.Entry<String, JsonNode>> fields = node.fields();
- ensureMoreFields(fields);
- Map.Entry<String, JsonNode> field = fields.next();
- //ensureNoMoreFields(fields);
- return node.asText();
- }
-
- private void parseObject(Activity activity, JsonNode jsonNode) throws ActivitySerializerException {
- for(Iterator<Map.Entry<String, JsonNode>> fields = jsonNode.fields(); fields.hasNext();) {
- Map.Entry<String, JsonNode> field = fields.next();
- String key = field.getKey();
- JsonNode value = field.getValue();
- mapField(activity, key, value);
- }
- }
-
- private void mapField(Activity activity, String name, JsonNode value) throws ActivitySerializerException {
- if("application".equals(name)) {
- addGenerator(activity, value);
- } else if ("caption".equals(name)) {
- addSummary(activity, value);
- } else if ("comments".equals(name)) {
- addAttachments(activity, value);
- } else if ("description".equals(name)) {
- addObjectSummary(activity, value);
- } else if ("from".equals(name)) {
- addActor(activity, value);
- } else if ("icon".equals(name)) {
- addIcon(activity, value);
- } else if ("id".equals(name)) {
- addId(activity, value);
- } else if ("is_hidden".equals(name)) {
- addObjectHiddenExtension(activity, value);
- } else if ("like_count".equals(name)) {
- addLikeExtension(activity, value);
- } else if ("link".equals(name)) {
- addObjectLink(activity, value);
- } else if ("message".equals(name)) {
- activity.setContent(value.asText());
- } else if ("name".equals(name)) {
- addObjectName(activity, value);
- } else if ("object_id".equals(name)) {
- addObjectId(activity, value);
- } else if ("picture".equals(name)) {
- addObjectImage(activity, value);
- } else if ("place".equals(name)) {
- addLocationExtension(activity, value);
- } else if ("shares".equals(name)) {
- addRebroadcastExtension(activity, value);
- } else if ("source".equals(name)) {
- addObjectLink(activity, value);
- } else if ("story".equals(name)) {
- addTitle(activity, value);
- }
- }
-
- private void addSummary(Activity activity, JsonNode value) {
- activity.setAdditionalProperty("summary", value.asText());
- }
-
- private void addTitle(Activity activity, JsonNode value) {
- activity.setTitle(value.asText());
- }
-
- private void addLikeExtension(Activity activity, JsonNode value) {
- Map<String, Object> extensions = ensureExtensions(activity);
- Map<String, Object> likes = Maps.newHashMap();
- likes.put("count", value.asLong());
- extensions.put(LIKES_EXTENSION, likes);
- }
-
- private void addLocationExtension(Activity activity, JsonNode value) {
- Map<String, Object> extensions = ensureExtensions(activity);
- if(value.has("location")) {
- Map<String, Object> location = new HashMap<String, Object>();
- JsonNode fbLocation = value.get("location");
- if(fbLocation.has("country")) {
- location.put(LOCATION_EXTENSION_COUNTRY, fbLocation.get("country"));
- }
- if(fbLocation.has("latitude") && fbLocation.has("longitude")) {
- location.put(LOCATION_EXTENSION_COORDINATES, String.format("%s,%s", fbLocation.get("longitude"), fbLocation.get("latitude")));
- }
- extensions.put(LOCATION_EXTENSION, location);
- }
- }
-
- private void addObjectImage(Activity activity, JsonNode value) {
- Image image = new Image();
- image.setUrl(value.asText());
- activity.getObject().setImage(image);
- }
-
- private void addObjectId(Activity activity, JsonNode value) {
- activity.getObject().setId(getObjectId("facebook", activity.getObject().getObjectType(), value.asText()));
- }
-
- private void addObjectName(Activity activity, JsonNode value) {
- activity.getObject().setDisplayName(value.asText());
- }
-
- private void addId(Activity activity, JsonNode value) {
- activity.setId("id:"+PROVIDER_NAME+":"+value.asText());
- }
-
- private void addObjectLink(Activity activity, JsonNode value) {
- activity.getObject().setUrl(value.asText());
- }
-
- private void addRebroadcastExtension(Activity activity, JsonNode value) {
- Map<String, Object> extensions = ensureExtensions(activity);
- if(value.has("count")) {
- Map<String, Object> rebroadCast = Maps.newHashMap();
- rebroadCast.put("count", value.get("count").asLong());
- rebroadCast.put("perspectival", true);
- extensions.put(REBROADCAST_EXTENSION, rebroadCast);
- }
- }
-
- private void addObjectHiddenExtension(Activity activity, JsonNode value) {
- Map<String, Object> extensions = ensureExtensions(activity);
- extensions.put("hidden", value.asBoolean());
- }
-
- private void addIcon(Activity activity, JsonNode value) {
- Icon icon = new Icon();
- //Apparently the Icon didn't map from the schema very well
- icon.setAdditionalProperty("url", value.asText());
- activity.setIcon(icon);
- }
-
- private void addActor(Activity activity, JsonNode value) {
- Actor actor = new Actor();
- if(value.has("name")) {
- actor.setDisplayName(value.get("name").asText());
- }
- if(value.has("id")) {
- actor.setId("id:"+PROVIDER_NAME+":"+value.get("id").asText());
- }
- activity.setActor(actor);
- }
-
- private void addObjectSummary(Activity activity, JsonNode value) {
- activity.getObject().setSummary(value.asText());
- }
-
- private void addGenerator(Activity activity, JsonNode value) {
- Generator generator = new Generator();
- if(value.has("id")) {
- generator.setId(getObjectId(PROVIDER_NAME, "generator", value.get("id").asText()));
- }
- if(value.has("name")) {
- generator.setDisplayName(value.get("name").asText());
- }
- if(value.has("namespace")) {
- generator.setSummary(value.get("namespace").asText());
- }
- activity.setGenerator(generator);
- }
-
- private void addAttachments(Activity activity, JsonNode value) {
- //No direct mapping at this time
- }
-
- private static void ensureMoreFields(Iterator<Map.Entry<String, JsonNode>> fields) {
- if(!fields.hasNext()) {
- throw new IllegalStateException("Facebook activity must have one and only one root element");
- }
- }
- private static void ensureNoMoreFields(Iterator<Map.Entry<String, JsonNode>> fields) {
- if(fields.hasNext()) {
- throw new IllegalStateException("Facebook activity must have one and only one root element");
- }
- }
-
+}
[02/10] incubator-streams git commit: Fixed failing RSS Streams test
Posted by sb...@apache.org.
Fixed failing RSS Streams test
Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/a698a077
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/a698a077
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/a698a077
Branch: refs/heads/STREAMS-68,218
Commit: a698a077936f187e419f9caaaf024c3c50975ae5
Parents: 76763f8
Author: Ryan Ebanks <ry...@gmail.com>
Authored: Thu Nov 13 08:48:03 2014 -0600
Committer: Ryan Ebanks <ry...@gmail.com>
Committed: Thu Nov 13 08:48:03 2014 -0600
----------------------------------------------------------------------
.../org/apache/streams/rss/provider/RssStreamProviderTest.java | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/a698a077/streams-contrib/streams-provider-rss/src/test/java/org/apache/streams/rss/provider/RssStreamProviderTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-rss/src/test/java/org/apache/streams/rss/provider/RssStreamProviderTest.java b/streams-contrib/streams-provider-rss/src/test/java/org/apache/streams/rss/provider/RssStreamProviderTest.java
index bf5e105..1cce391 100644
--- a/streams-contrib/streams-provider-rss/src/test/java/org/apache/streams/rss/provider/RssStreamProviderTest.java
+++ b/streams-contrib/streams-provider-rss/src/test/java/org/apache/streams/rss/provider/RssStreamProviderTest.java
@@ -52,11 +52,15 @@ public class RssStreamProviderTest extends RandomizedTest {
StreamsResultSet batch = provider.readCurrent();
LOGGER.debug("Batch size : {}", batch.size());
datumCount += batch.size();
+ if(batch.size() != 0) { //if race condition happened, pull again
+ batch = provider.readCurrent();
+ assertEquals(0, batch.size());
+ }
assertTrue(provider.scheduler.isComplete());
+ assertEquals(20, datumCount);
assertFalse(provider.isRunning());
assertEquals(0, datums.size());
- assertEquals(20, datumCount);
provider.cleanUp();
} finally {
if(provider != null)
[04/10] incubator-streams git commit: Merge branch 'master' into
STREAMS-220
Posted by sb...@apache.org.
Merge branch 'master' into STREAMS-220
Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/5611aa74
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/5611aa74
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/5611aa74
Branch: refs/heads/STREAMS-68,218
Commit: 5611aa74c52e4bea77e6e536815ae59974359396
Parents: 3fa79f1 0ffc40e
Author: Robert Douglas <rd...@w2ogroup.com>
Authored: Thu Nov 13 09:49:11 2014 -0600
Committer: Robert Douglas <rd...@w2ogroup.com>
Committed: Thu Nov 13 09:49:11 2014 -0600
----------------------------------------------------------------------
.../streams/jackson/TypeConverterProcessor.java | 112 ++++++++
.../test/TypeConverterProcessorTest.java | 95 +++++++
.../DatasiftActivitySerializerProcessor.java | 89 ++++++
.../DatasiftTypeConverterProcessor.java | 7 +-
.../serializer/DatasiftActivitySerializer.java | 12 +-
.../DatasiftDefaultActivitySerializer.java | 214 ---------------
.../serializer/DatasiftEventClassifier.java | 53 ++++
.../DatasiftInstagramActivitySerializer.java | 8 +-
.../DatasiftInteractionActivitySerializer.java | 222 +++++++++++++++
.../DatasiftTweetActivitySerializer.java | 266 ------------------
.../DatasiftTwitterActivitySerializer.java | 272 +++++++++++++++++++
.../datasift/util/StreamsDatasiftMapper.java | 11 +-
.../apache/streams/datasift/DatasiftPush.json | 30 ++
.../com/datasift/test/DatasiftSerDeTest.java | 18 +-
.../DatasiftTypeConverterProcessorTest.java | 72 -----
.../DatasiftActivitySerializerTest.java | 82 +++---
.../serializer/DatasiftEventClassifierTest.java | 64 +++++
...DatasiftInstagramActivitySerializerTest.java | 43 +++
...tasiftInteractionActivitySerializerTest.java | 48 ++++
.../DatasiftTwitterActivitySerializerTest.java | 43 +++
.../streams-provider-twitter/pom.xml | 6 +
.../processor/TwitterEventProcessor.java | 194 -------------
.../twitter/processor/TwitterTypeConverter.java | 209 --------------
.../provider/TwitterEventClassifier.java | 58 ++--
.../serializer/StreamsTwitterMapper.java | 11 +-
.../TwitterJsonActivitySerializer.java | 24 +-
.../TwitterJsonDeleteActivitySerializer.java | 6 +
.../TwitterJsonRetweetActivitySerializer.java | 6 +
.../TwitterJsonTweetActivitySerializer.java | 6 +
.../TwitterJsonUserActivitySerializer.java | 6 +
...erJsonUserstreameventActivitySerializer.java | 6 +
.../streams/twitter/test/SimpleTweetTest.java | 11 +-
.../twitter/test/TweetActivitySerDeTest.java | 6 +-
.../streams/twitter/test/TweetSerDeTest.java | 6 +-
.../test/TwitterEventClassifierTest.java | 34 +++
.../streams/pig/test/PigProcessDatumTest.java | 2 -
.../pig/test/PigProcessDocumentTest.java | 2 -
.../streams/pig/test/PigSerializerTest.java | 3 +-
38 files changed, 1278 insertions(+), 1079 deletions(-)
----------------------------------------------------------------------
[03/10] incubator-streams git commit: STREAMS-220 | Including
Facebook object in extensions
Posted by sb...@apache.org.
STREAMS-220 | Including Facebook object in extensions
Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/3fa79f14
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/3fa79f14
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/3fa79f14
Branch: refs/heads/STREAMS-68,218
Commit: 3fa79f14614974e588828c6f70a99393bf833c10
Parents: 01efdda
Author: Robert Douglas <rd...@w2ogroup.com>
Authored: Thu Nov 13 09:48:51 2014 -0600
Committer: Robert Douglas <rd...@w2ogroup.com>
Committed: Thu Nov 13 09:48:51 2014 -0600
----------------------------------------------------------------------
.../streams/facebook/serializer/FacebookActivityUtil.java | 6 ++++++
1 file changed, 6 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/3fa79f14/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookActivityUtil.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookActivityUtil.java b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookActivityUtil.java
index af650ba..49f2880 100644
--- a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookActivityUtil.java
+++ b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookActivityUtil.java
@@ -17,6 +17,8 @@
*/
package org.apache.streams.facebook.serializer;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.base.Joiner;
import com.google.common.base.Optional;
import com.google.common.collect.Lists;
@@ -25,6 +27,7 @@ import org.apache.streams.exceptions.ActivitySerializerException;
import org.apache.streams.facebook.*;
import org.apache.streams.facebook.Place;
import org.apache.streams.facebook.Post;
+import org.apache.streams.jackson.StreamsJacksonMapper;
import org.apache.streams.pojo.json.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -202,6 +205,7 @@ public class FacebookActivityUtil {
* @param post
*/
public static void buildExtensions(Activity activity, Post post) {
+ ObjectMapper mapper = StreamsJacksonMapper.getInstance();
Map<String, Object> extensions = ensureExtensions(activity);
if(post.getLikes() != null) {
@@ -241,6 +245,8 @@ public class FacebookActivityUtil {
extensions.put(LOCATION_EXTENSION, place.getAdditionalProperties().get("location"));
}
}
+
+ extensions.put("facebook", mapper.convertValue(post, ObjectNode.class));
}
/**
[08/10] incubator-streams git commit: improved configuration scheme
Posted by sb...@apache.org.
improved configuration scheme
Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/a24b3be7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/a24b3be7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/a24b3be7
Branch: refs/heads/STREAMS-68,218
Commit: a24b3be723dbc7ccca7f34cc0f58ae8bb8838470
Parents: 93026a7
Author: Steve Blackmon <sb...@w2odigital.com>
Authored: Sat Nov 15 18:34:32 2014 -0600
Committer: Steve Blackmon <sb...@w2odigital.com>
Committed: Sat Nov 15 18:34:32 2014 -0600
----------------------------------------------------------------------
streams-components/streams-converters/pom.xml | 54 ++++++++++++++++++++
.../converter/ActivityConverterProcessor.java | 50 +++++++++++++-----
.../streams/twitter/test/FullTweetTest.java | 14 ++---
.../streams/data/ActivityConverterResolver.java | 5 ++
.../apache/streams/data/DocumentClassifier.java | 9 ++--
5 files changed, 108 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/a24b3be7/streams-components/streams-converters/pom.xml
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/pom.xml b/streams-components/streams-converters/pom.xml
index cf990cb..78f42b9 100644
--- a/streams-components/streams-converters/pom.xml
+++ b/streams-components/streams-converters/pom.xml
@@ -80,6 +80,60 @@
</testResources>
<plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>1.8</version>
+ <executions>
+ <execution>
+ <id>add-source</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>target/generated-sources/jsonschema2pojo</source>
+ </sources>
+ </configuration>
+ </execution>
+ <execution>
+ <id>add-source-jaxb2</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>target/generated-sources/jaxb2</source>
+ </sources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.jsonschema2pojo</groupId>
+ <artifactId>jsonschema2pojo-maven-plugin</artifactId>
+ <configuration>
+ <addCompileSourceRoot>true</addCompileSourceRoot>
+ <generateBuilders>true</generateBuilders>
+ <sourcePaths>
+ <sourcePath>src/main/jsonschema</sourcePath>
+ </sourcePaths>
+ <outputDirectory>target/generated-sources/jsonschema2pojo</outputDirectory>
+ <targetPackage>org.apache.streams.converter</targetPackage>
+ <useLongIntegers>true</useLongIntegers>
+ <useJodaDates>true</useJodaDates>
+ <includeJsr303Annotations>true</includeJsr303Annotations>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
</plugins>
</build>
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/a24b3be7/streams-components/streams-converters/src/main/java/org/apache/streams/converter/ActivityConverterProcessor.java
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/src/main/java/org/apache/streams/converter/ActivityConverterProcessor.java b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/ActivityConverterProcessor.java
index 629f979..521c906 100644
--- a/streams-components/streams-converters/src/main/java/org/apache/streams/converter/ActivityConverterProcessor.java
+++ b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/ActivityConverterProcessor.java
@@ -38,21 +38,22 @@ public class ActivityConverterProcessor extends TypeConverterProcessor {
private final static Logger LOGGER = LoggerFactory.getLogger(ActivityConverterProcessor.class);
+ protected ActivityConverterProcessorConfiguration configuration;
+
private List<DocumentClassifier> classifiers;
private List<ActivityConverterResolver> resolvers;
public ActivityConverterProcessor() {
super(Activity.class);
- this.classifiers = Lists.newArrayList((DocumentClassifier)BaseDocumentClassifier.getInstance());
- this.resolvers = Lists.newArrayList((ActivityConverterResolver) BaseActivityConverterResolver.getInstance());
+ this.classifiers = Lists.newArrayList();
+ this.resolvers = Lists.newArrayList();
}
- public ActivityConverterProcessor(List<DocumentClassifier> classifiers, List<ActivityConverterResolver> factories) {
+ public ActivityConverterProcessor(ActivityConverterProcessorConfiguration configuration) {
super(Activity.class);
- this.classifiers = classifiers;
- this.resolvers = factories;
- this.classifiers.add(BaseDocumentClassifier.getInstance());
- this.resolvers.add(BaseActivityConverterResolver.getInstance());
+ this.configuration = configuration;
+ this.classifiers = Lists.newArrayList();
+ this.resolvers = Lists.newArrayList();
}
@Override
@@ -75,7 +76,12 @@ public class ActivityConverterProcessor extends TypeConverterProcessor {
}
//Preconditions.checkNotNull(datumClass);
- if( datumClass == null) return result;
+ if( datumClass == null) {
+ LOGGER.warn("Unable to classify");
+ return result;
+ } else {
+ LOGGER.debug("Classifies document as " + datumClass.getSimpleName());
+ }
// This implementation is primitive, greedy, takes first it can resolve
Class converterClass = null;
@@ -86,7 +92,13 @@ public class ActivityConverterProcessor extends TypeConverterProcessor {
}
//Preconditions.checkNotNull(converterClass);
- if( converterClass == null) return result;
+ if( converterClass == null) {
+ LOGGER.warn("Unable to resolve converterClass");
+ return result;
+ }
+ else {
+ LOGGER.debug("Resolved converter: " + converterClass.getSimpleName());
+ }
ActivityConverter converter = ActivityConverterFactory.getInstance(converterClass);
@@ -100,12 +112,18 @@ public class ActivityConverterProcessor extends TypeConverterProcessor {
typedDoc = TypeConverterUtil.convert(inDoc, datumClass, mapper);
//Preconditions.checkNotNull(typedDoc);
- if( typedDoc == null) return result;
+ if( typedDoc == null) {
+ LOGGER.warn("Unable to convert " + inDoc.getClass().getSimpleName() + " to " + datumClass.getSimpleName());
+ return result;
+ }
Activity activity = converter.deserialize(typedDoc);
//Preconditions.checkNotNull(activity);
- if( activity == null) return result;
+ if( activity == null) {
+ LOGGER.warn("Unable to convert " + datumClass.getClass().getCanonicalName() + " to Activity");
+ return result;
+ }
entry.setDocument(activity);
@@ -123,8 +141,14 @@ public class ActivityConverterProcessor extends TypeConverterProcessor {
@Override
public void prepare(Object configurationObject) {
super.prepare(configurationObject);
- Preconditions.checkArgument(classifiers.size() > 0);
- Preconditions.checkArgument(resolvers.size() > 0);
+ if( configuration != null ) {
+ if (configuration.getClassifiers() != null && configuration.getClassifiers().size() > 0)
+ this.classifiers.addAll(configuration.getClassifiers());
+ if (configuration.getResolvers() != null && configuration.getResolvers().size() > 0)
+ this.resolvers.addAll(configuration.getResolvers());
+ }
+ this.classifiers.add(BaseDocumentClassifier.getInstance());
+ this.resolvers.add(BaseActivityConverterResolver.getInstance());
}
};
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/a24b3be7/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/FullTweetTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/FullTweetTest.java b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/FullTweetTest.java
index a661f2c..63dcf51 100644
--- a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/FullTweetTest.java
+++ b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/FullTweetTest.java
@@ -23,18 +23,16 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.Lists;
import org.apache.streams.converter.ActivityConverterProcessor;
+import org.apache.streams.converter.ActivityConverterProcessorConfiguration;
import org.apache.streams.core.StreamsDatum;
import org.apache.streams.data.ActivityConverterResolver;
import org.apache.streams.data.DocumentClassifier;
-import org.apache.streams.exceptions.ActivitySerializerException;
import org.apache.streams.jackson.StreamsJacksonMapper;
import org.apache.streams.pojo.json.Activity;
import org.apache.streams.twitter.pojo.Retweet;
-import org.apache.streams.twitter.pojo.Tweet;
import org.apache.streams.twitter.serializer.StreamsTwitterMapper;
import org.apache.streams.twitter.serializer.TwitterConverterResolver;
import org.apache.streams.twitter.serializer.TwitterDocumentClassifier;
-import org.apache.streams.twitter.serializer.TwitterJsonActivityConverter;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
@@ -95,10 +93,12 @@ public class FullTweetTest {
Activity activity = null;
try {
- ActivityConverterProcessor converter = new ActivityConverterProcessor(
- Lists.newArrayList((DocumentClassifier)TwitterDocumentClassifier.getInstance()),
- Lists.newArrayList((ActivityConverterResolver)TwitterConverterResolver.getInstance()));
- converter.prepare(null);
+ ActivityConverterProcessorConfiguration converterProcessorConfiguration = new ActivityConverterProcessorConfiguration()
+ .withClassifiers(Lists.newArrayList((DocumentClassifier)TwitterDocumentClassifier.getInstance()))
+ .withResolvers(Lists.newArrayList((ActivityConverterResolver)TwitterConverterResolver.getInstance()));
+
+ ActivityConverterProcessor converter = new ActivityConverterProcessor(converterProcessorConfiguration);
+ converter.prepare(converterProcessorConfiguration);
List<StreamsDatum> result = converter.process(new StreamsDatum(TWITTER_JSON));
activity = (Activity)result.get(0).getDocument();
} catch (Throwable e) {
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/a24b3be7/streams-pojo/src/main/java/org/apache/streams/data/ActivityConverterResolver.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/data/ActivityConverterResolver.java b/streams-pojo/src/main/java/org/apache/streams/data/ActivityConverterResolver.java
index f4d7a92..84f098a 100644
--- a/streams-pojo/src/main/java/org/apache/streams/data/ActivityConverterResolver.java
+++ b/streams-pojo/src/main/java/org/apache/streams/data/ActivityConverterResolver.java
@@ -27,6 +27,11 @@ import java.io.Serializable;
*/
public interface ActivityConverterResolver extends Serializable {
+ /*
+ Every implementing class should have a static getInstance() method
+ But java 7 does not allow the interface to require that
+ */
+
/**
* Identifies a class that con convert this document to an activity
*
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/a24b3be7/streams-pojo/src/main/java/org/apache/streams/data/DocumentClassifier.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/data/DocumentClassifier.java b/streams-pojo/src/main/java/org/apache/streams/data/DocumentClassifier.java
index ea0055f..3c6b5e5 100644
--- a/streams-pojo/src/main/java/org/apache/streams/data/DocumentClassifier.java
+++ b/streams-pojo/src/main/java/org/apache/streams/data/DocumentClassifier.java
@@ -18,17 +18,18 @@
package org.apache.streams.data;
-import org.apache.streams.exceptions.ActivitySerializerException;
-import org.apache.streams.pojo.json.Activity;
-
import java.io.Serializable;
-import java.util.List;
/**
* Serializes and deserializes Activities
*/
public interface DocumentClassifier extends Serializable {
+ /*
+ Every implementing class should have a static getInstance() method
+ But java 7 does not allow the interface to require that
+ */
+
/**
* Gets the supported content type that can be deserialized/serialized
*