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:57 UTC

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

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/java/org/apache/streams/gnip/powertrack/ActivityXMLActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/java/org/apache/streams/gnip/powertrack/ActivityXMLActivityConverter.java b/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/java/org/apache/streams/gnip/powertrack/ActivityXMLActivityConverter.java
new file mode 100644
index 0000000..5d77f77
--- /dev/null
+++ b/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/java/org/apache/streams/gnip/powertrack/ActivityXMLActivityConverter.java
@@ -0,0 +1,240 @@
+/*
+ * 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.gnip.powertrack;
+
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+import org.apache.commons.lang.NotImplementedException;
+import org.apache.commons.lang.StringUtils;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.pojo.json.Activity;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: rebanks
+ * Date: 9/5/13
+ * Time: 3:07 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class ActivityXMLActivityConverter implements ActivityConverter<String> {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(ActivityXMLActivityConverter.class);
+
+    private ObjectMapper mapper;
+    private XmlMapper xmlMapper;
+
+    public ActivityXMLActivityConverter() {
+        mapper = new ObjectMapper();
+        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, Boolean.FALSE);
+        mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, Boolean.TRUE);
+        mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, Boolean.TRUE);
+        xmlMapper = new XmlMapper();
+        xmlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, Boolean.FALSE);
+        xmlMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, Boolean.TRUE);
+        xmlMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, Boolean.TRUE);
+    }
+
+
+    @Override
+    public String serializationFormat() {
+        return "gnip_activity_xml";  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public String serialize(Activity deserialized) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Activity deserialize(String serializedXML) {
+        Activity activity = null;
+        try {
+            activity = xmlMapper.readValue(new StringReader(setContentIfEmpty(serializedXML)), Activity.class);
+            activity = mapper.readValue(new StringReader(fixActivityXML(activity, serializedXML)), Activity.class);
+        } catch (Exception e) {
+            LOGGER.error("Exception correcting Gnip Activity Xml to Activity format.", e);
+            LOGGER.error("Xml that caused error : {}", serializedXML);
+        }
+        return activity;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public List<Activity> deserializeAll(List<String> serializedList) {
+        throw new NotImplementedException("Not currently supported by this deserializer");
+    }
+
+    private String fixActivityXML(Activity activity, String xml) throws Exception{
+        JSONObject jsonObject = new JSONObject(mapper.writeValueAsString(activity));
+        JSONObject newObject = (JSONObject) fixActivityXML(jsonObject);
+        StringReader str = new StringReader(newObject.toString());
+        newObject = formatFixedJSON(newObject);
+        newObject = fixDateFormats(newObject, xml);
+        newObject = createTopLevelConentField(newObject);
+        return newObject.toString();
+
+    }
+
+    private Object fixActivityXML(Object obj) throws Exception {
+        if(obj instanceof JSONObject) {
+            JSONObject json = new JSONObject();
+            JSONObject old = (JSONObject) obj;
+            Iterator keys = old.keys();
+            while(keys.hasNext()) {
+                String key = (String) keys.next();
+                if(StringUtils.isBlank(key)) {
+                    return fixActivityXML(old.get(key));
+                }
+                else if(!key.equals("type")){
+                    Object o = fixActivityXML(old.get(key));
+                    if(o != null)
+                        json.put(key, o);
+                }
+
+            }
+            if(json.keys().hasNext())
+                return json;
+            else
+                return null;
+        }
+        else {
+            return obj;
+        }
+
+    }
+
+    private JSONObject formatFixedJSON(JSONObject json) throws Exception{
+        JSONObject topLink = json.optJSONObject("link");
+        if(topLink != null) {
+            json.put("link", topLink.getString("href"));
+        }
+        JSONObject actor = json.optJSONObject("actor");
+        if(actor != null) {
+            JSONObject link = actor.optJSONObject("link");
+            if(link != null) {
+                actor.put("link", link.get("href"));
+            }
+        }
+        JSONObject object = json.optJSONObject("object");
+        if(object != null) {
+            JSONObject link = object.optJSONObject("link");
+            if(link != null) {
+                object.put("link", link.get("href"));
+            }
+        }
+        String generator = json.optString("generator");
+        if(generator != null) {
+            JSONObject gen = new JSONObject();
+            gen.put("displayName", generator);
+            json.put("generator", gen);
+        }
+        return json;
+    }
+
+    private JSONObject fixDateFormats(JSONObject json, String xml) throws Exception{
+        DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+        InputSource is = new InputSource(new StringReader(xml));
+        Document doc = docBuilder.parse(is);
+        //why?
+        doc.getDocumentElement().normalize();
+        if(json.optLong("published", -1L) != -1L) {
+            json.put("published", getValueFromXML("published", doc));
+        }
+        if(json.optLong("updated", -1L) != -1L) {
+            json.put("updated", getValueFromXML("updated", doc));
+        }
+        if(json.optLong("created", -1L) != -1L) {
+            json.put("created", getValueFromXML("created", doc));
+        }
+        return json;
+    }
+
+    private JSONObject createTopLevelConentField(JSONObject json) throws JSONException {
+        if(!json.isNull("content")) {
+            return json;
+        }
+        JSONObject object = json.optJSONObject("object");
+        if(object != null) {
+            String content = object.optString("content");
+            if(content == null) {
+                content = object.optString("summary");
+            }
+            if(content != null) {
+                json.put("content", content);
+            }
+        }
+        return json;
+    }
+
+    private String getValueFromXML(String tag, Document doc) throws Exception{
+        Element base = (Element) doc.getElementsByTagName("entry").item(0);
+        return base.getElementsByTagName(tag).item(0).getTextContent();
+    }
+
+    private String setContentIfEmpty(String xml) throws Exception {
+        DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+        InputSource is = new InputSource(new StringReader(xml));
+        Document doc = docBuilder.parse(is);
+        doc.getDocumentElement().normalize();
+        Element base = (Element) doc.getElementsByTagName("entry").item(0);
+        NodeList nodeList = base.getChildNodes();
+//        for(int i=0; i < nodeList.getLength(); ++i) {
+//            System.out.println(nodeList.item(i).getNodeName());
+//        }
+        Element obj = (Element)base.getElementsByTagName("activity:object").item(0);
+        Element content = (Element)obj.getElementsByTagName("content").item(0);
+//        System.out.println("Number of child nodes : "+content.getChildNodes().getLength());
+//        System.out.println("Text content before : "+content.getTextContent());
+        if(content.getTextContent() == null || content.getTextContent().equals("")) {
+            content.setTextContent(" ");
+        }
+//        System.out.println("Number of child nodes after : "+content.getChildNodes().getLength());
+//        System.out.println("Text content after : "+content.getTextContent());
+        TransformerFactory tf = TransformerFactory.newInstance();
+        Transformer transformer = tf.newTransformer();
+        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+        StringWriter writer = new StringWriter();
+        transformer.transform(new DOMSource(doc), new StreamResult(writer));
+        String output = writer.getBuffer().toString().replaceAll("\n|\r", "");
+//        System.out.println(output);
+//        System.out.println(output);
+//        System.out.println(content);
+        return output;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/java/org/apache/streams/gnip/powertrack/ActivityXMLActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/java/org/apache/streams/gnip/powertrack/ActivityXMLActivitySerializer.java b/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/java/org/apache/streams/gnip/powertrack/ActivityXMLActivitySerializer.java
deleted file mode 100644
index e75927f..0000000
--- a/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/java/org/apache/streams/gnip/powertrack/ActivityXMLActivitySerializer.java
+++ /dev/null
@@ -1,240 +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.gnip.powertrack;
-
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.dataformat.xml.XmlMapper;
-import org.apache.commons.lang.NotImplementedException;
-import org.apache.commons.lang.StringUtils;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.pojo.json.Activity;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import java.io.StringReader;
-import java.io.StringWriter;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Created with IntelliJ IDEA.
- * User: rebanks
- * Date: 9/5/13
- * Time: 3:07 PM
- * To change this template use File | Settings | File Templates.
- */
-public class ActivityXMLActivitySerializer implements ActivitySerializer<String> {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(ActivityXMLActivitySerializer.class);
-
-    private ObjectMapper mapper;
-    private XmlMapper xmlMapper;
-
-    public ActivityXMLActivitySerializer() {
-        mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, Boolean.FALSE);
-        mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, Boolean.TRUE);
-        mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, Boolean.TRUE);
-        xmlMapper = new XmlMapper();
-        xmlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, Boolean.FALSE);
-        xmlMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, Boolean.TRUE);
-        xmlMapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, Boolean.TRUE);
-    }
-
-
-    @Override
-    public String serializationFormat() {
-        return "gnip_activity_xml";  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    @Override
-    public String serialize(Activity deserialized) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Activity deserialize(String serializedXML) {
-        Activity activity = null;
-        try {
-            activity = xmlMapper.readValue(new StringReader(setContentIfEmpty(serializedXML)), Activity.class);
-            activity = mapper.readValue(new StringReader(fixActivityXML(activity, serializedXML)), Activity.class);
-        } catch (Exception e) {
-            LOGGER.error("Exception correcting Gnip Activity Xml to Activity format.", e);
-            LOGGER.error("Xml that caused error : {}", serializedXML);
-        }
-        return activity;  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    @Override
-    public List<Activity> deserializeAll(List<String> serializedList) {
-        throw new NotImplementedException("Not currently supported by this deserializer");
-    }
-
-    private String fixActivityXML(Activity activity, String xml) throws Exception{
-        JSONObject jsonObject = new JSONObject(mapper.writeValueAsString(activity));
-        JSONObject newObject = (JSONObject) fixActivityXML(jsonObject);
-        StringReader str = new StringReader(newObject.toString());
-        newObject = formatFixedJSON(newObject);
-        newObject = fixDateFormats(newObject, xml);
-        newObject = createTopLevelConentField(newObject);
-        return newObject.toString();
-
-    }
-
-    private Object fixActivityXML(Object obj) throws Exception {
-        if(obj instanceof JSONObject) {
-            JSONObject json = new JSONObject();
-            JSONObject old = (JSONObject) obj;
-            Iterator keys = old.keys();
-            while(keys.hasNext()) {
-                String key = (String) keys.next();
-                if(StringUtils.isBlank(key)) {
-                    return fixActivityXML(old.get(key));
-                }
-                else if(!key.equals("type")){
-                    Object o = fixActivityXML(old.get(key));
-                    if(o != null)
-                        json.put(key, o);
-                }
-
-            }
-            if(json.keys().hasNext())
-                return json;
-            else
-                return null;
-        }
-        else {
-            return obj;
-        }
-
-    }
-
-    private JSONObject formatFixedJSON(JSONObject json) throws Exception{
-        JSONObject topLink = json.optJSONObject("link");
-        if(topLink != null) {
-            json.put("link", topLink.getString("href"));
-        }
-        JSONObject actor = json.optJSONObject("actor");
-        if(actor != null) {
-            JSONObject link = actor.optJSONObject("link");
-            if(link != null) {
-                actor.put("link", link.get("href"));
-            }
-        }
-        JSONObject object = json.optJSONObject("object");
-        if(object != null) {
-            JSONObject link = object.optJSONObject("link");
-            if(link != null) {
-                object.put("link", link.get("href"));
-            }
-        }
-        String generator = json.optString("generator");
-        if(generator != null) {
-            JSONObject gen = new JSONObject();
-            gen.put("displayName", generator);
-            json.put("generator", gen);
-        }
-        return json;
-    }
-
-    private JSONObject fixDateFormats(JSONObject json, String xml) throws Exception{
-        DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
-        InputSource is = new InputSource(new StringReader(xml));
-        Document doc = docBuilder.parse(is);
-        //why?
-        doc.getDocumentElement().normalize();
-        if(json.optLong("published", -1L) != -1L) {
-            json.put("published", getValueFromXML("published", doc));
-        }
-        if(json.optLong("updated", -1L) != -1L) {
-            json.put("updated", getValueFromXML("updated", doc));
-        }
-        if(json.optLong("created", -1L) != -1L) {
-            json.put("created", getValueFromXML("created", doc));
-        }
-        return json;
-    }
-
-    private JSONObject createTopLevelConentField(JSONObject json) throws JSONException {
-        if(!json.isNull("content")) {
-            return json;
-        }
-        JSONObject object = json.optJSONObject("object");
-        if(object != null) {
-            String content = object.optString("content");
-            if(content == null) {
-                content = object.optString("summary");
-            }
-            if(content != null) {
-                json.put("content", content);
-            }
-        }
-        return json;
-    }
-
-    private String getValueFromXML(String tag, Document doc) throws Exception{
-        Element base = (Element) doc.getElementsByTagName("entry").item(0);
-        return base.getElementsByTagName(tag).item(0).getTextContent();
-    }
-
-    private String setContentIfEmpty(String xml) throws Exception {
-        DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
-        InputSource is = new InputSource(new StringReader(xml));
-        Document doc = docBuilder.parse(is);
-        doc.getDocumentElement().normalize();
-        Element base = (Element) doc.getElementsByTagName("entry").item(0);
-        NodeList nodeList = base.getChildNodes();
-//        for(int i=0; i < nodeList.getLength(); ++i) {
-//            System.out.println(nodeList.item(i).getNodeName());
-//        }
-        Element obj = (Element)base.getElementsByTagName("activity:object").item(0);
-        Element content = (Element)obj.getElementsByTagName("content").item(0);
-//        System.out.println("Number of child nodes : "+content.getChildNodes().getLength());
-//        System.out.println("Text content before : "+content.getTextContent());
-        if(content.getTextContent() == null || content.getTextContent().equals("")) {
-            content.setTextContent(" ");
-        }
-//        System.out.println("Number of child nodes after : "+content.getChildNodes().getLength());
-//        System.out.println("Text content after : "+content.getTextContent());
-        TransformerFactory tf = TransformerFactory.newInstance();
-        Transformer transformer = tf.newTransformer();
-        transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
-        StringWriter writer = new StringWriter();
-        transformer.transform(new DOMSource(doc), new StreamResult(writer));
-        String output = writer.getBuffer().toString().replaceAll("\n|\r", "");
-//        System.out.println(output);
-//        System.out.println(output);
-//        System.out.println(content);
-        return output;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/java/org/apache/streams/gnip/powertrack/PowerTrackActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/java/org/apache/streams/gnip/powertrack/PowerTrackActivityConverter.java b/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/java/org/apache/streams/gnip/powertrack/PowerTrackActivityConverter.java
new file mode 100644
index 0000000..3f8409b
--- /dev/null
+++ b/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/java/org/apache/streams/gnip/powertrack/PowerTrackActivityConverter.java
@@ -0,0 +1,121 @@
+/*
+ * 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.gnip.powertrack;
+
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.commons.lang.NotImplementedException;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.pojo.json.Activity;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.StringReader;
+import java.util.List;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: rebanks
+ * Date: 9/5/13
+ * Time: 2:29 PM
+ * To change this template use File | Settings | File Templates.
+ */
+public class PowerTrackActivityConverter implements ActivityConverter<String> {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(PowerTrackActivityConverter.class);
+
+    private ObjectMapper mapper;
+
+    public PowerTrackActivityConverter() {
+        mapper = new ObjectMapper();
+        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, Boolean.FALSE);
+        mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, Boolean.TRUE);
+        mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, Boolean.TRUE);
+    }
+
+
+
+    @Override
+    public String serializationFormat() {
+        return "gnip_powertrack";  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
+    @Override
+    public String serialize(Activity deserialized) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Activity deserialize(String serialized) {
+        Activity activity = null;
+        try {
+            JSONObject jsonObject = new JSONObject(serialized);
+            String content = jsonObject.optString("content", null);
+            if(content == null) {
+                content = jsonObject.optString("body", null);
+                if(content == null) {
+                    content = jsonObject.optString("summary", null);
+                    if(content == null) {
+                        JSONObject object = jsonObject.optJSONObject("object");
+                        if(object != null) {
+                            content = object.optString("content", null);
+                            if(content == null) {
+                                content = object.optString("body", null);
+                                if(content == null) {
+                                    content = object.optString("summary", null);
+                                }
+                            }
+                        }
+                    }
+                }
+
+            }
+            if(content != null) {
+                jsonObject.put("content", content);
+            }
+            String dateTime = jsonObject.optString("postedTime");
+            if(dateTime != null) {
+                jsonObject.put("published", dateTime);
+            }
+            JSONObject actor = jsonObject.optJSONObject("actor");
+            if(actor != null) {
+                String url = actor.optString("image");
+                if(url != null) {
+                    JSONObject media = new JSONObject();
+                    media.put("url", url);
+                    actor.put("image", media);
+                }
+            }
+            serialized = jsonObject.toString();
+            StringReader reader = new StringReader(serialized);
+            activity = this.mapper.readValue(reader, Activity.class);
+        } catch (Exception e) {
+            LOGGER.error("Exception deserializing powertrack string to Activity Object.", e);
+            LOGGER.error("Exception on json : {}", serialized);
+        }
+        return activity;
+    }
+
+    @Override
+    public List<Activity> deserializeAll(List<String> serializedList) {
+        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-powertrack/src/main/java/org/apache/streams/gnip/powertrack/PowerTrackActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/java/org/apache/streams/gnip/powertrack/PowerTrackActivitySerializer.java b/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/java/org/apache/streams/gnip/powertrack/PowerTrackActivitySerializer.java
deleted file mode 100644
index 55b1423..0000000
--- a/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/java/org/apache/streams/gnip/powertrack/PowerTrackActivitySerializer.java
+++ /dev/null
@@ -1,121 +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.gnip.powertrack;
-
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.commons.lang.NotImplementedException;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.pojo.json.Activity;
-import org.json.JSONObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.StringReader;
-import java.util.List;
-
-/**
- * Created with IntelliJ IDEA.
- * User: rebanks
- * Date: 9/5/13
- * Time: 2:29 PM
- * To change this template use File | Settings | File Templates.
- */
-public class PowerTrackActivitySerializer implements ActivitySerializer<String> {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(PowerTrackActivitySerializer.class);
-
-    private ObjectMapper mapper;
-
-    public PowerTrackActivitySerializer() {
-        mapper = new ObjectMapper();
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, Boolean.FALSE);
-        mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, Boolean.TRUE);
-        mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, Boolean.TRUE);
-    }
-
-
-
-    @Override
-    public String serializationFormat() {
-        return "gnip_powertrack";  //To change body of implemented methods use File | Settings | File Templates.
-    }
-
-    @Override
-    public String serialize(Activity deserialized) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public Activity deserialize(String serialized) {
-        Activity activity = null;
-        try {
-            JSONObject jsonObject = new JSONObject(serialized);
-            String content = jsonObject.optString("content", null);
-            if(content == null) {
-                content = jsonObject.optString("body", null);
-                if(content == null) {
-                    content = jsonObject.optString("summary", null);
-                    if(content == null) {
-                        JSONObject object = jsonObject.optJSONObject("object");
-                        if(object != null) {
-                            content = object.optString("content", null);
-                            if(content == null) {
-                                content = object.optString("body", null);
-                                if(content == null) {
-                                    content = object.optString("summary", null);
-                                }
-                            }
-                        }
-                    }
-                }
-
-            }
-            if(content != null) {
-                jsonObject.put("content", content);
-            }
-            String dateTime = jsonObject.optString("postedTime");
-            if(dateTime != null) {
-                jsonObject.put("published", dateTime);
-            }
-            JSONObject actor = jsonObject.optJSONObject("actor");
-            if(actor != null) {
-                String url = actor.optString("image");
-                if(url != null) {
-                    JSONObject media = new JSONObject();
-                    media.put("url", url);
-                    actor.put("image", media);
-                }
-            }
-            serialized = jsonObject.toString();
-            StringReader reader = new StringReader(serialized);
-            activity = this.mapper.readValue(reader, Activity.class);
-        } catch (Exception e) {
-            LOGGER.error("Exception deserializing powertrack string to Activity Object.", e);
-            LOGGER.error("Exception on json : {}", serialized);
-        }
-        return activity;
-    }
-
-    @Override
-    public List<Activity> deserializeAll(List<String> serializedList) {
-        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-powertrack/src/test/java/org/apache/streams/gnip/powertrack/test/PowerTrackDeserializationTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-gnip/gnip-powertrack/src/test/java/org/apache/streams/gnip/powertrack/test/PowerTrackDeserializationTest.java b/streams-contrib/streams-provider-gnip/gnip-powertrack/src/test/java/org/apache/streams/gnip/powertrack/test/PowerTrackDeserializationTest.java
index 6ff7f6e..047d200 100644
--- a/streams-contrib/streams-provider-gnip/gnip-powertrack/src/test/java/org/apache/streams/gnip/powertrack/test/PowerTrackDeserializationTest.java
+++ b/streams-contrib/streams-provider-gnip/gnip-powertrack/src/test/java/org/apache/streams/gnip/powertrack/test/PowerTrackDeserializationTest.java
@@ -18,7 +18,7 @@
 
 package org.apache.streams.gnip.powertrack.test;
 
-import org.apache.streams.gnip.powertrack.PowerTrackActivitySerializer;
+import org.apache.streams.gnip.powertrack.PowerTrackActivityConverter;
 import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
@@ -33,14 +33,14 @@ import org.slf4j.LoggerFactory;
  */
 public class PowerTrackDeserializationTest {
 
-    private static final Logger LOGGER = LoggerFactory.getLogger(PowerTrackActivitySerializer.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(PowerTrackActivityConverter.class);
 
     private static final String ptData1= "{\"gnip\":{\"matching_rules\":[{\"tag\":\"toujours_DE_DE_de\"}],\"klout_score\":32,\"klout_profile\":{\"topics\":[],\"klout_user_id\":\"141018977628748348\",\"link\":\"http://klout.com/user/id/141018977628748348\"},\"language\":{\"value\":\"fr\"}},\"body\":\"RT @Albayraakkk: J'attends ton SMS, tu attends le miens. On croit toujours que l'autre va envoyer un message en premier. Bref, on ne se par\\u201a??\",\"favoritesCount\":0,\"link\":\"http://twitter.com/alexandragriett/statuses/375760903104638976\",\"retweetCount\":168,\"twitter_lang\":\"fr\",\"postedTime\":\"2013-09-05T23:22:35.000Z\",\"provider\":{\"link\":\"http://www.twitter.com\",\"displayName\":\"Twitter\",\"objectType\":\"service\"},\"actor\":{\"summary\":null,\"twitterTimeZone\":null,\"friendsCount\":68,\"favoritesCount\":3,\"link\":\"http://www.twitter.com/alexandragriett\",\"postedTime\":\"2013-05-01T17:52:16.000Z\",\"image\":\"https://si0.twimg.com/profile_images/37880000041435
 3370/ef4170ca183eed9f7f30665712baba05_normal.jpeg\",\"links\":[{\"rel\":\"me\",\"href\":null}],\"listedCount\":0,\"id\":\"id:twitter.com:1395160326\",\"languages\":[\"fr\"],\"verified\":false,\"utcOffset\":null,\"followersCount\":47,\"preferredUsername\":\"alexandragriett\",\"displayName\":\"MauvaiseIdee\",\"statusesCount\":333,\"objectType\":\"person\"},\"object\":{\"body\":\"J'attends ton SMS, tu attends le miens. On croit toujours que l'autre va envoyer un message en premier. Bref, on ne se parle plus...\",\"favoritesCount\":24,\"link\":\"http://twitter.com/Albayraakkk/statuses/370496182172540928\",\"twitter_lang\":\"fr\",\"postedTime\":\"2013-08-22T10:42:27.000Z\",\"provider\":{\"link\":\"http://www.twitter.com\",\"displayName\":\"Twitter\",\"objectType\":\"service\"},\"actor\":{\"summary\":\"Le meilleur est dans mes favoris ! J'followback sur Instagram : http://instagram.com/Albayraakkk Kik : Cihan69200 #TeamBooba #TeamLacrim\",\"twitterTimeZone\":\"Athens\",\"friendsCount\":24
 998,\"favoritesCount\":677,\"location\":{\"displayName\":\"Dans Ta Timeline\",\"objectType\":\"place\"},\"link\":\"http://www.twitter.com/Albayraakkk\",\"postedTime\":\"2012-06-23T20:59:05.000Z\",\"image\":\"https://si0.twimg.com/profile_images/378800000410070574/26edc26ad5ccb223da8b850244b468eb_normal.jpeg\",\"links\":[{\"rel\":\"me\",\"href\":\"http://facebook.com/CihanAlbayraak\"}],\"listedCount\":69,\"id\":\"id:twitter.com:616472380\",\"languages\":[\"fr\"],\"verified\":false,\"utcOffset\":\"10800\",\"followersCount\":76068,\"preferredUsername\":\"Albayraakkk\",\"displayName\":\"LA VIRGULE \\u201a??\",\"statusesCount\":671,\"objectType\":\"person\"},\"object\":{\"summary\":\"J'attends ton SMS, tu attends le miens. On croit toujours que l'autre va envoyer un message en premier. Bref, on ne se parle plus...\",\"id\":\"object:search.twitter.com,2005:370496182172540928\",\"link\":\"http://twitter.com/Albayraakkk/statuses/370496182172540928\",\"postedTime\":\"2013-08-22T10:42:27.000Z
 \",\"objectType\":\"note\"},\"twitter_entities\":{\"symbols\":[],\"urls\":[],\"hashtags\":[],\"user_mentions\":[]},\"id\":\"tag:search.twitter.com,2005:370496182172540928\",\"verb\":\"post\",\"generator\":{\"link\":\"http://twitter.com/download/iphone\",\"displayName\":\"Twitter for iPhone\"},\"objectType\":\"activity\"},\"twitter_entities\":{\"symbols\":[],\"urls\":[],\"hashtags\":[],\"user_mentions\":[{\"id\":616472380,\"name\":\"LA VIRGULE \\u201a??\",\"indices\":[3,15],\"screen_name\":\"Albayraakkk\",\"id_str\":\"616472380\"}]},\"twitter_filter_level\":\"medium\",\"content\":\"RT @Albayraakkk: J'attends ton SMS, tu attends le miens. On croit toujours que l'autre va envoyer un message en premier. Bref, on ne se par\\u201a??\",\"id\":\"tag:search.twitter.com,2005:375760903104638976\",\"verb\":\"share\",\"generator\":{\"link\":\"http://twitter.com/download/iphone\",\"displayName\":\"Twitter for iPhone\"},\"published\":\"2013-09-05T23:22:35.000Z\",\"objectType\":\"activity\"}";
 
     @Test
     public void deserializationTest() {
 
-        PowerTrackActivitySerializer serializer = new PowerTrackActivitySerializer();
+        PowerTrackActivityConverter serializer = new PowerTrackActivityConverter();
         try {
         Object activity = serializer.deserialize(ptData1);
         } catch( Exception e ) {

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-google/google-gmail/src/main/java/com/google/gmail/provider/GMailImapProviderTask.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-google/google-gmail/src/main/java/com/google/gmail/provider/GMailImapProviderTask.java b/streams-contrib/streams-provider-google/google-gmail/src/main/java/com/google/gmail/provider/GMailImapProviderTask.java
index 2beeb88..6c928ce 100644
--- a/streams-contrib/streams-provider-google/google-gmail/src/main/java/com/google/gmail/provider/GMailImapProviderTask.java
+++ b/streams-contrib/streams-provider-google/google-gmail/src/main/java/com/google/gmail/provider/GMailImapProviderTask.java
@@ -18,7 +18,6 @@
 
 package com.google.gmail.provider;
 
-import com.googlecode.gmail4j.GmailClient;
 import com.googlecode.gmail4j.GmailMessage;
 import org.apache.streams.core.StreamsDatum;
 import org.apache.streams.pojo.json.Activity;
@@ -26,8 +25,6 @@ import org.apache.streams.util.ComponentUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.Calendar;
-import java.util.GregorianCalendar;
 import java.util.List;
 
 /**
@@ -51,7 +48,7 @@ public class GMailImapProviderTask implements Runnable {
         for (GmailMessage message : messages) {
 
             Activity activity;
-            GMailMessageActivitySerializer serializer = new GMailMessageActivitySerializer( this.provider );
+            GMailMessageActivityConverter serializer = new GMailMessageActivityConverter( this.provider );
             activity = serializer.deserialize(message);
             StreamsDatum entry = new StreamsDatum(activity);
             ComponentUtils.offerUntilSuccess(entry, this.provider.providerQueue);

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-google/google-gmail/src/main/java/com/google/gmail/provider/GMailMessageActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-google/google-gmail/src/main/java/com/google/gmail/provider/GMailMessageActivityConverter.java b/streams-contrib/streams-provider-google/google-gmail/src/main/java/com/google/gmail/provider/GMailMessageActivityConverter.java
new file mode 100644
index 0000000..1a8a38c
--- /dev/null
+++ b/streams-contrib/streams-provider-google/google-gmail/src/main/java/com/google/gmail/provider/GMailMessageActivityConverter.java
@@ -0,0 +1,202 @@
+/*
+ * 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.google.gmail.provider;
+
+import com.fasterxml.jackson.annotation.JsonBackReference;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.base.Joiner;
+import com.google.common.collect.Lists;
+import com.googlecode.gmail4j.GmailException;
+import com.googlecode.gmail4j.GmailMessage;
+import com.googlecode.gmail4j.javamail.JavaMailGmailMessage;
+import com.sun.mail.imap.IMAPFolder;
+import com.sun.mail.imap.IMAPMessage;
+import com.sun.mail.imap.IMAPSSLStore;
+import org.apache.commons.lang.NotImplementedException;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.pojo.json.*;
+import org.joda.time.DateTime;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.mail.internet.MimeMultipart;
+import java.util.List;
+import java.util.Map;
+
+import static org.apache.streams.data.util.ActivityUtil.ensureExtensions;
+
+/**
+* Created with IntelliJ IDEA.
+* User: mdelaet
+* Date: 9/30/13
+* Time: 9:24 AM
+* To change this template use File | Settings | File Templates.
+*/
+public class GMailMessageActivityConverter implements ActivityConverter<GmailMessage> {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(GMailMessageActivityConverter.class);
+
+    GMailProvider provider;
+
+    ObjectMapper mapper = new ObjectMapper();
+
+    public GMailMessageActivityConverter(GMailProvider provider) {
+
+        this.provider = provider;
+
+        mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, Boolean.FALSE);
+
+        mapper.addMixInAnnotations(IMAPSSLStore.class, MessageMixIn.class);
+        mapper.addMixInAnnotations(IMAPFolder.class, MessageMixIn.class);
+        mapper.addMixInAnnotations(IMAPMessage.class, MessageMixIn.class);
+        mapper.addMixInAnnotations(MimeMultipart.class, MessageMixIn.class);
+        mapper.addMixInAnnotations(JavaMailGmailMessage.class, MessageMixIn.class);
+
+    }
+
+    public GMailMessageActivityConverter() {
+    }
+
+    @Override
+    public String serializationFormat() {
+        return "gmail.v1";
+    }
+
+    @Override
+    public GmailMessage serialize(Activity activity) {
+        return null;
+    }
+
+    @Override
+    public Activity deserialize(GmailMessage gmailMessage) {
+
+        Activity activity = new Activity();
+        activity.setId(formatId(this.provider.getConfig().getUserName(), String.valueOf(gmailMessage.getMessageNumber())));
+        activity.setPublished(new DateTime(gmailMessage.getSendDate()));
+        Provider provider = new Provider();
+        provider.setId("http://gmail.com");
+        provider.setDisplayName("GMail");
+        activity.setProvider(provider);
+        Actor actor = new Actor();
+        actor.setId(gmailMessage.getFrom().getEmail());
+        actor.setDisplayName(gmailMessage.getFrom().getName());
+        activity.setActor(actor);
+        activity.setVerb("email");
+        ActivityObject object = new ActivityObject();
+        try {
+            object.setId(gmailMessage.getTo().get(0).getEmail());
+            object.setDisplayName(gmailMessage.getTo().get(0).getName());
+        } catch( GmailException e ) {
+            LOGGER.warn(e.getMessage());
+        }
+        activity.setTitle(gmailMessage.getSubject());
+        try {
+            activity.setContent(gmailMessage.getContentText());
+        } catch( GmailException e ) {
+            LOGGER.warn(e.getMessage());
+        }
+        activity.setObject(object);
+
+//        try {
+//            // if jackson can't serialize the object, find out now
+//            String jsonString = mapper.writeValueAsString(gmailMessage);
+//            ObjectNode jsonObject = mapper.valueToTree(gmailMessage);
+//            // since it can, write the entire source object to extensions.gmail
+//            Map<String, Object> extensions = Maps.newHashMap();
+//            extensions.put("gmail", gmailMessage);
+//            activity.setAdditionalProperty("extensions", extensions);
+//        } catch (JsonProcessingException e) {
+//            LOGGER.debug("Failed Json Deserialization");
+//            e.printStackTrace();
+//        }
+
+        return activity;
+    }
+
+    @Override
+    public List<Activity> deserializeAll(List<GmailMessage> serializedList) {
+        throw new NotImplementedException("Not currently implemented");
+    }
+
+    public Activity convert(ObjectNode event) {
+        return null;
+    }
+
+    public static Generator buildGenerator(ObjectNode event) {
+        return null;
+    }
+
+    public static Icon getIcon(ObjectNode event) {
+        return null;
+    }
+
+    public static Provider buildProvider(ObjectNode event) {
+        Provider provider = new Provider();
+        provider.setId("id:providers:gmail");
+        return provider;
+    }
+
+    public static List<Object> getLinks(ObjectNode event) {
+        return null;
+    }
+
+    public static String getUrls(ObjectNode event) {
+        return null;
+    }
+
+    public static void addGMailExtension(Activity activity, GmailMessage gmailMessage) {
+        Map<String, Object> extensions = ensureExtensions(activity);
+        extensions.put("gmail", gmailMessage);
+    }
+
+    public static String formatId(String... idparts) {
+        return Joiner.on(":").join(Lists.asList("id:gmail", idparts));
+    }
+
+    interface MessageMixIn {
+        @JsonManagedReference
+        @JsonIgnore
+        IMAPSSLStore getDefaultFolder(); // we don't need it!
+        @JsonManagedReference
+        @JsonIgnore
+        IMAPSSLStore getPersonalNamespaces(); // we don't need it!
+        @JsonManagedReference
+        @JsonIgnore
+        IMAPFolder getStore(); // we don't need it!
+        //        @JsonManagedReference
+//        @JsonIgnore
+//        @JsonBackReference
+        //IMAPFolder getParent(); // we don't need it!
+        @JsonManagedReference
+        @JsonIgnore
+        @JsonBackReference
+        IMAPMessage getFolder(); // we don't need it!
+        @JsonManagedReference
+        @JsonIgnore
+        @JsonProperty("parent")
+        @JsonBackReference
+        MimeMultipart getParent();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-google/google-gmail/src/main/java/com/google/gmail/provider/GMailMessageActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-google/google-gmail/src/main/java/com/google/gmail/provider/GMailMessageActivitySerializer.java b/streams-contrib/streams-provider-google/google-gmail/src/main/java/com/google/gmail/provider/GMailMessageActivitySerializer.java
deleted file mode 100644
index a53eaa5..0000000
--- a/streams-contrib/streams-provider-google/google-gmail/src/main/java/com/google/gmail/provider/GMailMessageActivitySerializer.java
+++ /dev/null
@@ -1,212 +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.google.gmail.provider;
-
-import com.fasterxml.jackson.annotation.JsonBackReference;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonManagedReference;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.AnnotationIntrospector;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector;
-import com.google.common.base.Joiner;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.googlecode.gmail4j.GmailException;
-import com.googlecode.gmail4j.GmailMessage;
-import com.googlecode.gmail4j.javamail.JavaMailGmailMessage;
-import com.sun.mail.imap.IMAPFolder;
-import com.sun.mail.imap.IMAPMessage;
-import com.sun.mail.imap.IMAPSSLStore;
-import org.apache.commons.lang.NotImplementedException;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.pojo.json.*;
-import org.joda.time.DateTime;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.mail.internet.MimeMultipart;
-import java.io.IOException;
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import static org.apache.streams.data.util.ActivityUtil.ensureExtensions;
-
-/**
-* Created with IntelliJ IDEA.
-* User: mdelaet
-* Date: 9/30/13
-* Time: 9:24 AM
-* To change this template use File | Settings | File Templates.
-*/
-public class GMailMessageActivitySerializer implements ActivitySerializer<GmailMessage> {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(GMailMessageActivitySerializer.class);
-
-    GMailProvider provider;
-
-    ObjectMapper mapper = new ObjectMapper();
-
-    public GMailMessageActivitySerializer(GMailProvider provider) {
-
-        this.provider = provider;
-
-        mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, Boolean.FALSE);
-
-        mapper.addMixInAnnotations(IMAPSSLStore.class, MessageMixIn.class);
-        mapper.addMixInAnnotations(IMAPFolder.class, MessageMixIn.class);
-        mapper.addMixInAnnotations(IMAPMessage.class, MessageMixIn.class);
-        mapper.addMixInAnnotations(MimeMultipart.class, MessageMixIn.class);
-        mapper.addMixInAnnotations(JavaMailGmailMessage.class, MessageMixIn.class);
-
-    }
-
-    public GMailMessageActivitySerializer() {
-    }
-
-    @Override
-    public String serializationFormat() {
-        return "gmail.v1";
-    }
-
-    @Override
-    public GmailMessage serialize(Activity activity) {
-        return null;
-    }
-
-    @Override
-    public Activity deserialize(GmailMessage gmailMessage) {
-
-        Activity activity = new Activity();
-        activity.setId(formatId(this.provider.getConfig().getUserName(), String.valueOf(gmailMessage.getMessageNumber())));
-        activity.setPublished(new DateTime(gmailMessage.getSendDate()));
-        Provider provider = new Provider();
-        provider.setId("http://gmail.com");
-        provider.setDisplayName("GMail");
-        activity.setProvider(provider);
-        Actor actor = new Actor();
-        actor.setId(gmailMessage.getFrom().getEmail());
-        actor.setDisplayName(gmailMessage.getFrom().getName());
-        activity.setActor(actor);
-        activity.setVerb("email");
-        ActivityObject object = new ActivityObject();
-        try {
-            object.setId(gmailMessage.getTo().get(0).getEmail());
-            object.setDisplayName(gmailMessage.getTo().get(0).getName());
-        } catch( GmailException e ) {
-            LOGGER.warn(e.getMessage());
-        }
-        activity.setTitle(gmailMessage.getSubject());
-        try {
-            activity.setContent(gmailMessage.getContentText());
-        } catch( GmailException e ) {
-            LOGGER.warn(e.getMessage());
-        }
-        activity.setObject(object);
-
-//        try {
-//            // if jackson can't serialize the object, find out now
-//            String jsonString = mapper.writeValueAsString(gmailMessage);
-//            ObjectNode jsonObject = mapper.valueToTree(gmailMessage);
-//            // since it can, write the entire source object to extensions.gmail
-//            Map<String, Object> extensions = Maps.newHashMap();
-//            extensions.put("gmail", gmailMessage);
-//            activity.setAdditionalProperty("extensions", extensions);
-//        } catch (JsonProcessingException e) {
-//            LOGGER.debug("Failed Json Deserialization");
-//            e.printStackTrace();
-//        }
-
-        return activity;
-    }
-
-    @Override
-    public List<Activity> deserializeAll(List<GmailMessage> serializedList) {
-        throw new NotImplementedException("Not currently implemented");
-    }
-
-    public Activity convert(ObjectNode event) {
-        return null;
-    }
-
-    public static Generator buildGenerator(ObjectNode event) {
-        return null;
-    }
-
-    public static Icon getIcon(ObjectNode event) {
-        return null;
-    }
-
-    public static Provider buildProvider(ObjectNode event) {
-        Provider provider = new Provider();
-        provider.setId("id:providers:gmail");
-        return provider;
-    }
-
-    public static List<Object> getLinks(ObjectNode event) {
-        return null;
-    }
-
-    public static String getUrls(ObjectNode event) {
-        return null;
-    }
-
-    public static void addGMailExtension(Activity activity, GmailMessage gmailMessage) {
-        Map<String, Object> extensions = ensureExtensions(activity);
-        extensions.put("gmail", gmailMessage);
-    }
-
-    public static String formatId(String... idparts) {
-        return Joiner.on(":").join(Lists.asList("id:gmail", idparts));
-    }
-
-    interface MessageMixIn {
-        @JsonManagedReference
-        @JsonIgnore
-        IMAPSSLStore getDefaultFolder(); // we don't need it!
-        @JsonManagedReference
-        @JsonIgnore
-        IMAPSSLStore getPersonalNamespaces(); // we don't need it!
-        @JsonManagedReference
-        @JsonIgnore
-        IMAPFolder getStore(); // we don't need it!
-        //        @JsonManagedReference
-//        @JsonIgnore
-//        @JsonBackReference
-        //IMAPFolder getParent(); // we don't need it!
-        @JsonManagedReference
-        @JsonIgnore
-        @JsonBackReference
-        IMAPMessage getFolder(); // we don't need it!
-        @JsonManagedReference
-        @JsonIgnore
-        @JsonProperty("parent")
-        @JsonBackReference
-        MimeMultipart getParent();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/provider/GPlusActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/provider/GPlusActivityConverter.java b/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/provider/GPlusActivityConverter.java
new file mode 100644
index 0000000..e4a1f5d
--- /dev/null
+++ b/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/provider/GPlusActivityConverter.java
@@ -0,0 +1,67 @@
+/*
+ * 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.google.gplus.provider;
+
+import com.google.gplus.serializer.util.GooglePlusActivityUtil;
+import org.apache.commons.lang.NotImplementedException;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.pojo.json.Activity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+
+public class GPlusActivityConverter implements ActivityConverter<com.google.api.services.plus.model.Activity> {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(GPlusActivityConverter.class);
+
+    AbstractGPlusProvider provider;
+
+    public GPlusActivityConverter(AbstractGPlusProvider provider) {
+
+        this.provider = provider;
+    }
+
+    public GPlusActivityConverter() {
+    }
+
+    @Override
+    public String serializationFormat() {
+        return "gplus.v1";
+    }
+
+    @Override
+    public com.google.api.services.plus.model.Activity serialize(Activity deserialized) {
+        throw new NotImplementedException("Not currently implemented");
+    }
+
+    @Override
+    public Activity deserialize(com.google.api.services.plus.model.Activity gplusActivity) {
+        Activity activity = new Activity();
+
+        GooglePlusActivityUtil.updateActivity(gplusActivity, activity);
+        return activity;
+    }
+
+    @Override
+    public List<Activity> deserializeAll(List<com.google.api.services.plus.model.Activity> serializedList) {
+        throw new NotImplementedException("Not currently implemented");
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/provider/GPlusActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/provider/GPlusActivitySerializer.java b/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/provider/GPlusActivitySerializer.java
deleted file mode 100644
index 4991e94..0000000
--- a/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/provider/GPlusActivitySerializer.java
+++ /dev/null
@@ -1,67 +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.google.gplus.provider;
-
-import com.google.gplus.serializer.util.GooglePlusActivityUtil;
-import org.apache.commons.lang.NotImplementedException;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.pojo.json.Activity;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
-
-
-public class GPlusActivitySerializer implements ActivitySerializer<com.google.api.services.plus.model.Activity> {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(GPlusActivitySerializer.class);
-
-    AbstractGPlusProvider provider;
-
-    public GPlusActivitySerializer(AbstractGPlusProvider provider) {
-
-        this.provider = provider;
-    }
-
-    public GPlusActivitySerializer() {
-    }
-
-    @Override
-    public String serializationFormat() {
-        return "gplus.v1";
-    }
-
-    @Override
-    public com.google.api.services.plus.model.Activity serialize(Activity deserialized) {
-        throw new NotImplementedException("Not currently implemented");
-    }
-
-    @Override
-    public Activity deserialize(com.google.api.services.plus.model.Activity gplusActivity) {
-        Activity activity = new Activity();
-
-        GooglePlusActivityUtil.updateActivity(gplusActivity, activity);
-        return activity;
-    }
-
-    @Override
-    public List<Activity> deserializeAll(List<com.google.api.services.plus.model.Activity> serializedList) {
-        throw new NotImplementedException("Not currently implemented");
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/provider/GPlusEventProcessor.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/provider/GPlusEventProcessor.java b/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/provider/GPlusEventProcessor.java
index 6ed2ae1..052020a 100644
--- a/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/provider/GPlusEventProcessor.java
+++ b/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/provider/GPlusEventProcessor.java
@@ -41,7 +41,7 @@ public class GPlusEventProcessor implements Runnable {
     private Class inClass;
     private Class outClass;
 
-    private GPlusActivitySerializer gPlusActivitySerializer = new GPlusActivitySerializer();
+    private GPlusActivityConverter gPlusActivitySerializer = new GPlusActivityConverter();
 
     public final static String TERMINATE = new String("TERMINATE");
 

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/processor/InstagramTypeConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/processor/InstagramTypeConverter.java b/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/processor/InstagramTypeConverter.java
index f0101fd..7d3c4e9 100644
--- a/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/processor/InstagramTypeConverter.java
+++ b/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/processor/InstagramTypeConverter.java
@@ -21,7 +21,7 @@ package org.apache.streams.instagram.processor;
 import com.google.common.collect.Lists;
 import org.apache.streams.core.StreamsDatum;
 import org.apache.streams.core.StreamsProcessor;
-import org.apache.streams.instagram.serializer.InstagramUserInfoSerializer;
+import org.apache.streams.instagram.serializer.InstagramUserInfoConverter;
 import org.apache.streams.instagram.serializer.util.InstagramActivityUtil;
 import org.apache.streams.pojo.json.Activity;
 import org.jinstagram.entity.users.basicinfo.UserInfoData;
@@ -42,7 +42,7 @@ public class InstagramTypeConverter implements StreamsProcessor {
     private Queue<StreamsDatum> outQueue;
 
     private InstagramActivityUtil instagramActivityUtil;
-    private InstagramUserInfoSerializer userInfoSerializer;
+    private InstagramUserInfoConverter userInfoSerializer;
 
     private int count = 0;
 
@@ -99,7 +99,7 @@ public class InstagramTypeConverter implements StreamsProcessor {
     @Override
     public void prepare(Object o) {
         instagramActivityUtil = new InstagramActivityUtil();
-        this.userInfoSerializer = new InstagramUserInfoSerializer();
+        this.userInfoSerializer = new InstagramUserInfoConverter();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/InstagramJsonActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/InstagramJsonActivityConverter.java b/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/InstagramJsonActivityConverter.java
new file mode 100644
index 0000000..7b9dd09
--- /dev/null
+++ b/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/InstagramJsonActivityConverter.java
@@ -0,0 +1,78 @@
+/*
+ * 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.instagram.serializer;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.commons.lang.NotImplementedException;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.exceptions.ActivitySerializerException;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.apache.streams.pojo.json.Activity;
+import org.jinstagram.entity.users.feed.MediaFeedData;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.List;
+
+import static org.apache.streams.instagram.serializer.util.InstagramActivityUtil.updateActivity;
+
+public class InstagramJsonActivityConverter implements ActivityConverter<String>, Serializable
+{
+
+    public InstagramJsonActivityConverter() {
+
+    }
+
+    @Override
+    public String serializationFormat() {
+        return null;
+    }
+
+    @Override
+    public String serialize(Activity deserialized) throws ActivitySerializerException {
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public Activity deserialize(String serialized) throws ActivitySerializerException {
+
+        ObjectMapper mapper = StreamsJacksonMapper.getInstance();
+        MediaFeedData mediaFeedData = null;
+
+        try {
+            mediaFeedData = mapper.readValue(serialized, MediaFeedData.class);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+        Activity activity = new Activity();
+
+        updateActivity(mediaFeedData, activity);
+
+        return activity;
+    }
+
+    @Override
+    public List<Activity> deserializeAll(List<String> serializedList) {
+        throw new NotImplementedException();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/InstagramJsonActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/InstagramJsonActivitySerializer.java b/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/InstagramJsonActivitySerializer.java
deleted file mode 100644
index c5bbdf1..0000000
--- a/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/InstagramJsonActivitySerializer.java
+++ /dev/null
@@ -1,78 +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.instagram.serializer;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.commons.lang.NotImplementedException;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.exceptions.ActivitySerializerException;
-import org.apache.streams.jackson.StreamsJacksonMapper;
-import org.apache.streams.pojo.json.Activity;
-import org.jinstagram.entity.users.feed.MediaFeedData;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.List;
-
-import static org.apache.streams.instagram.serializer.util.InstagramActivityUtil.updateActivity;
-
-public class InstagramJsonActivitySerializer implements ActivitySerializer<String>, Serializable
-{
-
-    public InstagramJsonActivitySerializer() {
-
-    }
-
-    @Override
-    public String serializationFormat() {
-        return null;
-    }
-
-    @Override
-    public String serialize(Activity deserialized) throws ActivitySerializerException {
-        throw new NotImplementedException();
-    }
-
-    @Override
-    public Activity deserialize(String serialized) throws ActivitySerializerException {
-
-        ObjectMapper mapper = StreamsJacksonMapper.getInstance();
-        MediaFeedData mediaFeedData = null;
-
-        try {
-            mediaFeedData = mapper.readValue(serialized, MediaFeedData.class);
-        } catch (JsonProcessingException e) {
-            e.printStackTrace();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-
-        Activity activity = new Activity();
-
-        updateActivity(mediaFeedData, activity);
-
-        return activity;
-    }
-
-    @Override
-    public List<Activity> deserializeAll(List<String> serializedList) {
-        throw new NotImplementedException();
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/InstagramUserInfoConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/InstagramUserInfoConverter.java b/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/InstagramUserInfoConverter.java
new file mode 100644
index 0000000..95456c1
--- /dev/null
+++ b/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/InstagramUserInfoConverter.java
@@ -0,0 +1,81 @@
+package org.apache.streams.instagram.serializer;
+
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.exceptions.ActivitySerializerException;
+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.jinstagram.entity.users.basicinfo.UserInfoData;
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import sun.reflect.generics.reflectiveObjects.NotImplementedException;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ *
+ */
+public class InstagramUserInfoConverter implements ActivityConverter<UserInfoData> {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(InstagramUserInfoConverter.class);
+
+    private static final String STREAMS_ID_PREFIX = "id:instagram:";
+    private static final String PROVIDER_ID = "id:provider:instagram";
+    private static final String DISPLAY_NAME = "Instagram";
+
+    @Override
+    public String serializationFormat() {
+        return null;
+    }
+
+    @Override
+    public UserInfoData serialize(Activity deserialized) throws ActivitySerializerException {
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public Activity deserialize(UserInfoData serialized) throws ActivitySerializerException {
+        Activity activity = new Activity();
+        Provider provider = new Provider();
+        provider.setId(PROVIDER_ID);
+        provider.setDisplayName(DISPLAY_NAME);
+        activity.setProvider(provider);
+        activity.setPublished(DateTime.now().withZone(DateTimeZone.UTC));
+        Actor actor = new Actor();
+        Image image = new Image();
+        image.setUrl(serialized.getProfile_picture());
+        actor.setImage(image);
+        actor.setId(STREAMS_ID_PREFIX+serialized.getId());
+        actor.setSummary(serialized.getBio());
+        actor.setAdditionalProperty("handle", serialized.getUsername());
+        actor.setDisplayName(serialized.getFullName());
+        Map<String, Object> extensions = Maps.newHashMap();
+        actor.setAdditionalProperty("extensions", extensions);
+        extensions.put("screenName", serialized.getUsername());
+        extensions.put("posts", serialized.getCounts().getMedia());
+        extensions.put("followers", serialized.getCounts().getFollwed_by());
+        extensions.put("website", serialized.getWebsite());
+        extensions.put("following", serialized.getCounts().getFollows());
+        return activity;
+    }
+
+    @Override
+    public List<Activity> deserializeAll(List<UserInfoData> serializedList) {
+        List<Activity> result = Lists.newLinkedList();
+        for(UserInfoData data : serializedList) {
+            try {
+                result.add(deserialize(data));
+            } catch (ActivitySerializerException ase) {
+                LOGGER.error("Caught ActivitySerializerException, dropping user info data : {}", data.getId());
+                LOGGER.error("Exception : {}", ase);
+            }
+        }
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/InstagramUserInfoSerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/InstagramUserInfoSerializer.java b/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/InstagramUserInfoSerializer.java
deleted file mode 100644
index 055169b..0000000
--- a/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/InstagramUserInfoSerializer.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package org.apache.streams.instagram.serializer;
-
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.exceptions.ActivitySerializerException;
-import org.apache.streams.instagram.UsersInfo;
-import org.apache.streams.instagram.provider.userinfo.InstagramUserInfoProvider;
-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.jinstagram.entity.users.basicinfo.UserInfoData;
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import sun.reflect.generics.reflectiveObjects.NotImplementedException;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- *
- */
-public class InstagramUserInfoSerializer implements ActivitySerializer<UserInfoData> {
-
-    private static final Logger LOGGER = LoggerFactory.getLogger(InstagramUserInfoSerializer.class);
-
-    private static final String STREAMS_ID_PREFIX = "id:instagram:";
-    private static final String PROVIDER_ID = "id:provider:instagram";
-    private static final String DISPLAY_NAME = "Instagram";
-
-    @Override
-    public String serializationFormat() {
-        return null;
-    }
-
-    @Override
-    public UserInfoData serialize(Activity deserialized) throws ActivitySerializerException {
-        throw new NotImplementedException();
-    }
-
-    @Override
-    public Activity deserialize(UserInfoData serialized) throws ActivitySerializerException {
-        Activity activity = new Activity();
-        Provider provider = new Provider();
-        provider.setId(PROVIDER_ID);
-        provider.setDisplayName(DISPLAY_NAME);
-        activity.setProvider(provider);
-        activity.setPublished(DateTime.now().withZone(DateTimeZone.UTC));
-        Actor actor = new Actor();
-        Image image = new Image();
-        image.setUrl(serialized.getProfile_picture());
-        actor.setImage(image);
-        actor.setId(STREAMS_ID_PREFIX+serialized.getId());
-        actor.setSummary(serialized.getBio());
-        actor.setAdditionalProperty("handle", serialized.getUsername());
-        actor.setDisplayName(serialized.getFullName());
-        Map<String, Object> extensions = Maps.newHashMap();
-        actor.setAdditionalProperty("extensions", extensions);
-        extensions.put("screenName", serialized.getUsername());
-        extensions.put("posts", serialized.getCounts().getMedia());
-        extensions.put("followers", serialized.getCounts().getFollwed_by());
-        extensions.put("website", serialized.getWebsite());
-        extensions.put("following", serialized.getCounts().getFollows());
-        return activity;
-    }
-
-    @Override
-    public List<Activity> deserializeAll(List<UserInfoData> serializedList) {
-        List<Activity> result = Lists.newLinkedList();
-        for(UserInfoData data : serializedList) {
-            try {
-                result.add(deserialize(data));
-            } catch (ActivitySerializerException ase) {
-                LOGGER.error("Caught ActivitySerializerException, dropping user info data : {}", data.getId());
-                LOGGER.error("Exception : {}", ase);
-            }
-        }
-        return result;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverJsonActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverJsonActivityConverter.java b/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverJsonActivityConverter.java
new file mode 100644
index 0000000..810f345
--- /dev/null
+++ b/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverJsonActivityConverter.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 org.apache.streams.data;
+
+import com.fasterxml.jackson.databind.AnnotationIntrospector;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector;
+import com.moreover.api.Article;
+import org.apache.commons.lang.NotImplementedException;
+import org.apache.streams.data.util.MoreoverUtils;
+import org.apache.streams.pojo.json.Activity;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * Deserializes Moreover JSON format into Activities
+ */
+public class MoreoverJsonActivityConverter implements ActivityConverter<String> {
+
+    public MoreoverJsonActivityConverter() {
+    }
+
+    @Override
+    public String serializationFormat() {
+        return "application/json+vnd.moreover.com.v1";
+    }
+
+    @Override
+    public String serialize(Activity deserialized) {
+        throw new UnsupportedOperationException("Cannot currently serialize to Moreover JSON");
+    }
+
+    @Override
+    public Activity deserialize(String serialized) {
+        serialized = serialized.replaceAll("\\[[ ]*\\]", "null");
+
+        System.out.println(serialized);
+
+        ObjectMapper mapper = new ObjectMapper();
+        AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(mapper.getTypeFactory());
+        mapper.setAnnotationIntrospector(introspector);
+        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, Boolean.FALSE);
+        mapper.configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, Boolean.FALSE);
+        mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, Boolean.TRUE);
+        mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, Boolean.TRUE);
+        mapper.configure(DeserializationFeature.WRAP_EXCEPTIONS, Boolean.TRUE);
+
+        Article article;
+        try {
+            ObjectNode node = (ObjectNode)mapper.readTree(serialized);
+            node.remove("tags");
+            node.remove("locations");
+            node.remove("companies");
+            node.remove("topics");
+            node.remove("media");
+            node.remove("outboundUrls");
+            ObjectNode jsonNodes = (ObjectNode) node.get("source").get("feed");
+            jsonNodes.remove("editorialTopics");
+            jsonNodes.remove("tags");
+            jsonNodes.remove("autoTopics");
+            article = mapper.convertValue(node, Article.class);
+        } catch (IOException e) {
+            throw new IllegalArgumentException("Unable to deserialize", e);
+        }
+        return MoreoverUtils.convert(article);
+    }
+
+    @Override
+    public List<Activity> deserializeAll(List<String> serializedList) {
+        throw new NotImplementedException("Not currently implemented");
+    }
+
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverJsonActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverJsonActivitySerializer.java b/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverJsonActivitySerializer.java
deleted file mode 100644
index 2f2d677..0000000
--- a/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverJsonActivitySerializer.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 org.apache.streams.data;
-
-import com.fasterxml.jackson.databind.AnnotationIntrospector;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector;
-import com.moreover.api.Article;
-import org.apache.commons.lang.NotImplementedException;
-import org.apache.streams.data.util.MoreoverUtils;
-import org.apache.streams.pojo.json.Activity;
-
-import java.io.IOException;
-import java.util.List;
-
-/**
- * Deserializes Moreover JSON format into Activities
- */
-public class MoreoverJsonActivitySerializer implements ActivitySerializer<String> {
-
-    public MoreoverJsonActivitySerializer() {
-    }
-
-    @Override
-    public String serializationFormat() {
-        return "application/json+vnd.moreover.com.v1";
-    }
-
-    @Override
-    public String serialize(Activity deserialized) {
-        throw new UnsupportedOperationException("Cannot currently serialize to Moreover JSON");
-    }
-
-    @Override
-    public Activity deserialize(String serialized) {
-        serialized = serialized.replaceAll("\\[[ ]*\\]", "null");
-
-        System.out.println(serialized);
-
-        ObjectMapper mapper = new ObjectMapper();
-        AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(mapper.getTypeFactory());
-        mapper.setAnnotationIntrospector(introspector);
-        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, Boolean.FALSE);
-        mapper.configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, Boolean.FALSE);
-        mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, Boolean.TRUE);
-        mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, Boolean.TRUE);
-        mapper.configure(DeserializationFeature.WRAP_EXCEPTIONS, Boolean.TRUE);
-
-        Article article;
-        try {
-            ObjectNode node = (ObjectNode)mapper.readTree(serialized);
-            node.remove("tags");
-            node.remove("locations");
-            node.remove("companies");
-            node.remove("topics");
-            node.remove("media");
-            node.remove("outboundUrls");
-            ObjectNode jsonNodes = (ObjectNode) node.get("source").get("feed");
-            jsonNodes.remove("editorialTopics");
-            jsonNodes.remove("tags");
-            jsonNodes.remove("autoTopics");
-            article = mapper.convertValue(node, Article.class);
-        } catch (IOException e) {
-            throw new IllegalArgumentException("Unable to deserialize", e);
-        }
-        return MoreoverUtils.convert(article);
-    }
-
-    @Override
-    public List<Activity> deserializeAll(List<String> serializedList) {
-        throw new NotImplementedException("Not currently implemented");
-    }
-
-
-}