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/14 01:28:58 UTC

[5/9] incubator-streams git commit: omni-bus update

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPostActivityConverter.java
----------------------------------------------------------------------
diff --git 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
new file mode 100644
index 0000000..ad64768
--- /dev/null
+++ b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPostActivityConverter.java
@@ -0,0 +1,313 @@
+/*
+ * 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.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 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);
+        }
+        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");
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/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
deleted file mode 100644
index aff87eb..0000000
--- a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPostActivitySerializer.java
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * 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.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.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");
-    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);
-        }
-        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");
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/processor/FacebookTypeConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/processor/FacebookTypeConverter.java b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/processor/FacebookTypeConverter.java
index d247e51..87ac059 100644
--- a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/processor/FacebookTypeConverter.java
+++ b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/processor/FacebookTypeConverter.java
@@ -29,9 +29,9 @@ import org.apache.streams.core.StreamsDatum;
 import org.apache.streams.core.StreamsProcessor;
 import org.apache.streams.exceptions.ActivitySerializerException;
 import org.apache.streams.facebook.Post;
-import org.apache.streams.facebook.api.FacebookPageActivitySerializer;
-import org.apache.streams.facebook.api.FacebookPostActivitySerializer;
-import org.apache.streams.facebook.provider.FacebookEventClassifier;
+import org.apache.streams.facebook.api.FacebookPageActivityConverter;
+import org.apache.streams.facebook.api.FacebookPostActivityConverter;
+import org.apache.streams.facebook.serializer.FacebookDocumentClassifier;
 import org.apache.streams.jackson.StreamsJacksonMapper;
 import org.apache.streams.pojo.json.Activity;
 import org.slf4j.Logger;
@@ -41,6 +41,10 @@ import java.io.IOException;
 import java.util.List;
 import java.util.Queue;
 
+/*
+ * Deprecated: Use TypeConverterProcessor
+ */
+@Deprecated
 public class FacebookTypeConverter implements StreamsProcessor {
 
     public final static String STREAMS_ID = "FacebookTypeConverter";
@@ -55,8 +59,8 @@ public class FacebookTypeConverter implements StreamsProcessor {
     private Class inClass;
     private Class outClass;
 
-    private FacebookPostActivitySerializer facebookPostActivitySerializer;
-    private FacebookPageActivitySerializer facebookPageActivitySerializer;
+    private FacebookPostActivityConverter facebookPostActivitySerializer;
+    private FacebookPageActivityConverter facebookPageActivitySerializer;
 
     private int count = 0;
 
@@ -156,7 +160,7 @@ public class FacebookTypeConverter implements StreamsProcessor {
 
                     // since data is coming from outside provider, we don't know what type the events are
                     // for now we'll assume post
-                    Class inClass = FacebookEventClassifier.detectClass((String) item);
+                    Class inClass = FacebookDocumentClassifier.getInstance().detectClass((String) item);
 
                     Object out = convert(node, inClass, outClass);
 
@@ -169,7 +173,7 @@ public class FacebookTypeConverter implements StreamsProcessor {
                 // first check for valid json
                 node = (ObjectNode)mapper.valueToTree(item);
 
-                Class inClass = FacebookEventClassifier.detectClass(mapper.writeValueAsString(item));
+                Class inClass = FacebookDocumentClassifier.getInstance().detectClass(mapper.writeValueAsString(item));
 
                 Object out = convert(node, inClass, outClass);
 
@@ -198,8 +202,8 @@ public class FacebookTypeConverter implements StreamsProcessor {
     public void prepare(Object o) {
         mapper = new StreamsJacksonMapper();
 
-        facebookPageActivitySerializer = new FacebookPageActivitySerializer();
-        facebookPostActivitySerializer = new FacebookPostActivitySerializer();
+        facebookPageActivitySerializer = new FacebookPageActivityConverter();
+        facebookPostActivitySerializer = new FacebookPostActivityConverter();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/provider/FacebookEventClassifier.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/provider/FacebookEventClassifier.java b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/provider/FacebookEventClassifier.java
deleted file mode 100644
index 16e2a25..0000000
--- a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/provider/FacebookEventClassifier.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.provider;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.base.Preconditions;
-import org.apache.commons.lang.StringUtils;
-
-import java.io.IOException;
-
-import org.apache.streams.facebook.Page;
-import org.apache.streams.facebook.Post;
-import org.apache.streams.jackson.StreamsJacksonMapper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class FacebookEventClassifier {
-
-    private final static Logger LOGGER = LoggerFactory.getLogger(FacebookEventClassifier.class);
-
-    public static Class detectClass( String json ) {
-
-        Preconditions.checkNotNull(json);
-        Preconditions.checkArgument(StringUtils.isNotEmpty(json));
-
-        ObjectNode objectNode;
-        try {
-            objectNode = (ObjectNode) StreamsJacksonMapper.getInstance().readTree(json);
-        } catch (IOException e) {
-            LOGGER.error("Exception while trying to detect class: {}", e.getMessage());
-            return null;
-        }
-
-        if( objectNode.findValue("about") != null)
-            return Page.class;
-        else if( objectNode.findValue("statusType") != null )
-            return Post.class;
-        else
-            return Post.class;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookConverterResolver.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookConverterResolver.java b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookConverterResolver.java
new file mode 100644
index 0000000..a5a3fd1
--- /dev/null
+++ b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookConverterResolver.java
@@ -0,0 +1,62 @@
+/*
+ * 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.serializer;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.base.Preconditions;
+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.facebook.Page;
+import org.apache.streams.facebook.Post;
+import org.apache.streams.facebook.api.FacebookPageActivityConverter;
+import org.apache.streams.facebook.api.FacebookPostActivityConverter;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+public class FacebookConverterResolver implements ActivityConverterResolver {
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(FacebookConverterResolver.class);
+
+    public FacebookConverterResolver() {
+
+    }
+
+    private static FacebookConverterResolver instance = new FacebookConverterResolver();
+
+    public static FacebookConverterResolver getInstance() {
+        return instance;
+    }
+
+    @Override
+    public Class bestSerializer(Class documentClass) throws ActivitySerializerException {
+
+        if (documentClass == Page.class)
+            return FacebookPageActivityConverter.class;
+        else if (documentClass == Post.class)
+            return FacebookPostActivityConverter.class;
+
+        return FacebookPostActivityConverter.class;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookDocumentClassifier.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookDocumentClassifier.java b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookDocumentClassifier.java
new file mode 100644
index 0000000..459be30
--- /dev/null
+++ b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookDocumentClassifier.java
@@ -0,0 +1,75 @@
+/*
+ * 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.serializer;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.base.Preconditions;
+import org.apache.commons.lang.StringUtils;
+
+import java.io.IOException;
+
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.data.DocumentClassifier;
+import org.apache.streams.facebook.Page;
+import org.apache.streams.facebook.Post;
+import org.apache.streams.facebook.api.FacebookPageActivityConverter;
+import org.apache.streams.facebook.api.FacebookPostActivityConverter;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FacebookDocumentClassifier implements DocumentClassifier {
+
+    public FacebookDocumentClassifier() {
+
+    }
+
+    private static FacebookDocumentClassifier instance = new FacebookDocumentClassifier();
+
+    public static FacebookDocumentClassifier getInstance() {
+        return instance;
+    }
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(FacebookDocumentClassifier.class);
+
+    public Class detectClass(Object document) {
+
+        Preconditions.checkNotNull(document);
+        Preconditions.checkArgument(document instanceof String);
+
+        String json = (String)document;
+        Preconditions.checkArgument(StringUtils.isNotEmpty(json));
+
+        ObjectNode objectNode;
+        try {
+            objectNode = (ObjectNode) StreamsJacksonMapper.getInstance().readTree(json);
+        } catch (IOException e) {
+            LOGGER.error("Exception while trying to detect class: {}", e.getMessage());
+            return null;
+        }
+
+        if (objectNode.findValue("about") != null)
+            return Page.class;
+        else if (objectNode.findValue("statusType") != null)
+            return Post.class;
+        else
+            return Post.class;
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookStreamsPostConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookStreamsPostConverter.java b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookStreamsPostConverter.java
new file mode 100644
index 0000000..464df94
--- /dev/null
+++ b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookStreamsPostConverter.java
@@ -0,0 +1,60 @@
+package org.apache.streams.facebook.serializer;
+
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.exceptions.ActivitySerializerException;
+import org.apache.streams.facebook.Post;
+import org.apache.streams.pojo.json.Activity;
+import org.apache.streams.pojo.json.Actor;
+import org.apache.streams.pojo.json.Provider;
+
+import java.util.List;
+
+/**
+ * Converts {@link org.apache.streams.facebook.Post} to {@link org.apache.streams.pojo.json.Activity}
+ */
+public class FacebookStreamsPostConverter implements ActivityConverter<Post> {
+
+    private static final String FACEBOOK_STREAMS_ID = "id:provider:facebook";
+    private static final String ID_PREFIX = "id:facebook:";
+    private static final String PROVIDER_DISPLAY = "Facebook";
+
+    @Override
+    public String serializationFormat() {
+        return null;
+    }
+
+    @Override
+    public Post serialize(Activity deserialized) throws ActivitySerializerException {
+        return null;
+    }
+
+    @Override
+    public Activity deserialize(Post post) throws ActivitySerializerException {
+        Activity activity = new Activity();
+        activity.setActor(createActor(post));
+
+        activity.setId(post.getId());
+        activity.setContent(post.getMessage());
+        return null;
+    }
+
+    @Override
+    public List<Activity> deserializeAll(List<Post> serializedList) {
+        return null;
+    }
+
+    public Actor createActor(Post post) {
+        Actor actor = new Actor();
+        actor.setDisplayName(post.getFrom().getName());
+        actor.setId(ID_PREFIX+post.getFrom().getId());
+        return actor;
+    }
+
+    public Provider createProvider(Post post) {
+        Provider provider = new Provider();
+        provider.setId(FACEBOOK_STREAMS_ID);
+        provider.setDisplayName(PROVIDER_DISPLAY);
+        return provider;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookStreamsPostSerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookStreamsPostSerializer.java b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookStreamsPostSerializer.java
deleted file mode 100644
index 3c5cae6..0000000
--- a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookStreamsPostSerializer.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package org.apache.streams.facebook.serializer;
-
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.exceptions.ActivitySerializerException;
-import org.apache.streams.facebook.Post;
-import org.apache.streams.pojo.json.Activity;
-import org.apache.streams.pojo.json.Actor;
-import org.apache.streams.pojo.json.Provider;
-
-import java.util.List;
-
-/**
- * Converts {@link org.apache.streams.facebook.Post} to {@link org.apache.streams.pojo.json.Activity}
- */
-public class FacebookStreamsPostSerializer implements ActivitySerializer<Post> {
-
-    private static final String FACEBOOK_STREAMS_ID = "id:provider:facebook";
-    private static final String ID_PREFIX = "id:facebook:";
-    private static final String PROVIDER_DISPLAY = "Facebook";
-
-    @Override
-    public String serializationFormat() {
-        return null;
-    }
-
-    @Override
-    public Post serialize(Activity deserialized) throws ActivitySerializerException {
-        return null;
-    }
-
-    @Override
-    public Activity deserialize(Post post) throws ActivitySerializerException {
-        Activity activity = new Activity();
-        activity.setActor(createActor(post));
-
-        activity.setId(post.getId());
-        activity.setContent(post.getMessage());
-        return null;
-    }
-
-    @Override
-    public List<Activity> deserializeAll(List<Post> serializedList) {
-        return null;
-    }
-
-    public Actor createActor(Post post) {
-        Actor actor = new Actor();
-        actor.setDisplayName(post.getFrom().getName());
-        actor.setId(ID_PREFIX+post.getFrom().getId());
-        return actor;
-    }
-
-    public Provider createProvider(Post post) {
-        Provider provider = new Provider();
-        provider.setId(FACEBOOK_STREAMS_ID);
-        provider.setDisplayName(PROVIDER_DISPLAY);
-        return provider;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookActivityActorSerDeTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookActivityActorSerDeTest.java b/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookActivityActorSerDeTest.java
index 38e6860..6188be1 100644
--- a/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookActivityActorSerDeTest.java
+++ b/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookActivityActorSerDeTest.java
@@ -19,16 +19,14 @@
 package org.apache.streams.facebook.test;
 
 import org.apache.streams.facebook.Page;
-import org.apache.streams.facebook.api.FacebookPageActivitySerializer;
+import org.apache.streams.facebook.api.FacebookPageActivityConverter;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 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.jackson.StreamsJacksonMapper;
 import org.apache.streams.pojo.json.Activity;
-import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -38,7 +36,7 @@ import java.io.InputStream;
 public class FacebookActivityActorSerDeTest {
 
     private final static Logger LOGGER = LoggerFactory.getLogger(FacebookActivityActorSerDeTest.class);
-    private FacebookPageActivitySerializer serializer = new FacebookPageActivitySerializer();
+    private FacebookPageActivityConverter serializer = new FacebookPageActivityConverter();
     private ObjectMapper mapper = StreamsJacksonMapper.getInstance();
 
     @Test

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookActivitySerDeTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookActivitySerDeTest.java b/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookActivitySerDeTest.java
index 13623cf..0eba10c 100644
--- a/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookActivitySerDeTest.java
+++ b/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookActivitySerDeTest.java
@@ -18,7 +18,7 @@
 
 package org.apache.streams.facebook.test;
 
-import org.apache.streams.facebook.api.FacebookPostActivitySerializer;
+import org.apache.streams.facebook.api.FacebookPostActivityConverter;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.base.Joiner;
@@ -37,7 +37,7 @@ import java.io.InputStream;
 public class FacebookActivitySerDeTest {
 
     private final static Logger LOGGER = LoggerFactory.getLogger(FacebookActivitySerDeTest.class);
-    private FacebookPostActivitySerializer serializer = new FacebookPostActivitySerializer();
+    private FacebookPostActivityConverter serializer = new FacebookPostActivityConverter();
     private ObjectMapper mapper = StreamsJacksonMapper.getInstance();
 
     @Test

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookDocumentClassifierTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookDocumentClassifierTest.java b/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookDocumentClassifierTest.java
new file mode 100644
index 0000000..bfd5b38
--- /dev/null
+++ b/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookDocumentClassifierTest.java
@@ -0,0 +1,57 @@
+/*
+ * 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.test;
+
+import org.apache.streams.facebook.Page;
+import org.apache.streams.facebook.Post;
+import org.apache.streams.facebook.serializer.FacebookDocumentClassifier;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class FacebookDocumentClassifierTest {
+    private String empty = "";
+    private String def = "{}";
+    private String post = "{\"metadata\":null,\"id\":\"687664828_10153082499914829\",\"from\":{\"metadata\":null,\"id\":\"687664828\",\"name\":\"Steve Blackmon\",\"category\":null,\"createdTime\":null},\"message\":null,\"picture\":\"https://fbexternal-a.akamaihd.net/app_full_proxy.php?app=184136951108&v=1&size=z&cksum=7f4094dff37cedd69072cd2c0b3728b7&src=https%3A%2F%2Fstatic.tripit.com%2Fimages%2Fplaces%2Fsantamonica.jpg%3Fv%3D2014-08-13\",\"link\":\"http://www.tripit.com/trip/show/id/130372979/traveler_fb_uid/687664828?us=fc&um=fa&un=fd\",\"name\":\"Steve is about to leave on a trip to Santa Monica, CA.\",\"caption\":\"Aug 2014 for 3 days\",\"description\":\"TripIt - Free online trip planner and free travel itinerary website for organizing vacations, group trips or business travel\",\"source\":null,\"icon\":\"https://fbcdn-photos-d-a.akamaihd.net/hphotos-ak-xpa1/t39.2080-0/851580_10151367869221109_1073679965_n.gif\",\"actions\":[{\"name\":\"Comment\",\"link\":\"https://www.facebook
 .com/687664828/posts/10153082499914829\"},{\"name\":\"Like\",\"link\":\"https://www.facebook.com/687664828/posts/10153082499914829\"},{\"name\":\"Plan a trip on TripIt\",\"link\":\"http://www.tripit.com/?us=fc&um=fa&un=fd\"}],\"privacy\":{\"value\":\"ALL_FRIENDS\",\"friends\":\"EMPTY\",\"description\":[\"Your friends\"]},\"type\":\"link\",\"sharesCount\":null,\"place\":null,\"statusType\":\"app_created_story\",\"story\":null,\"objectId\":null,\"application\":{\"id\":\"184136951108\",\"name\":\"TripIt\",\"description\":null,\"category\":null,\"company\":null,\"iconUrl\":null,\"subcategory\":null,\"link\":null,\"logoUrl\":null,\"dailyActiveUsers\":null,\"weeklyActiveUsers\":null,\"monthlyActiveUsers\":null,\"namespace\":\"tripitcom\",\"authDialogDataHelpUrl\":null,\"authDialogDescription\":null,\"authDialogHeadline\":null,\"authDialogPermsExplanation\":null,\"authReferralDefaultActivityPrivacy\":null,\"authReferralResponseType\":null,\"canvasUrl\":null,\"contactEmail\":null,\"createdT
 ime\":null,\"creatorUid\":null,\"deauthCallbackUrl\":null,\"iphoneAppStoreId\":null,\"hostingUrl\":null,\"mobileWebUrl\":null,\"pageTabDefaultName\":null,\"pageTabUrl\":null,\"privacyPolicyUrl\":null,\"secureCanvasUrl\":null,\"securePageTabUrl\":null,\"serverIpWhitelist\":null,\"termsOfServiceUrl\":null,\"userSupportEmail\":null,\"userSupportUrl\":null,\"websiteUrl\":null,\"canvasName\":null},\"createdTime\":\"2014-08-13T12:22:20.000+0000\",\"updatedTime\":\"2014-08-13T12:22:20.000+0000\",\"scheduledPublishTime\":null,\"targeting\":null,\"published\":null}";
+    private String page = "{\"metadata\":null,\"id\":\"142803045874943\",\"name\":\"Senator Angus S. King, Jr.\",\"category\":\"Government official\",\"createdTime\":null,\"link\":\"https://www.facebook.com/SenatorAngusSKingJr\",\"likes\":10246,\"location\":{\"street\":\"359 Dirksen Senate Office Building\",\"city\":\"Washington, District of Columbia\",\"state\":\"DC\",\"country\":\"United States\",\"zip\":\"20510\",\"latitude\":null,\"longitude\":null,\"text\":null},\"phone\":\"202-224-5344\",\"checkins\":0,\"picture\":null,\"cover\":{\"id\":null,\"source\":\"https://fbcdn-sphotos-g-a.akamaihd.net/hphotos-ak-xpa1/v/t1.0-9/10288792_321537751334804_8200105519500362465_n.jpg?oh=fbcde9b3e1e011dfa3e699628629bc53&oe=546FB617&__gda__=1416717487_3fa5781d7d9c3d58f2bc798a36ac6fc0\",\"offsetY\":9},\"website\":\"http://www.king.senate.gov\",\"talkingAboutCount\":5034,\"accessToken\":null,\"wereHereCount\":0,\"about\":\"Welcome to the official Facebook page of Senator Angus S. King, Jr. (I-ME).
 \\nhttp://king.senate.gov\\nhttps://twitter.com/SenAngusKing\\nhttps://www.youtube.com/SenatorAngusKing\",\"username\":\"SenatorAngusSKingJr\",\"published\":true,\"communityPage\":false}";
+
+
+    @Test(expected=IllegalArgumentException.class)
+    public void emptyJSONTest() {
+        Class inClass = FacebookDocumentClassifier.getInstance().detectClass(empty);
+    }
+
+    @Test
+    public void defaultDetectTest() {
+        Class inClass = FacebookDocumentClassifier.getInstance().detectClass(post);
+        assertEquals(inClass, Post.class);
+    }
+
+    @Test
+    public void postDetectTest() {
+        Class inClass = FacebookDocumentClassifier.getInstance().detectClass(post);
+        assertEquals(inClass, Post.class);
+    }
+
+    @Test
+    public void pageDetectTest() {
+        Class inClass = FacebookDocumentClassifier.getInstance().detectClass(page);
+        assertEquals(inClass, Page.class);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookEventClassifierTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookEventClassifierTest.java b/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookEventClassifierTest.java
deleted file mode 100644
index 076aca9..0000000
--- a/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/FacebookEventClassifierTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.test;
-
-import org.apache.streams.facebook.Page;
-import org.apache.streams.facebook.Post;
-import org.apache.streams.facebook.provider.FacebookEventClassifier;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class FacebookEventClassifierTest {
-    private String empty = "";
-    private String def = "{}";
-    private String post = "{\"metadata\":null,\"id\":\"687664828_10153082499914829\",\"from\":{\"metadata\":null,\"id\":\"687664828\",\"name\":\"Steve Blackmon\",\"category\":null,\"createdTime\":null},\"message\":null,\"picture\":\"https://fbexternal-a.akamaihd.net/app_full_proxy.php?app=184136951108&v=1&size=z&cksum=7f4094dff37cedd69072cd2c0b3728b7&src=https%3A%2F%2Fstatic.tripit.com%2Fimages%2Fplaces%2Fsantamonica.jpg%3Fv%3D2014-08-13\",\"link\":\"http://www.tripit.com/trip/show/id/130372979/traveler_fb_uid/687664828?us=fc&um=fa&un=fd\",\"name\":\"Steve is about to leave on a trip to Santa Monica, CA.\",\"caption\":\"Aug 2014 for 3 days\",\"description\":\"TripIt - Free online trip planner and free travel itinerary website for organizing vacations, group trips or business travel\",\"source\":null,\"icon\":\"https://fbcdn-photos-d-a.akamaihd.net/hphotos-ak-xpa1/t39.2080-0/851580_10151367869221109_1073679965_n.gif\",\"actions\":[{\"name\":\"Comment\",\"link\":\"https://www.facebook
 .com/687664828/posts/10153082499914829\"},{\"name\":\"Like\",\"link\":\"https://www.facebook.com/687664828/posts/10153082499914829\"},{\"name\":\"Plan a trip on TripIt\",\"link\":\"http://www.tripit.com/?us=fc&um=fa&un=fd\"}],\"privacy\":{\"value\":\"ALL_FRIENDS\",\"friends\":\"EMPTY\",\"description\":[\"Your friends\"]},\"type\":\"link\",\"sharesCount\":null,\"place\":null,\"statusType\":\"app_created_story\",\"story\":null,\"objectId\":null,\"application\":{\"id\":\"184136951108\",\"name\":\"TripIt\",\"description\":null,\"category\":null,\"company\":null,\"iconUrl\":null,\"subcategory\":null,\"link\":null,\"logoUrl\":null,\"dailyActiveUsers\":null,\"weeklyActiveUsers\":null,\"monthlyActiveUsers\":null,\"namespace\":\"tripitcom\",\"authDialogDataHelpUrl\":null,\"authDialogDescription\":null,\"authDialogHeadline\":null,\"authDialogPermsExplanation\":null,\"authReferralDefaultActivityPrivacy\":null,\"authReferralResponseType\":null,\"canvasUrl\":null,\"contactEmail\":null,\"createdT
 ime\":null,\"creatorUid\":null,\"deauthCallbackUrl\":null,\"iphoneAppStoreId\":null,\"hostingUrl\":null,\"mobileWebUrl\":null,\"pageTabDefaultName\":null,\"pageTabUrl\":null,\"privacyPolicyUrl\":null,\"secureCanvasUrl\":null,\"securePageTabUrl\":null,\"serverIpWhitelist\":null,\"termsOfServiceUrl\":null,\"userSupportEmail\":null,\"userSupportUrl\":null,\"websiteUrl\":null,\"canvasName\":null},\"createdTime\":\"2014-08-13T12:22:20.000+0000\",\"updatedTime\":\"2014-08-13T12:22:20.000+0000\",\"scheduledPublishTime\":null,\"targeting\":null,\"published\":null}";
-    private String page = "{\"metadata\":null,\"id\":\"142803045874943\",\"name\":\"Senator Angus S. King, Jr.\",\"category\":\"Government official\",\"createdTime\":null,\"link\":\"https://www.facebook.com/SenatorAngusSKingJr\",\"likes\":10246,\"location\":{\"street\":\"359 Dirksen Senate Office Building\",\"city\":\"Washington, District of Columbia\",\"state\":\"DC\",\"country\":\"United States\",\"zip\":\"20510\",\"latitude\":null,\"longitude\":null,\"text\":null},\"phone\":\"202-224-5344\",\"checkins\":0,\"picture\":null,\"cover\":{\"id\":null,\"source\":\"https://fbcdn-sphotos-g-a.akamaihd.net/hphotos-ak-xpa1/v/t1.0-9/10288792_321537751334804_8200105519500362465_n.jpg?oh=fbcde9b3e1e011dfa3e699628629bc53&oe=546FB617&__gda__=1416717487_3fa5781d7d9c3d58f2bc798a36ac6fc0\",\"offsetY\":9},\"website\":\"http://www.king.senate.gov\",\"talkingAboutCount\":5034,\"accessToken\":null,\"wereHereCount\":0,\"about\":\"Welcome to the official Facebook page of Senator Angus S. King, Jr. (I-ME).
 \\nhttp://king.senate.gov\\nhttps://twitter.com/SenAngusKing\\nhttps://www.youtube.com/SenatorAngusKing\",\"username\":\"SenatorAngusSKingJr\",\"published\":true,\"communityPage\":false}";
-
-
-    @Test(expected=IllegalArgumentException.class)
-    public void emptyJSONTest() {
-        Class inClass = FacebookEventClassifier.detectClass(empty);
-    }
-
-    @Test
-    public void defaultDetectTest() {
-        Class inClass = FacebookEventClassifier.detectClass(post);
-        assertEquals(inClass, Post.class);
-    }
-
-    @Test
-    public void postDetectTest() {
-        Class inClass = FacebookEventClassifier.detectClass(post);
-        assertEquals(inClass, Post.class);
-    }
-
-    @Test
-    public void pageDetectTest() {
-        Class inClass = FacebookEventClassifier.detectClass(page);
-        assertEquals(inClass, Page.class);
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/SimplePageTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/SimplePageTest.java b/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/SimplePageTest.java
index 856ad36..2df0655 100644
--- a/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/SimplePageTest.java
+++ b/streams-contrib/streams-provider-facebook/src/test/java/org/apache/streams/facebook/test/SimplePageTest.java
@@ -23,7 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.apache.streams.core.StreamsDatum;
 import org.apache.streams.facebook.Page;
-import org.apache.streams.facebook.api.FacebookPageActivitySerializer;
+import org.apache.streams.facebook.api.FacebookPageActivityConverter;
 import org.apache.streams.facebook.processor.FacebookTypeConverter;
 import org.apache.streams.jackson.StreamsJacksonMapper;
 import org.apache.streams.pojo.json.Activity;
@@ -48,7 +48,7 @@ public class SimplePageTest {
 
     private static final String FACEBOOK_JSON= "{\"metadata\":null,\"id\":\"142803045874943\",\"name\":\"Senator Angus S. King, Jr.\",\"category\":\"Government official\",\"createdTime\":null,\"link\":\"https://www.facebook.com/SenatorAngusSKingJr\",\"likes\":10246,\"location\":{\"street\":\"359 Dirksen Senate Office Building\",\"city\":\"Washington, District of Columbia\",\"state\":\"DC\",\"country\":\"United States\",\"zip\":\"20510\",\"latitude\":null,\"longitude\":null,\"text\":null},\"phone\":\"202-224-5344\",\"checkins\":0,\"picture\":null,\"cover\":{\"id\":null,\"source\":\"https://fbcdn-sphotos-g-a.akamaihd.net/hphotos-ak-xpa1/v/t1.0-9/10288792_321537751334804_8200105519500362465_n.jpg?oh=fbcde9b3e1e011dfa3e699628629bc53&oe=546FB617&__gda__=1416717487_3fa5781d7d9c3d58f2bc798a36ac6fc0\",\"offsetY\":9},\"website\":\"http://www.king.senate.gov\",\"talkingAboutCount\":5034,\"accessToken\":null,\"wereHereCount\":0,\"about\":\"Welcome to the official Facebook page of Senator Angus
  S. King, Jr. (I-ME).\\nhttp://king.senate.gov\\nhttps://twitter.com/SenAngusKing\\nhttps://www.youtube.com/SenatorAngusKing\",\"username\":\"SenatorAngusSKingJr\",\"published\":true,\"communityPage\":false}";
 
-    private FacebookPageActivitySerializer facebookPageActivitySerializer = new FacebookPageActivitySerializer();
+    private FacebookPageActivityConverter facebookPageActivitySerializer = new FacebookPageActivityConverter();
 
     @Before
     public void setUp() throws Exception {

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-gnip/gnip-edc-googleplus/src/main/java/com/gplus/api/GPlusActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-gnip/gnip-edc-googleplus/src/main/java/com/gplus/api/GPlusActivityConverter.java b/streams-contrib/streams-provider-gnip/gnip-edc-googleplus/src/main/java/com/gplus/api/GPlusActivityConverter.java
new file mode 100644
index 0000000..2015e32
--- /dev/null
+++ b/streams-contrib/streams-provider-gnip/gnip-edc-googleplus/src/main/java/com/gplus/api/GPlusActivityConverter.java
@@ -0,0 +1,93 @@
+/*
+ * 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 com.gplus.api;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.commons.lang.NotImplementedException;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.data.util.ActivityUtil;
+import org.apache.streams.gnip.powertrack.GnipActivityFixer;
+import org.apache.streams.pojo.json.Activity;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: mdelaet
+ * Date: 8/30/13
+ * Time: 10:48 AM
+ * To change this template use File | Settings | File Templates.
+ */
+public class GPlusActivityConverter implements ActivityConverter<String> {
+    private final static Logger LOGGER = LoggerFactory.getLogger(GPlusActivityConverter.class);
+
+    @Override
+    public String serializationFormat() {
+        return "application/gplus+xml";
+    }
+
+    @Override
+    public String serialize(Activity deserialized) {
+        ObjectMapper jsonMapper = new ObjectMapper();
+        String jsonString = new String();
+        try{
+            jsonString = jsonMapper.writeValueAsString(deserialized);
+        }catch(Exception e){
+            LOGGER.error("Exception serializing Activity Object: " + e);
+        }
+        return jsonString;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public Activity deserialize(String serialized) {
+        ObjectMapper jsonMapper = new ObjectMapper();
+        JSONObject jsonObject = new JSONObject();
+        JSONObject fixedObject = new JSONObject();
+
+        try{
+            jsonObject = new JSONObject(serialized);
+            fixedObject = GnipActivityFixer.fix(jsonObject);
+        }catch(Exception e){
+            LOGGER.error("Exception deserializing string: " + e);
+        }
+
+        Activity activity = new Activity();
+        try {
+            activity = jsonMapper.readValue(fixedObject.toString(), Activity.class);
+            Map<String, Object> extension = ActivityUtil.ensureExtensions(activity);
+            extension.put("likes", fixedObject.getJSONObject("object").getJSONObject("plusoners").get("totalItems"));
+            extension.put("rebroadcast", fixedObject.getJSONObject("object").getJSONObject("resharers").get("totalItems"));
+        } catch( Exception e ) {
+            LOGGER.error(jsonObject.toString());
+            LOGGER.error(fixedObject.toString());
+            e.printStackTrace();
+        }
+        return activity;
+    }
+
+    @Override
+    public List<Activity> deserializeAll(List<String> serializedList) {
+        //TODO Support
+        throw new NotImplementedException("Not currently supported by this deserializer");
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-gnip/gnip-edc-googleplus/src/main/java/com/gplus/api/GPlusActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-gnip/gnip-edc-googleplus/src/main/java/com/gplus/api/GPlusActivitySerializer.java b/streams-contrib/streams-provider-gnip/gnip-edc-googleplus/src/main/java/com/gplus/api/GPlusActivitySerializer.java
deleted file mode 100644
index 0cea46a..0000000
--- a/streams-contrib/streams-provider-gnip/gnip-edc-googleplus/src/main/java/com/gplus/api/GPlusActivitySerializer.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * 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 com.gplus.api;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.commons.lang.NotImplementedException;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.data.util.ActivityUtil;
-import org.apache.streams.gnip.powertrack.GnipActivityFixer;
-import org.apache.streams.pojo.json.Activity;
-import org.json.JSONObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * Created with IntelliJ IDEA.
- * User: mdelaet
- * Date: 8/30/13
- * Time: 10:48 AM
- * To change this template use File | Settings | File Templates.
- */
-public class GPlusActivitySerializer implements ActivitySerializer<String> {
-    private final static Logger LOGGER = LoggerFactory.getLogger(GPlusActivitySerializer.class);
-
-    @Override
-    public String serializationFormat() {
-        return "application/gplus+xml";
-    }
-
-    @Override
-    public String serialize(Activity deserialized) {
-        ObjectMapper jsonMapper = new ObjectMapper();
-        String jsonString = new String();
-        try{
-            jsonString = jsonMapper.writeValueAsString(deserialized);
-        }catch(Exception e){
-            LOGGER.error("Exception serializing Activity Object: " + e);
-        }
-        return jsonString;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    @Override
-    public Activity deserialize(String serialized) {
-        ObjectMapper jsonMapper = new ObjectMapper();
-        JSONObject jsonObject = new JSONObject();
-        JSONObject fixedObject = new JSONObject();
-
-        try{
-            jsonObject = new JSONObject(serialized);
-            fixedObject = GnipActivityFixer.fix(jsonObject);
-        }catch(Exception e){
-            LOGGER.error("Exception deserializing string: " + e);
-        }
-
-        Activity activity = new Activity();
-        try {
-            activity = jsonMapper.readValue(fixedObject.toString(), Activity.class);
-            Map<String, Object> extension = ActivityUtil.ensureExtensions(activity);
-            extension.put("likes", fixedObject.getJSONObject("object").getJSONObject("plusoners").get("totalItems"));
-            extension.put("rebroadcast", fixedObject.getJSONObject("object").getJSONObject("resharers").get("totalItems"));
-        } catch( Exception e ) {
-            LOGGER.error(jsonObject.toString());
-            LOGGER.error(fixedObject.toString());
-            e.printStackTrace();
-        }
-        return activity;
-    }
-
-    @Override
-    public List<Activity> deserializeAll(List<String> serializedList) {
-        //TODO Support
-        throw new NotImplementedException("Not currently supported by this deserializer");
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-gnip/gnip-edc-googleplus/src/test/java/com/gplus/api/GPlusEDCAsActivityTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-gnip/gnip-edc-googleplus/src/test/java/com/gplus/api/GPlusEDCAsActivityTest.java b/streams-contrib/streams-provider-gnip/gnip-edc-googleplus/src/test/java/com/gplus/api/GPlusEDCAsActivityTest.java
index 3662a01..6f7db24 100644
--- a/streams-contrib/streams-provider-gnip/gnip-edc-googleplus/src/test/java/com/gplus/api/GPlusEDCAsActivityTest.java
+++ b/streams-contrib/streams-provider-gnip/gnip-edc-googleplus/src/test/java/com/gplus/api/GPlusEDCAsActivityTest.java
@@ -43,10 +43,10 @@ public class GPlusEDCAsActivityTest {
 
     private ObjectMapper jsonMapper;
     XmlMapper xmlMapper;
-    private GPlusActivitySerializer gplusSerializer;
+    private GPlusActivityConverter gplusSerializer;
 
     public GPlusEDCAsActivityTest() {
-        gplusSerializer = new GPlusActivitySerializer();
+        gplusSerializer = new GPlusActivityConverter();
         jsonMapper = new ObjectMapper();
         xmlMapper = new XmlMapper();
     }

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-gnip/gnip-edc-reddit/src/main/java/com/reddit/api/RedditActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-gnip/gnip-edc-reddit/src/main/java/com/reddit/api/RedditActivityConverter.java b/streams-contrib/streams-provider-gnip/gnip-edc-reddit/src/main/java/com/reddit/api/RedditActivityConverter.java
new file mode 100644
index 0000000..e9a6bae
--- /dev/null
+++ b/streams-contrib/streams-provider-gnip/gnip-edc-reddit/src/main/java/com/reddit/api/RedditActivityConverter.java
@@ -0,0 +1,107 @@
+/*
+ * 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 com.reddit.api;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.commons.lang.NotImplementedException;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.data.util.ActivityUtil;
+import org.apache.streams.gnip.powertrack.GnipActivityFixer;
+import org.apache.streams.pojo.json.Activity;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: mdelaet
+ * Date: 8/29/13
+ * Time: 8:32 AM
+ * To change this template use File | Settings | File Templates.
+ */
+public class RedditActivityConverter implements ActivityConverter<String> {
+    private final static Logger LOGGER = LoggerFactory.getLogger(RedditActivityConverter.class);
+
+    public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
+    public static final String PROVIDER_NAME = "facebook";
+
+
+    @Override
+    public String serializationFormat() {
+        return "application/reddit+xml";
+    }
+
+    @Override
+    public String serialize(Activity deserialized) {
+        ObjectMapper jsonMapper = new ObjectMapper();
+        String jsonString = new String();
+        try{
+            jsonString = jsonMapper.writeValueAsString(deserialized);
+        }catch(Exception e){
+            LOGGER.error("Exception serializing Activity Object: " + e);
+        }
+        return jsonString;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public Activity deserialize(String serialized) {
+        ObjectMapper jsonMapper = new ObjectMapper();
+        JSONObject jsonObject = new JSONObject();
+        JSONObject fixedObject = new JSONObject();
+
+        HashMap<String, String> raw = new HashMap<String, String>();
+        raw.put("original", serialized);
+
+        try{
+            jsonObject = new JSONObject(serialized);
+            fixedObject = GnipActivityFixer.fix(jsonObject);
+        }catch(Exception e){
+            LOGGER.error("Exception deserializing string: " + e);
+        }
+
+        Activity activity = new Activity();
+        try {
+            activity = jsonMapper.readValue(fixedObject.toString(), Activity.class);
+            Map<String, Object> extension = ActivityUtil.ensureExtensions(activity);
+            if (fixedObject.names().toString().contains("object")){
+                if (fixedObject.getJSONObject("object").names().toString().contains("statistics")){
+                    if (fixedObject.getJSONObject("object").getJSONObject("statistics").names().toString().contains("upVotes")){
+                        extension.put("likes", fixedObject.getJSONObject("object").getJSONObject("statistics").get("upVotes"));
+                    }
+                }
+            }
+
+        } catch( Exception e ) {
+            LOGGER.error(jsonObject.toString());
+            LOGGER.error(fixedObject.toString());
+            e.printStackTrace();
+        }
+        return activity;
+    }
+
+    @Override
+    public List<Activity> deserializeAll(List<String> serializedList) {
+        //TODO Support
+        throw new NotImplementedException("Not currently supported by this deserializer");
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-gnip/gnip-edc-reddit/src/main/java/com/reddit/api/RedditActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-gnip/gnip-edc-reddit/src/main/java/com/reddit/api/RedditActivitySerializer.java b/streams-contrib/streams-provider-gnip/gnip-edc-reddit/src/main/java/com/reddit/api/RedditActivitySerializer.java
deleted file mode 100644
index c57bea0..0000000
--- a/streams-contrib/streams-provider-gnip/gnip-edc-reddit/src/main/java/com/reddit/api/RedditActivitySerializer.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * 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 com.reddit.api;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.commons.lang.NotImplementedException;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.data.util.ActivityUtil;
-import org.apache.streams.gnip.powertrack.GnipActivityFixer;
-import org.apache.streams.pojo.json.Activity;
-import org.json.JSONObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Created with IntelliJ IDEA.
- * User: mdelaet
- * Date: 8/29/13
- * Time: 8:32 AM
- * To change this template use File | Settings | File Templates.
- */
-public class RedditActivitySerializer implements ActivitySerializer<String> {
-    private final static Logger LOGGER = LoggerFactory.getLogger(RedditActivitySerializer.class);
-
-    public static final String DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ssZ";
-    public static final String PROVIDER_NAME = "facebook";
-
-
-    @Override
-    public String serializationFormat() {
-        return "application/reddit+xml";
-    }
-
-    @Override
-    public String serialize(Activity deserialized) {
-        ObjectMapper jsonMapper = new ObjectMapper();
-        String jsonString = new String();
-        try{
-            jsonString = jsonMapper.writeValueAsString(deserialized);
-        }catch(Exception e){
-            LOGGER.error("Exception serializing Activity Object: " + e);
-        }
-        return jsonString;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    @Override
-    public Activity deserialize(String serialized) {
-        ObjectMapper jsonMapper = new ObjectMapper();
-        JSONObject jsonObject = new JSONObject();
-        JSONObject fixedObject = new JSONObject();
-
-        HashMap<String, String> raw = new HashMap<String, String>();
-        raw.put("original", serialized);
-
-        try{
-            jsonObject = new JSONObject(serialized);
-            fixedObject = GnipActivityFixer.fix(jsonObject);
-        }catch(Exception e){
-            LOGGER.error("Exception deserializing string: " + e);
-        }
-
-        Activity activity = new Activity();
-        try {
-            activity = jsonMapper.readValue(fixedObject.toString(), Activity.class);
-            Map<String, Object> extension = ActivityUtil.ensureExtensions(activity);
-            if (fixedObject.names().toString().contains("object")){
-                if (fixedObject.getJSONObject("object").names().toString().contains("statistics")){
-                    if (fixedObject.getJSONObject("object").getJSONObject("statistics").names().toString().contains("upVotes")){
-                        extension.put("likes", fixedObject.getJSONObject("object").getJSONObject("statistics").get("upVotes"));
-                    }
-                }
-            }
-
-        } catch( Exception e ) {
-            LOGGER.error(jsonObject.toString());
-            LOGGER.error(fixedObject.toString());
-            e.printStackTrace();
-        }
-        return activity;
-    }
-
-    @Override
-    public List<Activity> deserializeAll(List<String> serializedList) {
-        //TODO Support
-        throw new NotImplementedException("Not currently supported by this deserializer");
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-gnip/gnip-edc-reddit/src/test/java/com/reddit/api/RedditEDCAsActivityJSONTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-gnip/gnip-edc-reddit/src/test/java/com/reddit/api/RedditEDCAsActivityJSONTest.java b/streams-contrib/streams-provider-gnip/gnip-edc-reddit/src/test/java/com/reddit/api/RedditEDCAsActivityJSONTest.java
index fdf8d02..9b1203f 100644
--- a/streams-contrib/streams-provider-gnip/gnip-edc-reddit/src/test/java/com/reddit/api/RedditEDCAsActivityJSONTest.java
+++ b/streams-contrib/streams-provider-gnip/gnip-edc-reddit/src/test/java/com/reddit/api/RedditEDCAsActivityJSONTest.java
@@ -43,10 +43,10 @@ public class RedditEDCAsActivityJSONTest {
 
     private ObjectMapper jsonMapper;
     XmlMapper xmlMapper;
-    private RedditActivitySerializer redditSerializer;
+    private RedditActivityConverter redditSerializer;
 
     public RedditEDCAsActivityJSONTest() {
-        redditSerializer = new RedditActivitySerializer();
+        redditSerializer = new RedditActivityConverter();
         jsonMapper = new ObjectMapper();
         xmlMapper = new XmlMapper();
     }