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:54 UTC
[1/9] incubator-streams git commit: omni-bus update
Repository: incubator-streams
Updated Branches:
refs/heads/STREAMS-68,218 [created] 8737bdadf
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-pojo/src/main/java/org/apache/streams/data/DocumentClassifier.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/data/DocumentClassifier.java b/streams-pojo/src/main/java/org/apache/streams/data/DocumentClassifier.java
new file mode 100644
index 0000000..ea0055f
--- /dev/null
+++ b/streams-pojo/src/main/java/org/apache/streams/data/DocumentClassifier.java
@@ -0,0 +1,40 @@
+/*
+ * 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 org.apache.streams.exceptions.ActivitySerializerException;
+import org.apache.streams.pojo.json.Activity;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Serializes and deserializes Activities
+ */
+public interface DocumentClassifier extends Serializable {
+
+ /**
+ * Gets the supported content type that can be deserialized/serialized
+ *
+ * @param document the document
+ * @return a serializable pojo class this document matches
+ */
+ Class detectClass(Object document);
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-pojo/src/main/java/org/apache/streams/data/util/ActivityUtil.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/data/util/ActivityUtil.java b/streams-pojo/src/main/java/org/apache/streams/data/util/ActivityUtil.java
index 04ee923..b87854f 100644
--- a/streams-pojo/src/main/java/org/apache/streams/data/util/ActivityUtil.java
+++ b/streams-pojo/src/main/java/org/apache/streams/data/util/ActivityUtil.java
@@ -120,4 +120,7 @@ public class ActivityUtil {
return String.format("id:%s:activities:%s", providerName, activityId);
}
+ public static boolean isValid(Activity activity) {
+ return activity.getId() != null && activity.getVerb() != null && activity.getProvider().getId() != null;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonMapper.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonMapper.java b/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonMapper.java
index 8a74caa..c85de84 100644
--- a/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonMapper.java
+++ b/streams-pojo/src/main/java/org/apache/streams/jackson/StreamsJacksonMapper.java
@@ -24,6 +24,7 @@ import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
+import com.google.common.collect.Lists;
import java.util.List;
@@ -38,6 +39,13 @@ public class StreamsJacksonMapper extends ObjectMapper {
return INSTANCE;
}
+ public static StreamsJacksonMapper getInstance(String format){
+
+ StreamsJacksonMapper instance = new StreamsJacksonMapper(Lists.newArrayList(format));
+
+ return instance;
+
+ }
public static StreamsJacksonMapper getInstance(List<String> formats){
StreamsJacksonMapper instance = new StreamsJacksonMapper(formats);
@@ -52,6 +60,12 @@ public class StreamsJacksonMapper extends ObjectMapper {
configure();
}
+ public StreamsJacksonMapper(String format) {
+ super();
+ registerModule(new StreamsJacksonModule(Lists.newArrayList(format)));
+ configure();
+ }
+
public StreamsJacksonMapper(List<String> formats) {
super();
registerModule(new StreamsJacksonModule(formats));
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-runtimes/streams-runtime-pig/src/main/java/org/apache/streams/pig/StreamsComponentFactory.java
----------------------------------------------------------------------
diff --git a/streams-runtimes/streams-runtime-pig/src/main/java/org/apache/streams/pig/StreamsComponentFactory.java b/streams-runtimes/streams-runtime-pig/src/main/java/org/apache/streams/pig/StreamsComponentFactory.java
index e92a5ae..48207d5 100644
--- a/streams-runtimes/streams-runtime-pig/src/main/java/org/apache/streams/pig/StreamsComponentFactory.java
+++ b/streams-runtimes/streams-runtime-pig/src/main/java/org/apache/streams/pig/StreamsComponentFactory.java
@@ -20,17 +20,10 @@
package org.apache.streams.pig;
import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
-import org.apache.commons.lang.ArrayUtils;
import org.apache.streams.core.StreamsProcessor;
-import org.apache.streams.data.ActivitySerializer;
+import org.apache.streams.data.ActivityConverter;
import org.slf4j.Logger;
-import java.lang.reflect.InvocationTargetException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
/**
* Static reflection wrappers for instantiating StreamsComponents
*/
@@ -38,7 +31,7 @@ public class StreamsComponentFactory {
private static final Logger LOGGER = org.slf4j.LoggerFactory.getLogger(StreamsComponentFactory.class);
- public static ActivitySerializer getSerializerInstance(Class<?> serializerClazz) {
+ public static ActivityConverter getSerializerInstance(Class<?> serializerClazz) {
Object object = null;
try {
@@ -49,7 +42,7 @@ public class StreamsComponentFactory {
Preconditions.checkNotNull(object);
- ActivitySerializer serializer = (ActivitySerializer) object;
+ ActivityConverter serializer = (ActivityConverter) object;
return serializer;
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-runtimes/streams-runtime-pig/src/main/java/org/apache/streams/pig/StreamsProcessDocumentExec.java
----------------------------------------------------------------------
diff --git a/streams-runtimes/streams-runtime-pig/src/main/java/org/apache/streams/pig/StreamsProcessDocumentExec.java b/streams-runtimes/streams-runtime-pig/src/main/java/org/apache/streams/pig/StreamsProcessDocumentExec.java
index 788b347..2303d52 100644
--- a/streams-runtimes/streams-runtime-pig/src/main/java/org/apache/streams/pig/StreamsProcessDocumentExec.java
+++ b/streams-runtimes/streams-runtime-pig/src/main/java/org/apache/streams/pig/StreamsProcessDocumentExec.java
@@ -20,24 +20,13 @@
package org.apache.streams.pig;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
import datafu.pig.util.SimpleEvalFunc;
import org.apache.commons.lang.ArrayUtils;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.pig.EvalFunc;
import org.apache.pig.builtin.MonitoredUDF;
-import org.apache.pig.data.BagFactory;
-import org.apache.pig.data.DataBag;
-import org.apache.pig.data.Tuple;
-import org.apache.pig.data.TupleFactory;
-import org.apache.pig.impl.util.UDFContext;
import org.apache.streams.core.StreamsDatum;
import org.apache.streams.core.StreamsProcessor;
-import org.apache.streams.data.ActivitySerializer;
import org.apache.streams.jackson.StreamsJacksonMapper;
-import org.apache.streams.pojo.json.Activity;
import org.slf4j.Logger;
import java.io.IOException;
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-runtimes/streams-runtime-pig/src/main/java/org/apache/streams/pig/StreamsSerializerExec.java
----------------------------------------------------------------------
diff --git a/streams-runtimes/streams-runtime-pig/src/main/java/org/apache/streams/pig/StreamsSerializerExec.java b/streams-runtimes/streams-runtime-pig/src/main/java/org/apache/streams/pig/StreamsSerializerExec.java
index d517752..65b7956 100644
--- a/streams-runtimes/streams-runtime-pig/src/main/java/org/apache/streams/pig/StreamsSerializerExec.java
+++ b/streams-runtimes/streams-runtime-pig/src/main/java/org/apache/streams/pig/StreamsSerializerExec.java
@@ -21,26 +21,14 @@ package org.apache.streams.pig;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
import datafu.pig.util.SimpleEvalFunc;
-import org.apache.commons.lang.ArrayUtils;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.pig.EvalFunc;
import org.apache.pig.builtin.MonitoredUDF;
-import org.apache.pig.data.BagFactory;
-import org.apache.pig.data.DataBag;
-import org.apache.pig.data.Tuple;
-import org.apache.pig.data.TupleFactory;
-import org.apache.pig.impl.util.UDFContext;
-import org.apache.streams.core.StreamsDatum;
-import org.apache.streams.core.StreamsProcessor;
-import org.apache.streams.data.ActivitySerializer;
+import org.apache.streams.data.ActivityConverter;
import org.apache.streams.jackson.StreamsJacksonMapper;
import org.apache.streams.pojo.json.Activity;
import org.slf4j.Logger;
import java.io.IOException;
-import java.util.List;
import java.util.concurrent.TimeUnit;
/**
@@ -53,7 +41,7 @@ public class StreamsSerializerExec extends SimpleEvalFunc<String> {
private static final Logger LOGGER = org.slf4j.LoggerFactory.getLogger(StreamsSerializerExec.class);
- ActivitySerializer activitySerializer;
+ ActivityConverter activitySerializer;
ObjectMapper mapper = StreamsJacksonMapper.getInstance();
public StreamsSerializerExec(String... execArgs) throws ClassNotFoundException{
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-runtimes/streams-runtime-pig/src/test/java/org/apache/streams/pig/test/PigProcessDatumTest.java
----------------------------------------------------------------------
diff --git a/streams-runtimes/streams-runtime-pig/src/test/java/org/apache/streams/pig/test/PigProcessDatumTest.java b/streams-runtimes/streams-runtime-pig/src/test/java/org/apache/streams/pig/test/PigProcessDatumTest.java
index e643cb6..475d791 100644
--- a/streams-runtimes/streams-runtime-pig/src/test/java/org/apache/streams/pig/test/PigProcessDatumTest.java
+++ b/streams-runtimes/streams-runtime-pig/src/test/java/org/apache/streams/pig/test/PigProcessDatumTest.java
@@ -21,15 +21,9 @@ package org.apache.streams.pig.test;
import org.apache.pig.pigunit.PigTest;
import org.apache.streams.core.StreamsDatum;
-import org.apache.streams.jackson.StreamsJacksonMapper;
-import org.apache.streams.twitter.serializer.TwitterJsonTweetActivitySerializer;
import org.apache.tools.ant.util.StringUtils;
-import org.junit.Assert;
-import org.junit.Ignore;
import org.junit.Test;
-import java.io.IOException;
-import java.text.ParseException;
import java.util.List;
/**
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-runtimes/streams-runtime-pig/src/test/java/org/apache/streams/pig/test/PigProcessDocumentTest.java
----------------------------------------------------------------------
diff --git a/streams-runtimes/streams-runtime-pig/src/test/java/org/apache/streams/pig/test/PigProcessDocumentTest.java b/streams-runtimes/streams-runtime-pig/src/test/java/org/apache/streams/pig/test/PigProcessDocumentTest.java
index 556ea3a..dd30eb1 100644
--- a/streams-runtimes/streams-runtime-pig/src/test/java/org/apache/streams/pig/test/PigProcessDocumentTest.java
+++ b/streams-runtimes/streams-runtime-pig/src/test/java/org/apache/streams/pig/test/PigProcessDocumentTest.java
@@ -21,9 +21,6 @@ package org.apache.streams.pig.test;
import org.apache.pig.pigunit.PigTest;
import org.apache.streams.core.StreamsDatum;
-import org.apache.streams.jackson.StreamsJacksonMapper;
-import org.apache.streams.twitter.serializer.TwitterJsonActivitySerializer;
-import org.apache.streams.twitter.serializer.TwitterJsonTweetActivitySerializer;
import org.apache.tools.ant.util.StringUtils;
import org.junit.Test;
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-runtimes/streams-runtime-pig/src/test/java/org/apache/streams/pig/test/PigSerializerTest.java
----------------------------------------------------------------------
diff --git a/streams-runtimes/streams-runtime-pig/src/test/java/org/apache/streams/pig/test/PigSerializerTest.java b/streams-runtimes/streams-runtime-pig/src/test/java/org/apache/streams/pig/test/PigSerializerTest.java
index a7ad4a0..b53083a 100644
--- a/streams-runtimes/streams-runtime-pig/src/test/java/org/apache/streams/pig/test/PigSerializerTest.java
+++ b/streams-runtimes/streams-runtime-pig/src/test/java/org/apache/streams/pig/test/PigSerializerTest.java
@@ -19,22 +19,14 @@
package org.apache.streams.pig.test;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
-import org.apache.pig.data.Tuple;
import org.apache.pig.pigunit.PigTest;
import org.apache.streams.jackson.StreamsJacksonMapper;
import org.apache.streams.twitter.serializer.StreamsTwitterMapper;
-import org.apache.streams.twitter.serializer.TwitterJsonActivitySerializer;
-import org.apache.streams.twitter.serializer.TwitterJsonTweetActivitySerializer;
+import org.apache.streams.twitter.serializer.TwitterJsonActivityConverter;
import org.apache.tools.ant.util.StringUtils;
-import org.junit.Ignore;
import org.junit.Test;
-import java.io.File;
-import java.util.Iterator;
-
/**
* This is a test for StreamsSerializerExec
*/
@@ -47,7 +39,7 @@ public class PigSerializerTest {
"159475541894897679\ttwitter,statuses/user_timeline\t1384499359006\t{\"retweeted_status\":{\"contributors\":null,\"text\":\"The Costa Concordia cruise ship accident could be a disaster for the industry | http://t.co/M9UUNvZi (via @TIMEMoneyland)\",\"geo\":null,\"retweeted\":false,\"in_reply_to_screen_name\":null,\"possibly_sensitive\":false,\"truncated\":false,\"lang\":\"en\",\"entities\":{\"symbols\":[],\"urls\":[{\"expanded_url\":\"http://ti.me/zYyEtD\",\"indices\":[80,100],\"display_url\":\"ti.me/zYyEtD\",\"url\":\"http://t.co/M9UUNvZi\"}],\"hashtags\":[],\"user_mentions\":[{\"id\":245888431,\"name\":\"TIME Moneyland\",\"indices\":[106,120],\"screen_name\":\"TIMEMoneyland\",\"id_str\":\"245888431\"}]},\"in_reply_to_status_id_str\":null,\"id\":159470076259602432,\"source\":\"<a href=\\\"http://www.hootsuite.com\\\" rel=\\\"nofollow\\\">HootSuite<\\/a>\",\"in_reply_to_user_id_str\":null,\"favorited\":false,\"in_reply_to_status_id\":null,\"retweet_count\":71,\"create
d_at\":\"Wed Jan 18 03:00:03 +0000 2012\",\"in_reply_to_user_id\":null,\"favorite_count\":14,\"id_str\":\"159470076259602432\",\"place\":null,\"user\":{\"location\":\"\",\"default_profile\":false,\"profile_background_tile\":true,\"statuses_count\":70754,\"lang\":\"en\",\"profile_link_color\":\"1B4F89\",\"profile_banner_url\":\"https://pbs.twimg.com/profile_banners/14293310/1355243462\",\"id\":14293310,\"following\":false,\"protected\":false,\"favourites_count\":59,\"profile_text_color\":\"000000\",\"description\":\"Breaking news and current events from around the globe. Hosted by TIME staff. Tweet questions to our customer service team @TIMEmag_Service.\",\"verified\":true,\"contributors_enabled\":false,\"profile_sidebar_border_color\":\"000000\",\"name\":\"TIME.com\",\"profile_background_color\":\"CC0000\",\"created_at\":\"Thu Apr 03 13:54:30 +0000 2008\",\"default_profile_image\":false,\"followers_count\":5146268,\"profile_image_url_https\":\"https://pbs.twimg.com/profile_images/1
700796190/Picture_24_normal.png\",\"geo_enabled\":false,\"profile_background_image_url\":\"http://a0.twimg.com/profile_background_images/735228291/107f1a300a90ee713937234bb3d139c0.jpeg\",\"profile_background_image_url_https\":\"https://si0.twimg.com/profile_background_images/735228291/107f1a300a90ee713937234bb3d139c0.jpeg\",\"follow_request_sent\":false,\"entities\":{\"description\":{\"urls\":[]},\"url\":{\"urls\":[{\"expanded_url\":\"http://www.time.com\",\"indices\":[0,22],\"display_url\":\"time.com\",\"url\":\"http://t.co/4aYbUuAeSh\"}]}},\"url\":\"http://t.co/4aYbUuAeSh\",\"utc_offset\":-18000,\"time_zone\":\"Eastern Time (US & Canada)\",\"notifications\":false,\"profile_use_background_image\":true,\"friends_count\":742,\"profile_sidebar_fill_color\":\"D9D9D9\",\"screen_name\":\"TIME\",\"id_str\":\"14293310\",\"profile_image_url\":\"http://pbs.twimg.com/profile_images/1700796190/Picture_24_normal.png\",\"listed_count\":76944,\"is_translator\":false},\"coordinates\":null},\"contr
ibutors\":null,\"text\":\"RT @TIME: The Costa Concordia cruise ship accident could be a disaster for the industry | http://t.co/M9UUNvZi (via @TIMEMoneyland)\",\"geo\":null,\"retweeted\":false,\"in_reply_to_screen_name\":null,\"possibly_sensitive\":false,\"truncated\":false,\"lang\":\"en\",\"entities\":{\"symbols\":[],\"urls\":[{\"expanded_url\":\"http://ti.me/zYyEtD\",\"indices\":[90,110],\"display_url\":\"ti.me/zYyEtD\",\"url\":\"http://t.co/M9UUNvZi\"}],\"hashtags\":[],\"user_mentions\":[{\"id\":14293310,\"name\":\"TIME.com\",\"indices\":[3,8],\"screen_name\":\"TIME\",\"id_str\":\"14293310\"},{\"id\":245888431,\"name\":\"TIME Moneyland\",\"indices\":[116,130],\"screen_name\":\"TIMEMoneyland\",\"id_str\":\"245888431\"}]},\"in_reply_to_status_id_str\":null,\"id\":159475541894897679,\"source\":\"<a href=\\\"http://twitter.com/download/iphone\\\" rel=\\\"nofollow\\\">Twitter for iPhone<\\/a>\",\"in_reply_to_user_id_str\":null,\"favorited\":false,\"in_reply_to_status_id\":null,\"retwe
et_count\":71,\"created_at\":\"Wed Jan 18 03:21:46 +0000 2012\",\"in_reply_to_user_id\":null,\"favorite_count\":0,\"id_str\":\"159475541894897679\",\"place\":null,\"user\":{\"location\":\"\",\"default_profile\":false,\"profile_background_tile\":true,\"statuses_count\":5053,\"lang\":\"en\",\"profile_link_color\":\"738D84\",\"id\":27552112,\"following\":false,\"protected\":false,\"favourites_count\":52,\"profile_text_color\":\"97CEC9\",\"description\":\"\",\"verified\":false,\"contributors_enabled\":false,\"profile_sidebar_border_color\":\"A9AC00\",\"name\":\"rafael medina-flores\",\"profile_background_color\":\"C5EFE3\",\"created_at\":\"Mon Mar 30 01:21:55 +0000 2009\",\"default_profile_image\":false,\"followers_count\":963,\"profile_image_url_https\":\"https://pbs.twimg.com/profile_images/2519547938/image_normal.jpg\",\"geo_enabled\":true,\"profile_background_image_url\":\"http://a0.twimg.com/profile_background_images/167479660/trireme.jpg\",\"profile_background_image_url_https\":\"
https://si0.twimg.com/profile_background_images/167479660/trireme.jpg\",\"follow_request_sent\":false,\"entities\":{\"description\":{\"urls\":[]}},\"url\":null,\"utc_offset\":-25200,\"time_zone\":\"Mountain Time (US & Canada)\",\"notifications\":false,\"profile_use_background_image\":true,\"friends_count\":1800,\"profile_sidebar_fill_color\":\"5C4F3C\",\"screen_name\":\"rmedinaflores\",\"id_str\":\"27552112\",\"profile_image_url\":\"http://pbs.twimg.com/profile_images/2519547938/image_normal.jpg\",\"listed_count\":50,\"is_translator\":false},\"coordinates\":null}"
};
- TwitterJsonActivitySerializer serializer = new TwitterJsonActivitySerializer();
+ TwitterJsonActivityConverter serializer = new TwitterJsonActivityConverter();
String doc = (String) StringUtils.split(input[0], '\t').get(3);
String outdoc = StreamsJacksonMapper.getInstance(Lists.newArrayList(StreamsTwitterMapper.TWITTER_FORMAT)).writeValueAsString(serializer.deserialize(doc));
[8/9] incubator-streams git commit: fixed pig runtime test
Posted by sb...@apache.org.
fixed pig runtime test
Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/7a067ce1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/7a067ce1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/7a067ce1
Branch: refs/heads/STREAMS-68,218
Commit: 7a067ce133288fb79e41aed2fcc7ccd389ff1284
Parents: aad0e88
Author: sblackmon <sb...@apache.org>
Authored: Thu Nov 13 17:35:41 2014 -0600
Committer: sblackmon <sb...@apache.org>
Committed: Thu Nov 13 17:35:41 2014 -0600
----------------------------------------------------------------------
.../com/google/gplus/processor/GooglePlusCommentProcessor.java | 3 +++
.../com/google/gplus/processor/GooglePlusTypeConverter.java | 4 ++++
.../streams/instagram/processor/InstagramTypeConverter.java | 4 ++++
.../twitter/serializer/TwitterJsonActivityConverter.java | 6 ++++--
.../src/test/resources/pigserializertest.pig | 2 +-
5 files changed, 16 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/7a067ce1/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/processor/GooglePlusCommentProcessor.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/processor/GooglePlusCommentProcessor.java b/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/processor/GooglePlusCommentProcessor.java
index 583c741..8f0f491 100644
--- a/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/processor/GooglePlusCommentProcessor.java
+++ b/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/processor/GooglePlusCommentProcessor.java
@@ -32,6 +32,9 @@ import org.slf4j.LoggerFactory;
import java.util.List;
+/**
+ * Consider replacing this with a simpler Processer which extends SimpleHTTPGetProcessor
+ */
public class GooglePlusCommentProcessor implements StreamsProcessor {
private final static String STREAMS_ID = "GooglePlusCommentProcessor";
private final static Logger LOGGER = LoggerFactory.getLogger(GooglePlusCommentProcessor.class);
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/7a067ce1/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/processor/GooglePlusTypeConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/processor/GooglePlusTypeConverter.java b/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/processor/GooglePlusTypeConverter.java
index b4cf21d..472c145 100644
--- a/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/processor/GooglePlusTypeConverter.java
+++ b/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/processor/GooglePlusTypeConverter.java
@@ -30,6 +30,10 @@ import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Queue;
+@Deprecated
+/*
+ * Modules and streams should adopt TypeConverterProcessor and ActivityConverterProcessor
+ */
public class GooglePlusTypeConverter implements StreamsProcessor {
public final static String STREAMS_ID = "GooglePlusTypeConverter";
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/7a067ce1/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 7d3c4e9..6acbbdb 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
@@ -32,6 +32,10 @@ import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Queue;
+@Deprecated
+/*
+ * Modules and streams should adopt TypeConverterProcessor and ActivityConverterProcessor
+ */
public class InstagramTypeConverter implements StreamsProcessor {
public final static String STREAMS_ID = "InstagramTypeConverter";
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/7a067ce1/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonActivityConverter.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonActivityConverter.java
index 3e123b6..5206b08 100644
--- a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonActivityConverter.java
+++ b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonActivityConverter.java
@@ -58,11 +58,13 @@ public class TwitterJsonActivityConverter implements ActivityConverter<String>,
@Override
public Activity deserialize(String serialized) throws ActivitySerializerException {
- Class converterClass = TwitterDocumentClassifier.getInstance().detectClass(serialized);
+ Class documentClass = TwitterDocumentClassifier.getInstance().detectClass(serialized);
+
+ Class converterClass = TwitterConverterResolver.getInstance().bestSerializer(documentClass);
ActivityConverter converter = ActivityConverterFactory.getInstance(converterClass);
- Object typedObject = TypeConverterUtil.convert(serialized, converterClass);
+ Object typedObject = TypeConverterUtil.convert(serialized, documentClass);
Activity activity = converter.deserialize(typedObject);
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/7a067ce1/streams-runtimes/streams-runtime-pig/src/test/resources/pigserializertest.pig
----------------------------------------------------------------------
diff --git a/streams-runtimes/streams-runtime-pig/src/test/resources/pigserializertest.pig b/streams-runtimes/streams-runtime-pig/src/test/resources/pigserializertest.pig
index 8ea91d8..d388269 100644
--- a/streams-runtimes/streams-runtime-pig/src/test/resources/pigserializertest.pig
+++ b/streams-runtimes/streams-runtime-pig/src/test/resources/pigserializertest.pig
@@ -1,4 +1,4 @@
-DEFINE SERIALIZER org.apache.streams.pig.StreamsSerializerExec('org.apache.streams.twitter.serializer.TwitterJsonActivitySerializer');
+DEFINE SERIALIZER org.apache.streams.pig.StreamsSerializerExec('org.apache.streams.twitter.serializer.TwitterJsonActivityConverter');
in = LOAD '*' USING PigStorage('\t') AS (activityid: chararray, source: chararray, timestamp: long, object: chararray);
out = FOREACH in {
result = SERIALIZER(object);
[3/9] incubator-streams git commit: omni-bus update
Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverXmlActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverXmlActivityConverter.java b/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverXmlActivityConverter.java
new file mode 100644
index 0000000..112b6a5
--- /dev/null
+++ b/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverXmlActivityConverter.java
@@ -0,0 +1,105 @@
+/*
+ * 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.moreover.api.Article;
+import com.moreover.api.ArticlesResponse;
+import com.moreover.api.ObjectFactory;
+import org.apache.commons.lang.SerializationException;
+import org.apache.streams.data.util.MoreoverUtils;
+import org.apache.streams.pojo.json.Activity;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+import java.io.StringReader;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Deserializes the Moreover Article XML and converts it to an instance of {@link Activity}
+ */
+public class MoreoverXmlActivityConverter implements ActivityConverter<String> {
+
+ //JAXBContext is threadsafe (supposedly)
+ private final JAXBContext articleContext;
+ private final JAXBContext articlesContext;
+
+ public MoreoverXmlActivityConverter() {
+ articleContext = createContext(Article.class);
+ articlesContext = createContext(ArticlesResponse.class);
+ }
+
+ @Override
+ public String serializationFormat() {
+ return "application/xml+vnd.moreover.com.v1";
+ }
+
+ @Override
+ public String serialize(Activity deserialized) {
+ throw new UnsupportedOperationException("Cannot currently serialize to Moreover");
+ }
+
+ @Override
+ public Activity deserialize(String serialized) {
+ Article article = deserializeMoreover(serialized);
+ return MoreoverUtils.convert(article);
+ }
+
+ @Override
+ public List<Activity> deserializeAll(List<String> serializedList) {
+ List<Activity> activities = new LinkedList<Activity>();
+ for(String item : serializedList) {
+ ArticlesResponse response = deserializeMoreoverResponse(item);
+ for(Article article : response.getArticles().getArticle()) {
+ activities.add(MoreoverUtils.convert(article));
+ }
+ }
+ return activities;
+ }
+
+ private Article deserializeMoreover(String serialized){
+ try {
+ Unmarshaller unmarshaller = articleContext.createUnmarshaller();
+ return (Article) unmarshaller.unmarshal(new StringReader(serialized));
+ } catch (JAXBException e) {
+ throw new SerializationException("Unable to deserialize Moreover data", e);
+ }
+ }
+
+ private ArticlesResponse deserializeMoreoverResponse(String serialized){
+ try {
+ Unmarshaller unmarshaller = articlesContext.createUnmarshaller();
+ return ((JAXBElement<ArticlesResponse>) unmarshaller.unmarshal(new StringReader(serialized))).getValue();
+ } catch (JAXBException e) {
+ throw new SerializationException("Unable to deserialize Moreover data", e);
+ }
+ }
+
+ private JAXBContext createContext(Class articleClass) {
+ JAXBContext context;
+ try {
+ context = JAXBContext.newInstance(articleClass.getPackage().getName(), ObjectFactory.class.getClassLoader());
+ } catch (JAXBException e) {
+ throw new IllegalStateException("Unable to create JAXB Context for Moreover data", e);
+ }
+ return context;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverXmlActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverXmlActivitySerializer.java b/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverXmlActivitySerializer.java
deleted file mode 100644
index d60bcb8..0000000
--- a/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverXmlActivitySerializer.java
+++ /dev/null
@@ -1,105 +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.moreover.api.Article;
-import com.moreover.api.ArticlesResponse;
-import com.moreover.api.ObjectFactory;
-import org.apache.commons.lang.SerializationException;
-import org.apache.streams.data.util.MoreoverUtils;
-import org.apache.streams.pojo.json.Activity;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
-import java.io.StringReader;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * Deserializes the Moreover Article XML and converts it to an instance of {@link Activity}
- */
-public class MoreoverXmlActivitySerializer implements ActivitySerializer<String> {
-
- //JAXBContext is threadsafe (supposedly)
- private final JAXBContext articleContext;
- private final JAXBContext articlesContext;
-
- public MoreoverXmlActivitySerializer() {
- articleContext = createContext(Article.class);
- articlesContext = createContext(ArticlesResponse.class);
- }
-
- @Override
- public String serializationFormat() {
- return "application/xml+vnd.moreover.com.v1";
- }
-
- @Override
- public String serialize(Activity deserialized) {
- throw new UnsupportedOperationException("Cannot currently serialize to Moreover");
- }
-
- @Override
- public Activity deserialize(String serialized) {
- Article article = deserializeMoreover(serialized);
- return MoreoverUtils.convert(article);
- }
-
- @Override
- public List<Activity> deserializeAll(List<String> serializedList) {
- List<Activity> activities = new LinkedList<Activity>();
- for(String item : serializedList) {
- ArticlesResponse response = deserializeMoreoverResponse(item);
- for(Article article : response.getArticles().getArticle()) {
- activities.add(MoreoverUtils.convert(article));
- }
- }
- return activities;
- }
-
- private Article deserializeMoreover(String serialized){
- try {
- Unmarshaller unmarshaller = articleContext.createUnmarshaller();
- return (Article) unmarshaller.unmarshal(new StringReader(serialized));
- } catch (JAXBException e) {
- throw new SerializationException("Unable to deserialize Moreover data", e);
- }
- }
-
- private ArticlesResponse deserializeMoreoverResponse(String serialized){
- try {
- Unmarshaller unmarshaller = articlesContext.createUnmarshaller();
- return ((JAXBElement<ArticlesResponse>) unmarshaller.unmarshal(new StringReader(serialized))).getValue();
- } catch (JAXBException e) {
- throw new SerializationException("Unable to deserialize Moreover data", e);
- }
- }
-
- private JAXBContext createContext(Class articleClass) {
- JAXBContext context;
- try {
- context = JAXBContext.newInstance(articleClass.getPackage().getName(), ObjectFactory.class.getClassLoader());
- } catch (JAXBException e) {
- throw new IllegalStateException("Unable to create JAXB Context for Moreover data", e);
- }
- return context;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverJsonActivityConverterTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverJsonActivityConverterTest.java b/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverJsonActivityConverterTest.java
new file mode 100644
index 0000000..a9e8e3a
--- /dev/null
+++ b/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverJsonActivityConverterTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.streams.data.util.JsonUtil;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.IOException;
+
+import static org.apache.streams.data.util.MoreoverTestUtil.test;
+import static org.junit.Assert.assertThat;
+
+public class MoreoverJsonActivityConverterTest {
+ JsonNode json;
+ ActivityConverter serializer = new MoreoverJsonActivityConverter();
+ ObjectMapper mapper;
+
+ @Before
+ public void setup() throws IOException {
+ json = JsonUtil.getFromFile("classpath:org/apache/streams/data/moreover.json");
+
+ 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);
+ }
+
+ @Test
+ public void loadData() throws Exception {
+ for (JsonNode item : json) {
+ test(serializer.deserialize(getString(item)));
+ }
+ }
+
+
+ private String getString(JsonNode jsonNode) {
+ try {
+ return new ObjectMapper().writeValueAsString(jsonNode);
+ } catch (JsonProcessingException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverJsonActivitySerializerTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverJsonActivitySerializerTest.java b/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverJsonActivitySerializerTest.java
deleted file mode 100644
index f5d66b1..0000000
--- a/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverJsonActivitySerializerTest.java
+++ /dev/null
@@ -1,72 +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.core.JsonFactory;
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.streams.data.util.JsonUtil;
-import org.apache.streams.pojo.json.Activity;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.util.*;
-import java.util.regex.Pattern;
-
-import static java.util.regex.Pattern.matches;
-import static org.apache.streams.data.util.MoreoverTestUtil.test;
-import static org.hamcrest.CoreMatchers.*;
-import static org.junit.Assert.assertThat;
-
-public class MoreoverJsonActivitySerializerTest {
- JsonNode json;
- ActivitySerializer serializer = new MoreoverJsonActivitySerializer();
- ObjectMapper mapper;
-
- @Before
- public void setup() throws IOException {
- json = JsonUtil.getFromFile("classpath:org/apache/streams/data/moreover.json");
-
- 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);
- }
-
- @Test
- public void loadData() throws Exception {
- for (JsonNode item : json) {
- test(serializer.deserialize(getString(item)));
- }
- }
-
-
- private String getString(JsonNode jsonNode) {
- try {
- return new ObjectMapper().writeValueAsString(jsonNode);
- } catch (JsonProcessingException e) {
- throw new RuntimeException(e);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverXmlActivityConverterTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverXmlActivityConverterTest.java b/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverXmlActivityConverterTest.java
new file mode 100644
index 0000000..9834032
--- /dev/null
+++ b/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverXmlActivityConverterTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.google.common.collect.Lists;
+import org.apache.commons.io.IOUtils;
+import org.apache.streams.pojo.json.Activity;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.nio.charset.Charset;
+import java.util.List;
+
+import static org.apache.streams.data.util.MoreoverTestUtil.test;
+
+public class MoreoverXmlActivityConverterTest {
+ ActivityConverter serializer;
+ private String xml;
+
+ @Before
+ public void setup() throws IOException {
+ serializer = new MoreoverXmlActivityConverter();
+ xml = loadXml();
+ }
+
+ @Test
+ public void loadData() throws Exception {
+ List<Activity> activities = serializer.deserializeAll(Lists.newArrayList(xml));
+ for (Activity activity : activities) {
+ test(activity);
+ }
+ }
+
+ private String loadXml() throws IOException {
+ StringWriter writer = new StringWriter();
+ InputStream resourceAsStream = this.getClass().getResourceAsStream("moreover.xml");
+ IOUtils.copy(resourceAsStream, writer, Charset.forName("UTF-8"));
+ return writer.toString();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverXmlActivitySerializerTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverXmlActivitySerializerTest.java b/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverXmlActivitySerializerTest.java
deleted file mode 100644
index dbebee2..0000000
--- a/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverXmlActivitySerializerTest.java
+++ /dev/null
@@ -1,61 +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.google.common.collect.Lists;
-import org.apache.commons.io.IOUtils;
-import org.apache.streams.pojo.json.Activity;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringWriter;
-import java.nio.charset.Charset;
-import java.util.List;
-
-import static org.apache.streams.data.util.MoreoverTestUtil.test;
-
-public class MoreoverXmlActivitySerializerTest {
- ActivitySerializer serializer;
- private String xml;
-
- @Before
- public void setup() throws IOException {
- serializer = new MoreoverXmlActivitySerializer();
- xml = loadXml();
- }
-
- @Test
- public void loadData() throws Exception {
- List<Activity> activities = serializer.deserializeAll(Lists.newArrayList(xml));
- for (Activity activity : activities) {
- test(activity);
- }
- }
-
- private String loadXml() throws IOException {
- StringWriter writer = new StringWriter();
- InputStream resourceAsStream = this.getClass().getResourceAsStream("moreover.xml");
- IOUtils.copy(resourceAsStream, writer, Charset.forName("UTF-8"));
- return writer.toString();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/processor/RssTypeConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/processor/RssTypeConverter.java b/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/processor/RssTypeConverter.java
index 339b922..2c86fa0 100644
--- a/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/processor/RssTypeConverter.java
+++ b/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/processor/RssTypeConverter.java
@@ -24,7 +24,7 @@ import org.apache.commons.lang.NotImplementedException;
import org.apache.streams.core.StreamsDatum;
import org.apache.streams.core.StreamsProcessor;
import org.apache.streams.pojo.json.Activity;
-import org.apache.streams.rss.serializer.SyndEntryActivitySerializer;
+import org.apache.streams.rss.serializer.SyndEntryActivityConverter;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.slf4j.Logger;
@@ -39,7 +39,7 @@ public class RssTypeConverter implements StreamsProcessor{
private static final Logger LOGGER = LoggerFactory.getLogger(RssTypeConverter.class);
- private SyndEntryActivitySerializer serializer;
+ private SyndEntryActivityConverter serializer;
private int successCount = 0;
private int failCount = 0;
@@ -62,7 +62,7 @@ public class RssTypeConverter implements StreamsProcessor{
@Override
public void prepare(Object o) {
- this.serializer = new SyndEntryActivitySerializer();
+ this.serializer = new SyndEntryActivityConverter();
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/provider/RssEventProcessor.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/provider/RssEventProcessor.java b/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/provider/RssEventProcessor.java
index 75d275d..347f593 100644
--- a/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/provider/RssEventProcessor.java
+++ b/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/provider/RssEventProcessor.java
@@ -19,11 +19,10 @@
package org.apache.streams.rss.provider;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
import com.sun.syndication.feed.synd.SyndEntry;
import org.apache.streams.core.StreamsDatum;
import org.apache.streams.pojo.json.Activity;
-import org.apache.streams.rss.serializer.SyndEntryActivitySerializer;
+import org.apache.streams.rss.serializer.SyndEntryActivityConverter;
import org.apache.streams.rss.serializer.SyndEntrySerializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -43,7 +42,7 @@ public class RssEventProcessor implements Runnable {
private Class inClass;
private Class outClass;
- private SyndEntryActivitySerializer syndEntryActivitySerializer = new SyndEntryActivitySerializer();
+ private SyndEntryActivityConverter syndEntryActivitySerializer = new SyndEntryActivityConverter();
private SyndEntrySerializer syndEntrySerializer = new SyndEntrySerializer();
public final static String TERMINATE = new String("TERMINATE");
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/serializer/SyndEntryActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/serializer/SyndEntryActivityConverter.java b/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/serializer/SyndEntryActivityConverter.java
new file mode 100644
index 0000000..9801c30
--- /dev/null
+++ b/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/serializer/SyndEntryActivityConverter.java
@@ -0,0 +1,232 @@
+/*
+ * 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.rss.serializer;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.JsonNodeFactory;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.data.util.RFC3339Utils;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.apache.streams.pojo.json.*;
+import org.joda.time.DateTime;
+import org.joda.time.DateTimeZone;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+public class SyndEntryActivityConverter implements ActivityConverter<ObjectNode> {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(SyndEntryActivityConverter.class);
+
+ private boolean includeRomeExtension;
+
+ public SyndEntryActivityConverter() {
+ this(true);
+ }
+
+ public SyndEntryActivityConverter(boolean includeRomeExtension) {
+ this.includeRomeExtension = includeRomeExtension;
+ }
+
+
+ @Override
+ public List<Activity> deserializeAll(List<ObjectNode> objectNodes) {
+ List<Activity> result = Lists.newLinkedList();
+ for (ObjectNode node : objectNodes) {
+ result.add(deserialize(node));
+ }
+ return result;
+ }
+
+ @Override
+ public String serializationFormat() {
+ return "application/streams-provider-rss";
+ }
+
+ @Override
+ public ObjectNode serialize(Activity deserialized) {
+ throw new UnsupportedOperationException("Cannot currently serialize to Rome");
+ }
+
+ @Override
+ public Activity deserialize(ObjectNode syndEntry) {
+ return deserializeWithRomeExtension(syndEntry, this.includeRomeExtension);
+ }
+
+ public Activity deserializeWithRomeExtension(ObjectNode entry, boolean withExtension) {
+ Preconditions.checkNotNull(entry);
+
+ Activity activity = new Activity();
+ Provider provider = buildProvider(entry);
+ Actor actor = buildActor(entry);
+ ActivityObject activityObject = buildActivityObject(entry);
+
+ activityObject.setUrl(provider.getUrl());
+ activityObject.setAuthor(actor.getAuthor());
+
+ activity.setUrl(provider.getUrl());
+ activity.setProvider(provider);
+ activity.setActor(actor);
+ activity.setVerb("post");
+ activity.setId("id:rss:post:" + activity.getUrl());
+
+ JsonNode published = entry.get("publishedDate");
+ if (published != null) {
+ try {
+ activity.setPublished(RFC3339Utils.parseToUTC(published.textValue()));
+ } catch (Exception e) {
+ LOGGER.warn("Failed to parse date : {}", published.textValue());
+
+ DateTime now = DateTime.now().withZone(DateTimeZone.UTC);
+ activity.setPublished(now);
+ }
+ }
+
+ activity.setUpdated(activityObject.getUpdated());
+ activity.setObject(activityObject);
+
+ if (withExtension) {
+ activity = addRomeExtension(activity, entry);
+ }
+
+ return activity;
+ }
+
+ /**
+ * Given an RSS entry, extra out the author and actor information and return it
+ * in an actor object
+ *
+ * @param entry
+ * @return
+ */
+ private Actor buildActor(ObjectNode entry) {
+ Author author = new Author();
+ Actor actor = new Actor();
+
+ if (entry.get("author") != null) {
+ author.setId(entry.get("author").textValue());
+ author.setDisplayName(entry.get("author").textValue());
+
+ actor.setAuthor(author);
+ String uriToSet = entry.get("rssFeed") != null ? entry.get("rssFeed").asText() : null;
+
+ actor.setId("id:rss:" + uriToSet + ":" + author.getId());
+ actor.setDisplayName(author.getDisplayName());
+ }
+
+ return actor;
+ }
+
+ /**
+ * Given an RSS object, build the ActivityObject
+ *
+ * @param entry
+ * @return
+ */
+ private ActivityObject buildActivityObject(ObjectNode entry) {
+ ActivityObject activityObject = new ActivityObject();
+
+ JsonNode summary = entry.get("description");
+ if (summary != null)
+ activityObject.setSummary(summary.textValue());
+ else if((summary = entry.get("title")) != null) {
+ activityObject.setSummary(summary.textValue());
+ }
+
+ return activityObject;
+ }
+
+ /**
+ * Given an RSS object, build and return the Provider object
+ *
+ * @param entry
+ * @return
+ */
+ private Provider buildProvider(ObjectNode entry) {
+ Provider provider = new Provider();
+
+ String link = null;
+ String uri = null;
+ String resourceLocation = null;
+
+ if (entry.get("link") != null)
+ link = entry.get("link").textValue();
+ if (entry.get("uri") != null)
+ uri = entry.get("uri").textValue();
+
+ /**
+ * Order of precedence for resourceLocation selection
+ *
+ * 1. Valid URI
+ * 2. Valid Link
+ * 3. Non-null URI
+ * 4. Non-null Link
+ */
+ if(isValidResource(uri))
+ resourceLocation = uri;
+ else if(isValidResource(link))
+ resourceLocation = link;
+ else if(uri != null || link != null) {
+ resourceLocation = (uri != null) ? uri : link;
+ }
+
+ provider.setId("id:providers:rss");
+ provider.setUrl(resourceLocation);
+ provider.setDisplayName("RSS");
+
+ return provider;
+ }
+
+ /**
+ * Tests whether or not the passed in resource is a valid URI
+ * @param resource
+ * @return boolean of whether or not the resource is valid
+ */
+ private boolean isValidResource(String resource) {
+ if(resource != null && resource.startsWith("http") || resource.startsWith("www"))
+ return true;
+ return false;
+ }
+
+ /**
+ * Given an RSS object and an existing activity,
+ * add the Rome extension to that activity and return it
+ *
+ * @param activity
+ * @param entry
+ * @return
+ */
+ private Activity addRomeExtension(Activity activity, ObjectNode entry) {
+ ObjectMapper mapper = new StreamsJacksonMapper();
+ ObjectNode activityRoot = mapper.convertValue(activity, ObjectNode.class);
+ ObjectNode extensions = JsonNodeFactory.instance.objectNode();
+
+ extensions.put("rome", entry);
+ activityRoot.put("extensions", extensions);
+
+ activity = mapper.convertValue(activityRoot, Activity.class);
+
+ return activity;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/serializer/SyndEntryActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/serializer/SyndEntryActivitySerializer.java b/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/serializer/SyndEntryActivitySerializer.java
deleted file mode 100644
index 06839f3..0000000
--- a/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/serializer/SyndEntryActivitySerializer.java
+++ /dev/null
@@ -1,235 +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.rss.serializer;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.JsonNodeFactory;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.data.util.RFC3339Utils;
-import org.apache.streams.jackson.StreamsJacksonMapper;
-import org.apache.streams.pojo.json.*;
-import org.joda.time.DateTime;
-import org.joda.time.DateTimeZone;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
-import java.util.Map;
-
-import static org.apache.streams.data.util.ActivityUtil.ensureExtensions;
-
-public class SyndEntryActivitySerializer implements ActivitySerializer<ObjectNode> {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(SyndEntryActivitySerializer.class);
-
- private boolean includeRomeExtension;
-
- public SyndEntryActivitySerializer() {
- this(true);
- }
-
- public SyndEntryActivitySerializer(boolean includeRomeExtension) {
- this.includeRomeExtension = includeRomeExtension;
- }
-
-
- @Override
- public List<Activity> deserializeAll(List<ObjectNode> objectNodes) {
- List<Activity> result = Lists.newLinkedList();
- for (ObjectNode node : objectNodes) {
- result.add(deserialize(node));
- }
- return result;
- }
-
- @Override
- public String serializationFormat() {
- return "application/streams-provider-rss";
- }
-
- @Override
- public ObjectNode serialize(Activity deserialized) {
- throw new UnsupportedOperationException("Cannot currently serialize to Rome");
- }
-
- @Override
- public Activity deserialize(ObjectNode syndEntry) {
- return deserializeWithRomeExtension(syndEntry, this.includeRomeExtension);
- }
-
- public Activity deserializeWithRomeExtension(ObjectNode entry, boolean withExtension) {
- Preconditions.checkNotNull(entry);
-
- Activity activity = new Activity();
- Provider provider = buildProvider(entry);
- Actor actor = buildActor(entry);
- ActivityObject activityObject = buildActivityObject(entry);
-
- activityObject.setUrl(provider.getUrl());
- activityObject.setAuthor(actor.getAuthor());
-
- activity.setUrl(provider.getUrl());
- activity.setProvider(provider);
- activity.setActor(actor);
- activity.setVerb("post");
- activity.setId("id:rss:post:" + activity.getUrl());
-
- JsonNode published = entry.get("publishedDate");
- if (published != null) {
- try {
- activity.setPublished(RFC3339Utils.parseToUTC(published.textValue()));
- } catch (Exception e) {
- LOGGER.warn("Failed to parse date : {}", published.textValue());
-
- DateTime now = DateTime.now().withZone(DateTimeZone.UTC);
- activity.setPublished(now);
- }
- }
-
- activity.setUpdated(activityObject.getUpdated());
- activity.setObject(activityObject);
-
- if (withExtension) {
- activity = addRomeExtension(activity, entry);
- }
-
- return activity;
- }
-
- /**
- * Given an RSS entry, extra out the author and actor information and return it
- * in an actor object
- *
- * @param entry
- * @return
- */
- private Actor buildActor(ObjectNode entry) {
- Author author = new Author();
- Actor actor = new Actor();
-
- if (entry.get("author") != null) {
- author.setId(entry.get("author").textValue());
- author.setDisplayName(entry.get("author").textValue());
-
- actor.setAuthor(author);
- String uriToSet = entry.get("rssFeed") != null ? entry.get("rssFeed").asText() : null;
-
- actor.setId("id:rss:" + uriToSet + ":" + author.getId());
- actor.setDisplayName(author.getDisplayName());
- }
-
- return actor;
- }
-
- /**
- * Given an RSS object, build the ActivityObject
- *
- * @param entry
- * @return
- */
- private ActivityObject buildActivityObject(ObjectNode entry) {
- ActivityObject activityObject = new ActivityObject();
-
- JsonNode summary = entry.get("description");
- if (summary != null)
- activityObject.setSummary(summary.textValue());
- else if((summary = entry.get("title")) != null) {
- activityObject.setSummary(summary.textValue());
- }
-
- return activityObject;
- }
-
- /**
- * Given an RSS object, build and return the Provider object
- *
- * @param entry
- * @return
- */
- private Provider buildProvider(ObjectNode entry) {
- Provider provider = new Provider();
-
- String link = null;
- String uri = null;
- String resourceLocation = null;
-
- if (entry.get("link") != null)
- link = entry.get("link").textValue();
- if (entry.get("uri") != null)
- uri = entry.get("uri").textValue();
-
- /**
- * Order of precedence for resourceLocation selection
- *
- * 1. Valid URI
- * 2. Valid Link
- * 3. Non-null URI
- * 4. Non-null Link
- */
- if(isValidResource(uri))
- resourceLocation = uri;
- else if(isValidResource(link))
- resourceLocation = link;
- else if(uri != null || link != null) {
- resourceLocation = (uri != null) ? uri : link;
- }
-
- provider.setId("id:providers:rss");
- provider.setUrl(resourceLocation);
- provider.setDisplayName("RSS");
-
- return provider;
- }
-
- /**
- * Tests whether or not the passed in resource is a valid URI
- * @param resource
- * @return boolean of whether or not the resource is valid
- */
- private boolean isValidResource(String resource) {
- if(resource != null && resource.startsWith("http") || resource.startsWith("www"))
- return true;
- return false;
- }
-
- /**
- * Given an RSS object and an existing activity,
- * add the Rome extension to that activity and return it
- *
- * @param activity
- * @param entry
- * @return
- */
- private Activity addRomeExtension(Activity activity, ObjectNode entry) {
- ObjectMapper mapper = new StreamsJacksonMapper();
- ObjectNode activityRoot = mapper.convertValue(activity, ObjectNode.class);
- ObjectNode extensions = JsonNodeFactory.instance.objectNode();
-
- extensions.put("rome", entry);
- activityRoot.put("extensions", extensions);
-
- activity = mapper.convertValue(activityRoot, Activity.class);
-
- return activity;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-rss/src/test/java/org/apache/streams/rss/test/SyndEntryActivitySerizlizerTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-rss/src/test/java/org/apache/streams/rss/test/SyndEntryActivitySerizlizerTest.java b/streams-contrib/streams-provider-rss/src/test/java/org/apache/streams/rss/test/SyndEntryActivitySerizlizerTest.java
index fd9a996..446f998 100644
--- a/streams-contrib/streams-provider-rss/src/test/java/org/apache/streams/rss/test/SyndEntryActivitySerizlizerTest.java
+++ b/streams-contrib/streams-provider-rss/src/test/java/org/apache/streams/rss/test/SyndEntryActivitySerizlizerTest.java
@@ -26,7 +26,7 @@ import org.apache.streams.pojo.json.Activity;
import org.apache.streams.pojo.json.Actor;
import org.apache.streams.pojo.json.Author;
import org.apache.streams.pojo.json.Provider;
-import org.apache.streams.rss.serializer.SyndEntryActivitySerializer;
+import org.apache.streams.rss.serializer.SyndEntryActivityConverter;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.junit.Test;
@@ -49,7 +49,7 @@ public class SyndEntryActivitySerizlizerTest {
List<Activity> activities = Lists.newLinkedList();
List<ObjectNode> objects = Lists.newLinkedList();
- SyndEntryActivitySerializer serializer = new SyndEntryActivitySerializer();
+ SyndEntryActivityConverter serializer = new SyndEntryActivityConverter();
while(scanner.hasNext()) {
String line = scanner.nextLine();
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/pom.xml
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/pom.xml b/streams-contrib/streams-provider-twitter/pom.xml
index 3880135..1c0e8cb 100644
--- a/streams-contrib/streams-provider-twitter/pom.xml
+++ b/streams-contrib/streams-provider-twitter/pom.xml
@@ -50,9 +50,8 @@
</dependency>
<dependency>
<groupId>org.apache.streams</groupId>
- <artifactId>streams-processor-jackson</artifactId>
+ <artifactId>streams-converters</artifactId>
<version>${project.version}</version>
- <scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.streams</groupId>
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/processor/FetchAndReplaceTwitterProcessor.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/processor/FetchAndReplaceTwitterProcessor.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/processor/FetchAndReplaceTwitterProcessor.java
index 4ca73df..5ad811d 100644
--- a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/processor/FetchAndReplaceTwitterProcessor.java
+++ b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/processor/FetchAndReplaceTwitterProcessor.java
@@ -31,7 +31,7 @@ import org.apache.streams.twitter.pojo.Delete;
import org.apache.streams.twitter.pojo.Retweet;
import org.apache.streams.twitter.pojo.Tweet;
import org.apache.streams.twitter.provider.TwitterConfigurator;
-import org.apache.streams.twitter.provider.TwitterEventClassifier;
+import org.apache.streams.twitter.serializer.TwitterDocumentClassifier;
import org.apache.streams.twitter.serializer.StreamsTwitterMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -111,7 +111,7 @@ public class FetchAndReplaceTwitterProcessor implements StreamsProcessor {
}
protected void replace(Activity doc, String json) throws java.io.IOException, ActivitySerializerException {
- Class documentSubType = TwitterEventClassifier.detectClass(json);
+ Class documentSubType = TwitterDocumentClassifier.getInstance().detectClass(json);
Object object = mapper.readValue(json, documentSubType);
if(documentSubType.equals(Retweet.class) || documentSubType.equals(Tweet.class)) {
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/processor/TwitterProfileProcessor.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/processor/TwitterProfileProcessor.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/processor/TwitterProfileProcessor.java
index 674eef1..bffdef0 100644
--- a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/processor/TwitterProfileProcessor.java
+++ b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/processor/TwitterProfileProcessor.java
@@ -26,7 +26,7 @@ import org.apache.streams.core.StreamsProcessor;
import org.apache.streams.twitter.pojo.Retweet;
import org.apache.streams.twitter.pojo.Tweet;
import org.apache.streams.twitter.pojo.User;
-import org.apache.streams.twitter.provider.TwitterEventClassifier;
+import org.apache.streams.twitter.serializer.TwitterDocumentClassifier;
import org.apache.streams.twitter.serializer.StreamsTwitterMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -90,7 +90,7 @@ public class TwitterProfileProcessor implements StreamsProcessor, Runnable {
item = mapper.writeValueAsString((ObjectNode)entry.getDocument());
}
- Class inClass = TwitterEventClassifier.detectClass(item);
+ Class inClass = TwitterDocumentClassifier.getInstance().detectClass(item);
User user;
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/TwitterEventClassifier.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/TwitterEventClassifier.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/TwitterEventClassifier.java
deleted file mode 100644
index 2234739..0000000
--- a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/TwitterEventClassifier.java
+++ /dev/null
@@ -1,99 +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.twitter.provider;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
-import org.apache.commons.lang.StringUtils;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.jackson.StreamsJacksonMapper;
-import org.apache.streams.twitter.pojo.*;
-import org.apache.streams.twitter.serializer.StreamsTwitterMapper;
-import org.apache.streams.twitter.serializer.TwitterJsonDeleteActivitySerializer;
-import org.apache.streams.twitter.serializer.TwitterJsonRetweetActivitySerializer;
-import org.apache.streams.twitter.serializer.TwitterJsonTweetActivitySerializer;
-import org.apache.streams.twitter.serializer.TwitterJsonUserActivitySerializer;
-import org.apache.streams.twitter.serializer.TwitterJsonUserstreameventActivitySerializer;
-
-import java.io.IOException;
-import java.io.Serializable;
-
-/**
- * Created by sblackmon on 12/13/13.
- */
-public class TwitterEventClassifier implements Serializable {
-
- private static ObjectMapper mapper = new StreamsJacksonMapper(Lists.newArrayList(StreamsTwitterMapper.TWITTER_FORMAT));
-
- public static Class detectClass( String json ) {
- Preconditions.checkNotNull(json);
- Preconditions.checkArgument(StringUtils.isNotEmpty(json));
-
- ObjectNode objectNode;
- try {
- objectNode = (ObjectNode) mapper.readTree(json);
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
-
- if( objectNode.findValue("retweeted_status") != null && objectNode.get("retweeted_status") != null)
- return Retweet.class;
- else if( objectNode.findValue("delete") != null )
- return Delete.class;
- else if( objectNode.findValue("friends") != null ||
- objectNode.findValue("friends_str") != null )
- return FriendList.class;
- else if( objectNode.findValue("target_object") != null )
- return UserstreamEvent.class;
- else if ( objectNode.findValue("location") != null && objectNode.findValue("user") == null)
- return User.class;
- else
- return Tweet.class;
- }
- public static ActivitySerializer bestSerializer( String json ) {
-
- Preconditions.checkNotNull(json);
- Preconditions.checkArgument(StringUtils.isNotEmpty(json));
-
- ObjectNode objectNode;
- try {
- objectNode = (ObjectNode) mapper.readTree(json);
- } catch (IOException e) {
- e.printStackTrace();
- return null;
- }
-
- if( objectNode.findValue("retweeted_status") != null && objectNode.get("retweeted_status") != null)
- return TwitterJsonRetweetActivitySerializer.getInstance();
- else if( objectNode.findValue("delete") != null )
- return TwitterJsonDeleteActivitySerializer.getInstance();
-// else if( objectNode.findValue("friends") != null ||
-// objectNode.findValue("friends_str") != null )
-// return FriendList.class;
- else if( objectNode.findValue("target_object") != null )
- return TwitterJsonUserstreameventActivitySerializer.getInstance();
- else if ( objectNode.findValue("location") != null && objectNode.findValue("user") == null)
- return TwitterJsonUserActivitySerializer.getInstance();
- else
- return TwitterJsonTweetActivitySerializer.getInstance();
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/TwitterUserInformationProvider.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/TwitterUserInformationProvider.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/TwitterUserInformationProvider.java
index bd67765..45bd071 100644
--- a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/TwitterUserInformationProvider.java
+++ b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/provider/TwitterUserInformationProvider.java
@@ -22,6 +22,7 @@ import com.google.common.base.Preconditions;
import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.common.util.concurrent.MoreExecutors;
import com.typesafe.config.Config;
+import org.apache.commons.lang.NotImplementedException;
import org.apache.streams.config.StreamsConfigurator;
import org.apache.streams.core.StreamsDatum;
import org.apache.streams.core.StreamsProvider;
@@ -31,7 +32,6 @@ import org.apache.streams.util.ComponentUtils;
import org.joda.time.DateTime;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterConverterResolver.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterConverterResolver.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterConverterResolver.java
new file mode 100644
index 0000000..f14c9f5
--- /dev/null
+++ b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterConverterResolver.java
@@ -0,0 +1,72 @@
+/*
+ * 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.twitter.serializer;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+import org.apache.commons.lang.StringUtils;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.data.ActivityConverterResolver;
+import org.apache.streams.data.DocumentClassifier;
+import org.apache.streams.exceptions.ActivitySerializerException;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.apache.streams.twitter.pojo.Delete;
+import org.apache.streams.twitter.pojo.FriendList;
+import org.apache.streams.twitter.pojo.Retweet;
+import org.apache.streams.twitter.pojo.Tweet;
+import org.apache.streams.twitter.pojo.User;
+import org.apache.streams.twitter.pojo.UserstreamEvent;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+/**
+ * Created by sblackmon on 12/13/13.
+ */
+public class TwitterConverterResolver implements ActivityConverterResolver {
+
+ public TwitterConverterResolver() {
+
+ }
+
+ private static TwitterConverterResolver instance = new TwitterConverterResolver();
+
+ public static TwitterConverterResolver getInstance() {
+ return instance;
+ }
+
+ private static ObjectMapper mapper = new StreamsJacksonMapper(StreamsTwitterMapper.TWITTER_FORMAT);
+
+ @Override
+ public Class bestSerializer(Class documentClass) throws ActivitySerializerException {
+
+ if (documentClass == Retweet.class)
+ return TwitterJsonRetweetActivityConverter.class;
+ else if (documentClass == Delete.class)
+ return TwitterJsonDeleteActivityConverter.class;
+ else if (documentClass == User.class)
+ return TwitterJsonUserActivityConverter.class;
+ else if (documentClass == UserstreamEvent.class)
+ return TwitterJsonUserstreameventActivityConverter.class;
+ else return TwitterJsonTweetActivityConverter.class;
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterDocumentClassifier.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterDocumentClassifier.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterDocumentClassifier.java
new file mode 100644
index 0000000..b9ca789
--- /dev/null
+++ b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterDocumentClassifier.java
@@ -0,0 +1,82 @@
+/*
+ * 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.twitter.serializer;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+import org.apache.commons.lang.StringUtils;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.data.DocumentClassifier;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.apache.streams.twitter.pojo.*;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+/**
+ * Created by sblackmon on 12/13/13.
+ */
+public class TwitterDocumentClassifier implements DocumentClassifier {
+
+ public TwitterDocumentClassifier() {
+
+ }
+
+ private static TwitterDocumentClassifier instance = new TwitterDocumentClassifier();
+
+ public static TwitterDocumentClassifier getInstance() {
+ return instance;
+ }
+
+ private static ObjectMapper mapper = new StreamsJacksonMapper(Lists.newArrayList(StreamsTwitterMapper.TWITTER_FORMAT));
+
+ 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) mapper.readTree(json);
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+
+ if( objectNode.findValue("retweeted_status") != null && objectNode.get("retweeted_status") != null)
+ return Retweet.class;
+ else if( objectNode.findValue("delete") != null )
+ return Delete.class;
+ else if( objectNode.findValue("friends") != null ||
+ objectNode.findValue("friends_str") != null )
+ return FriendList.class;
+ else if( objectNode.findValue("target_object") != null )
+ return UserstreamEvent.class;
+ else if ( objectNode.findValue("location") != null && objectNode.findValue("user") == null)
+ return User.class;
+ else
+ return Tweet.class;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonActivityConverter.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonActivityConverter.java
new file mode 100644
index 0000000..3e123b6
--- /dev/null
+++ b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonActivityConverter.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.streams.twitter.serializer;
+
+import org.apache.commons.lang.NotImplementedException;
+import org.apache.streams.converter.TypeConverterUtil;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.data.ActivityConverterFactory;
+import org.apache.streams.exceptions.ActivitySerializerException;
+import org.apache.streams.pojo.json.Activity;
+
+import java.util.List;
+import java.io.Serializable;
+
+/*
+ * Now that we have ActivityConverterProcessor, this shouldn't be neededß
+ */
+@Deprecated
+public class TwitterJsonActivityConverter implements ActivityConverter<String>, Serializable
+{
+
+ public TwitterJsonActivityConverter() {
+
+ }
+
+ private static TwitterJsonActivityConverter instance = new TwitterJsonActivityConverter();
+
+ public static TwitterJsonActivityConverter getInstance() {
+ return instance;
+ }
+
+ @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 {
+
+ Class converterClass = TwitterDocumentClassifier.getInstance().detectClass(serialized);
+
+ ActivityConverter converter = ActivityConverterFactory.getInstance(converterClass);
+
+ Object typedObject = TypeConverterUtil.convert(serialized, converterClass);
+
+ Activity activity = converter.deserialize(typedObject);
+
+ if( activity == null )
+ throw new ActivitySerializerException("unrecognized type");
+
+ 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-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonActivitySerializer.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonActivitySerializer.java
deleted file mode 100644
index d1f0de9..0000000
--- a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonActivitySerializer.java
+++ /dev/null
@@ -1,70 +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.twitter.serializer;
-
-import org.apache.commons.lang.NotImplementedException;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.exceptions.ActivitySerializerException;
-import org.apache.streams.pojo.json.Activity;
-import org.apache.streams.twitter.pojo.*;
-import org.apache.streams.twitter.provider.TwitterEventClassifier;
-
-import java.util.List;
-import java.io.Serializable;
-
-public class TwitterJsonActivitySerializer implements ActivitySerializer<String>, Serializable
-{
-
- public TwitterJsonActivitySerializer() {
-
- }
-
- private static TwitterJsonActivitySerializer instance = new TwitterJsonActivitySerializer();
-
- public static TwitterJsonActivitySerializer getInstance() {
- return instance;
- }
-
- @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 {
-
- ActivitySerializer serializer = TwitterEventClassifier.bestSerializer(serialized);
- Activity activity = serializer.deserialize(serialized);
-
- if( activity == null )
- throw new ActivitySerializerException("unrecognized type");
-
- 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-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonDeleteActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonDeleteActivityConverter.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonDeleteActivityConverter.java
new file mode 100644
index 0000000..8d8da28
--- /dev/null
+++ b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonDeleteActivityConverter.java
@@ -0,0 +1,84 @@
+/*
+ * 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.twitter.serializer;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.commons.lang.NotImplementedException;
+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.ActivityObject;
+import org.apache.streams.twitter.pojo.Delete;
+import org.apache.streams.twitter.pojo.Tweet;
+
+import java.io.Serializable;
+import java.util.List;
+
+import static org.apache.streams.twitter.serializer.util.TwitterActivityUtil.*;
+
+
+/**
+* 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 TwitterJsonDeleteActivityConverter implements ActivityConverter<Delete>, Serializable {
+
+ private static TwitterJsonDeleteActivityConverter instance = new TwitterJsonDeleteActivityConverter();
+
+ public static TwitterJsonDeleteActivityConverter getInstance() {
+ return instance;
+ }
+
+ @Override
+ public String serializationFormat() {
+ return null;
+ }
+
+ @Override
+ public Delete serialize(Activity deserialized) throws ActivitySerializerException {
+ throw new NotImplementedException();
+ }
+
+ @Override
+ public Activity deserialize(Delete serialized) throws ActivitySerializerException {
+ return null;
+ }
+
+ @Override
+ public List<Activity> deserializeAll(List<Delete> serializedList) {
+ return null;
+ }
+
+ public Activity convert(Delete delete) throws ActivitySerializerException {
+
+ Activity activity = new Activity();
+ updateActivity(delete, activity);
+ return activity;
+ }
+
+ public ActivityObject buildTarget(Tweet tweet) {
+ return null;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonDeleteActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonDeleteActivitySerializer.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonDeleteActivitySerializer.java
deleted file mode 100644
index b368f71..0000000
--- a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonDeleteActivitySerializer.java
+++ /dev/null
@@ -1,94 +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.twitter.serializer;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.base.Strings;
-import org.apache.commons.lang.NotImplementedException;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.exceptions.ActivitySerializerException;
-import org.apache.streams.pojo.json.Activity;
-import org.apache.streams.pojo.json.ActivityObject;
-import org.apache.streams.pojo.json.Actor;
-import org.apache.streams.twitter.pojo.Delete;
-import org.apache.streams.twitter.pojo.Tweet;
-
-import java.io.Serializable;
-import java.util.List;
-
-import static org.apache.streams.twitter.serializer.util.TwitterActivityUtil.*;
-
-
-/**
-* 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 TwitterJsonDeleteActivitySerializer implements ActivitySerializer<String>, Serializable {
-
- private static TwitterJsonDeleteActivitySerializer instance = new TwitterJsonDeleteActivitySerializer();
-
- public static TwitterJsonDeleteActivitySerializer getInstance() {
- return instance;
- }
-
- @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 {
- return null;
- }
-
- @Override
- public List<Activity> deserializeAll(List<String> serializedList) {
- return null;
- }
-
- public Activity convert(ObjectNode event) throws ActivitySerializerException {
-
- ObjectMapper mapper = StreamsTwitterMapper.getInstance();
- Delete delete = null;
- try {
- delete = mapper.treeToValue(event, Delete.class);
- } catch (JsonProcessingException e) {
- e.printStackTrace();
- }
-
- Activity activity = new Activity();
- updateActivity(delete, activity);
- return activity;
- }
-
- public ActivityObject buildTarget(Tweet tweet) {
- return null;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonRetweetActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonRetweetActivityConverter.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonRetweetActivityConverter.java
new file mode 100644
index 0000000..4b64932
--- /dev/null
+++ b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonRetweetActivityConverter.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.twitter.serializer;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Lists;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.exceptions.ActivitySerializerException;
+import org.apache.streams.pojo.json.Activity;
+import org.apache.streams.twitter.pojo.Retweet;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.List;
+
+import static org.apache.streams.twitter.serializer.util.TwitterActivityUtil.*;
+
+public class TwitterJsonRetweetActivityConverter implements ActivityConverter<Retweet>, Serializable {
+
+ public TwitterJsonRetweetActivityConverter() {
+
+ }
+
+ private static TwitterJsonRetweetActivityConverter instance = new TwitterJsonRetweetActivityConverter();
+
+ public static TwitterJsonRetweetActivityConverter getInstance() {
+ return instance;
+ }
+
+ @Override
+ public String serializationFormat() {
+ return null;
+ }
+
+ @Override
+ public Retweet serialize(Activity deserialized) throws ActivitySerializerException {
+ return null;
+ }
+
+ @Override
+ public Activity deserialize(Retweet retweet) throws ActivitySerializerException {
+
+ Activity activity = new Activity();
+ updateActivity(retweet, activity);
+
+ return activity;
+ }
+
+ @Override
+ public List<Activity> deserializeAll(List<Retweet> serializedList) {
+ List<Activity> result = Lists.newArrayList();
+ for( Retweet item : serializedList ) {
+ try {
+ Activity activity = deserialize(item);
+ result.add(activity);
+ } catch (ActivitySerializerException e) {}
+ }
+ return result;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonRetweetActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonRetweetActivitySerializer.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonRetweetActivitySerializer.java
deleted file mode 100644
index 58cb769..0000000
--- a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonRetweetActivitySerializer.java
+++ /dev/null
@@ -1,79 +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.twitter.serializer;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.exceptions.ActivitySerializerException;
-import org.apache.streams.pojo.json.Activity;
-import org.apache.streams.twitter.pojo.Retweet;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.List;
-
-import static org.apache.streams.twitter.serializer.util.TwitterActivityUtil.*;
-
-public class TwitterJsonRetweetActivitySerializer implements ActivitySerializer<String>, Serializable {
-
- public TwitterJsonRetweetActivitySerializer() {
-
- }
-
- private static TwitterJsonRetweetActivitySerializer instance = new TwitterJsonRetweetActivitySerializer();
-
- public static TwitterJsonRetweetActivitySerializer getInstance() {
- return instance;
- }
-
- @Override
- public String serializationFormat() {
- return null;
- }
-
- @Override
- public String serialize(Activity deserialized) throws ActivitySerializerException {
- return null;
- }
-
- @Override
- public Activity deserialize(String event) throws ActivitySerializerException {
-
- ObjectMapper mapper = StreamsTwitterMapper.getInstance();
- Retweet retweet = null;
- try {
- retweet = mapper.readValue(event, Retweet.class);
- } catch (JsonProcessingException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- Activity activity = new Activity();
- updateActivity(retweet, activity);
-
- return activity;
- }
-
- @Override
- public List<Activity> deserializeAll(List<String> serializedList) {
- return null;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonTweetActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonTweetActivityConverter.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonTweetActivityConverter.java
new file mode 100644
index 0000000..5cd1075
--- /dev/null
+++ b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonTweetActivityConverter.java
@@ -0,0 +1,76 @@
+/*
+ * 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.twitter.serializer;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Lists;
+import org.apache.commons.lang.NotImplementedException;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.exceptions.ActivitySerializerException;
+import org.apache.streams.pojo.json.Activity;
+import org.apache.streams.twitter.pojo.Tweet;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.List;
+
+import static org.apache.streams.twitter.serializer.util.TwitterActivityUtil.*;
+
+public class TwitterJsonTweetActivityConverter implements ActivityConverter<Tweet>, Serializable {
+
+ private static TwitterJsonTweetActivityConverter instance = new TwitterJsonTweetActivityConverter();
+
+ public static TwitterJsonTweetActivityConverter getInstance() {
+ return instance;
+ }
+
+ @Override
+ public String serializationFormat() {
+ return null;
+ }
+
+ @Override
+ public Tweet serialize(Activity deserialized) throws ActivitySerializerException {
+ throw new NotImplementedException();
+ }
+
+ @Override
+ public Activity deserialize(Tweet tweet) throws ActivitySerializerException {
+
+ Activity activity = new Activity();
+
+ updateActivity(tweet, activity);
+
+ return activity;
+ }
+
+ @Override
+ public List<Activity> deserializeAll(List<Tweet> serializedList) {
+ List<Activity> result = Lists.newArrayList();
+ for( Tweet item : serializedList ) {
+ try {
+ Activity activity = deserialize(item);
+ result.add(activity);
+ } catch (ActivitySerializerException e) {}
+ }
+ return result;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonTweetActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonTweetActivitySerializer.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonTweetActivitySerializer.java
deleted file mode 100644
index e6fc05f..0000000
--- a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonTweetActivitySerializer.java
+++ /dev/null
@@ -1,77 +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.twitter.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.pojo.json.Activity;
-import org.apache.streams.twitter.pojo.Tweet;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.List;
-
-import static org.apache.streams.twitter.serializer.util.TwitterActivityUtil.*;
-
-public class TwitterJsonTweetActivitySerializer implements ActivitySerializer<String>, Serializable {
-
- private static TwitterJsonTweetActivitySerializer instance = new TwitterJsonTweetActivitySerializer();
-
- public static TwitterJsonTweetActivitySerializer getInstance() {
- return instance;
- }
-
- @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 = StreamsTwitterMapper.getInstance();
- Tweet tweet = null;
- try {
- tweet = mapper.readValue(serialized, Tweet.class);
- } catch (JsonProcessingException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- Activity activity = new Activity();
-
- updateActivity(tweet, activity);
-
- return activity;
- }
-
- @Override
- public List<Activity> deserializeAll(List<String> serializedList) {
- return null;
- }
-}
[7/9] incubator-streams git commit: omni-bus update
Posted by sb...@apache.org.
omni-bus update
primarily addresses STREAMS-218 (Generic Activity Serializer Processor)
addresses STREAMS-68 (ActivitySerializer should be ActivityConverter) - was touching related classes anyway
some additional refactoring of class and method names is advisable but this is a big chunk
resolves STREAMS-219 (.gitignore files generated by maven plugins)
needed to knock this out to avoid committing these files along with other changes
Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/aad0e887
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/aad0e887
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/aad0e887
Branch: refs/heads/STREAMS-68,218
Commit: aad0e88742b9156e6e11d1bf06d23133ec6ec961
Parents: dc7ba80
Author: sblackmon <sb...@apache.org>
Authored: Thu Nov 13 17:08:21 2014 -0600
Committer: sblackmon <sb...@apache.org>
Committed: Thu Nov 13 17:08:21 2014 -0600
----------------------------------------------------------------------
.gitignore | 6 +
streams-components/pom.xml | 1 +
streams-components/streams-converters/pom.xml | 86 +++++
.../converter/ActivityConverterProcessor.java | 113 +++++++
.../BaseActivityConverterResolver.java | 28 ++
.../converter/BaseDocumentClassifier.java | 62 ++++
.../BaseObjectNodeActivityConverter.java | 61 ++++
.../converter/BaseStringActivityConverter.java | 61 ++++
.../CleanAdditionalPropertiesProcessor.java | 62 ++++
.../converter/TypeConverterProcessor.java | 84 +++++
.../streams/converter/TypeConverterUtil.java | 50 +++
.../test/ActivityConverterProcessorTest.java | 102 ++++++
.../test/TypeConverterProcessorTest.java | 93 ++++++
streams-contrib/pom.xml | 1 -
.../streams-processor-jackson/pom.xml | 86 -----
.../CleanAdditionalPropertiesProcessor.java | 62 ----
.../streams/jackson/TypeConverterProcessor.java | 112 -------
.../test/TypeConverterProcessorTest.java | 95 ------
.../streams-provider-datasift/pom.xml | 2 +-
.../DatasiftActivitySerializerProcessor.java | 9 +-
.../DatasiftTypeConverterProcessor.java | 8 +-
.../serializer/DatasiftActivityConverter.java | 77 +++++
.../serializer/DatasiftActivitySerializer.java | 65 ----
.../serializer/DatasiftConverterResolver.java | 55 ++++
.../serializer/DatasiftEventClassifier.java | 34 +-
.../DatasiftInstagramActivityConverter.java | 124 ++++++++
.../DatasiftInstagramActivitySerializer.java | 124 --------
.../DatasiftInteractionActivityConverter.java | 222 +++++++++++++
.../DatasiftInteractionActivitySerializer.java | 222 -------------
.../DatasiftTwitterActivityConverter.java | 272 ++++++++++++++++
.../DatasiftTwitterActivitySerializer.java | 272 ----------------
.../com/datasift/test/DatasiftSerDeTest.java | 2 +-
.../DatasiftActivityConverterTest.java | 85 +++++
.../DatasiftActivitySerializerTest.java | 86 -----
.../serializer/DatasiftEventClassifierTest.java | 23 +-
.../DatasiftInstagramActivityConverterTest.java | 35 +++
...DatasiftInstagramActivitySerializerTest.java | 43 ---
...atasiftInteractionActivityConverterTest.java | 40 +++
...tasiftInteractionActivitySerializerTest.java | 48 ---
.../DatasiftTwitterActivityConverterTest.java | 35 +++
.../DatasiftTwitterActivitySerializerTest.java | 43 ---
.../api/FacebookPageActivityConverter.java | 76 +++++
.../api/FacebookPageActivitySerializer.java | 66 ----
.../api/FacebookPostActivityConverter.java | 313 +++++++++++++++++++
.../api/FacebookPostActivitySerializer.java | 304 ------------------
.../processor/FacebookTypeConverter.java | 22 +-
.../provider/FacebookEventClassifier.java | 57 ----
.../serializer/FacebookConverterResolver.java | 62 ++++
.../serializer/FacebookDocumentClassifier.java | 75 +++++
.../FacebookStreamsPostConverter.java | 60 ++++
.../FacebookStreamsPostSerializer.java | 60 ----
.../test/FacebookActivityActorSerDeTest.java | 6 +-
.../test/FacebookActivitySerDeTest.java | 4 +-
.../test/FacebookDocumentClassifierTest.java | 57 ++++
.../test/FacebookEventClassifierTest.java | 57 ----
.../streams/facebook/test/SimplePageTest.java | 4 +-
.../com/gplus/api/GPlusActivityConverter.java | 93 ++++++
.../com/gplus/api/GPlusActivitySerializer.java | 93 ------
.../com/gplus/api/GPlusEDCAsActivityTest.java | 4 +-
.../com/reddit/api/RedditActivityConverter.java | 107 +++++++
.../reddit/api/RedditActivitySerializer.java | 107 -------
.../reddit/api/RedditEDCAsActivityJSONTest.java | 4 +-
.../ActivityXMLActivityConverter.java | 240 ++++++++++++++
.../ActivityXMLActivitySerializer.java | 240 --------------
.../powertrack/PowerTrackActivityConverter.java | 121 +++++++
.../PowerTrackActivitySerializer.java | 121 -------
.../test/PowerTrackDeserializationTest.java | 6 +-
.../gmail/provider/GMailImapProviderTask.java | 5 +-
.../provider/GMailMessageActivityConverter.java | 202 ++++++++++++
.../GMailMessageActivitySerializer.java | 212 -------------
.../gplus/provider/GPlusActivityConverter.java | 67 ++++
.../gplus/provider/GPlusActivitySerializer.java | 67 ----
.../gplus/provider/GPlusEventProcessor.java | 2 +-
.../processor/InstagramTypeConverter.java | 6 +-
.../InstagramJsonActivityConverter.java | 78 +++++
.../InstagramJsonActivitySerializer.java | 78 -----
.../serializer/InstagramUserInfoConverter.java | 81 +++++
.../serializer/InstagramUserInfoSerializer.java | 83 -----
.../data/MoreoverJsonActivityConverter.java | 93 ++++++
.../data/MoreoverJsonActivitySerializer.java | 93 ------
.../data/MoreoverXmlActivityConverter.java | 105 +++++++
.../data/MoreoverXmlActivitySerializer.java | 105 -------
.../data/MoreoverJsonActivityConverterTest.java | 65 ++++
.../MoreoverJsonActivitySerializerTest.java | 72 -----
.../data/MoreoverXmlActivityConverterTest.java | 61 ++++
.../data/MoreoverXmlActivitySerializerTest.java | 61 ----
.../streams/rss/processor/RssTypeConverter.java | 6 +-
.../streams/rss/provider/RssEventProcessor.java | 5 +-
.../serializer/SyndEntryActivityConverter.java | 232 ++++++++++++++
.../serializer/SyndEntryActivitySerializer.java | 235 --------------
.../test/SyndEntryActivitySerizlizerTest.java | 4 +-
.../streams-provider-twitter/pom.xml | 3 +-
.../FetchAndReplaceTwitterProcessor.java | 4 +-
.../processor/TwitterProfileProcessor.java | 4 +-
.../provider/TwitterEventClassifier.java | 99 ------
.../TwitterUserInformationProvider.java | 2 +-
.../serializer/TwitterConverterResolver.java | 72 +++++
.../serializer/TwitterDocumentClassifier.java | 82 +++++
.../TwitterJsonActivityConverter.java | 79 +++++
.../TwitterJsonActivitySerializer.java | 70 -----
.../TwitterJsonDeleteActivityConverter.java | 84 +++++
.../TwitterJsonDeleteActivitySerializer.java | 94 ------
.../TwitterJsonRetweetActivityConverter.java | 78 +++++
.../TwitterJsonRetweetActivitySerializer.java | 79 -----
.../TwitterJsonTweetActivityConverter.java | 76 +++++
.../TwitterJsonTweetActivitySerializer.java | 77 -----
.../TwitterJsonUserActivityConverter.java | 77 +++++
.../TwitterJsonUserActivitySerializer.java | 78 -----
...terJsonUserstreameventActivityConverter.java | 115 +++++++
...erJsonUserstreameventActivitySerializer.java | 115 -------
.../streams/twitter/test/FullTweetTest.java | 119 +++++++
.../streams/twitter/test/SimpleTweetTest.java | 43 ++-
.../twitter/test/TweetActivitySerDeTest.java | 32 +-
.../streams/twitter/test/TweetSerDeTest.java | 8 +-
.../test/TwitterDocumentClassifierTest.java | 117 +++++++
.../test/TwitterEventClassifierTest.java | 100 ------
.../apache/streams/data/ActivityConverter.java | 60 ++++
.../streams/data/ActivityConverterFactory.java | 29 ++
.../streams/data/ActivityConverterResolver.java | 38 +++
.../apache/streams/data/ActivitySerializer.java | 60 ----
.../apache/streams/data/DocumentClassifier.java | 40 +++
.../apache/streams/data/util/ActivityUtil.java | 3 +
.../streams/jackson/StreamsJacksonMapper.java | 14 +
.../streams/pig/StreamsComponentFactory.java | 13 +-
.../streams/pig/StreamsProcessDocumentExec.java | 11 -
.../streams/pig/StreamsSerializerExec.java | 16 +-
.../streams/pig/test/PigProcessDatumTest.java | 6 -
.../pig/test/PigProcessDocumentTest.java | 3 -
.../streams/pig/test/PigSerializerTest.java | 12 +-
129 files changed, 5167 insertions(+), 4313 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/.gitignore
----------------------------------------------------------------------
diff --git a/.gitignore b/.gitignore
index 23d6cc9..e04fafd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,9 @@ dependency-reduced-pom.xml
Icon?
ehthumbs.db
Thumbs.db
+
+# Maven plug-in generated files #
+DEPENDENCIES
+DISCLAIMER
+LICENSE
+NOTICE
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-components/pom.xml
----------------------------------------------------------------------
diff --git a/streams-components/pom.xml b/streams-components/pom.xml
index 9942e14..138eeef 100644
--- a/streams-components/pom.xml
+++ b/streams-components/pom.xml
@@ -37,6 +37,7 @@
</properties>
<modules>
+ <module>streams-converters</module>
<module>streams-http</module>
</modules>
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-components/streams-converters/pom.xml
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/pom.xml b/streams-components/streams-converters/pom.xml
new file mode 100644
index 0000000..cf990cb
--- /dev/null
+++ b/streams-components/streams-converters/pom.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>streams-converters</artifactId>
+ <version>0.1-SNAPSHOT</version>
+
+ <parent>
+ <groupId>org.apache.streams</groupId>
+ <artifactId>streams-components</artifactId>
+ <version>0.1-SNAPSHOT</version>
+ </parent>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.streams</groupId>
+ <artifactId>streams-config</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.streams</groupId>
+ <artifactId>streams-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.jayway.jsonpath</groupId>
+ <artifactId>json-path</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.jayway.jsonpath</groupId>
+ <artifactId>json-path-assert</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <sourceDirectory>src/main/java</sourceDirectory>
+ <testSourceDirectory>src/test/java</testSourceDirectory>
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ <testResources>
+ <testResource>
+ <directory>src/test/resources</directory>
+ </testResource>
+ </testResources>
+ <plugins>
+
+ </plugins>
+ </build>
+
+</project>
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-components/streams-converters/src/main/java/org/apache/streams/converter/ActivityConverterProcessor.java
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/src/main/java/org/apache/streams/converter/ActivityConverterProcessor.java b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/ActivityConverterProcessor.java
new file mode 100644
index 0000000..46ba788
--- /dev/null
+++ b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/ActivityConverterProcessor.java
@@ -0,0 +1,113 @@
+/*
+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
+with the License. You may obtain a copy of the License at
+
+ 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.converter;
+
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+import org.apache.streams.core.StreamsDatum;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.data.ActivityConverterFactory;
+import org.apache.streams.data.ActivityConverterResolver;
+import org.apache.streams.data.DocumentClassifier;
+import org.apache.streams.pojo.json.Activity;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+
+/**
+ *
+ */
+public class ActivityConverterProcessor extends TypeConverterProcessor {
+
+ private final static Logger LOGGER = LoggerFactory.getLogger(ActivityConverterProcessor.class);
+
+ private List<DocumentClassifier> classifiers;
+ private List<ActivityConverterResolver> resolvers;
+
+ public ActivityConverterProcessor() {
+ super(Activity.class);
+ this.classifiers = Lists.newArrayList((DocumentClassifier)BaseDocumentClassifier.getInstance());
+ this.resolvers = Lists.newArrayList((ActivityConverterResolver) BaseActivityConverterResolver.getInstance());
+ }
+
+ public ActivityConverterProcessor(List<DocumentClassifier> classifiers, List<ActivityConverterResolver> factories) {
+ super(Activity.class);
+ this.classifiers = classifiers;
+ this.resolvers = factories;
+ this.classifiers.add(BaseDocumentClassifier.getInstance());
+ this.resolvers.add(BaseActivityConverterResolver.getInstance());
+ }
+
+ @Override
+ public List<StreamsDatum> process(StreamsDatum entry) {
+
+ Preconditions.checkArgument(classifiers.size() > 0);
+ Preconditions.checkArgument(resolvers.size() > 0);
+
+ List<StreamsDatum> result = Lists.newLinkedList();
+ Object inDoc = entry.getDocument();
+
+ try {
+
+ // This implementation is primitive, greedy, takes first it can resolve
+ Class datumClass = null;
+ for( DocumentClassifier classifier : classifiers ) {
+ datumClass = classifier.detectClass(inDoc);
+ if( classifier != null )
+ break;
+ }
+
+ // This implementation is primitive, greedy, takes first it can resolve
+ Class converterClass = null;
+ for( ActivityConverterResolver resolver : resolvers ) {
+ converterClass = resolver.bestSerializer(datumClass);
+ if( converterClass != null )
+ break;
+ }
+
+ ActivityConverter converter = ActivityConverterFactory.getInstance(converterClass);
+
+ Object typedDoc;
+ if( datumClass.isInstance(inDoc) )
+ typedDoc = inDoc;
+ else
+ typedDoc = TypeConverterUtil.convert(inDoc, datumClass, mapper);
+
+ Activity activity = converter.deserialize(typedDoc);
+
+ entry.setDocument(activity);
+
+ result.add(entry);
+
+ } catch( Throwable e ) {
+ LOGGER.warn("Unable to serialize!", e.getMessage());
+ }
+
+ return result;
+ }
+
+ @Override
+ public void prepare(Object configurationObject) {
+ super.prepare(configurationObject);
+ Preconditions.checkArgument(classifiers.size() > 0);
+ Preconditions.checkArgument(resolvers.size() > 0);
+ }
+
+};
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-components/streams-converters/src/main/java/org/apache/streams/converter/BaseActivityConverterResolver.java
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/src/main/java/org/apache/streams/converter/BaseActivityConverterResolver.java b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/BaseActivityConverterResolver.java
new file mode 100644
index 0000000..3347d25
--- /dev/null
+++ b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/BaseActivityConverterResolver.java
@@ -0,0 +1,28 @@
+package org.apache.streams.converter;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.data.ActivityConverterResolver;
+import org.apache.streams.exceptions.ActivitySerializerException;
+
+/**
+ * Created by sblackmon on 11/12/14.
+ */
+public class BaseActivityConverterResolver implements ActivityConverterResolver {
+
+ private static BaseActivityConverterResolver instance = new BaseActivityConverterResolver();
+
+ public static BaseActivityConverterResolver getInstance() {
+ return instance;
+ }
+
+ @Override
+ public Class bestSerializer(Class documentClass) throws ActivitySerializerException {
+ if( documentClass == String.class) {
+ return BaseStringActivityConverter.class;
+ } else if( documentClass == ObjectNode.class) {
+ return BaseObjectNodeActivityConverter.class;
+ } else return null;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-components/streams-converters/src/main/java/org/apache/streams/converter/BaseDocumentClassifier.java
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/src/main/java/org/apache/streams/converter/BaseDocumentClassifier.java b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/BaseDocumentClassifier.java
new file mode 100644
index 0000000..3f92f5f
--- /dev/null
+++ b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/BaseDocumentClassifier.java
@@ -0,0 +1,62 @@
+package org.apache.streams.converter;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.base.Preconditions;
+import org.apache.streams.data.DocumentClassifier;
+import org.apache.streams.data.util.ActivityUtil;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.apache.streams.pojo.json.Activity;
+
+import java.io.IOException;
+
+/**
+ * Created by sblackmon on 11/12/14.
+ */
+public class BaseDocumentClassifier implements DocumentClassifier {
+
+ private static BaseDocumentClassifier instance = new BaseDocumentClassifier();
+
+ public static BaseDocumentClassifier getInstance() {
+ return instance;
+ }
+
+ private ObjectMapper mapper = StreamsJacksonMapper.getInstance();
+
+ @Override
+ public Class detectClass(Object document) {
+ Preconditions.checkArgument(
+ document instanceof String
+ || document instanceof ObjectNode);
+
+ Activity activity = null;
+ ObjectNode node = null;
+
+ // Soon javax.validation will available in jackson
+ // That will make this simpler and more powerful
+ if( document instanceof String ) {
+ try {
+ activity = this.mapper.readValue((String)document, Activity.class);
+ if(ActivityUtil.isValid(activity))
+ return Activity.class;
+ else
+ return ObjectNode.class;
+ } catch (IOException e1) {
+ try {
+ node = this.mapper.readValue((String)document, ObjectNode.class);
+ return ObjectNode.class;
+ } catch (IOException e2) {
+ return String.class;
+ }
+ }
+ } else if( document instanceof ObjectNode ){
+ activity = this.mapper.convertValue((ObjectNode)document, Activity.class);
+ if(ActivityUtil.isValid(activity))
+ return Activity.class;
+ else
+ return ObjectNode.class;
+ } else return document.getClass();
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-components/streams-converters/src/main/java/org/apache/streams/converter/BaseObjectNodeActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/src/main/java/org/apache/streams/converter/BaseObjectNodeActivityConverter.java b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/BaseObjectNodeActivityConverter.java
new file mode 100644
index 0000000..a4d0ea4
--- /dev/null
+++ b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/BaseObjectNodeActivityConverter.java
@@ -0,0 +1,61 @@
+package org.apache.streams.converter;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Lists;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.exceptions.ActivitySerializerException;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.apache.streams.pojo.json.Activity;
+
+import java.util.List;
+
+/**
+ * Created by sblackmon on 11/13/14.
+ */
+public class BaseObjectNodeActivityConverter implements ActivityConverter<ObjectNode> {
+
+ private ObjectMapper mapper = new StreamsJacksonMapper();
+
+ private static BaseObjectNodeActivityConverter instance = new BaseObjectNodeActivityConverter();
+
+ public static BaseObjectNodeActivityConverter getInstance() {
+ return instance;
+ }
+
+ @Override
+ public String serializationFormat() {
+ return null;
+ }
+
+ @Override
+ public ObjectNode serialize(Activity deserialized) throws ActivitySerializerException {
+ try {
+ return mapper.convertValue(deserialized, ObjectNode.class);
+ } catch (Exception e) {
+ throw new ActivitySerializerException();
+ }
+ }
+
+ @Override
+ public Activity deserialize(ObjectNode serialized) throws ActivitySerializerException {
+ try {
+ return mapper.convertValue(serialized, Activity.class);
+ } catch (Exception e) {
+ throw new ActivitySerializerException();
+ }
+ }
+
+ @Override
+ public List<Activity> deserializeAll(List<ObjectNode> serializedList) {
+ List<Activity> result = Lists.newArrayList();
+ for( ObjectNode item : serializedList ) {
+ try {
+ Activity activity = deserialize(item);
+ result.add(activity);
+ } catch (ActivitySerializerException e) {}
+ }
+ return result;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-components/streams-converters/src/main/java/org/apache/streams/converter/BaseStringActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/src/main/java/org/apache/streams/converter/BaseStringActivityConverter.java b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/BaseStringActivityConverter.java
new file mode 100644
index 0000000..ea0c108
--- /dev/null
+++ b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/BaseStringActivityConverter.java
@@ -0,0 +1,61 @@
+package org.apache.streams.converter;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.Lists;
+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 java.util.List;
+
+/**
+ * Created by sblackmon on 11/13/14.
+ */
+public class BaseStringActivityConverter implements ActivityConverter<String> {
+
+ private ObjectMapper mapper = new StreamsJacksonMapper();
+
+ private static BaseStringActivityConverter instance = new BaseStringActivityConverter();
+
+ public static BaseStringActivityConverter getInstance() {
+ return instance;
+ }
+
+
+ @Override
+ public String serializationFormat() {
+ return null;
+ }
+
+ @Override
+ public String serialize(Activity deserialized) throws ActivitySerializerException {
+ try {
+ return mapper.writeValueAsString(deserialized);
+ } catch (JsonProcessingException e) {
+ throw new ActivitySerializerException();
+ }
+ }
+
+ @Override
+ public Activity deserialize(String serialized) throws ActivitySerializerException {
+ try {
+ return mapper.readValue(serialized, Activity.class);
+ } catch (Exception e) {
+ throw new ActivitySerializerException();
+ }
+ }
+
+ @Override
+ public List<Activity> deserializeAll(List<String> serializedList) {
+ List<Activity> result = Lists.newArrayList();
+ for( String item : serializedList ) {
+ try {
+ Activity activity = deserialize(item);
+ result.add(activity);
+ } catch (ActivitySerializerException e) {}
+ }
+ return result;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-components/streams-converters/src/main/java/org/apache/streams/converter/CleanAdditionalPropertiesProcessor.java
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/src/main/java/org/apache/streams/converter/CleanAdditionalPropertiesProcessor.java b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/CleanAdditionalPropertiesProcessor.java
new file mode 100644
index 0000000..4b4641e
--- /dev/null
+++ b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/CleanAdditionalPropertiesProcessor.java
@@ -0,0 +1,62 @@
+package org.apache.streams.converter;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule;
+import com.google.common.collect.Lists;
+import org.apache.streams.core.StreamsDatum;
+import org.apache.streams.core.StreamsProcessor;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * This processor walks an input objectnode and corrects any artifacts
+ * that may have occured from improper serialization of jsonschema2pojo beans.
+ *
+ * The logic is also available for inclusion in other module via static import.
+ */
+public class CleanAdditionalPropertiesProcessor implements StreamsProcessor {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(CleanAdditionalPropertiesProcessor.class);
+
+ private ObjectMapper mapper;
+
+ @Override
+ public List<StreamsDatum> process(StreamsDatum datum) {
+ List<StreamsDatum> result = Lists.newLinkedList();
+ ObjectNode activity = this.mapper.convertValue(datum.getDocument(), ObjectNode.class);
+ cleanAdditionalProperties(activity);
+ datum.setDocument(activity);
+ result.add(datum);
+ return result;
+ }
+
+ @Override
+ public void prepare(Object o) {
+ this.mapper = StreamsJacksonMapper.getInstance();
+ this.mapper.registerModule(new JsonOrgModule());
+ }
+
+ @Override
+ public void cleanUp() {
+
+ }
+
+ public static void cleanAdditionalProperties(ObjectNode node) {
+ if( node.get("additionalProperties") != null ) {
+ ObjectNode additionalProperties = (ObjectNode) node.get("additionalProperties");
+ cleanAdditionalProperties(additionalProperties);
+ Iterator<Map.Entry<String, JsonNode>> jsonNodeIterator = additionalProperties.fields();
+ while( jsonNodeIterator.hasNext() ) {
+ Map.Entry<String, JsonNode> entry = jsonNodeIterator.next();
+ node.put(entry.getKey(), entry.getValue());
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-components/streams-converters/src/main/java/org/apache/streams/converter/TypeConverterProcessor.java
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/src/main/java/org/apache/streams/converter/TypeConverterProcessor.java b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/TypeConverterProcessor.java
new file mode 100644
index 0000000..6bfeead
--- /dev/null
+++ b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/TypeConverterProcessor.java
@@ -0,0 +1,84 @@
+/*
+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
+with the License. You may obtain a copy of the License at
+
+ 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.converter;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Lists;
+import org.apache.streams.core.StreamsDatum;
+import org.apache.streams.core.StreamsProcessor;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ *
+ */
+public class TypeConverterProcessor implements StreamsProcessor {
+
+ private final static Logger LOGGER = LoggerFactory.getLogger(TypeConverterProcessor.class);
+
+ private List<String> formats = Lists.newArrayList();
+
+ protected ObjectMapper mapper;
+
+ protected Class outClass;
+
+ public TypeConverterProcessor(Class outClass) {
+ this.outClass = outClass;
+ }
+
+ public TypeConverterProcessor(Class outClass, List<String> formats) {
+ this.outClass = outClass;
+ this.formats = formats;
+ }
+
+ @Override
+ public List<StreamsDatum> process(StreamsDatum entry) {
+
+ List<StreamsDatum> result = Lists.newLinkedList();
+ Object inDoc = entry.getDocument();
+
+ Object outDoc = TypeConverterUtil.convert(inDoc, outClass, mapper);
+
+ if( outDoc != null ) {
+ entry.setDocument(outDoc);
+ result.add(entry);
+ }
+
+ return result;
+ }
+
+ @Override
+ public void prepare(Object configurationObject) {
+ if( formats.size() > 0 )
+ this.mapper = StreamsJacksonMapper.getInstance(formats);
+ else
+ this.mapper = StreamsJacksonMapper.getInstance();
+ }
+
+ @Override
+ public void cleanUp() {
+ this.mapper = null;
+ }
+
+};
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-components/streams-converters/src/main/java/org/apache/streams/converter/TypeConverterUtil.java
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/src/main/java/org/apache/streams/converter/TypeConverterUtil.java b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/TypeConverterUtil.java
new file mode 100644
index 0000000..8a39ac5
--- /dev/null
+++ b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/TypeConverterUtil.java
@@ -0,0 +1,50 @@
+package org.apache.streams.converter;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+/**
+ * Created by sblackmon on 11/13/14.
+ */
+public class TypeConverterUtil {
+
+ private final static Logger LOGGER = LoggerFactory.getLogger(TypeConverterUtil.class);
+
+ public static Object convert(Object object, Class outClass) {
+ return TypeConverterUtil.convert(object, outClass, StreamsJacksonMapper.getInstance());
+ }
+
+ public static Object convert(Object object, Class outClass, ObjectMapper mapper) {
+ ObjectNode node = null;
+ Object outDoc = null;
+ if( object instanceof String ) {
+ try {
+ node = mapper.readValue((String)object, ObjectNode.class);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ } else {
+ node = mapper.convertValue(object, ObjectNode.class);
+ }
+
+ if(node != null) {
+ try {
+ if( outClass == String.class )
+ outDoc = mapper.writeValueAsString(node);
+ else
+ outDoc = mapper.convertValue(node, outClass);
+
+ } catch (Throwable e) {
+ LOGGER.warn(e.getMessage());
+ LOGGER.warn(node.toString());
+ }
+ }
+
+ return outDoc;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-components/streams-converters/src/test/java/org/apache/streams/jackson/test/ActivityConverterProcessorTest.java
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/src/test/java/org/apache/streams/jackson/test/ActivityConverterProcessorTest.java b/streams-components/streams-converters/src/test/java/org/apache/streams/jackson/test/ActivityConverterProcessorTest.java
new file mode 100644
index 0000000..6d626b2
--- /dev/null
+++ b/streams-components/streams-converters/src/test/java/org/apache/streams/jackson/test/ActivityConverterProcessorTest.java
@@ -0,0 +1,102 @@
+/*
+ * 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.jackson.test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.apache.streams.converter.ActivityConverterProcessor;
+import org.apache.streams.core.StreamsDatum;
+import org.apache.streams.core.StreamsProcessor;
+import org.apache.streams.pojo.json.Activity;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.List;
+
+import static junit.framework.Assert.*;
+
+/**
+ *
+ */
+public class ActivityConverterProcessorTest {
+
+ private static final ObjectMapper mapper = new StreamsJacksonMapper();
+
+ @Test
+ public void testBaseActivitySerializerProcessorInvalid() {
+ String INVALID_DOCUMENT = " 38Xs}";
+ StreamsProcessor processor = new ActivityConverterProcessor();
+ processor.prepare(null);
+ StreamsDatum datum = new StreamsDatum(INVALID_DOCUMENT);
+ List<StreamsDatum> result = processor.process(datum);
+ assertNotNull(result);
+ assertEquals(0, result.size());
+ }
+
+ @Test
+ public void testBaseActivitySerializerProcessorString() {
+ String STRING_DOCUMENT = "{\"verb\":\"post\"}";
+ StreamsProcessor processor = new ActivityConverterProcessor();
+ processor.prepare(null);
+ StreamsDatum datum = new StreamsDatum(STRING_DOCUMENT);
+ List<StreamsDatum> result = processor.process(datum);
+ assertNotNull(result);
+ assertEquals(1, result.size());
+ StreamsDatum resultDatum = result.get(0);
+ assertNotNull(resultDatum);
+ assertNotNull(resultDatum.getDocument());
+ assertTrue(resultDatum.getDocument() instanceof Activity);
+ assertTrue(((Activity)resultDatum.getDocument()).getVerb().equals("post"));
+ }
+
+ @Test
+ public void testBaseActivitySerializerProcessorObject() throws IOException {
+ ObjectNode OBJECT_DOCUMENT = mapper.readValue("{\"verb\":\"share\"}", ObjectNode.class);
+ StreamsProcessor processor = new ActivityConverterProcessor();
+ processor.prepare(null);
+ StreamsDatum datum = new StreamsDatum(OBJECT_DOCUMENT);
+ List<StreamsDatum> result = processor.process(datum);
+ assertNotNull(result);
+ assertEquals(1, result.size());
+ StreamsDatum resultDatum = result.get(0);
+ assertNotNull(resultDatum);
+ assertNotNull(resultDatum.getDocument());
+ assertTrue(resultDatum.getDocument() instanceof Activity);
+ assertTrue(((Activity)resultDatum.getDocument()).getVerb().equals("share"));
+ }
+
+// @Test
+// public void testTypeConverterObjectNodeToString() throws IOException {
+// final String ID = "1";
+// StreamsProcessor processor = new ActivitySerializerProcessor(ObjectNode.class, String.class, Lists.newArrayList(DATASIFT_FORMAT));
+// processor.prepare(null);
+// ObjectMapper mapper = StreamsJacksonMapper.getInstance(Lists.newArrayList(DATASIFT_FORMAT));
+// ObjectNode node = mapper.readValue(DATASIFT_JSON, ObjectNode.class);
+// StreamsDatum datum = new StreamsDatum(node, ID);
+// List<StreamsDatum> result = processor.process(datum);
+// assertNotNull(result);
+// assertEquals(1, result.size());
+// StreamsDatum resultDatum = result.get(0);
+// assertNotNull(resultDatum);
+// assertNotNull(resultDatum.getDocument());
+// assertTrue(resultDatum.getDocument() instanceof String);
+// assertEquals(ID, resultDatum.getId());
+// }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-components/streams-converters/src/test/java/org/apache/streams/jackson/test/TypeConverterProcessorTest.java
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/src/test/java/org/apache/streams/jackson/test/TypeConverterProcessorTest.java b/streams-components/streams-converters/src/test/java/org/apache/streams/jackson/test/TypeConverterProcessorTest.java
new file mode 100644
index 0000000..8a6c732
--- /dev/null
+++ b/streams-components/streams-converters/src/test/java/org/apache/streams/jackson/test/TypeConverterProcessorTest.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.jackson.test;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Lists;
+import org.apache.streams.core.StreamsDatum;
+import org.apache.streams.core.StreamsProcessor;
+import org.apache.streams.converter.TypeConverterProcessor;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.util.List;
+
+import static junit.framework.Assert.*;
+
+/**
+ *
+ */
+public class TypeConverterProcessorTest {
+
+ private static final String DATASIFT_JSON = "{\"demographic\":{\"gender\":\"female\"},\"interaction\":{\"schema\":{\"version\":3},\"source\":\"Twitter for Android\",\"author\":{\"username\":\"ViiOLeee\",\"name\":\"Violeta Anguita\",\"id\":70931384,\"avatar\":\"http://pbs.twimg.com/profile_images/378800000851401229/bbf480cde2e9923a1d20acd393da0212_normal.jpeg\",\"link\":\"http://twitter.com/ViiOLeee\",\"language\":\"en\"},\"type\":\"twitter\",\"created_at\":\"Tue, 27 May 2014 22:38:15 +0000\",\"received_at\":1.401230295658E9,\"content\":\"RT @AliiAnguita: \\\"@Pharrell: Loved working with @edsheeran on Sing. He's a genius. https://t.co/wB2qKyJMRw\\\" @ViiOLeee look at this!\",\"id\":\"1e3e5ef97532a580e0741841f5746728\",\"link\":\"http://twitter.com/ViiOLeee/status/471420141989666817\",\"mentions\":[\"Pharrell\",\"edsheeran\",\"ViiOLeee\",\"AliiAnguita\"],\"mention_ids\":[338084918,85452649,70931384]},\"klout\":{\"score\":34},\"language\":{\"tag\":\"en\",\"tag_extended\":\"en\",\
"confidence\":98},\"links\":{\"code\":[200],\"created_at\":[\"Tue, 27 May 2014 14:28:06 +0000\"],\"meta\":{\"charset\":[\"UTF-8\"],\"content_type\":[\"text/html\"],\"description\":[\"Official Video for Ed Sheeran's track SING Get this track on iTunes: http://smarturl.it/EdSing Pre-order 'x' on iTunes and get 'One' instantly: http://smartu...\"],\"keywords\":[[\"ed sheeran\",\"ed sheeran sing\",\"ed sheeran new album\",\"Ed Sheeran (Musical Artist)\",\"ed sheeran one\",\"ed sheeran fault in our stars\",\"ed sheeran all of the stars\",\"s...\"]],\"lang\":[\"en\"],\"opengraph\":[{\"site_name\":\"YouTube\",\"url\":\"http://www.youtube.com/watch?v=tlYcUqEPN58\",\"title\":\"Ed Sheeran - SING [Official Video]\",\"image\":\"https://i1.ytimg.com/vi/tlYcUqEPN58/maxresdefault.jpg\",\"description\":\"Official Video for Ed Sheeran's track SING Get this track on iTunes: http://smarturl.it/EdSing Pre-order 'x' on iTunes and get 'One' instantly: http://smartu
...\",\"type\":\"video\"}],\"twitter\":[{\"card\":\"player\",\"site\":\"@youtube\",\"url\":\"http://www.youtube.com/watch?v=tlYcUqEPN58\",\"title\":\"Ed Sheeran - SING [Official Video]\",\"description\":\"Official Video for Ed Sheeran's track SING Get this track on iTunes: http://smarturl.it/EdSing Pre-order 'x' on iTunes and get 'One' instantly: http://smartu...\",\"image\":\"https://i1.ytimg.com/vi/tlYcUqEPN58/maxresdefault.jpg\",\"app\":{\"iphone\":{\"name\":\"YouTube\",\"id\":\"544007664\",\"url\":\"vnd.youtube://watch/tlYcUqEPN58\"},\"ipad\":{\"name\":\"YouTube\",\"id\":\"544007664\",\"url\":\"vnd.youtube://watch/tlYcUqEPN58\"},\"googleplay\":{\"name\":\"YouTube\",\"id\":\"com.google.android.youtube\",\"url\":\"http://www.youtube.com/watch?v=tlYcUqEPN58\"}},\"player\":\"https://www.youtube.com/embed/tlYcUqEPN58\",\"player_width\":\"1280\",\"player_height\":\"720\"}]},\"normalized_url\":[\"https://youtube.com/watch?v=tlYcUqEPN58\"],\"retweet_count\":[0],\"tit
le\":[\"Ed Sheeran - SING [Official Video] - YouTube\"],\"url\":[\"https://www.youtube.com/watch?v=tlYcUqEPN58\"]},\"twitter\":{\"id\":\"471420141989666817\",\"retweet\":{\"text\":\"\\\"@Pharrell: Loved working with @edsheeran on Sing. He's a genius. https://t.co/wB2qKyJMRw\\\" @ViiOLeee look at this!\",\"id\":\"471420141989666817\",\"user\":{\"name\":\"Violeta Anguita\",\"description\":\"La vida no seria la fiesta que todos esperamos, pero mientras estemos aqui debemos BAILAR!!! #ErasmusOnceErasmusForever\",\"location\":\"Espanhaa..Olaa!\",\"statuses_count\":5882,\"followers_count\":249,\"friends_count\":1090,\"screen_name\":\"ViiOLeee\",\"profile_image_url\":\"http://pbs.twimg.com/profile_images/378800000851401229/bbf480cde2e9923a1d20acd393da0212_normal.jpeg\",\"profile_image_url_https\":\"https://pbs.twimg.com/profile_images/378800000851401229/bbf480cde2e9923a1d20acd393da0212_normal.jpeg\",\"lang\":\"en\",\"time_zone\":\"Madrid\",\"utc_offset\":7200,\"listed_count\":1,\"id\":709
31384,\"id_str\":\"70931384\",\"geo_enabled\":false,\"verified\":false,\"favourites_count\":275,\"created_at\":\"Wed, 02 Sep 2009 10:19:59 +0000\"},\"source\":\"<a href=\\\"http://twitter.com/download/android\\\" rel=\\\"nofollow\\\">Twitter for Android</a>\",\"count\":1,\"created_at\":\"Tue, 27 May 2014 22:38:15 +0000\",\"mentions\":[\"Pharrell\",\"edsheeran\",\"ViiOLeee\",\"AliiAnguita\"],\"mention_ids\":[338084918,85452649,70931384],\"links\":[\"https://www.youtube.com/watch?v=tlYcUqEPN58\"],\"display_urls\":[\"youtube.com/watch?v=tlYcUq���\"],\"domains\":[\"www.youtube.com\"],\"lang\":\"en\"},\"retweeted\":{\"id\":\"471419867078209536\",\"user\":{\"name\":\"Alicia Anguita \",\"description\":\"Estudiante de Ingenieria de la Edificaci��n en Granada.\",\"statuses_count\":371,\"followers_count\":185,\"friends_count\":404,\"screen_name\":\"AliiAnguita\",\"profile_image_url\":\"http://pbs.twimg.com/profile_images/424248659677442048/qCPZL8c9_normal.jpeg\",\"profile_image_url_
https\":\"https://pbs.twimg.com/profile_images/424248659677442048/qCPZL8c9_normal.jpeg\",\"lang\":\"es\",\"listed_count\":0,\"id\":561201891,\"id_str\":\"561201891\",\"geo_enabled\":false,\"verified\":false,\"favourites_count\":17,\"created_at\":\"Mon, 23 Apr 2012 13:11:44 +0000\"},\"source\":\"<a href=\\\"http://twitter.com/download/android\\\" rel=\\\"nofollow\\\">Twitter for Android</a>\",\"created_at\":\"Tue, 27 May 2014 22:37:09 +0000\"}}}";
+
+ public static final String DATASIFT_FORMAT = "EEE, dd MMM yyyy HH:mm:ss Z";
+
+ @Test
+ public void testTypeConverterStringToString() {
+ final String ID = "1";
+ StreamsProcessor processor = new TypeConverterProcessor(String.class, Lists.newArrayList(DATASIFT_FORMAT));
+ processor.prepare(null);
+ StreamsDatum datum = new StreamsDatum(DATASIFT_JSON, ID);
+ List<StreamsDatum> result = processor.process(datum);
+ assertNotNull(result);
+ assertEquals(1, result.size());
+ StreamsDatum resultDatum = result.get(0);
+ assertNotNull(resultDatum);
+ assertNotNull(resultDatum.getDocument());
+ assertTrue(resultDatum.getDocument() instanceof String);
+ assertEquals(ID, resultDatum.getId());
+ }
+
+ @Test
+ public void testTypeConverterStringToObjectNode() {
+ final String ID = "1";
+ StreamsProcessor processor = new TypeConverterProcessor(ObjectNode.class, Lists.newArrayList(DATASIFT_FORMAT));
+ processor.prepare(null);
+ StreamsDatum datum = new StreamsDatum(DATASIFT_JSON, ID);
+ List<StreamsDatum> result = processor.process(datum);
+ assertNotNull(result);
+ assertEquals(1, result.size());
+ StreamsDatum resultDatum = result.get(0);
+ assertNotNull(resultDatum);
+ assertNotNull(resultDatum.getDocument());
+ assertTrue(resultDatum.getDocument() instanceof ObjectNode);
+ assertEquals(ID, resultDatum.getId());
+ }
+
+ @Test
+ public void testTypeConverterObjectNodeToString() throws IOException {
+ final String ID = "1";
+ StreamsProcessor processor = new TypeConverterProcessor(String.class, Lists.newArrayList(DATASIFT_FORMAT));
+ processor.prepare(null);
+ ObjectMapper mapper = StreamsJacksonMapper.getInstance(DATASIFT_FORMAT);
+ ObjectNode node = mapper.readValue(DATASIFT_JSON, ObjectNode.class);
+ StreamsDatum datum = new StreamsDatum(node, ID);
+ List<StreamsDatum> result = processor.process(datum);
+ assertNotNull(result);
+ assertEquals(1, result.size());
+ StreamsDatum resultDatum = result.get(0);
+ assertNotNull(resultDatum);
+ assertNotNull(resultDatum.getDocument());
+ assertTrue(resultDatum.getDocument() instanceof String);
+ assertEquals(ID, resultDatum.getId());
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/pom.xml
----------------------------------------------------------------------
diff --git a/streams-contrib/pom.xml b/streams-contrib/pom.xml
index fcec297..3162028 100644
--- a/streams-contrib/pom.xml
+++ b/streams-contrib/pom.xml
@@ -47,7 +47,6 @@
<module>streams-amazon-aws</module>
<!--<module>streams-processor-lucene</module>-->
<!--<module>streams-processor-tika</module>-->
- <module>streams-processor-jackson</module>
<module>streams-processor-json</module>
<module>streams-processor-urls</module>
<module>streams-processor-peoplepattern</module>
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-processor-jackson/pom.xml
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-processor-jackson/pom.xml b/streams-contrib/streams-processor-jackson/pom.xml
deleted file mode 100644
index 8bb44fd..0000000
--- a/streams-contrib/streams-processor-jackson/pom.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ 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.
- -->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-
- <modelVersion>4.0.0</modelVersion>
- <artifactId>streams-processor-jackson</artifactId>
- <version>0.1-SNAPSHOT</version>
-
- <parent>
- <groupId>org.apache.streams</groupId>
- <artifactId>streams-contrib</artifactId>
- <version>0.1-SNAPSHOT</version>
- </parent>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.streams</groupId>
- <artifactId>streams-config</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.streams</groupId>
- <artifactId>streams-core</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-core</artifactId>
- </dependency>
- <dependency>
- <groupId>com.fasterxml.jackson.core</groupId>
- <artifactId>jackson-annotations</artifactId>
- </dependency>
- <dependency>
- <groupId>com.jayway.jsonpath</groupId>
- <artifactId>json-path</artifactId>
- </dependency>
- <dependency>
- <groupId>com.jayway.jsonpath</groupId>
- <artifactId>json-path-assert</artifactId>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- </dependency>
- <dependency>
- <groupId>commons-io</groupId>
- <artifactId>commons-io</artifactId>
- </dependency>
- </dependencies>
-
- <build>
- <sourceDirectory>src/main/java</sourceDirectory>
- <testSourceDirectory>src/test/java</testSourceDirectory>
- <resources>
- <resource>
- <directory>src/main/resources</directory>
- </resource>
- </resources>
- <testResources>
- <testResource>
- <directory>src/test/resources</directory>
- </testResource>
- </testResources>
- <plugins>
-
- </plugins>
- </build>
-
-</project>
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-processor-jackson/src/main/java/org/apache/streams/jackson/CleanAdditionalPropertiesProcessor.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-processor-jackson/src/main/java/org/apache/streams/jackson/CleanAdditionalPropertiesProcessor.java b/streams-contrib/streams-processor-jackson/src/main/java/org/apache/streams/jackson/CleanAdditionalPropertiesProcessor.java
deleted file mode 100644
index 56b0c5c..0000000
--- a/streams-contrib/streams-processor-jackson/src/main/java/org/apache/streams/jackson/CleanAdditionalPropertiesProcessor.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.apache.streams.jackson;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.fasterxml.jackson.datatype.jsonorg.JsonOrgModule;
-import com.google.common.collect.Lists;
-import org.apache.streams.core.StreamsDatum;
-import org.apache.streams.core.StreamsProcessor;
-import org.apache.streams.jackson.StreamsJacksonMapper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * This processor walks an input objectnode and corrects any artifacts
- * that may have occured from improper serialization of jsonschema2pojo beans.
- *
- * The logic is also available for inclusion in other module via static import.
- */
-public class CleanAdditionalPropertiesProcessor implements StreamsProcessor {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(CleanAdditionalPropertiesProcessor.class);
-
- private ObjectMapper mapper;
-
- @Override
- public List<StreamsDatum> process(StreamsDatum datum) {
- List<StreamsDatum> result = Lists.newLinkedList();
- ObjectNode activity = this.mapper.convertValue(datum.getDocument(), ObjectNode.class);
- cleanAdditionalProperties(activity);
- datum.setDocument(activity);
- result.add(datum);
- return result;
- }
-
- @Override
- public void prepare(Object o) {
- this.mapper = StreamsJacksonMapper.getInstance();
- this.mapper.registerModule(new JsonOrgModule());
- }
-
- @Override
- public void cleanUp() {
-
- }
-
- public static void cleanAdditionalProperties(ObjectNode node) {
- if( node.get("additionalProperties") != null ) {
- ObjectNode additionalProperties = (ObjectNode) node.get("additionalProperties");
- cleanAdditionalProperties(additionalProperties);
- Iterator<Map.Entry<String, JsonNode>> jsonNodeIterator = additionalProperties.fields();
- while( jsonNodeIterator.hasNext() ) {
- Map.Entry<String, JsonNode> entry = jsonNodeIterator.next();
- node.put(entry.getKey(), entry.getValue());
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-processor-jackson/src/main/java/org/apache/streams/jackson/TypeConverterProcessor.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-processor-jackson/src/main/java/org/apache/streams/jackson/TypeConverterProcessor.java b/streams-contrib/streams-processor-jackson/src/main/java/org/apache/streams/jackson/TypeConverterProcessor.java
deleted file mode 100644
index 63d03e9..0000000
--- a/streams-contrib/streams-processor-jackson/src/main/java/org/apache/streams/jackson/TypeConverterProcessor.java
+++ /dev/null
@@ -1,112 +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
-with the License. You may obtain a copy of the License at
-
- 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.jackson;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.Lists;
-import org.apache.streams.core.StreamsDatum;
-import org.apache.streams.core.StreamsProcessor;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.List;
-
-/**
- *
- */
-public class TypeConverterProcessor implements StreamsProcessor {
-
- private final static Logger LOGGER = LoggerFactory.getLogger(TypeConverterProcessor.class);
-
- private List<String> formats = Lists.newArrayList();
-
- private ObjectMapper mapper;
-
- private Class inClass;
- private Class outClass;
-
- public TypeConverterProcessor(Class inClass, Class outClass, ObjectMapper mapper) {
- this.inClass = inClass;
- this.outClass = outClass;
- this.mapper = mapper;
- }
-
- public TypeConverterProcessor(Class inClass, Class outClass, List<String> formats) {
- this.inClass = inClass;
- this.outClass = outClass;
- this.formats = formats;
- }
-
- public TypeConverterProcessor(Class inClass, Class outClass) {
- this.inClass = inClass;
- this.outClass = outClass;
- }
-
- @Override
- public List<StreamsDatum> process(StreamsDatum entry) {
- List<StreamsDatum> result = Lists.newLinkedList();
- Object inDoc = entry.getDocument();
- ObjectNode node = null;
- if( inClass == String.class ||
- inDoc instanceof String ) {
- try {
- node = this.mapper.readValue((String)entry.getDocument(), ObjectNode.class);
- } catch (IOException e) {
- e.printStackTrace();
- }
- } else {
- node = this.mapper.convertValue(inDoc, ObjectNode.class);
- }
-
- if(node != null) {
- Object outDoc;
- try {
- if( outClass == String.class )
- outDoc = this.mapper.writeValueAsString(node);
- else
- outDoc = this.mapper.convertValue(node, outClass);
-
- StreamsDatum outDatum = new StreamsDatum(outDoc, entry.getId(), entry.getTimestamp(), entry.getSequenceid());
- outDatum.setMetadata(entry.getMetadata());
- result.add(outDatum);
- } catch (Throwable e) {
- LOGGER.warn(e.getMessage());
- LOGGER.warn(node.toString());
- }
- }
-
- return result;
- }
-
- @Override
- public void prepare(Object configurationObject) {
- if( formats.size() > 0 )
- this.mapper = StreamsJacksonMapper.getInstance(formats);
- else
- this.mapper = StreamsJacksonMapper.getInstance();
- }
-
- @Override
- public void cleanUp() {
-
- }
-};
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-processor-jackson/src/test/java/org/apache/streams/jackson/test/TypeConverterProcessorTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-processor-jackson/src/test/java/org/apache/streams/jackson/test/TypeConverterProcessorTest.java b/streams-contrib/streams-processor-jackson/src/test/java/org/apache/streams/jackson/test/TypeConverterProcessorTest.java
deleted file mode 100644
index 1316d5c..0000000
--- a/streams-contrib/streams-processor-jackson/src/test/java/org/apache/streams/jackson/test/TypeConverterProcessorTest.java
+++ /dev/null
@@ -1,95 +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.jackson.test;
-
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.Lists;
-import org.apache.streams.core.StreamsDatum;
-import org.apache.streams.core.StreamsProcessor;
-import org.apache.streams.jackson.StreamsJacksonMapper;
-import org.apache.streams.jackson.TypeConverterProcessor;
-import org.apache.streams.pojo.json.Activity;
-import org.junit.Test;
-
-import java.io.IOException;
-import java.util.List;
-
-import static junit.framework.Assert.*;
-
-/**
- *
- */
-public class TypeConverterProcessorTest {
-
- private static final String DATASIFT_JSON = "{\"demographic\":{\"gender\":\"female\"},\"interaction\":{\"schema\":{\"version\":3},\"source\":\"Twitter for Android\",\"author\":{\"username\":\"ViiOLeee\",\"name\":\"Violeta Anguita\",\"id\":70931384,\"avatar\":\"http://pbs.twimg.com/profile_images/378800000851401229/bbf480cde2e9923a1d20acd393da0212_normal.jpeg\",\"link\":\"http://twitter.com/ViiOLeee\",\"language\":\"en\"},\"type\":\"twitter\",\"created_at\":\"Tue, 27 May 2014 22:38:15 +0000\",\"received_at\":1.401230295658E9,\"content\":\"RT @AliiAnguita: \\\"@Pharrell: Loved working with @edsheeran on Sing. He's a genius. https://t.co/wB2qKyJMRw\\\" @ViiOLeee look at this!\",\"id\":\"1e3e5ef97532a580e0741841f5746728\",\"link\":\"http://twitter.com/ViiOLeee/status/471420141989666817\",\"mentions\":[\"Pharrell\",\"edsheeran\",\"ViiOLeee\",\"AliiAnguita\"],\"mention_ids\":[338084918,85452649,70931384]},\"klout\":{\"score\":34},\"language\":{\"tag\":\"en\",\"tag_extended\":\"en\",\
"confidence\":98},\"links\":{\"code\":[200],\"created_at\":[\"Tue, 27 May 2014 14:28:06 +0000\"],\"meta\":{\"charset\":[\"UTF-8\"],\"content_type\":[\"text/html\"],\"description\":[\"Official Video for Ed Sheeran's track SING Get this track on iTunes: http://smarturl.it/EdSing Pre-order 'x' on iTunes and get 'One' instantly: http://smartu...\"],\"keywords\":[[\"ed sheeran\",\"ed sheeran sing\",\"ed sheeran new album\",\"Ed Sheeran (Musical Artist)\",\"ed sheeran one\",\"ed sheeran fault in our stars\",\"ed sheeran all of the stars\",\"s...\"]],\"lang\":[\"en\"],\"opengraph\":[{\"site_name\":\"YouTube\",\"url\":\"http://www.youtube.com/watch?v=tlYcUqEPN58\",\"title\":\"Ed Sheeran - SING [Official Video]\",\"image\":\"https://i1.ytimg.com/vi/tlYcUqEPN58/maxresdefault.jpg\",\"description\":\"Official Video for Ed Sheeran's track SING Get this track on iTunes: http://smarturl.it/EdSing Pre-order 'x' on iTunes and get 'One' instantly: http://smartu
...\",\"type\":\"video\"}],\"twitter\":[{\"card\":\"player\",\"site\":\"@youtube\",\"url\":\"http://www.youtube.com/watch?v=tlYcUqEPN58\",\"title\":\"Ed Sheeran - SING [Official Video]\",\"description\":\"Official Video for Ed Sheeran's track SING Get this track on iTunes: http://smarturl.it/EdSing Pre-order 'x' on iTunes and get 'One' instantly: http://smartu...\",\"image\":\"https://i1.ytimg.com/vi/tlYcUqEPN58/maxresdefault.jpg\",\"app\":{\"iphone\":{\"name\":\"YouTube\",\"id\":\"544007664\",\"url\":\"vnd.youtube://watch/tlYcUqEPN58\"},\"ipad\":{\"name\":\"YouTube\",\"id\":\"544007664\",\"url\":\"vnd.youtube://watch/tlYcUqEPN58\"},\"googleplay\":{\"name\":\"YouTube\",\"id\":\"com.google.android.youtube\",\"url\":\"http://www.youtube.com/watch?v=tlYcUqEPN58\"}},\"player\":\"https://www.youtube.com/embed/tlYcUqEPN58\",\"player_width\":\"1280\",\"player_height\":\"720\"}]},\"normalized_url\":[\"https://youtube.com/watch?v=tlYcUqEPN58\"],\"retweet_count\":[0],\"tit
le\":[\"Ed Sheeran - SING [Official Video] - YouTube\"],\"url\":[\"https://www.youtube.com/watch?v=tlYcUqEPN58\"]},\"twitter\":{\"id\":\"471420141989666817\",\"retweet\":{\"text\":\"\\\"@Pharrell: Loved working with @edsheeran on Sing. He's a genius. https://t.co/wB2qKyJMRw\\\" @ViiOLeee look at this!\",\"id\":\"471420141989666817\",\"user\":{\"name\":\"Violeta Anguita\",\"description\":\"La vida no seria la fiesta que todos esperamos, pero mientras estemos aqui debemos BAILAR!!! #ErasmusOnceErasmusForever\",\"location\":\"Espanhaa..Olaa!\",\"statuses_count\":5882,\"followers_count\":249,\"friends_count\":1090,\"screen_name\":\"ViiOLeee\",\"profile_image_url\":\"http://pbs.twimg.com/profile_images/378800000851401229/bbf480cde2e9923a1d20acd393da0212_normal.jpeg\",\"profile_image_url_https\":\"https://pbs.twimg.com/profile_images/378800000851401229/bbf480cde2e9923a1d20acd393da0212_normal.jpeg\",\"lang\":\"en\",\"time_zone\":\"Madrid\",\"utc_offset\":7200,\"listed_count\":1,\"id\":709
31384,\"id_str\":\"70931384\",\"geo_enabled\":false,\"verified\":false,\"favourites_count\":275,\"created_at\":\"Wed, 02 Sep 2009 10:19:59 +0000\"},\"source\":\"<a href=\\\"http://twitter.com/download/android\\\" rel=\\\"nofollow\\\">Twitter for Android</a>\",\"count\":1,\"created_at\":\"Tue, 27 May 2014 22:38:15 +0000\",\"mentions\":[\"Pharrell\",\"edsheeran\",\"ViiOLeee\",\"AliiAnguita\"],\"mention_ids\":[338084918,85452649,70931384],\"links\":[\"https://www.youtube.com/watch?v=tlYcUqEPN58\"],\"display_urls\":[\"youtube.com/watch?v=tlYcUq���\"],\"domains\":[\"www.youtube.com\"],\"lang\":\"en\"},\"retweeted\":{\"id\":\"471419867078209536\",\"user\":{\"name\":\"Alicia Anguita \",\"description\":\"Estudiante de Ingenieria de la Edificaci��n en Granada.\",\"statuses_count\":371,\"followers_count\":185,\"friends_count\":404,\"screen_name\":\"AliiAnguita\",\"profile_image_url\":\"http://pbs.twimg.com/profile_images/424248659677442048/qCPZL8c9_normal.jpeg\",\"profile_image_url_
https\":\"https://pbs.twimg.com/profile_images/424248659677442048/qCPZL8c9_normal.jpeg\",\"lang\":\"es\",\"listed_count\":0,\"id\":561201891,\"id_str\":\"561201891\",\"geo_enabled\":false,\"verified\":false,\"favourites_count\":17,\"created_at\":\"Mon, 23 Apr 2012 13:11:44 +0000\"},\"source\":\"<a href=\\\"http://twitter.com/download/android\\\" rel=\\\"nofollow\\\">Twitter for Android</a>\",\"created_at\":\"Tue, 27 May 2014 22:37:09 +0000\"}}}";
-
- public static final String DATASIFT_FORMAT = "EEE, dd MMM yyyy HH:mm:ss Z";
-
- @Test
- public void testTypeConverterStringToString() {
- final String ID = "1";
- StreamsProcessor processor = new TypeConverterProcessor(String.class, String.class, Lists.newArrayList(DATASIFT_FORMAT));
- processor.prepare(null);
- StreamsDatum datum = new StreamsDatum(DATASIFT_JSON, ID);
- List<StreamsDatum> result = processor.process(datum);
- assertNotNull(result);
- assertEquals(1, result.size());
- StreamsDatum resultDatum = result.get(0);
- assertNotNull(resultDatum);
- assertNotNull(resultDatum.getDocument());
- assertTrue(resultDatum.getDocument() instanceof String);
- assertEquals(ID, resultDatum.getId());
- }
-
- @Test
- public void testTypeConverterStringToObjectNode() {
- final String ID = "1";
- StreamsProcessor processor = new TypeConverterProcessor(String.class, ObjectNode.class, Lists.newArrayList(DATASIFT_FORMAT));
- processor.prepare(null);
- StreamsDatum datum = new StreamsDatum(DATASIFT_JSON, ID);
- List<StreamsDatum> result = processor.process(datum);
- assertNotNull(result);
- assertEquals(1, result.size());
- StreamsDatum resultDatum = result.get(0);
- assertNotNull(resultDatum);
- assertNotNull(resultDatum.getDocument());
- assertTrue(resultDatum.getDocument() instanceof ObjectNode);
- assertEquals(ID, resultDatum.getId());
- }
-
- @Test
- public void testTypeConverterObjectNodeToString() throws IOException {
- final String ID = "1";
- StreamsProcessor processor = new TypeConverterProcessor(ObjectNode.class, String.class, Lists.newArrayList(DATASIFT_FORMAT));
- processor.prepare(null);
- ObjectMapper mapper = StreamsJacksonMapper.getInstance(Lists.newArrayList(DATASIFT_FORMAT));
- ObjectNode node = mapper.readValue(DATASIFT_JSON, ObjectNode.class);
- StreamsDatum datum = new StreamsDatum(node, ID);
- List<StreamsDatum> result = processor.process(datum);
- assertNotNull(result);
- assertEquals(1, result.size());
- StreamsDatum resultDatum = result.get(0);
- assertNotNull(resultDatum);
- assertNotNull(resultDatum.getDocument());
- assertTrue(resultDatum.getDocument() instanceof String);
- assertEquals(ID, resultDatum.getId());
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/pom.xml
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/pom.xml b/streams-contrib/streams-provider-datasift/pom.xml
index ae96d4e..23165af 100644
--- a/streams-contrib/streams-provider-datasift/pom.xml
+++ b/streams-contrib/streams-provider-datasift/pom.xml
@@ -37,7 +37,7 @@
</dependency>
<dependency>
<groupId>org.apache.streams</groupId>
- <artifactId>streams-processor-jackson</artifactId>
+ <artifactId>streams-converters</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/processor/DatasiftActivitySerializerProcessor.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/processor/DatasiftActivitySerializerProcessor.java b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/processor/DatasiftActivitySerializerProcessor.java
index a4a4b5a..bc982e9 100644
--- a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/processor/DatasiftActivitySerializerProcessor.java
+++ b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/processor/DatasiftActivitySerializerProcessor.java
@@ -23,8 +23,7 @@ import com.google.common.collect.Lists;
import org.apache.streams.core.StreamsDatum;
import org.apache.streams.core.StreamsProcessor;
import org.apache.streams.datasift.Datasift;
-import org.apache.streams.datasift.provider.DatasiftConverter;
-import org.apache.streams.datasift.serializer.DatasiftActivitySerializer;
+import org.apache.streams.datasift.serializer.DatasiftActivityConverter;
import org.apache.streams.datasift.util.StreamsDatasiftMapper;
import org.apache.streams.jackson.StreamsJacksonMapper;
import org.apache.streams.pojo.json.Activity;
@@ -42,7 +41,7 @@ public class DatasiftActivitySerializerProcessor implements StreamsProcessor {
private ObjectMapper mapper;
private Class outClass;
- private DatasiftActivitySerializer datasiftActivitySerializer;
+ private DatasiftActivityConverter datasiftActivitySerializer;
public final static String TERMINATE = new String("TERMINATE");
@@ -77,8 +76,8 @@ public class DatasiftActivitySerializerProcessor implements StreamsProcessor {
@Override
public void prepare(Object configurationObject) {
- this.mapper = StreamsJacksonMapper.getInstance(Lists.newArrayList(StreamsDatasiftMapper.DATASIFT_FORMAT));
- this.datasiftActivitySerializer = new DatasiftActivitySerializer();
+ this.mapper = StreamsJacksonMapper.getInstance(StreamsDatasiftMapper.DATASIFT_FORMAT);
+ this.datasiftActivitySerializer = new DatasiftActivityConverter();
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/processor/DatasiftTypeConverterProcessor.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/processor/DatasiftTypeConverterProcessor.java b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/processor/DatasiftTypeConverterProcessor.java
index 1166b2e..a0d2fc3 100644
--- a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/processor/DatasiftTypeConverterProcessor.java
+++ b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/processor/DatasiftTypeConverterProcessor.java
@@ -25,10 +25,10 @@ import org.apache.streams.core.StreamsDatum;
import org.apache.streams.core.StreamsProcessor;
import org.apache.streams.datasift.Datasift;
import org.apache.streams.datasift.provider.DatasiftConverter;
-import org.apache.streams.datasift.serializer.DatasiftActivitySerializer;
+import org.apache.streams.datasift.serializer.DatasiftActivityConverter;
import org.apache.streams.datasift.util.StreamsDatasiftMapper;
import org.apache.streams.pojo.json.Activity;
-import org.apache.streams.jackson.CleanAdditionalPropertiesProcessor;
+import org.apache.streams.converter.CleanAdditionalPropertiesProcessor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -43,7 +43,7 @@ public class DatasiftTypeConverterProcessor implements StreamsProcessor {
private ObjectMapper mapper;
private Class outClass;
- private DatasiftActivitySerializer datasiftInteractionActivitySerializer;
+ private DatasiftActivityConverter datasiftInteractionActivitySerializer;
private DatasiftConverter converter;
public final static String TERMINATE = new String("TERMINATE");
@@ -75,7 +75,7 @@ public class DatasiftTypeConverterProcessor implements StreamsProcessor {
@Override
public void prepare(Object configurationObject) {
this.mapper = StreamsDatasiftMapper.getInstance();
- this.datasiftInteractionActivitySerializer = new DatasiftActivitySerializer();
+ this.datasiftInteractionActivitySerializer = new DatasiftActivityConverter();
if(this.outClass.equals(Activity.class)) {
this.converter = new ActivityConverter();
} else if (this.outClass.equals(String.class)) {
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftActivityConverter.java b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftActivityConverter.java
new file mode 100644
index 0000000..65bebce
--- /dev/null
+++ b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftActivityConverter.java
@@ -0,0 +1,77 @@
+/*
+ * 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.datasift.serializer;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.Lists;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.data.ActivityConverterFactory;
+import org.apache.streams.datasift.Datasift;
+import org.apache.streams.datasift.twitter.Twitter;
+import org.apache.streams.datasift.util.StreamsDatasiftMapper;
+import org.apache.streams.exceptions.ActivitySerializerException;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.apache.streams.pojo.json.Activity;
+
+import java.util.List;
+
+/**
+ * We should be able to @Deprecate this soon and adopt ActivityConverterProcessor
+ */
+public class DatasiftActivityConverter implements ActivityConverter<Datasift> {
+
+ private static final ObjectMapper MAPPER = StreamsJacksonMapper.getInstance(StreamsDatasiftMapper.DATASIFT_FORMAT);
+
+ private static DatasiftActivityConverter instance = new DatasiftActivityConverter();
+
+ public static DatasiftActivityConverter getInstance() {
+ return instance;
+ }
+
+ @Override
+ public String serializationFormat() {
+ return null;
+ }
+
+ @Override
+ public Datasift serialize(Activity deserialized) throws ActivitySerializerException {
+ return null;
+ }
+
+ @Override
+ public Activity deserialize(Datasift serialized) throws ActivitySerializerException {
+ Class detectedClass = DatasiftEventClassifier.getInstance().detectClass(serialized);
+ Class converterClass = DatasiftConverterResolver.getInstance().bestSerializer(detectedClass);
+ ActivityConverter serializer = ActivityConverterFactory.getInstance(converterClass);
+ return serializer.deserialize(serialized);
+ }
+
+ public Activity deserialize(String json) throws ActivitySerializerException {
+ try {
+ return deserialize(MAPPER.readValue(json, Datasift.class));
+ } catch (Exception e) {
+ throw new ActivitySerializerException(e);
+ }
+ }
+
+ @Override
+ public List<Activity> deserializeAll(List<Datasift> serializedList) {
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftActivitySerializer.java b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftActivitySerializer.java
deleted file mode 100644
index b587cd6..0000000
--- a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftActivitySerializer.java
+++ /dev/null
@@ -1,65 +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.datasift.serializer;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.datasift.Datasift;
-import org.apache.streams.datasift.util.StreamsDatasiftMapper;
-import org.apache.streams.exceptions.ActivitySerializerException;
-import org.apache.streams.pojo.json.Activity;
-
-import java.util.List;
-
-/**
- *
- */
-public class DatasiftActivitySerializer implements ActivitySerializer<Datasift> {
-
- private static final ObjectMapper MAPPER = StreamsDatasiftMapper.getInstance();
-
- @Override
- public String serializationFormat() {
- return null;
- }
-
- @Override
- public Datasift serialize(Activity deserialized) throws ActivitySerializerException {
- return null;
- }
-
- @Override
- public Activity deserialize(Datasift serialized) throws ActivitySerializerException {
- ActivitySerializer serializer = DatasiftEventClassifier.bestSerializer(serialized);
- return serializer.deserialize(serialized);
- }
-
- public Activity deserialize(String json) throws ActivitySerializerException {
- try {
- return deserialize(MAPPER.readValue(json, Datasift.class));
- } catch (Exception e) {
- throw new ActivitySerializerException(e);
- }
- }
-
- @Override
- public List<Activity> deserializeAll(List<Datasift> serializedList) {
- return null;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftConverterResolver.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftConverterResolver.java b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftConverterResolver.java
new file mode 100644
index 0000000..67cccd8
--- /dev/null
+++ b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftConverterResolver.java
@@ -0,0 +1,55 @@
+/*
+ * 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.datasift.serializer;
+
+import com.google.common.base.Preconditions;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.data.ActivityConverterResolver;
+import org.apache.streams.data.DocumentClassifier;
+import org.apache.streams.datasift.Datasift;
+import org.apache.streams.datasift.instagram.Instagram;
+import org.apache.streams.datasift.interaction.Interaction;
+import org.apache.streams.datasift.twitter.Twitter;
+
+/**
+ * Created by sblackmon on 11/6/14.
+ */
+public class DatasiftConverterResolver implements ActivityConverterResolver {
+
+ public DatasiftConverterResolver() {
+
+ }
+
+ private static DatasiftConverterResolver instance = new DatasiftConverterResolver();
+
+ public static DatasiftConverterResolver getInstance() {
+ return instance;
+ }
+
+ public Class bestSerializer(Class documentClass) {
+
+ if(documentClass == Twitter.class) {
+ return DatasiftTwitterActivityConverter.class;
+ } else if(documentClass == Instagram.class) {
+ return DatasiftInstagramActivityConverter.class;
+ } else {
+ return DatasiftInteractionActivityConverter.class;
+ }
+ }
+}
[6/9] incubator-streams git commit: omni-bus update
Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftEventClassifier.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftEventClassifier.java b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftEventClassifier.java
index 7d7d547..b258095 100644
--- a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftEventClassifier.java
+++ b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftEventClassifier.java
@@ -18,7 +18,9 @@
package org.apache.streams.datasift.serializer;
-import org.apache.streams.data.ActivitySerializer;
+import com.google.common.base.Preconditions;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.data.DocumentClassifier;
import org.apache.streams.datasift.Datasift;
import org.apache.streams.datasift.instagram.Instagram;
import org.apache.streams.datasift.interaction.Interaction;
@@ -27,27 +29,29 @@ import org.apache.streams.datasift.twitter.Twitter;
/**
* Created by sblackmon on 11/6/14.
*/
-public class DatasiftEventClassifier {
+public class DatasiftEventClassifier implements DocumentClassifier {
- public static Class detectClass(Datasift event) {
+ public DatasiftEventClassifier() {
- if(event.getTwitter() != null) {
+ }
+
+ private static DatasiftEventClassifier instance = new DatasiftEventClassifier();
+
+ public static DatasiftEventClassifier getInstance() {
+ return instance;
+ }
+
+ public Class detectClass(Object document) {
+
+ Preconditions.checkArgument(document instanceof Datasift);
+ Datasift datasift = (Datasift)document;
+ if(datasift.getTwitter() != null) {
return Twitter.class;
- } else if(event.getInstagram() != null) {
+ } else if(datasift.getInstagram() != null) {
return Instagram.class;
} else {
return Interaction.class;
}
}
- public static ActivitySerializer bestSerializer(Datasift event) {
-
- if(event.getTwitter() != null) {
- return DatasiftTwitterActivitySerializer.getInstance();
- } else if(event.getInstagram() != null) {
- return DatasiftInstagramActivitySerializer.getInstance();
- } else {
- return DatasiftInteractionActivitySerializer.getInstance();
- }
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftInstagramActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftInstagramActivityConverter.java b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftInstagramActivityConverter.java
new file mode 100644
index 0000000..eade439
--- /dev/null
+++ b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftInstagramActivityConverter.java
@@ -0,0 +1,124 @@
+/*
+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
+with the License. You may obtain a copy of the License at
+
+ 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.datasift.serializer;
+
+import com.google.common.base.Joiner;
+import com.google.common.base.Optional;
+import com.google.common.collect.Lists;
+import org.apache.streams.datasift.Datasift;
+import org.apache.streams.datasift.instagram.From;
+import org.apache.streams.datasift.instagram.Instagram;
+import org.apache.streams.instagram.serializer.util.InstagramActivityUtil;
+import org.apache.streams.pojo.json.Activity;
+import org.apache.streams.pojo.json.Actor;
+import org.apache.streams.pojo.json.Image;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+import java.util.Map;
+
+import static org.apache.streams.data.util.ActivityUtil.ensureExtensions;
+
+/**
+ *
+ */
+public class DatasiftInstagramActivityConverter extends DatasiftInteractionActivityConverter {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(DatasiftInstagramActivityConverter.class);
+
+ private static DatasiftInstagramActivityConverter instance = new DatasiftInstagramActivityConverter();
+
+ public static DatasiftInstagramActivityConverter getInstance() {
+ return instance;
+ }
+
+ @Override
+ public Activity convert(Datasift event) {
+ Activity activity = super.convert(event);
+
+ Instagram instagram = event.getInstagram();
+
+ activity.setActor(buildActor(event, instagram));
+ activity.setId(formatId(activity.getVerb(), event.getInteraction().getId()));
+ activity.setProvider(InstagramActivityUtil.getProvider());
+ activity.setLinks(getLinks(event.getInstagram()));
+
+ activity.setVerb(selectVerb(event));
+ addInstagramExtensions(activity, instagram);
+ return activity;
+ }
+
+ /**
+ * Gets links from the object
+ * @return
+ */
+ private List<String> getLinks(Instagram instagram) {
+ List<String> result = Lists.newLinkedList();
+ if( instagram.getMedia() != null ) {
+ result.add(instagram.getMedia().getImage());
+ result.add(instagram.getMedia().getVideo());
+ }
+ return result;
+ }
+
+ public Actor buildActor(Datasift event, Instagram instagram) {
+ Actor actor = super.buildActor(event.getInteraction());
+ From user = instagram.getFrom();
+
+ actor.setDisplayName(firstStringIfNotNull(user.getFullName()));
+ actor.setId(formatId(Optional.fromNullable(
+ user.getId())
+ .or(actor.getId())));
+
+ Image profileImage = new Image();
+ String profileUrl = null;
+ profileUrl = user.getProfilePicture();
+ profileImage.setUrl(profileUrl);
+ actor.setImage(profileImage);
+
+ return actor;
+ }
+
+ public void addInstagramExtensions(Activity activity, Instagram instagram) {
+ Map<String, Object> extensions = ensureExtensions(activity);
+ List<String> hashTags;
+ if(instagram.getMedia() != null) {
+ hashTags = instagram.getMedia().getTags();
+ extensions.put("hashtags", hashTags);
+ extensions.put("keywords", activity.getContent());
+ } else {
+ extensions.put("keywords", activity.getContent());
+
+ }
+
+ }
+
+ private String selectVerb(Datasift event) {
+ if( event.getInteraction().getSubtype().equals("like"))
+ return "like";
+ else
+ return "post";
+ }
+
+ public static String formatId(String... idparts) {
+ return Joiner.on(":").join(Lists.asList("id:instagram", idparts));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftInstagramActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftInstagramActivitySerializer.java b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftInstagramActivitySerializer.java
deleted file mode 100644
index d121d65..0000000
--- a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftInstagramActivitySerializer.java
+++ /dev/null
@@ -1,124 +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
-with the License. You may obtain a copy of the License at
-
- 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.datasift.serializer;
-
-import com.google.common.base.Joiner;
-import com.google.common.base.Optional;
-import com.google.common.collect.Lists;
-import org.apache.streams.datasift.Datasift;
-import org.apache.streams.datasift.instagram.From;
-import org.apache.streams.datasift.instagram.Instagram;
-import org.apache.streams.instagram.serializer.util.InstagramActivityUtil;
-import org.apache.streams.pojo.json.Activity;
-import org.apache.streams.pojo.json.Actor;
-import org.apache.streams.pojo.json.Image;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.List;
-import java.util.Map;
-
-import static org.apache.streams.data.util.ActivityUtil.ensureExtensions;
-
-/**
- *
- */
-public class DatasiftInstagramActivitySerializer extends DatasiftInteractionActivitySerializer {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(DatasiftInstagramActivitySerializer.class);
-
- private static DatasiftInstagramActivitySerializer instance = new DatasiftInstagramActivitySerializer();
-
- public static DatasiftInstagramActivitySerializer getInstance() {
- return instance;
- }
-
- @Override
- public Activity convert(Datasift event) {
- Activity activity = super.convert(event);
-
- Instagram instagram = event.getInstagram();
-
- activity.setActor(buildActor(event, instagram));
- activity.setId(formatId(activity.getVerb(), event.getInteraction().getId()));
- activity.setProvider(InstagramActivityUtil.getProvider());
- activity.setLinks(getLinks(event.getInstagram()));
-
- activity.setVerb(selectVerb(event));
- addInstagramExtensions(activity, instagram);
- return activity;
- }
-
- /**
- * Gets links from the object
- * @return
- */
- private List<String> getLinks(Instagram instagram) {
- List<String> result = Lists.newLinkedList();
- if( instagram.getMedia() != null ) {
- result.add(instagram.getMedia().getImage());
- result.add(instagram.getMedia().getVideo());
- }
- return result;
- }
-
- public Actor buildActor(Datasift event, Instagram instagram) {
- Actor actor = super.buildActor(event.getInteraction());
- From user = instagram.getFrom();
-
- actor.setDisplayName(firstStringIfNotNull(user.getFullName()));
- actor.setId(formatId(Optional.fromNullable(
- user.getId())
- .or(actor.getId())));
-
- Image profileImage = new Image();
- String profileUrl = null;
- profileUrl = user.getProfilePicture();
- profileImage.setUrl(profileUrl);
- actor.setImage(profileImage);
-
- return actor;
- }
-
- public void addInstagramExtensions(Activity activity, Instagram instagram) {
- Map<String, Object> extensions = ensureExtensions(activity);
- List<String> hashTags;
- if(instagram.getMedia() != null) {
- hashTags = instagram.getMedia().getTags();
- extensions.put("hashtags", hashTags);
- extensions.put("keywords", activity.getContent());
- } else {
- extensions.put("keywords", activity.getContent());
-
- }
-
- }
-
- private String selectVerb(Datasift event) {
- if( event.getInteraction().getSubtype().equals("like"))
- return "like";
- else
- return "post";
- }
-
- public static String formatId(String... idparts) {
- return Joiner.on(":").join(Lists.asList("id:instagram", idparts));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftInteractionActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftInteractionActivityConverter.java b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftInteractionActivityConverter.java
new file mode 100644
index 0000000..da21006
--- /dev/null
+++ b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftInteractionActivityConverter.java
@@ -0,0 +1,222 @@
+package org.apache.streams.datasift.serializer;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.base.Joiner;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.Lists;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.datasift.Datasift;
+import org.apache.streams.datasift.interaction.Interaction;
+import org.apache.streams.datasift.links.Links;
+import org.apache.streams.datasift.util.StreamsDatasiftMapper;
+import org.apache.streams.pojo.json.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.apache.streams.data.util.ActivityUtil.ensureExtensions;
+
+/**
+ *
+ */
+public class DatasiftInteractionActivityConverter implements ActivityConverter<Datasift> {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(DatasiftInteractionActivityConverter.class);
+
+ private static DatasiftInteractionActivityConverter instance = new DatasiftInteractionActivityConverter();
+
+ public static DatasiftInteractionActivityConverter getInstance() {
+ return instance;
+ }
+
+ ObjectMapper mapper = StreamsDatasiftMapper.getInstance();
+
+ @Override
+ public String serializationFormat() {
+ return "application/json+datasift.com.v1.1";
+ }
+
+ @Override
+ public Datasift serialize(Activity deserialized) {
+ throw new UnsupportedOperationException("Cannot currently serialize to Datasift JSON");
+ }
+
+ public Activity deserialize(String datasiftJson) {
+ try {
+ return deserialize(this.mapper.readValue(datasiftJson, Datasift.class));
+ } catch (Exception e) {
+ LOGGER.error("Exception while trying convert,\n {},\n to a Datasift object.", datasiftJson);
+ LOGGER.error("Exception : {}", e);
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public Activity deserialize(Datasift serialized) {
+
+ try {
+
+ Activity activity = convert(serialized);
+
+ return activity;
+
+ } catch (Exception e) {
+ throw new IllegalArgumentException("Unable to deserialize", e);
+ }
+
+ }
+
+ @Override
+ public List<Activity> deserializeAll(List<Datasift> datasifts) {
+ List<Activity> activities = Lists.newArrayList();
+ for( Datasift datasift : datasifts ) {
+ activities.add(deserialize(datasift));
+ }
+ return activities;
+ }
+
+ public static Generator buildGenerator(Interaction interaction) {
+ Generator generator = new Generator();
+ generator.setDisplayName(interaction.getSource());
+ generator.setId(interaction.getSource());
+ return generator;
+ }
+
+ public static Icon getIcon(Interaction interaction) {
+ return null;
+ }
+
+ public static Provider buildProvider(Interaction interaction) {
+ Provider provider = new Provider();
+ provider.setId("id:providers:"+interaction.getType());
+ provider.setDisplayName(interaction.getType());
+ return provider;
+ }
+
+ public static String getUrls(Interaction interaction) {
+ return null;
+ }
+
+ public static void addDatasiftExtension(Activity activity, Datasift datasift) {
+ Map<String, Object> extensions = org.apache.streams.data.util.ActivityUtil.ensureExtensions(activity);
+ extensions.put("datasift", datasift);
+ }
+
+ public static String formatId(String... idparts) {
+ return Joiner.on(":").join(Lists.asList("id:datasift", idparts));
+ }
+
+ public Activity convert(Datasift event) {
+
+ Preconditions.checkNotNull(event);
+ Preconditions.checkNotNull(event.getInteraction());
+
+ Activity activity = new Activity();
+ activity.setActor(buildActor(event.getInteraction()));
+ activity.setVerb(selectVerb(event));
+ activity.setObject(buildActivityObject(event.getInteraction()));
+ activity.setId(formatId(activity.getVerb(), event.getInteraction().getId()));
+ activity.setTarget(buildTarget(event.getInteraction()));
+ activity.setPublished(event.getInteraction().getCreatedAt());
+ activity.setGenerator(buildGenerator(event.getInteraction()));
+ activity.setIcon(getIcon(event.getInteraction()));
+ activity.setProvider(buildProvider(event.getInteraction()));
+ activity.setTitle(event.getInteraction().getTitle());
+ activity.setContent(event.getInteraction().getContent());
+ activity.setUrl(event.getInteraction().getLink());
+ activity.setLinks(getLinks(event));
+ addDatasiftExtension(activity, event);
+ if( event.getInteraction().getGeo() != null) {
+ addLocationExtension(activity, event.getInteraction());
+ }
+ return activity;
+ }
+
+ private String selectVerb(Datasift event) {
+ return "post";
+ }
+
+ public Actor buildActor(Interaction interaction) {
+ Actor actor = new Actor();
+ org.apache.streams.datasift.interaction.Author author = interaction.getAuthor();
+ if(author == null) {
+ LOGGER.warn("Interaction does not contain author information.");
+ return actor;
+ }
+ String userName = author.getUsername();
+ String name = author.getName();
+ Long id = author.getId();
+ if(userName != null) {
+ actor.setDisplayName(userName);
+ } else {
+ actor.setDisplayName(name);
+ }
+
+ if(id != null) {
+ actor.setId(id.toString());
+ } else {
+ if(userName != null)
+ actor.setId(userName);
+ else
+ actor.setId(name);
+ }
+ Image image = new Image();
+ image.setUrl(interaction.getAuthor().getAvatar());
+ actor.setImage(image);
+ if (interaction.getAuthor().getLink()!=null){
+ actor.setUrl(interaction.getAuthor().getLink());
+ }
+ return actor;
+ }
+
+ public static ActivityObject buildActivityObject(Interaction interaction) {
+ ActivityObject actObj = new ActivityObject();
+ actObj.setObjectType(interaction.getContenttype());
+ actObj.setUrl(interaction.getLink());
+ actObj.setId(formatId("post",interaction.getId()));
+ actObj.setContent(interaction.getContent());
+
+ return actObj;
+ }
+
+ public static List<String> getLinks(Datasift event) {
+ List<String> result = Lists.newArrayList();
+ Links links = event.getLinks();
+ if(links == null)
+ return null;
+ for(Object link : links.getNormalizedUrl()) {
+ if(link != null) {
+ if(link instanceof String) {
+ result.add((String) link);
+ } else {
+ LOGGER.warn("link is not of type String : {}", link.getClass().getName());
+ }
+ }
+ }
+ return result;
+ }
+
+ public static ActivityObject buildTarget(Interaction interaction) {
+ return null;
+ }
+
+ public static void addLocationExtension(Activity activity, Interaction interaction) {
+ Map<String, Object> extensions = ensureExtensions(activity);
+ Map<String, Object> location = new HashMap<String, Object>();
+ Map<String, Double> coordinates = new HashMap<String, Double>();
+ coordinates.put("latitude", interaction.getGeo().getLatitude());
+ coordinates.put("longitude", interaction.getGeo().getLongitude());
+ location.put("coordinates", coordinates);
+ extensions.put("location", location);
+ }
+
+ public static String firstStringIfNotNull(List<Object> list) {
+ if( list != null && list.size() > 0) {
+ return (String) list.get(0);
+ } else return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftInteractionActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftInteractionActivitySerializer.java b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftInteractionActivitySerializer.java
deleted file mode 100644
index c856dc2..0000000
--- a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftInteractionActivitySerializer.java
+++ /dev/null
@@ -1,222 +0,0 @@
-package org.apache.streams.datasift.serializer;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.base.Joiner;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.datasift.Datasift;
-import org.apache.streams.datasift.interaction.Interaction;
-import org.apache.streams.datasift.links.Links;
-import org.apache.streams.datasift.util.StreamsDatasiftMapper;
-import org.apache.streams.pojo.json.*;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.apache.streams.data.util.ActivityUtil.ensureExtensions;
-
-/**
- *
- */
-public class DatasiftInteractionActivitySerializer implements ActivitySerializer<Datasift>, Serializable {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(DatasiftInteractionActivitySerializer.class);
-
- private static DatasiftInteractionActivitySerializer instance = new DatasiftInteractionActivitySerializer();
-
- public static DatasiftInteractionActivitySerializer getInstance() {
- return instance;
- }
-
- ObjectMapper mapper = StreamsDatasiftMapper.getInstance();
-
- @Override
- public String serializationFormat() {
- return "application/json+datasift.com.v1.1";
- }
-
- @Override
- public Datasift serialize(Activity deserialized) {
- throw new UnsupportedOperationException("Cannot currently serialize to Datasift JSON");
- }
-
- public Activity deserialize(String datasiftJson) {
- try {
- return deserialize(this.mapper.readValue(datasiftJson, Datasift.class));
- } catch (Exception e) {
- LOGGER.error("Exception while trying convert,\n {},\n to a Datasift object.", datasiftJson);
- LOGGER.error("Exception : {}", e);
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public Activity deserialize(Datasift serialized) {
-
- try {
-
- Activity activity = convert(serialized);
-
- return activity;
-
- } catch (Exception e) {
- throw new IllegalArgumentException("Unable to deserialize", e);
- }
-
- }
-
- @Override
- public List<Activity> deserializeAll(List<Datasift> datasifts) {
- List<Activity> activities = Lists.newArrayList();
- for( Datasift datasift : datasifts ) {
- activities.add(deserialize(datasift));
- }
- return activities;
- }
-
- public static Generator buildGenerator(Interaction interaction) {
- Generator generator = new Generator();
- generator.setDisplayName(interaction.getSource());
- generator.setId(interaction.getSource());
- return generator;
- }
-
- public static Icon getIcon(Interaction interaction) {
- return null;
- }
-
- public static Provider buildProvider(Interaction interaction) {
- Provider provider = new Provider();
- provider.setId("id:providers:"+interaction.getType());
- provider.setDisplayName(interaction.getType());
- return provider;
- }
-
- public static String getUrls(Interaction interaction) {
- return null;
- }
-
- public static void addDatasiftExtension(Activity activity, Datasift datasift) {
- Map<String, Object> extensions = org.apache.streams.data.util.ActivityUtil.ensureExtensions(activity);
- extensions.put("datasift", datasift);
- }
-
- public static String formatId(String... idparts) {
- return Joiner.on(":").join(Lists.asList("id:datasift", idparts));
- }
-
- public Activity convert(Datasift event) {
-
- Preconditions.checkNotNull(event);
- Preconditions.checkNotNull(event.getInteraction());
-
- Activity activity = new Activity();
- activity.setActor(buildActor(event.getInteraction()));
- activity.setVerb(selectVerb(event));
- activity.setObject(buildActivityObject(event.getInteraction()));
- activity.setId(formatId(activity.getVerb(), event.getInteraction().getId()));
- activity.setTarget(buildTarget(event.getInteraction()));
- activity.setPublished(event.getInteraction().getCreatedAt());
- activity.setGenerator(buildGenerator(event.getInteraction()));
- activity.setIcon(getIcon(event.getInteraction()));
- activity.setProvider(buildProvider(event.getInteraction()));
- activity.setTitle(event.getInteraction().getTitle());
- activity.setContent(event.getInteraction().getContent());
- activity.setUrl(event.getInteraction().getLink());
- activity.setLinks(getLinks(event));
- addDatasiftExtension(activity, event);
- if( event.getInteraction().getGeo() != null) {
- addLocationExtension(activity, event.getInteraction());
- }
- return activity;
- }
-
- private String selectVerb(Datasift event) {
- return "post";
- }
-
- public Actor buildActor(Interaction interaction) {
- Actor actor = new Actor();
- org.apache.streams.datasift.interaction.Author author = interaction.getAuthor();
- if(author == null) {
- LOGGER.warn("Interaction does not contain author information.");
- return actor;
- }
- String userName = author.getUsername();
- String name = author.getName();
- Long id = author.getId();
- if(userName != null) {
- actor.setDisplayName(userName);
- } else {
- actor.setDisplayName(name);
- }
-
- if(id != null) {
- actor.setId(id.toString());
- } else {
- if(userName != null)
- actor.setId(userName);
- else
- actor.setId(name);
- }
- Image image = new Image();
- image.setUrl(interaction.getAuthor().getAvatar());
- actor.setImage(image);
- if (interaction.getAuthor().getLink()!=null){
- actor.setUrl(interaction.getAuthor().getLink());
- }
- return actor;
- }
-
- public static ActivityObject buildActivityObject(Interaction interaction) {
- ActivityObject actObj = new ActivityObject();
- actObj.setObjectType(interaction.getContenttype());
- actObj.setUrl(interaction.getLink());
- actObj.setId(formatId("post",interaction.getId()));
- actObj.setContent(interaction.getContent());
-
- return actObj;
- }
-
- public static List<String> getLinks(Datasift event) {
- List<String> result = Lists.newArrayList();
- Links links = event.getLinks();
- if(links == null)
- return null;
- for(Object link : links.getNormalizedUrl()) {
- if(link != null) {
- if(link instanceof String) {
- result.add((String) link);
- } else {
- LOGGER.warn("link is not of type String : {}", link.getClass().getName());
- }
- }
- }
- return result;
- }
-
- public static ActivityObject buildTarget(Interaction interaction) {
- return null;
- }
-
- public static void addLocationExtension(Activity activity, Interaction interaction) {
- Map<String, Object> extensions = ensureExtensions(activity);
- Map<String, Object> location = new HashMap<String, Object>();
- Map<String, Double> coordinates = new HashMap<String, Double>();
- coordinates.put("latitude", interaction.getGeo().getLatitude());
- coordinates.put("longitude", interaction.getGeo().getLongitude());
- location.put("coordinates", coordinates);
- extensions.put("location", location);
- }
-
- public static String firstStringIfNotNull(List<Object> list) {
- if( list != null && list.size() > 0) {
- return (String) list.get(0);
- } else return null;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftTwitterActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftTwitterActivityConverter.java b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftTwitterActivityConverter.java
new file mode 100644
index 0000000..408e936
--- /dev/null
+++ b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftTwitterActivityConverter.java
@@ -0,0 +1,272 @@
+/*
+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
+with the License. You may obtain a copy of the License at
+
+ 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.datasift.serializer;
+
+
+import com.google.common.base.Joiner;
+import com.google.common.base.Optional;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import org.apache.streams.datasift.Datasift;
+import org.apache.streams.datasift.interaction.Author;
+import org.apache.streams.datasift.interaction.Interaction;
+import org.apache.streams.datasift.twitter.DatasiftTwitterUser;
+import org.apache.streams.datasift.twitter.Retweet;
+import org.apache.streams.datasift.twitter.Twitter;
+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.twitter.serializer.util.TwitterActivityUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import static org.apache.streams.data.util.ActivityUtil.ensureExtensions;
+
+/**
+ *
+ */
+public class DatasiftTwitterActivityConverter extends DatasiftInteractionActivityConverter {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(DatasiftTwitterActivityConverter.class);
+
+ private static DatasiftTwitterActivityConverter instance = new DatasiftTwitterActivityConverter();
+
+ public static DatasiftTwitterActivityConverter getInstance() {
+ return instance;
+ }
+
+ @Override
+ public Activity convert(Datasift event) {
+ Activity activity = new Activity();
+ Twitter twitter = event.getTwitter();
+ boolean retweet = twitter.getRetweet() != null;
+
+ activity.setActor(buildActor(event, twitter)); //TODO
+ if(retweet) {
+ activity.setVerb("share");
+ } else {
+ activity.setVerb("post");
+ }
+ activity.setObject(buildActivityObject(event.getInteraction()));
+ activity.setId(formatId(activity.getVerb(), event.getInteraction().getId()));
+ activity.setTarget(buildTarget(event.getInteraction()));
+ activity.setPublished(event.getInteraction().getCreatedAt());
+ activity.setGenerator(buildGenerator(event.getInteraction()));
+ activity.setIcon(getIcon(event.getInteraction()));
+ activity.setProvider(TwitterActivityUtil.getProvider());
+ activity.setTitle(event.getInteraction().getTitle());
+ activity.setContent(event.getInteraction().getContent());
+ activity.setUrl(event.getInteraction().getLink());
+ if(retweet)
+ activity.setLinks(getLinks(twitter.getRetweet()));
+ else
+ activity.setLinks(getLinks(twitter));
+ addDatasiftExtension(activity, event);
+ if( twitter.getGeo() != null) {
+ addLocationExtension(activity, twitter);
+ }
+ addTwitterExtensions(activity, twitter, event.getInteraction());
+ return activity;
+ }
+
+ /**
+ * Get the links from this tweet as a list
+ * @param twitter
+ * @return the links from the tweet
+ */
+ public List<String> getLinks(Twitter twitter) {
+ return getLinks(twitter.getLinks());
+ }
+
+ /**
+ * Get the links from this tweet as a list
+ * @param retweet
+ * @return the links from the tweet
+ */
+ public List<String> getLinks(Retweet retweet) {
+ return getLinks(retweet.getLinks());
+ }
+
+ /**
+ * Converts the list of objects to a list of strings
+ * @param links
+ * @return
+ */
+ private List<String> getLinks(List<Object> links) {
+ if(links == null)
+ return Lists.newArrayList();
+ List<String> result = Lists.newLinkedList();
+ for(Object obj : links) {
+ if(obj instanceof String) {
+ result.add((String) obj);
+ } else {
+ LOGGER.warn("Links is not instance of String : {}", obj.getClass().getName());
+ }
+ }
+ return result;
+ }
+
+ public Actor buildActor(Datasift event, Twitter twitter) {
+ DatasiftTwitterUser user = twitter.getUser();
+ Actor actor = super.buildActor(event.getInteraction());
+ if(user == null) {
+ user = twitter.getRetweet().getUser();
+ }
+
+ actor.setDisplayName(user.getName());
+ actor.setId(formatId(Optional.fromNullable(
+ user.getIdStr())
+ .or(Optional.of(user.getId().toString()))
+ .orNull()));
+ actor.setSummary(user.getDescription());
+ try {
+ actor.setPublished(user.getCreatedAt());
+ } catch (Exception e) {
+ LOGGER.warn("Exception trying to parse date : {}", e);
+ }
+
+ if(user.getUrl() != null) {
+ actor.setUrl(user.getUrl());
+ }
+
+ Map<String, Object> extensions = new HashMap<String,Object>();
+ extensions.put("location", user.getLocation());
+ extensions.put("posts", user.getStatusesCount());
+ extensions.put("followers", user.getFollowersCount());
+ extensions.put("screenName", user.getScreenName());
+ if(user.getAdditionalProperties() != null) {
+ extensions.put("favorites", user.getFavouritesCount());
+ }
+
+ Image profileImage = new Image();
+ String profileUrl = null;
+ Author author = event.getInteraction().getAuthor();
+ if( author != null )
+ profileUrl = author.getAvatar();
+ if(profileUrl == null && user.getProfileImageUrlHttps() != null) {
+ Object url = user.getProfileImageUrlHttps();
+ if(url instanceof String)
+ profileUrl = (String) url;
+ }
+ if(profileUrl == null) {
+ profileUrl = user.getProfileImageUrl();
+ }
+ profileImage.setUrl(profileUrl);
+ actor.setImage(profileImage);
+
+ actor.setAdditionalProperty("extensions", extensions);
+ return actor;
+ }
+
+ public void addLocationExtension(Activity activity, Twitter twitter) {
+ Map<String, Object> extensions = ensureExtensions(activity);
+ Map<String, Object> location = Maps.newHashMap();
+ double[] coordiantes = new double[] { twitter.getGeo().getLongitude(), twitter.getGeo().getLatitude() };
+ Map<String, Object> coords = Maps.newHashMap();
+ coords.put("coordinates", coordiantes);
+ coords.put("type", "geo_point");
+ location.put("coordinates", coords);
+ extensions.put("location", location);
+ }
+
+ public void addTwitterExtensions(Activity activity, Twitter twitter, Interaction interaction) {
+ Retweet retweet = twitter.getRetweet();
+ Map<String, Object> extensions = ensureExtensions(activity);
+ List<String> hashTags = Lists.newLinkedList();
+ List<Object> hts = Lists.newLinkedList();
+ if(twitter.getHashtags() != null) {
+ hts = twitter.getHashtags();
+ } else if (retweet != null) {
+ hts = retweet.getHashtags();
+ }
+ if(hts != null) {
+ for(Object ht : twitter.getHashtags()) {
+ if(ht instanceof String) {
+ hashTags.add((String) ht);
+ } else {
+ LOGGER.warn("Hashtag was not instance of String : {}", ht.getClass().getName());
+ }
+ }
+ }
+ extensions.put("hashtags", hashTags);
+
+
+ if(retweet != null) {
+ Map<String, Object> rebroadcasts = Maps.newHashMap();
+ rebroadcasts.put("perspectival", true);
+ rebroadcasts.put("count", retweet.getCount());
+ extensions.put("rebroadcasts", rebroadcasts);
+ }
+
+ if(interaction.getAdditionalProperties() != null) {
+ ArrayList<Map<String,Object>> userMentions = createUserMentions(interaction);
+
+ if(userMentions.size() > 0)
+ extensions.put("user_mentions", userMentions);
+ }
+
+ extensions.put("keywords", interaction.getContent());
+ }
+
+ /**
+ * Returns an ArrayList of all UserMentions in this interaction
+ * Note: The ID list and the handle lists do not necessarily correspond 1:1 for this provider
+ * If those lists are the same size, then they will be merged into individual UserMention
+ * objects. However, if they are not the same size, a new UserMention object will be created
+ * for each entry in both lists.
+ *
+ * @param interaction
+ * @return
+ */
+ private ArrayList<Map<String,Object>> createUserMentions(Interaction interaction) {
+ ArrayList<String> mentions = (ArrayList<String>) interaction.getAdditionalProperties().get("mentions");
+ ArrayList<Long> mentionIds = (ArrayList<Long>) interaction.getAdditionalProperties().get("mention_ids");
+ ArrayList<Map<String,Object>> userMentions = new ArrayList<Map<String,Object>>();
+
+ if(mentions != null && !mentions.isEmpty()) {
+ for(int x = 0; x < mentions.size(); x ++) {
+ Map<String, Object> actor = new HashMap<String, Object>();
+ actor.put("displayName", mentions.get(x));
+ actor.put("handle", mentions.get(x));
+
+ userMentions.add(actor);
+ }
+ }
+ if(mentionIds != null && !mentionIds.isEmpty()) {
+ for(int x = 0; x < mentionIds.size(); x ++) {
+ Map<String, Object> actor = new HashMap<String, Object>();
+ actor.put("id", "id:twitter:" + mentionIds.get(x));
+
+ userMentions.add(actor);
+ }
+ }
+
+ return userMentions;
+ }
+
+ public static String formatId(String... idparts) {
+ return Joiner.on(":").join(Lists.asList("id:twitter", idparts));
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftTwitterActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftTwitterActivitySerializer.java b/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftTwitterActivitySerializer.java
deleted file mode 100644
index 8ac84f6..0000000
--- a/streams-contrib/streams-provider-datasift/src/main/java/org/apache/streams/datasift/serializer/DatasiftTwitterActivitySerializer.java
+++ /dev/null
@@ -1,272 +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
-with the License. You may obtain a copy of the License at
-
- 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.datasift.serializer;
-
-
-import com.google.common.base.Joiner;
-import com.google.common.base.Optional;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import org.apache.streams.datasift.Datasift;
-import org.apache.streams.datasift.interaction.Author;
-import org.apache.streams.datasift.interaction.Interaction;
-import org.apache.streams.datasift.twitter.DatasiftTwitterUser;
-import org.apache.streams.datasift.twitter.Retweet;
-import org.apache.streams.datasift.twitter.Twitter;
-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.twitter.serializer.util.TwitterActivityUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.apache.streams.data.util.ActivityUtil.ensureExtensions;
-
-/**
- *
- */
-public class DatasiftTwitterActivitySerializer extends DatasiftInteractionActivitySerializer {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(DatasiftTwitterActivitySerializer.class);
-
- private static DatasiftTwitterActivitySerializer instance = new DatasiftTwitterActivitySerializer();
-
- public static DatasiftTwitterActivitySerializer getInstance() {
- return instance;
- }
-
- @Override
- public Activity convert(Datasift event) {
- Activity activity = new Activity();
- Twitter twitter = event.getTwitter();
- boolean retweet = twitter.getRetweet() != null;
-
- activity.setActor(buildActor(event, twitter)); //TODO
- if(retweet) {
- activity.setVerb("share");
- } else {
- activity.setVerb("post");
- }
- activity.setObject(buildActivityObject(event.getInteraction()));
- activity.setId(formatId(activity.getVerb(), event.getInteraction().getId()));
- activity.setTarget(buildTarget(event.getInteraction()));
- activity.setPublished(event.getInteraction().getCreatedAt());
- activity.setGenerator(buildGenerator(event.getInteraction()));
- activity.setIcon(getIcon(event.getInteraction()));
- activity.setProvider(TwitterActivityUtil.getProvider());
- activity.setTitle(event.getInteraction().getTitle());
- activity.setContent(event.getInteraction().getContent());
- activity.setUrl(event.getInteraction().getLink());
- if(retweet)
- activity.setLinks(getLinks(twitter.getRetweet()));
- else
- activity.setLinks(getLinks(twitter));
- addDatasiftExtension(activity, event);
- if( twitter.getGeo() != null) {
- addLocationExtension(activity, twitter);
- }
- addTwitterExtensions(activity, twitter, event.getInteraction());
- return activity;
- }
-
- /**
- * Get the links from this tweet as a list
- * @param twitter
- * @return the links from the tweet
- */
- public List<String> getLinks(Twitter twitter) {
- return getLinks(twitter.getLinks());
- }
-
- /**
- * Get the links from this tweet as a list
- * @param retweet
- * @return the links from the tweet
- */
- public List<String> getLinks(Retweet retweet) {
- return getLinks(retweet.getLinks());
- }
-
- /**
- * Converts the list of objects to a list of strings
- * @param links
- * @return
- */
- private List<String> getLinks(List<Object> links) {
- if(links == null)
- return Lists.newArrayList();
- List<String> result = Lists.newLinkedList();
- for(Object obj : links) {
- if(obj instanceof String) {
- result.add((String) obj);
- } else {
- LOGGER.warn("Links is not instance of String : {}", obj.getClass().getName());
- }
- }
- return result;
- }
-
- public Actor buildActor(Datasift event, Twitter twitter) {
- DatasiftTwitterUser user = twitter.getUser();
- Actor actor = super.buildActor(event.getInteraction());
- if(user == null) {
- user = twitter.getRetweet().getUser();
- }
-
- actor.setDisplayName(user.getName());
- actor.setId(formatId(Optional.fromNullable(
- user.getIdStr())
- .or(Optional.of(user.getId().toString()))
- .orNull()));
- actor.setSummary(user.getDescription());
- try {
- actor.setPublished(user.getCreatedAt());
- } catch (Exception e) {
- LOGGER.warn("Exception trying to parse date : {}", e);
- }
-
- if(user.getUrl() != null) {
- actor.setUrl(user.getUrl());
- }
-
- Map<String, Object> extensions = new HashMap<String,Object>();
- extensions.put("location", user.getLocation());
- extensions.put("posts", user.getStatusesCount());
- extensions.put("followers", user.getFollowersCount());
- extensions.put("screenName", user.getScreenName());
- if(user.getAdditionalProperties() != null) {
- extensions.put("favorites", user.getFavouritesCount());
- }
-
- Image profileImage = new Image();
- String profileUrl = null;
- Author author = event.getInteraction().getAuthor();
- if( author != null )
- profileUrl = author.getAvatar();
- if(profileUrl == null && user.getProfileImageUrlHttps() != null) {
- Object url = user.getProfileImageUrlHttps();
- if(url instanceof String)
- profileUrl = (String) url;
- }
- if(profileUrl == null) {
- profileUrl = user.getProfileImageUrl();
- }
- profileImage.setUrl(profileUrl);
- actor.setImage(profileImage);
-
- actor.setAdditionalProperty("extensions", extensions);
- return actor;
- }
-
- public void addLocationExtension(Activity activity, Twitter twitter) {
- Map<String, Object> extensions = ensureExtensions(activity);
- Map<String, Object> location = Maps.newHashMap();
- double[] coordiantes = new double[] { twitter.getGeo().getLongitude(), twitter.getGeo().getLatitude() };
- Map<String, Object> coords = Maps.newHashMap();
- coords.put("coordinates", coordiantes);
- coords.put("type", "geo_point");
- location.put("coordinates", coords);
- extensions.put("location", location);
- }
-
- public void addTwitterExtensions(Activity activity, Twitter twitter, Interaction interaction) {
- Retweet retweet = twitter.getRetweet();
- Map<String, Object> extensions = ensureExtensions(activity);
- List<String> hashTags = Lists.newLinkedList();
- List<Object> hts = Lists.newLinkedList();
- if(twitter.getHashtags() != null) {
- hts = twitter.getHashtags();
- } else if (retweet != null) {
- hts = retweet.getHashtags();
- }
- if(hts != null) {
- for(Object ht : twitter.getHashtags()) {
- if(ht instanceof String) {
- hashTags.add((String) ht);
- } else {
- LOGGER.warn("Hashtag was not instance of String : {}", ht.getClass().getName());
- }
- }
- }
- extensions.put("hashtags", hashTags);
-
-
- if(retweet != null) {
- Map<String, Object> rebroadcasts = Maps.newHashMap();
- rebroadcasts.put("perspectival", true);
- rebroadcasts.put("count", retweet.getCount());
- extensions.put("rebroadcasts", rebroadcasts);
- }
-
- if(interaction.getAdditionalProperties() != null) {
- ArrayList<Map<String,Object>> userMentions = createUserMentions(interaction);
-
- if(userMentions.size() > 0)
- extensions.put("user_mentions", userMentions);
- }
-
- extensions.put("keywords", interaction.getContent());
- }
-
- /**
- * Returns an ArrayList of all UserMentions in this interaction
- * Note: The ID list and the handle lists do not necessarily correspond 1:1 for this provider
- * If those lists are the same size, then they will be merged into individual UserMention
- * objects. However, if they are not the same size, a new UserMention object will be created
- * for each entry in both lists.
- *
- * @param interaction
- * @return
- */
- private ArrayList<Map<String,Object>> createUserMentions(Interaction interaction) {
- ArrayList<String> mentions = (ArrayList<String>) interaction.getAdditionalProperties().get("mentions");
- ArrayList<Long> mentionIds = (ArrayList<Long>) interaction.getAdditionalProperties().get("mention_ids");
- ArrayList<Map<String,Object>> userMentions = new ArrayList<Map<String,Object>>();
-
- if(mentions != null && !mentions.isEmpty()) {
- for(int x = 0; x < mentions.size(); x ++) {
- Map<String, Object> actor = new HashMap<String, Object>();
- actor.put("displayName", mentions.get(x));
- actor.put("handle", mentions.get(x));
-
- userMentions.add(actor);
- }
- }
- if(mentionIds != null && !mentionIds.isEmpty()) {
- for(int x = 0; x < mentionIds.size(); x ++) {
- Map<String, Object> actor = new HashMap<String, Object>();
- actor.put("id", "id:twitter:" + mentionIds.get(x));
-
- userMentions.add(actor);
- }
- }
-
- return userMentions;
- }
-
- public static String formatId(String... idparts) {
- return Joiner.on(":").join(Lists.asList("id:twitter", idparts));
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/test/java17/com/datasift/test/DatasiftSerDeTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/test/java17/com/datasift/test/DatasiftSerDeTest.java b/streams-contrib/streams-provider-datasift/src/test/java17/com/datasift/test/DatasiftSerDeTest.java
index 750915e..aa6a587 100644
--- a/streams-contrib/streams-provider-datasift/src/test/java17/com/datasift/test/DatasiftSerDeTest.java
+++ b/streams-contrib/streams-provider-datasift/src/test/java17/com/datasift/test/DatasiftSerDeTest.java
@@ -43,7 +43,7 @@ public class DatasiftSerDeTest {
private final static Logger LOGGER = LoggerFactory.getLogger(DatasiftSerDeTest.class);
- private ObjectMapper mapper = StreamsJacksonMapper.getInstance(Lists.newArrayList(StreamsDatasiftMapper.DATASIFT_FORMAT));
+ private ObjectMapper mapper = StreamsJacksonMapper.getInstance(StreamsDatasiftMapper.DATASIFT_FORMAT);
@Test
public void Tests()
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftActivityConverterTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftActivityConverterTest.java b/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftActivityConverterTest.java
new file mode 100644
index 0000000..057875f
--- /dev/null
+++ b/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftActivityConverterTest.java
@@ -0,0 +1,85 @@
+package org.apache.streams.datasift.serializer;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.collect.Lists;
+import org.apache.commons.lang.StringUtils;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.datasift.Datasift;
+import org.apache.streams.datasift.util.StreamsDatasiftMapper;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.apache.streams.pojo.json.Activity;
+import org.apache.streams.pojo.json.Actor;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Scanner;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+public class DatasiftActivityConverterTest {
+
+ protected ActivityConverter SERIALIZER;
+
+ protected static ObjectMapper MAPPER = StreamsJacksonMapper.getInstance(StreamsDatasiftMapper.DATASIFT_FORMAT);
+
+ @Before
+ public void initSerializer() {
+ SERIALIZER = new DatasiftActivityConverter();
+ }
+
+ @Test
+ public void testConversion() throws Exception {
+ Scanner scanner = new Scanner(DatasiftActivityConverterTest.class.getResourceAsStream("/rand_sample_datasift_json.txt"));
+ String line = null;
+ while(scanner.hasNextLine()) {
+ try {
+ line = scanner.nextLine();
+ Datasift item = MAPPER.readValue(line, Datasift.class);
+ testConversion(item);
+ String json = MAPPER.writeValueAsString(item);
+ testDeserNoNull(json);
+ testDeserNoAddProps(json);
+ } catch (Exception e) {
+ System.err.println(line);
+ throw e;
+ }
+ }
+ }
+
+ /**
+ * Test that the minimum number of things that an activity has
+ * @param item
+ */
+ protected void testConversion(Datasift item) throws Exception {
+ Activity activity = SERIALIZER.deserialize(item);
+ assertNotNull("activity.id", activity.getId());
+ assertNotNull("activity.published", activity.getPublished());
+ assertNotNull("activity.provider", activity.getProvider());
+ assertNotNull("activity.url", activity.getUrl());
+ assertNotNull("activity.verb", activity.getVerb());
+ Actor actor = activity.getActor();
+ assertNotNull("activity.actor", actor);
+ }
+
+ /**
+ * Test that null fields are not present
+ * @param json
+ */
+ protected void testDeserNoNull(String json) throws Exception {
+ int nulls = StringUtils.countMatches(json, ":null");
+ assertEquals(0l, (long)nulls);
+
+ }
+
+ /**
+ * Test that null fields are not present
+ * @param json
+ */
+ protected void testDeserNoAddProps(String json) throws Exception {
+ int nulls = StringUtils.countMatches(json, "additionalProperties:{");
+ assertEquals(0l, (long)nulls);
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftActivitySerializerTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftActivitySerializerTest.java b/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftActivitySerializerTest.java
deleted file mode 100644
index 8f7ad43..0000000
--- a/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftActivitySerializerTest.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.apache.streams.datasift.serializer;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.collect.Lists;
-import org.apache.commons.lang.StringUtils;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.datasift.Datasift;
-import org.apache.streams.datasift.util.StreamsDatasiftMapper;
-import org.apache.streams.jackson.StreamsJacksonMapper;
-import org.apache.streams.pojo.json.Activity;
-import org.apache.streams.pojo.json.Actor;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.Scanner;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-public class DatasiftActivitySerializerTest {
-
- protected ActivitySerializer SERIALIZER;
-
- protected static ObjectMapper MAPPER = StreamsJacksonMapper.getInstance(Lists.newArrayList(StreamsDatasiftMapper.DATASIFT_FORMAT));
-
- @Before
- public void initSerializer() {
- SERIALIZER = new DatasiftActivitySerializer();
- }
-
- @Test
- public void testConversion() throws Exception {
- Scanner scanner = new Scanner(DatasiftActivitySerializerTest.class.getResourceAsStream("/rand_sample_datasift_json.txt"));
- String line = null;
- while(scanner.hasNextLine()) {
- try {
- line = scanner.nextLine();
- Datasift item = MAPPER.readValue(line, Datasift.class);
- testConversion(item);
- String json = MAPPER.writeValueAsString(item);
- testDeserNoNull(json);
- testDeserNoAddProps(json);
- } catch (Exception e) {
- System.err.println(line);
- throw e;
- }
- }
- }
-
- /**
- * Test that the minimum number of things that an activity has
- * @param item
- */
- protected void testConversion(Datasift item) throws Exception {
- Activity activity = SERIALIZER.deserialize(item);
- assertNotNull("activity.id", activity.getId());
- assertNotNull("activity.published", activity.getPublished());
- assertNotNull("activity.provider", activity.getProvider());
- assertNotNull("activity.url", activity.getUrl());
- assertNotNull("activity.verb", activity.getVerb());
- Actor actor = activity.getActor();
- assertNotNull("activity.actor", actor);
- }
-
- /**
- * Test that null fields are not present
- * @param json
- */
- protected void testDeserNoNull(String json) throws Exception {
- int nulls = StringUtils.countMatches(json, ":null");
- assertEquals(0l, (long)nulls);
-
- }
-
- /**
- * Test that null fields are not present
- * @param json
- */
- protected void testDeserNoAddProps(String json) throws Exception {
- int nulls = StringUtils.countMatches(json, "additionalProperties:{");
- assertEquals(0l, (long)nulls);
-
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftEventClassifierTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftEventClassifierTest.java b/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftEventClassifierTest.java
index fda57c4..48aaeef 100644
--- a/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftEventClassifierTest.java
+++ b/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftEventClassifierTest.java
@@ -20,11 +20,14 @@ package org.apache.streams.datasift.serializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.collect.Lists;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.data.ActivityConverterFactory;
import org.apache.streams.datasift.Datasift;
import org.apache.streams.datasift.instagram.Instagram;
import org.apache.streams.datasift.twitter.Twitter;
import org.apache.streams.datasift.util.StreamsDatasiftMapper;
import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.apache.streams.pojo.json.Activity;
import org.junit.Test;
import java.util.Scanner;
@@ -38,25 +41,33 @@ public class DatasiftEventClassifierTest {
@Test
public void testTwitterDetection() throws Exception {
- Scanner scanner = new Scanner(DatasiftActivitySerializerTest.class.getResourceAsStream("/twitter_datasift_json.txt"));
+ Scanner scanner = new Scanner(DatasiftActivityConverterTest.class.getResourceAsStream("/twitter_datasift_json.txt"));
String line = null;
while(scanner.hasNextLine()) {
line = scanner.nextLine();
Datasift datasift = MAPPER.readValue(line, Datasift.class);
- assert(DatasiftEventClassifier.detectClass(datasift) == Twitter.class);
- assert(DatasiftEventClassifier.bestSerializer(datasift) instanceof DatasiftTwitterActivitySerializer);
+ Class detectedClass = DatasiftEventClassifier.getInstance().detectClass(datasift);
+ assert(detectedClass == Twitter.class);
+ Class converterClass = DatasiftConverterResolver.getInstance().bestSerializer(detectedClass);
+ assert(converterClass == DatasiftTwitterActivityConverter.class);
+ ActivityConverter detectedConverter = ActivityConverterFactory.getInstance(converterClass);
+ assert(detectedConverter instanceof DatasiftTwitterActivityConverter);
}
}
@Test
public void testInstagramDetection() throws Exception {
- Scanner scanner = new Scanner(DatasiftActivitySerializerTest.class.getResourceAsStream("/instagram_datasift_json.txt"));
+ Scanner scanner = new Scanner(DatasiftActivityConverterTest.class.getResourceAsStream("/instagram_datasift_json.txt"));
String line = null;
while(scanner.hasNextLine()) {
line = scanner.nextLine();
Datasift datasift = MAPPER.readValue(line, Datasift.class);
- assert(DatasiftEventClassifier.detectClass(datasift) == Instagram.class);
- assert(DatasiftEventClassifier.bestSerializer(datasift) instanceof DatasiftInstagramActivitySerializer);
+ Class detectedClass = DatasiftEventClassifier.getInstance().detectClass(datasift);
+ assert(detectedClass == Instagram.class);
+ Class converterClass = DatasiftConverterResolver.getInstance().bestSerializer(detectedClass);
+ assert(converterClass == DatasiftInstagramActivityConverter.class);
+ ActivityConverter detectedConverter = ActivityConverterFactory.getInstance(converterClass);
+ assert(detectedConverter instanceof DatasiftInstagramActivityConverter);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftInstagramActivityConverterTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftInstagramActivityConverterTest.java b/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftInstagramActivityConverterTest.java
new file mode 100644
index 0000000..8199319
--- /dev/null
+++ b/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftInstagramActivityConverterTest.java
@@ -0,0 +1,35 @@
+package org.apache.streams.datasift.serializer;
+
+import org.apache.streams.datasift.Datasift;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Scanner;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+public class DatasiftInstagramActivityConverterTest extends DatasiftActivityConverterTest {
+
+ @Before
+ @Override
+ public void initSerializer() {
+ SERIALIZER = new DatasiftInstagramActivityConverter();
+ }
+
+ @Test
+ @Override
+ public void testConversion() throws Exception {
+ Scanner scanner = new Scanner(DatasiftActivityConverterTest.class.getResourceAsStream("/instagram_datasift_json.txt"));
+ String line = null;
+ while(scanner.hasNextLine()) {
+ line = scanner.nextLine();
+ Datasift item = MAPPER.readValue(line, Datasift.class);
+ testConversion(item);
+ String json = MAPPER.writeValueAsString(item);
+ testDeserNoNull(json);
+ testDeserNoAddProps(json);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftInstagramActivitySerializerTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftInstagramActivitySerializerTest.java b/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftInstagramActivitySerializerTest.java
deleted file mode 100644
index 5350d74..0000000
--- a/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftInstagramActivitySerializerTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.apache.streams.datasift.serializer;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.collect.Lists;
-import org.apache.commons.lang.StringUtils;
-import org.apache.streams.datasift.Datasift;
-import org.apache.streams.datasift.util.StreamsDatasiftMapper;
-import org.apache.streams.jackson.StreamsJacksonMapper;
-import org.apache.streams.pojo.json.Activity;
-import org.apache.streams.pojo.json.Actor;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.Scanner;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-public class DatasiftInstagramActivitySerializerTest extends DatasiftActivitySerializerTest {
-
- @Before
- @Override
- public void initSerializer() {
- SERIALIZER = new DatasiftInstagramActivitySerializer();
- }
-
- @Test
- @Override
- public void testConversion() throws Exception {
- Scanner scanner = new Scanner(DatasiftActivitySerializerTest.class.getResourceAsStream("/instagram_datasift_json.txt"));
- String line = null;
- while(scanner.hasNextLine()) {
- line = scanner.nextLine();
- Datasift item = MAPPER.readValue(line, Datasift.class);
- testConversion(item);
- String json = MAPPER.writeValueAsString(item);
- testDeserNoNull(json);
- testDeserNoAddProps(json);
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftInteractionActivityConverterTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftInteractionActivityConverterTest.java b/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftInteractionActivityConverterTest.java
new file mode 100644
index 0000000..c79db35
--- /dev/null
+++ b/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftInteractionActivityConverterTest.java
@@ -0,0 +1,40 @@
+package org.apache.streams.datasift.serializer;
+
+import org.apache.streams.datasift.Datasift;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Scanner;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+public class DatasiftInteractionActivityConverterTest extends DatasiftActivityConverterTest {
+
+ @Before
+ @Override
+ public void initSerializer() {
+ SERIALIZER = new DatasiftInteractionActivityConverter();
+ }
+
+ @Test
+ @Override
+ public void testConversion() throws Exception {
+ Scanner scanner = new Scanner(DatasiftInteractionActivityConverterTest.class.getResourceAsStream("/rand_sample_datasift_json.txt"));
+ String line = null;
+ while(scanner.hasNextLine()) {
+ try {
+ line = scanner.nextLine();
+ Datasift item = MAPPER.readValue(line, Datasift.class);
+ testConversion(item);
+ String json = MAPPER.writeValueAsString(item);
+ testDeserNoNull(json);
+ testDeserNoAddProps(json);
+ } catch (Exception e) {
+ System.err.println(line);
+ throw e;
+ }
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftInteractionActivitySerializerTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftInteractionActivitySerializerTest.java b/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftInteractionActivitySerializerTest.java
deleted file mode 100644
index 21d4ebb..0000000
--- a/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftInteractionActivitySerializerTest.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package org.apache.streams.datasift.serializer;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.collect.Lists;
-import org.apache.commons.lang.StringUtils;
-import org.apache.streams.datasift.Datasift;
-import org.apache.streams.datasift.util.StreamsDatasiftMapper;
-import org.apache.streams.jackson.StreamsJacksonMapper;
-import org.apache.streams.pojo.json.Activity;
-import org.apache.streams.pojo.json.Actor;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.Scanner;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-public class DatasiftInteractionActivitySerializerTest extends DatasiftActivitySerializerTest {
-
- @Before
- @Override
- public void initSerializer() {
- SERIALIZER = new DatasiftInteractionActivitySerializer();
- }
-
- @Test
- @Override
- public void testConversion() throws Exception {
- Scanner scanner = new Scanner(DatasiftInteractionActivitySerializerTest.class.getResourceAsStream("/rand_sample_datasift_json.txt"));
- String line = null;
- while(scanner.hasNextLine()) {
- try {
- line = scanner.nextLine();
- Datasift item = MAPPER.readValue(line, Datasift.class);
- testConversion(item);
- String json = MAPPER.writeValueAsString(item);
- testDeserNoNull(json);
- testDeserNoAddProps(json);
- } catch (Exception e) {
- System.err.println(line);
- throw e;
- }
- }
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftTwitterActivityConverterTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftTwitterActivityConverterTest.java b/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftTwitterActivityConverterTest.java
new file mode 100644
index 0000000..3b123ec
--- /dev/null
+++ b/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftTwitterActivityConverterTest.java
@@ -0,0 +1,35 @@
+package org.apache.streams.datasift.serializer;
+
+import org.apache.streams.datasift.Datasift;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.Scanner;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+public class DatasiftTwitterActivityConverterTest extends DatasiftActivityConverterTest {
+
+ @Before
+ @Override
+ public void initSerializer() {
+ SERIALIZER = new DatasiftTwitterActivityConverter();
+ }
+
+ @Test
+ @Override
+ public void testConversion() throws Exception {
+ Scanner scanner = new Scanner(DatasiftTwitterActivityConverterTest.class.getResourceAsStream("/twitter_datasift_json.txt"));
+ String line = null;
+ while(scanner.hasNextLine()) {
+ line = scanner.nextLine();
+ Datasift item = MAPPER.readValue(line, Datasift.class);
+ testConversion(item);
+ String json = MAPPER.writeValueAsString(item);
+ testDeserNoNull(json);
+ testDeserNoAddProps(json);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftTwitterActivitySerializerTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftTwitterActivitySerializerTest.java b/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftTwitterActivitySerializerTest.java
deleted file mode 100644
index 33b1f77..0000000
--- a/streams-contrib/streams-provider-datasift/src/test/java17/org/apache/streams/datasift/serializer/DatasiftTwitterActivitySerializerTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.apache.streams.datasift.serializer;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.google.common.collect.Lists;
-import org.apache.commons.lang.StringUtils;
-import org.apache.streams.datasift.Datasift;
-import org.apache.streams.datasift.util.StreamsDatasiftMapper;
-import org.apache.streams.jackson.StreamsJacksonMapper;
-import org.apache.streams.pojo.json.Activity;
-import org.apache.streams.pojo.json.Actor;
-import org.junit.Before;
-import org.junit.Test;
-
-import java.util.Scanner;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-public class DatasiftTwitterActivitySerializerTest extends DatasiftActivitySerializerTest {
-
- @Before
- @Override
- public void initSerializer() {
- SERIALIZER = new DatasiftTwitterActivitySerializer();
- }
-
- @Test
- @Override
- public void testConversion() throws Exception {
- Scanner scanner = new Scanner(DatasiftTwitterActivitySerializerTest.class.getResourceAsStream("/twitter_datasift_json.txt"));
- String line = null;
- while(scanner.hasNextLine()) {
- line = scanner.nextLine();
- Datasift item = MAPPER.readValue(line, Datasift.class);
- testConversion(item);
- String json = MAPPER.writeValueAsString(item);
- testDeserNoNull(json);
- testDeserNoAddProps(json);
- }
- }
-
-}
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/FacebookPageActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPageActivityConverter.java b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPageActivityConverter.java
new file mode 100644
index 0000000..9f74909
--- /dev/null
+++ b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPageActivityConverter.java
@@ -0,0 +1,76 @@
+/*
+ * 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.ObjectMapper;
+import org.apache.commons.lang.NotImplementedException;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.exceptions.ActivitySerializerException;
+import org.apache.streams.facebook.serializer.FacebookActivityUtil;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.apache.streams.pojo.json.*;
+import org.apache.streams.facebook.Page;
+
+import java.util.List;
+
+/**
+ * Serializes activity posts
+ * sblackmon: This class needs a rewrite
+ */
+public class FacebookPageActivityConverter implements ActivityConverter<Page> {
+
+ public FacebookPageActivityConverter() {
+
+ }
+
+ private static FacebookPageActivityConverter instance = new FacebookPageActivityConverter();
+
+ public static FacebookPageActivityConverter getInstance() {
+ return instance;
+ }
+
+ public static ObjectMapper mapper;
+ static {
+ mapper = StreamsJacksonMapper.getInstance();
+ }
+
+ @Override
+ public String serializationFormat() {
+ return "facebook_post_json_v1";
+ }
+
+ @Override
+ public Page serialize(Activity deserialized) throws ActivitySerializerException {
+ throw new NotImplementedException("Not currently supported by this deserializer");
+ }
+
+ @Override
+ public Activity deserialize(Page page) throws ActivitySerializerException {
+ Activity activity = new Activity();
+
+ FacebookActivityUtil.updateActivity(page, activity);
+
+ return activity;
+ }
+
+ @Override
+ public List<Activity> deserializeAll(List<Page> serializedList) {
+ throw new NotImplementedException("Not currently supported by this deserializer");
+ }
+}
\ 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/api/FacebookPageActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPageActivitySerializer.java b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPageActivitySerializer.java
deleted file mode 100644
index f59ab1e..0000000
--- a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/api/FacebookPageActivitySerializer.java
+++ /dev/null
@@ -1,66 +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.databind.ObjectMapper;
-import org.apache.commons.lang.NotImplementedException;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.exceptions.ActivitySerializerException;
-import org.apache.streams.facebook.serializer.FacebookActivityUtil;
-import org.apache.streams.jackson.StreamsJacksonMapper;
-import org.apache.streams.pojo.json.*;
-import org.apache.streams.facebook.Page;
-
-import java.util.List;
-
-/**
- * Serializes activity posts
- * sblackmon: This class needs a rewrite
- */
-public class FacebookPageActivitySerializer implements ActivitySerializer<Page> {
-
- public static ObjectMapper mapper;
- static {
- mapper = StreamsJacksonMapper.getInstance();
- }
-
- @Override
- public String serializationFormat() {
- return "facebook_post_json_v1";
- }
-
- @Override
- public Page serialize(Activity deserialized) throws ActivitySerializerException {
- throw new NotImplementedException("Not currently supported by this deserializer");
- }
-
- @Override
- public Activity deserialize(Page page) throws ActivitySerializerException {
- Activity activity = new Activity();
-
- FacebookActivityUtil.updateActivity(page, activity);
-
- return activity;
- }
-
- @Override
- public List<Activity> deserializeAll(List<Page> serializedList) {
- throw new NotImplementedException("Not currently supported by this deserializer");
- }
-}
\ No newline at end of file
[9/9] incubator-streams git commit: assessed additional provider
modules either refactored for compatibility with streams-converters and/or
added comments/todos regarding deprecation etc...
Posted by sb...@apache.org.
assessed additional provider modules
either refactored for compatibility with streams-converters
and/or added comments/todos regarding deprecation etc...
Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/8737bdad
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/8737bdad
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/8737bdad
Branch: refs/heads/STREAMS-68,218
Commit: 8737bdadfe595f06dd47b6652d538eec3e3d7f36
Parents: 7a067ce
Author: sblackmon <sb...@apache.org>
Authored: Thu Nov 13 18:15:44 2014 -0600
Committer: sblackmon <sb...@apache.org>
Committed: Thu Nov 13 18:15:44 2014 -0600
----------------------------------------------------------------------
.../gplus/provider/GPlusEventProcessor.java | 94 ----------------
.../data/MoreoverJsonActivityConverter.java | 93 ----------------
.../data/MoreoverXmlActivityConverter.java | 105 ------------------
.../conversion/MoreoverConverterResolver.java | 20 ++++
.../conversion/MoreoverDocumentClassifier.java | 22 ++++
.../MoreoverJsonActivityConverter.java | 94 ++++++++++++++++
.../MoreoverXmlActivityConverter.java | 106 +++++++++++++++++++
.../data/MoreoverJsonActivityConverterTest.java | 1 +
.../data/MoreoverXmlActivityConverterTest.java | 1 +
.../streams/rss/processor/RssTypeConverter.java | 4 +
.../rss/provider/RssDocumentClassifier.java | 36 +++++++
.../rss/provider/RssEventClassifier.java | 32 ------
.../streams/rss/provider/RssEventProcessor.java | 102 ------------------
.../rss/serializer/RssConverterResolver.java | 18 ++++
.../SysomosBeatActivityConverter.java | 35 +++++-
.../conversion/SysomosConverterResolver.java | 19 ++++
.../conversion/SysomosDocumentClassifier.java | 16 +++
.../sysomos/processor/SysomosTypeConverter.java | 4 +
18 files changed, 374 insertions(+), 428 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/8737bdad/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
deleted file mode 100644
index 052020a..0000000
--- a/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/provider/GPlusEventProcessor.java
+++ /dev/null
@@ -1,94 +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.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.apache.streams.core.StreamsDatum;
-import org.apache.streams.pojo.json.Activity;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Queue;
-import java.util.Random;
-import java.util.concurrent.BlockingQueue;
-
-public class GPlusEventProcessor implements Runnable {
-
- private final static Logger LOGGER = LoggerFactory.getLogger(GPlusEventProcessor.class);
-
- private ObjectMapper mapper = new ObjectMapper();
-
- private BlockingQueue<String> inQueue;
- private Queue<StreamsDatum> outQueue;
-
- private Class inClass;
- private Class outClass;
-
- private GPlusActivityConverter gPlusActivitySerializer = new GPlusActivityConverter();
-
- public final static String TERMINATE = new String("TERMINATE");
-
- public GPlusEventProcessor(BlockingQueue<String> inQueue, Queue<StreamsDatum> outQueue, Class inClass, Class outClass) {
- this.inQueue = inQueue;
- this.outQueue = outQueue;
- this.inClass = inClass;
- this.outClass = outClass;
- }
-
- public GPlusEventProcessor(BlockingQueue<String> inQueue, Queue<StreamsDatum> outQueue, Class outClass) {
- this.inQueue = inQueue;
- this.outQueue = outQueue;
- this.outClass = outClass;
- }
-
- @Override
- public void run() {
-
- while(true) {
- try {
- String item = inQueue.take();
- Thread.sleep(new Random().nextInt(100));
- if(item==TERMINATE) {
- LOGGER.info("Terminating!");
- break;
- }
-
- // first check for valid json
- ObjectNode node = (ObjectNode)mapper.readTree(item);
-
- // if the target is string, just pass-through
- if( String.class.equals(outClass))
- outQueue.offer(new StreamsDatum(item));
- else {
- // convert to desired format
- com.google.api.services.plus.model.Activity gplusActivity = (com.google.api.services.plus.model.Activity)mapper.readValue(item, com.google.api.services.plus.model.Activity.class);
-
- Activity streamsActivity = gPlusActivitySerializer.deserialize(gplusActivity);
-
- outQueue.offer(new StreamsDatum(streamsActivity));
- }
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-
-};
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/8737bdad/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
deleted file mode 100644
index 810f345..0000000
--- a/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverJsonActivityConverter.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 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/8737bdad/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverXmlActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverXmlActivityConverter.java b/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverXmlActivityConverter.java
deleted file mode 100644
index 112b6a5..0000000
--- a/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverXmlActivityConverter.java
+++ /dev/null
@@ -1,105 +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.moreover.api.Article;
-import com.moreover.api.ArticlesResponse;
-import com.moreover.api.ObjectFactory;
-import org.apache.commons.lang.SerializationException;
-import org.apache.streams.data.util.MoreoverUtils;
-import org.apache.streams.pojo.json.Activity;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBElement;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
-import java.io.StringReader;
-import java.util.LinkedList;
-import java.util.List;
-
-/**
- * Deserializes the Moreover Article XML and converts it to an instance of {@link Activity}
- */
-public class MoreoverXmlActivityConverter implements ActivityConverter<String> {
-
- //JAXBContext is threadsafe (supposedly)
- private final JAXBContext articleContext;
- private final JAXBContext articlesContext;
-
- public MoreoverXmlActivityConverter() {
- articleContext = createContext(Article.class);
- articlesContext = createContext(ArticlesResponse.class);
- }
-
- @Override
- public String serializationFormat() {
- return "application/xml+vnd.moreover.com.v1";
- }
-
- @Override
- public String serialize(Activity deserialized) {
- throw new UnsupportedOperationException("Cannot currently serialize to Moreover");
- }
-
- @Override
- public Activity deserialize(String serialized) {
- Article article = deserializeMoreover(serialized);
- return MoreoverUtils.convert(article);
- }
-
- @Override
- public List<Activity> deserializeAll(List<String> serializedList) {
- List<Activity> activities = new LinkedList<Activity>();
- for(String item : serializedList) {
- ArticlesResponse response = deserializeMoreoverResponse(item);
- for(Article article : response.getArticles().getArticle()) {
- activities.add(MoreoverUtils.convert(article));
- }
- }
- return activities;
- }
-
- private Article deserializeMoreover(String serialized){
- try {
- Unmarshaller unmarshaller = articleContext.createUnmarshaller();
- return (Article) unmarshaller.unmarshal(new StringReader(serialized));
- } catch (JAXBException e) {
- throw new SerializationException("Unable to deserialize Moreover data", e);
- }
- }
-
- private ArticlesResponse deserializeMoreoverResponse(String serialized){
- try {
- Unmarshaller unmarshaller = articlesContext.createUnmarshaller();
- return ((JAXBElement<ArticlesResponse>) unmarshaller.unmarshal(new StringReader(serialized))).getValue();
- } catch (JAXBException e) {
- throw new SerializationException("Unable to deserialize Moreover data", e);
- }
- }
-
- private JAXBContext createContext(Class articleClass) {
- JAXBContext context;
- try {
- context = JAXBContext.newInstance(articleClass.getPackage().getName(), ObjectFactory.class.getClassLoader());
- } catch (JAXBException e) {
- throw new IllegalStateException("Unable to create JAXB Context for Moreover data", e);
- }
- return context;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/8737bdad/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/conversion/MoreoverConverterResolver.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/conversion/MoreoverConverterResolver.java b/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/conversion/MoreoverConverterResolver.java
new file mode 100644
index 0000000..64d7651
--- /dev/null
+++ b/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/conversion/MoreoverConverterResolver.java
@@ -0,0 +1,20 @@
+package org.apache.streams.data.moreover.conversion;
+
+import com.moreover.Moreover;
+import com.moreover.api.Article;
+import org.apache.streams.data.ActivityConverterResolver;
+import org.apache.streams.exceptions.ActivitySerializerException;
+
+/**
+ * Created by sblackmon on 11/13/14.
+ */
+public class MoreoverConverterResolver implements ActivityConverterResolver {
+ @Override
+ public Class bestSerializer(Class documentClass) throws ActivitySerializerException {
+ if( documentClass == Moreover.class )
+ return MoreoverJsonActivityConverter.class;
+ else if( documentClass == Article.class )
+ return MoreoverJsonActivityConverter.class;
+ else return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/8737bdad/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/conversion/MoreoverDocumentClassifier.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/conversion/MoreoverDocumentClassifier.java b/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/conversion/MoreoverDocumentClassifier.java
new file mode 100644
index 0000000..b65d8db
--- /dev/null
+++ b/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/conversion/MoreoverDocumentClassifier.java
@@ -0,0 +1,22 @@
+package org.apache.streams.data.moreover.conversion;
+
+import com.google.common.base.Preconditions;
+import com.moreover.Moreover;
+import com.moreover.api.Article;
+import org.apache.streams.data.DocumentClassifier;
+
+/**
+ * Created by sblackmon on 11/13/14.
+ */
+public class MoreoverDocumentClassifier implements DocumentClassifier {
+ @Override
+ public Class detectClass(Object document) {
+ Preconditions.checkArgument(document instanceof String);
+ String string = (String) document;
+ if( string.startsWith("{") && string.endsWith("}") )
+ return Moreover.class;
+ else if( string.startsWith("<") && string.endsWith(">") )
+ return Article.class;
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/8737bdad/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/conversion/MoreoverJsonActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/conversion/MoreoverJsonActivityConverter.java b/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/conversion/MoreoverJsonActivityConverter.java
new file mode 100644
index 0000000..a3070ae
--- /dev/null
+++ b/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/conversion/MoreoverJsonActivityConverter.java
@@ -0,0 +1,94 @@
+/*
+ * 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.moreover.conversion;
+
+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.ActivityConverter;
+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/8737bdad/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/conversion/MoreoverXmlActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/conversion/MoreoverXmlActivityConverter.java b/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/conversion/MoreoverXmlActivityConverter.java
new file mode 100644
index 0000000..1f92a9d
--- /dev/null
+++ b/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/conversion/MoreoverXmlActivityConverter.java
@@ -0,0 +1,106 @@
+/*
+ * 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.moreover.conversion;
+
+import com.moreover.api.Article;
+import com.moreover.api.ArticlesResponse;
+import com.moreover.api.ObjectFactory;
+import org.apache.commons.lang.SerializationException;
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.data.util.MoreoverUtils;
+import org.apache.streams.pojo.json.Activity;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+import java.io.StringReader;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Deserializes the Moreover Article XML and converts it to an instance of {@link Activity}
+ */
+public class MoreoverXmlActivityConverter implements ActivityConverter<String> {
+
+ //JAXBContext is threadsafe (supposedly)
+ private final JAXBContext articleContext;
+ private final JAXBContext articlesContext;
+
+ public MoreoverXmlActivityConverter() {
+ articleContext = createContext(Article.class);
+ articlesContext = createContext(ArticlesResponse.class);
+ }
+
+ @Override
+ public String serializationFormat() {
+ return "application/xml+vnd.moreover.com.v1";
+ }
+
+ @Override
+ public String serialize(Activity deserialized) {
+ throw new UnsupportedOperationException("Cannot currently serialize to Moreover");
+ }
+
+ @Override
+ public Activity deserialize(String serialized) {
+ Article article = deserializeMoreover(serialized);
+ return MoreoverUtils.convert(article);
+ }
+
+ @Override
+ public List<Activity> deserializeAll(List<String> serializedList) {
+ List<Activity> activities = new LinkedList<Activity>();
+ for(String item : serializedList) {
+ ArticlesResponse response = deserializeMoreoverResponse(item);
+ for(Article article : response.getArticles().getArticle()) {
+ activities.add(MoreoverUtils.convert(article));
+ }
+ }
+ return activities;
+ }
+
+ private Article deserializeMoreover(String serialized){
+ try {
+ Unmarshaller unmarshaller = articleContext.createUnmarshaller();
+ return (Article) unmarshaller.unmarshal(new StringReader(serialized));
+ } catch (JAXBException e) {
+ throw new SerializationException("Unable to deserialize Moreover data", e);
+ }
+ }
+
+ private ArticlesResponse deserializeMoreoverResponse(String serialized){
+ try {
+ Unmarshaller unmarshaller = articlesContext.createUnmarshaller();
+ return ((JAXBElement<ArticlesResponse>) unmarshaller.unmarshal(new StringReader(serialized))).getValue();
+ } catch (JAXBException e) {
+ throw new SerializationException("Unable to deserialize Moreover data", e);
+ }
+ }
+
+ private JAXBContext createContext(Class articleClass) {
+ JAXBContext context;
+ try {
+ context = JAXBContext.newInstance(articleClass.getPackage().getName(), ObjectFactory.class.getClassLoader());
+ } catch (JAXBException e) {
+ throw new IllegalStateException("Unable to create JAXB Context for Moreover data", e);
+ }
+ return context;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/8737bdad/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverJsonActivityConverterTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverJsonActivityConverterTest.java b/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverJsonActivityConverterTest.java
index a9e8e3a..01340f6 100644
--- a/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverJsonActivityConverterTest.java
+++ b/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverJsonActivityConverterTest.java
@@ -22,6 +22,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.streams.data.moreover.conversion.MoreoverJsonActivityConverter;
import org.apache.streams.data.util.JsonUtil;
import org.junit.Before;
import org.junit.Test;
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/8737bdad/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverXmlActivityConverterTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverXmlActivityConverterTest.java b/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverXmlActivityConverterTest.java
index 9834032..e8afc5d 100644
--- a/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverXmlActivityConverterTest.java
+++ b/streams-contrib/streams-provider-moreover/src/test/java/org/apache/streams/data/MoreoverXmlActivityConverterTest.java
@@ -21,6 +21,7 @@ package org.apache.streams.data;
import com.google.common.collect.Lists;
import org.apache.commons.io.IOUtils;
+import org.apache.streams.data.moreover.conversion.MoreoverXmlActivityConverter;
import org.apache.streams.pojo.json.Activity;
import org.junit.Before;
import org.junit.Test;
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/8737bdad/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/processor/RssTypeConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/processor/RssTypeConverter.java b/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/processor/RssTypeConverter.java
index 2c86fa0..fbd16f4 100644
--- a/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/processor/RssTypeConverter.java
+++ b/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/processor/RssTypeConverter.java
@@ -32,8 +32,12 @@ import org.slf4j.LoggerFactory;
import java.util.List;
+@Deprecated
/**
* Converts ObjectNode representations of Rome SyndEntries to activities.
+ * Deprecated: Modules and streams should adopt TypeConverterProcessor and ActivityConverterProcessor
+ * TODO: Have RSS Provider always output ObjectNode, place ActivityConverterProcessor afterward with RssDocumentClassifier and RssConverterResolver available
+ * TODO: Refactor tests and examples
*/
public class RssTypeConverter implements StreamsProcessor{
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/8737bdad/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/provider/RssDocumentClassifier.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/provider/RssDocumentClassifier.java b/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/provider/RssDocumentClassifier.java
new file mode 100644
index 0000000..1477c21
--- /dev/null
+++ b/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/provider/RssDocumentClassifier.java
@@ -0,0 +1,36 @@
+/*
+ * 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.rss.provider;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.sun.syndication.feed.synd.SyndEntry;
+import org.apache.streams.data.DocumentClassifier;
+
+/**
+ * Created by sblackmon on 12/13/13.
+ */
+public class RssDocumentClassifier implements DocumentClassifier {
+
+ @Override
+ public Class detectClass(Object document) {
+ if( document instanceof SyndEntry )
+ return SyndEntry.class;
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/8737bdad/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/provider/RssEventClassifier.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/provider/RssEventClassifier.java b/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/provider/RssEventClassifier.java
deleted file mode 100644
index 4e6efee..0000000
--- a/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/provider/RssEventClassifier.java
+++ /dev/null
@@ -1,32 +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.rss.provider;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.sun.syndication.feed.synd.SyndEntry;
-
-/**
- * Created by sblackmon on 12/13/13.
- */
-public class RssEventClassifier {
-
- public static Class detectClass( ObjectNode bean ) {
- return SyndEntry.class;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/8737bdad/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/provider/RssEventProcessor.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/provider/RssEventProcessor.java b/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/provider/RssEventProcessor.java
deleted file mode 100644
index 347f593..0000000
--- a/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/provider/RssEventProcessor.java
+++ /dev/null
@@ -1,102 +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.rss.provider;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.sun.syndication.feed.synd.SyndEntry;
-import org.apache.streams.core.StreamsDatum;
-import org.apache.streams.pojo.json.Activity;
-import org.apache.streams.rss.serializer.SyndEntryActivityConverter;
-import org.apache.streams.rss.serializer.SyndEntrySerializer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.util.Queue;
-import java.util.Random;
-
-public class RssEventProcessor implements Runnable {
-
- private final static Logger LOGGER = LoggerFactory.getLogger(RssEventProcessor.class);
-
- private ObjectMapper mapper = new ObjectMapper();
-
- private Queue<SyndEntry> inQueue;
- private Queue<StreamsDatum> outQueue;
-
- private Class inClass;
- private Class outClass;
-
- private SyndEntryActivityConverter syndEntryActivitySerializer = new SyndEntryActivityConverter();
- private SyndEntrySerializer syndEntrySerializer = new SyndEntrySerializer();
-
- public final static String TERMINATE = new String("TERMINATE");
-
- public RssEventProcessor(Queue<SyndEntry> inQueue, Queue<StreamsDatum> outQueue, Class inClass, Class outClass) {
- this.inQueue = inQueue;
- this.outQueue = outQueue;
- this.inClass = inClass;
- this.outClass = outClass;
- }
-
- public RssEventProcessor(Queue<SyndEntry> inQueue, Queue<StreamsDatum> outQueue, Class outClass) {
- this.inQueue = inQueue;
- this.outQueue = outQueue;
- this.outClass = outClass;
- }
-
- @Override
- public void run() {
-
- while(true) {
- Object item;
- try {
- item = inQueue.poll();
- if(item instanceof String && item.equals(TERMINATE)) {
- LOGGER.info("Terminating!");
- break;
- }
-
- Thread.sleep(new Random().nextInt(100));
-
- // if the target is string, just pass-through
- if( String.class.equals(outClass))
- outQueue.offer(new StreamsDatum(item.toString()));
- else if( SyndEntry.class.equals(outClass))
- {
- outQueue.offer(new StreamsDatum(item));
- }
- else if( Activity.class.equals(outClass))
- {
- // convert to desired format
- SyndEntry entry = (SyndEntry)item;
- if( entry != null ) {
- Activity out = syndEntryActivitySerializer.deserialize(this.syndEntrySerializer.deserialize((SyndEntry)item));
-
- if( out != null )
- outQueue.offer(new StreamsDatum(out));
- }
- }
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
-
-};
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/8737bdad/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/serializer/RssConverterResolver.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/serializer/RssConverterResolver.java b/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/serializer/RssConverterResolver.java
new file mode 100644
index 0000000..e3e26dc
--- /dev/null
+++ b/streams-contrib/streams-provider-rss/src/main/java/org/apache/streams/rss/serializer/RssConverterResolver.java
@@ -0,0 +1,18 @@
+package org.apache.streams.rss.serializer;
+
+import com.sun.syndication.feed.synd.SyndEntry;
+import org.apache.streams.data.ActivityConverterResolver;
+import org.apache.streams.exceptions.ActivitySerializerException;
+
+/**
+ * Created by sblackmon on 11/13/14.
+ */
+public class RssConverterResolver implements ActivityConverterResolver {
+
+ @Override
+ public Class bestSerializer(Class documentClass) throws ActivitySerializerException {
+ if( documentClass == SyndEntry.class )
+ return SyndEntryActivityConverter.class;
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/8737bdad/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/conversion/SysomosBeatActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/conversion/SysomosBeatActivityConverter.java b/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/conversion/SysomosBeatActivityConverter.java
index 90df7fc..d7bb3cb 100644
--- a/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/conversion/SysomosBeatActivityConverter.java
+++ b/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/conversion/SysomosBeatActivityConverter.java
@@ -19,15 +19,20 @@
package org.apache.streams.sysomos.conversion;
+import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.sysomos.xml.BeatApi;
+import org.apache.commons.lang.NotImplementedException;
import org.apache.commons.lang.StringUtils;
+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.ActivityObject;
import org.apache.streams.pojo.json.Actor;
import org.apache.streams.pojo.json.Provider;
import org.joda.time.DateTime;
+import java.util.List;
import java.util.Map;
import static org.apache.streams.data.util.ActivityUtil.*;
@@ -35,10 +40,37 @@ import static org.apache.streams.data.util.ActivityUtil.*;
/**
* Converts an instance of a {@link com.sysomos.xml.BeatApi.BeatResponse.Beat} to an {@link org.apache.streams.pojo.json.Activity}
*/
-public class SysomosBeatActivityConverter {
+public class SysomosBeatActivityConverter implements ActivityConverter<BeatApi.BeatResponse.Beat> {
public static final String LANGUAGE_KEY = "LANGUAGE";
+ @Override
+ public String serializationFormat() {
+ return null;
+ }
+
+ @Override
+ public BeatApi.BeatResponse.Beat serialize(Activity deserialized) throws ActivitySerializerException {
+ throw new NotImplementedException();
+ }
+
+ @Override
+ public Activity deserialize(BeatApi.BeatResponse.Beat serialized) throws ActivitySerializerException {
+ return convert(serialized);
+ }
+
+ @Override
+ public List<Activity> deserializeAll(List<BeatApi.BeatResponse.Beat> serializedList) {
+ List<Activity> result = Lists.newArrayList();
+ for( BeatApi.BeatResponse.Beat item : serializedList ) {
+ try {
+ Activity activity = deserialize(item);
+ result.add(activity);
+ } catch (ActivitySerializerException e) {}
+ }
+ return result;
+ }
+
public Activity convert(BeatApi.BeatResponse.Beat beat) {
Activity converted = new Activity();
converted.setId(beat.getDocid());
@@ -135,5 +167,4 @@ public class SysomosBeatActivityConverter {
return tags;
}
-
}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/8737bdad/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/conversion/SysomosConverterResolver.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/conversion/SysomosConverterResolver.java b/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/conversion/SysomosConverterResolver.java
new file mode 100644
index 0000000..9eb613a
--- /dev/null
+++ b/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/conversion/SysomosConverterResolver.java
@@ -0,0 +1,19 @@
+package org.apache.streams.sysomos.conversion;
+
+import com.sysomos.xml.BeatApi;
+import org.apache.streams.data.ActivityConverterResolver;
+import org.apache.streams.data.DocumentClassifier;
+import org.apache.streams.exceptions.ActivitySerializerException;
+
+/**
+ * Created by sblackmon on 11/13/14.
+ */
+public class SysomosConverterResolver implements ActivityConverterResolver {
+
+ @Override
+ public Class bestSerializer(Class documentClass) throws ActivitySerializerException {
+ if( documentClass == BeatApi.BeatResponse.Beat.class )
+ return SysomosBeatActivityConverter.class;
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/8737bdad/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/conversion/SysomosDocumentClassifier.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/conversion/SysomosDocumentClassifier.java b/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/conversion/SysomosDocumentClassifier.java
new file mode 100644
index 0000000..d5314df
--- /dev/null
+++ b/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/conversion/SysomosDocumentClassifier.java
@@ -0,0 +1,16 @@
+package org.apache.streams.sysomos.conversion;
+
+import com.sysomos.xml.BeatApi;
+import org.apache.streams.data.DocumentClassifier;
+
+/**
+ * Created by sblackmon on 11/13/14.
+ */
+public class SysomosDocumentClassifier implements DocumentClassifier {
+ @Override
+ public Class detectClass(Object document) {
+ if( document instanceof BeatApi.BeatResponse.Beat )
+ return BeatApi.BeatResponse.Beat.class;
+ else return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/8737bdad/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/processor/SysomosTypeConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/processor/SysomosTypeConverter.java b/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/processor/SysomosTypeConverter.java
index db9f416..1a7a546 100644
--- a/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/processor/SysomosTypeConverter.java
+++ b/streams-contrib/streams-provider-sysomos/src/main/java/org/apache/streams/sysomos/processor/SysomosTypeConverter.java
@@ -27,8 +27,12 @@ import org.apache.streams.sysomos.conversion.SysomosBeatActivityConverter;
import java.util.List;
+@Deprecated
/**
* Stream processor that converts Sysomos type to Activity
+ * Deprecated: Modules and streams should adopt TypeConverterProcessor and ActivityConverterProcessor
+ * TODO: Create SysomosDocumentClassifier and SysomosConverterResolver
+ * TODO: Refactor any streams
*/
public class SysomosTypeConverter implements StreamsProcessor {
[2/9] incubator-streams git commit: omni-bus update
Posted by sb...@apache.org.
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonUserActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonUserActivityConverter.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonUserActivityConverter.java
new file mode 100644
index 0000000..3cb1278
--- /dev/null
+++ b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonUserActivityConverter.java
@@ -0,0 +1,77 @@
+/*
+ * 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.twitter.serializer;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Lists;
+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.apache.streams.twitter.pojo.User;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.List;
+
+import static org.apache.streams.twitter.serializer.util.TwitterActivityUtil.updateActivity;
+
+public class TwitterJsonUserActivityConverter implements ActivityConverter<User>, Serializable {
+
+ public TwitterJsonUserActivityConverter() {}
+
+ private static TwitterJsonUserActivityConverter instance = new TwitterJsonUserActivityConverter();
+
+ public static TwitterJsonUserActivityConverter getInstance() {
+ return instance;
+ }
+
+ @Override
+ public String serializationFormat() {
+ return null;
+ }
+
+ @Override
+ public User serialize(Activity deserialized) throws ActivitySerializerException {
+ return null;
+ }
+
+ @Override
+ public Activity deserialize(User user) throws ActivitySerializerException {
+
+ Activity activity = new Activity();
+ updateActivity(user, activity);
+
+ return activity;
+ }
+
+ @Override
+ public List<Activity> deserializeAll(List<User> serializedList) {
+ List<Activity> result = Lists.newArrayList();
+ for( User item : serializedList ) {
+ try {
+ Activity activity = deserialize(item);
+ result.add(activity);
+ } catch (ActivitySerializerException e) {}
+ }
+ return result;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonUserActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonUserActivitySerializer.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonUserActivitySerializer.java
deleted file mode 100644
index 1bf935c..0000000
--- a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonUserActivitySerializer.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.twitter.serializer;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-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.apache.streams.twitter.pojo.User;
-
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.List;
-
-import static org.apache.streams.twitter.serializer.util.TwitterActivityUtil.updateActivity;
-
-public class TwitterJsonUserActivitySerializer implements ActivitySerializer<String>, Serializable {
-
- public TwitterJsonUserActivitySerializer() {}
-
- private static TwitterJsonUserActivitySerializer instance = new TwitterJsonUserActivitySerializer();
-
- public static TwitterJsonUserActivitySerializer getInstance() {
- return instance;
- }
-
- @Override
- public String serializationFormat() {
- return null;
- }
-
- @Override
- public String serialize(Activity deserialized) throws ActivitySerializerException {
- return null;
- }
-
- @Override
- public Activity deserialize(String event) throws ActivitySerializerException {
-
- ObjectMapper mapper = new StreamsJacksonMapper();
- User user = null;
- try {
- user = mapper.readValue(event, User.class);
- } catch (JsonProcessingException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- Activity activity = new Activity();
- updateActivity(user, activity);
-
- return activity;
- }
-
- @Override
- public List<Activity> deserializeAll(List<String> serializedList) {
- return null;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonUserstreameventActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonUserstreameventActivityConverter.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonUserstreameventActivityConverter.java
new file mode 100644
index 0000000..3da55ad
--- /dev/null
+++ b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonUserstreameventActivityConverter.java
@@ -0,0 +1,115 @@
+/*
+ * 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.twitter.serializer;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.base.Strings;
+import org.apache.commons.lang.NotImplementedException;
+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.ActivityObject;
+import org.apache.streams.pojo.json.Actor;
+import org.apache.streams.twitter.pojo.UserstreamEvent;
+
+import java.util.List;
+
+import static org.apache.streams.twitter.serializer.util.TwitterActivityUtil.*;
+
+
+/**
+* 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 TwitterJsonUserstreameventActivityConverter implements ActivityConverter<UserstreamEvent> {
+
+ private static TwitterJsonUserstreameventActivityConverter instance = new TwitterJsonUserstreameventActivityConverter();
+
+ public static TwitterJsonUserstreameventActivityConverter getInstance() {
+ return instance;
+ }
+
+ @Override
+ public String serializationFormat() {
+ return null;
+ }
+
+ @Override
+ public UserstreamEvent serialize(Activity deserialized) throws ActivitySerializerException {
+ throw new NotImplementedException();
+ }
+
+ @Override
+ public Activity deserialize(UserstreamEvent serialized) throws ActivitySerializerException {
+ return null;
+ }
+
+ @Override
+ public List<Activity> deserializeAll(List<UserstreamEvent> serializedList) {
+ return null;
+ }
+
+ public Activity convert(ObjectNode item) throws ActivitySerializerException {
+
+ ObjectMapper mapper = StreamsTwitterMapper.getInstance();
+ UserstreamEvent event = null;
+ try {
+ event = mapper.treeToValue(item, UserstreamEvent.class);
+ } catch (JsonProcessingException e) {
+ e.printStackTrace();
+ }
+
+ Activity activity = new Activity();
+ activity.setActor(buildActor(event));
+ activity.setVerb(detectVerb(event));
+ activity.setObject(buildActivityObject(event));
+ activity.setId(formatId(activity.getVerb()));
+ if(Strings.isNullOrEmpty(activity.getId()))
+ throw new ActivitySerializerException("Unable to determine activity id");
+ activity.setProvider(getProvider());
+ return activity;
+ }
+
+ public Actor buildActor(UserstreamEvent event) {
+ Actor actor = new Actor();
+ //actor.setId(formatId(delete.getDelete().getStatus().getUserIdStr()));
+ return actor;
+ }
+
+ public ActivityObject buildActivityObject(UserstreamEvent event) {
+ ActivityObject actObj = new ActivityObject();
+ //actObj.setId(formatId(delete.getDelete().getStatus().getIdStr()));
+ //actObj.setObjectType("tweet");
+ return actObj;
+ }
+
+ public String detectVerb(UserstreamEvent event) {
+ return null;
+ }
+
+ public ActivityObject buildTarget(UserstreamEvent event) {
+ return null;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonUserstreameventActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonUserstreameventActivitySerializer.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonUserstreameventActivitySerializer.java
deleted file mode 100644
index e2832dd..0000000
--- a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/serializer/TwitterJsonUserstreameventActivitySerializer.java
+++ /dev/null
@@ -1,115 +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.twitter.serializer;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.base.Strings;
-import org.apache.commons.lang.NotImplementedException;
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.exceptions.ActivitySerializerException;
-import org.apache.streams.pojo.json.Activity;
-import org.apache.streams.pojo.json.ActivityObject;
-import org.apache.streams.pojo.json.Actor;
-import org.apache.streams.twitter.pojo.UserstreamEvent;
-
-import java.util.List;
-
-import static org.apache.streams.twitter.serializer.util.TwitterActivityUtil.*;
-
-
-/**
-* 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 TwitterJsonUserstreameventActivitySerializer implements ActivitySerializer<String> {
-
- private static TwitterJsonUserstreameventActivitySerializer instance = new TwitterJsonUserstreameventActivitySerializer();
-
- public static TwitterJsonUserstreameventActivitySerializer getInstance() {
- return instance;
- }
-
- @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 {
- return null;
- }
-
- @Override
- public List<Activity> deserializeAll(List<String> serializedList) {
- return null;
- }
-
- public Activity convert(ObjectNode item) throws ActivitySerializerException {
-
- ObjectMapper mapper = StreamsTwitterMapper.getInstance();
- UserstreamEvent event = null;
- try {
- event = mapper.treeToValue(item, UserstreamEvent.class);
- } catch (JsonProcessingException e) {
- e.printStackTrace();
- }
-
- Activity activity = new Activity();
- activity.setActor(buildActor(event));
- activity.setVerb(detectVerb(event));
- activity.setObject(buildActivityObject(event));
- activity.setId(formatId(activity.getVerb()));
- if(Strings.isNullOrEmpty(activity.getId()))
- throw new ActivitySerializerException("Unable to determine activity id");
- activity.setProvider(getProvider());
- return activity;
- }
-
- public Actor buildActor(UserstreamEvent event) {
- Actor actor = new Actor();
- //actor.setId(formatId(delete.getDelete().getStatus().getUserIdStr()));
- return actor;
- }
-
- public ActivityObject buildActivityObject(UserstreamEvent event) {
- ActivityObject actObj = new ActivityObject();
- //actObj.setId(formatId(delete.getDelete().getStatus().getIdStr()));
- //actObj.setObjectType("tweet");
- return actObj;
- }
-
- public String detectVerb(UserstreamEvent event) {
- return null;
- }
-
- public ActivityObject buildTarget(UserstreamEvent event) {
- return null;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/FullTweetTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/FullTweetTest.java b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/FullTweetTest.java
new file mode 100644
index 0000000..a661f2c
--- /dev/null
+++ b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/FullTweetTest.java
@@ -0,0 +1,119 @@
+/*
+ * 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.twitter.test;
+
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Lists;
+import org.apache.streams.converter.ActivityConverterProcessor;
+import org.apache.streams.core.StreamsDatum;
+import org.apache.streams.data.ActivityConverterResolver;
+import org.apache.streams.data.DocumentClassifier;
+import org.apache.streams.exceptions.ActivitySerializerException;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.apache.streams.pojo.json.Activity;
+import org.apache.streams.twitter.pojo.Retweet;
+import org.apache.streams.twitter.pojo.Tweet;
+import org.apache.streams.twitter.serializer.StreamsTwitterMapper;
+import org.apache.streams.twitter.serializer.TwitterConverterResolver;
+import org.apache.streams.twitter.serializer.TwitterDocumentClassifier;
+import org.apache.streams.twitter.serializer.TwitterJsonActivityConverter;
+import org.junit.Assert;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.List;
+
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
+
+/**
+* Created with IntelliJ IDEA.
+* User: sblackmon
+* Date: 8/20/13
+* Time: 5:57 PM
+* To change this template use File | Settings | File Templates.
+*/
+public class FullTweetTest {
+
+ private final static Logger LOGGER = LoggerFactory.getLogger(FullTweetTest.class);
+
+ private ObjectMapper mapper = StreamsJacksonMapper.getInstance(Lists.newArrayList(StreamsTwitterMapper.TWITTER_FORMAT));
+
+ private static final String TWITTER_JSON= "{\"created_at\":\"Wed Dec 11 22:27:34 +0000 2013\",\"id\":410898682356047872,\"id_str\":\"410898682356047872\",\"text\":\"RT @ughhblog: RRome (Brooklyn, NY) \\u2013 MY GIRL http:\\/\\/t.co\\/x6uxX9PLsH via @indierapblog @RRoseRRome\",\"source\":\"\\u003ca href=\\\"https:\\/\\/about.twitter.com\\/products\\/tweetdeck\\\" rel=\\\"nofollow\\\"\\u003eTweetDeck\\u003c\\/a\\u003e\",\"truncated\":false,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":70463906,\"id_str\":\"70463906\",\"name\":\"MHM DESIGNS, LLC\",\"screen_name\":\"MHMDESIGNS\",\"location\":\"Los Angeles New York\",\"url\":\"http:\\/\\/www.mhmdesigns.com\",\"description\":\"Multi Media Made Simple- Web desig, Graphic Design, Internet Marketing, Photography, Video Production and much much more.\",\"protected\":false,\"followers_count\":10,\"friends_coun
t\":64,\"listed_count\":1,\"created_at\":\"Mon Aug 31 18:31:54 +0000 2009\",\"favourites_count\":0,\"utc_offset\":-28800,\"time_zone\":\"Pacific Time (US & Canada)\",\"geo_enabled\":false,\"verified\":false,\"statuses_count\":87,\"lang\":\"en\",\"contributors_enabled\":false,\"is_translator\":false,\"profile_background_color\":\"9AE4E8\",\"profile_background_image_url\":\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/33456434\\/body.png\",\"profile_background_image_url_https\":\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/33456434\\/body.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\/\\/pbs.twimg.com\\/profile_images\\/391494416\\/mhm_design_logo__normal.png\",\"profile_image_url_https\":\"https:\\/\\/pbs.twimg.com\\/profile_images\\/391494416\\/mhm_design_logo__normal.png\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"BDDCAD\",\"profile_sidebar_fill_color\":\"DDFFCC\",\"profile_text_color\":\"333333\",\"profile_us
e_background_image\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Wed Dec 11 10:56:49 +0000 2013\",\"id\":410724848306892800,\"id_str\":\"410724848306892800\",\"text\":\"RRome (Brooklyn, NY) \\u2013 MY GIRL http:\\/\\/t.co\\/x6uxX9PLsH via @indierapblog @RRoseRRome\",\"source\":\"\\u003ca href=\\\"http:\\/\\/twitter.com\\/tweetbutton\\\" rel=\\\"nofollow\\\"\\u003eTweet Button\\u003c\\/a\\u003e\",\"truncated\":false,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":538836510,\"id_str\":\"538836510\",\"name\":\"UGHHBlog\",\"screen_name\":\"ughhblog\",\"location\":\"Los Angeles\",\"url\":\"http:\\/\\/www.undergroundhiphopblog.com\",\"description\":\"http:\\/\\/UN
DERGROUNDHIPHOPBLOG.com: A top Indie\\/Underground Hip Hop community blog. Submission Email: ughhblog@gmail.com \\/\\/\\/ Official Host: @pawz1\",\"protected\":false,\"followers_count\":2598,\"friends_count\":373,\"listed_count\":25,\"created_at\":\"Wed Mar 28 05:40:49 +0000 2012\",\"favourites_count\":423,\"utc_offset\":-28800,\"time_zone\":\"Pacific Time (US & Canada)\",\"geo_enabled\":false,\"verified\":false,\"statuses_count\":9623,\"lang\":\"en\",\"contributors_enabled\":false,\"is_translator\":false,\"profile_background_color\":\"131516\",\"profile_background_image_url\":\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/544717772\\/UGHHBlogLogo.jpg\",\"profile_background_image_url_https\":\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/544717772\\/UGHHBlogLogo.jpg\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\/\\/pbs.twimg.com\\/profile_images\\/2583702975\\/uas8528qzzdlnsb7igzn_normal.jpeg\",\"profile_image_url_https\":\"https:\\/\\/pbs.tw
img.com\\/profile_images\\/2583702975\\/uas8528qzzdlnsb7igzn_normal.jpeg\",\"profile_link_color\":\"009999\",\"profile_sidebar_border_color\":\"EEEEEE\",\"profile_sidebar_fill_color\":\"EFEFEF\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweet_count\":4,\"favorite_count\":0,\"entities\":{\"hashtags\":[],\"symbols\":[],\"urls\":[{\"url\":\"http:\\/\\/t.co\\/x6uxX9PLsH\",\"expanded_url\":\"http:\\/\\/indierapblog.com\\/rrome-brooklyn-ny-my-girl\\/\",\"display_url\":\"indierapblog.com\\/rrome-brooklyn\\u2026\",\"indices\":[31,53]}],\"user_mentions\":[{\"screen_name\":\"IndieRapBlog\",\"name\":\"IndieRapBlog.com\",\"id\":922776728,\"id_str\":\"922776728\",\"indices\":[58,71]},{\"screen_name\":\"RRoseRRome\",\"name\":\"RRome\",\"id\":76371478,\"id_str\":\"76
371478\",\"indices\":[72,83]}]},\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"retweet_count\":0,\"favorite_count\":0,\"entities\":{\"hashtags\":[],\"symbols\":[],\"urls\":[{\"url\":\"http:\\/\\/t.co\\/x6uxX9PLsH\",\"expanded_url\":\"http:\\/\\/indierapblog.com\\/rrome-brooklyn-ny-my-girl\\/\",\"display_url\":\"indierapblog.com\\/rrome-brooklyn\\u2026\",\"indices\":[45,67]}],\"user_mentions\":[{\"screen_name\":\"ughhblog\",\"name\":\"UGHHBlog\",\"id\":538836510,\"id_str\":\"538836510\",\"indices\":[3,12]},{\"screen_name\":\"IndieRapBlog\",\"name\":\"IndieRapBlog.com\",\"id\":922776728,\"id_str\":\"922776728\",\"indices\":[72,85]},{\"screen_name\":\"RRoseRRome\",\"name\":\"RRome\",\"id\":76371478,\"id_str\":\"76371478\",\"indices\":[86,97]}]},\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"filter_level\":\"medium\",\"lang\":\"en\"}";
+
+ @Test
+ public void Tests()
+ {
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, Boolean.TRUE);
+ mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, Boolean.TRUE);
+ mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, Boolean.TRUE);
+
+ InputStream is = FullTweetTest.class.getResourceAsStream("/testtweets.txt");
+ InputStreamReader isr = new InputStreamReader(is);
+ BufferedReader br = new BufferedReader(isr);
+
+ ObjectNode event = null;
+ try {
+ event = (ObjectNode) mapper.readTree(TWITTER_JSON);
+ } catch (IOException e) {
+ e.printStackTrace();
+ Assert.fail();
+ }
+
+ assertThat(event, is(not(nullValue())));
+
+ Retweet retweet = mapper.convertValue(event, Retweet.class);
+
+ assertThat(retweet, is(not(nullValue())));
+ assertThat(retweet.getCreatedAt(), is(not(nullValue())));
+ assertThat(retweet.getText(), is(not(nullValue())));
+ assertThat(retweet.getUser(), is(not(nullValue())));
+ assertThat(retweet.getRetweetedStatus(), is(not(nullValue())));
+
+ Activity activity = null;
+ try {
+ ActivityConverterProcessor converter = new ActivityConverterProcessor(
+ Lists.newArrayList((DocumentClassifier)TwitterDocumentClassifier.getInstance()),
+ Lists.newArrayList((ActivityConverterResolver)TwitterConverterResolver.getInstance()));
+ converter.prepare(null);
+ List<StreamsDatum> result = converter.process(new StreamsDatum(TWITTER_JSON));
+ activity = (Activity)result.get(0).getDocument();
+ } catch (Throwable e) {
+ e.printStackTrace();
+ Assert.fail();
+ }
+
+ assertThat(activity, is(not(nullValue())));
+
+ assertThat(activity.getId(), is(not(nullValue())));
+ assertThat(activity.getActor(), is(not(nullValue())));
+ assertThat(activity.getActor().getId(), is(not(nullValue())));
+ assertThat(activity.getVerb(), is(not(nullValue())));
+ assertThat(activity.getProvider(), is(not(nullValue())));
+ assertThat(activity.getObject(), is(not(nullValue())));
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/SimpleTweetTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/SimpleTweetTest.java b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/SimpleTweetTest.java
index 6b62fe3..b282227 100644
--- a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/SimpleTweetTest.java
+++ b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/SimpleTweetTest.java
@@ -22,16 +22,22 @@ import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.Lists;
+import org.apache.streams.converter.ActivityConverterProcessor;
+import org.apache.streams.converter.TypeConverterUtil;
import org.apache.streams.core.StreamsDatum;
+import org.apache.streams.data.ActivityConverterResolver;
+import org.apache.streams.data.DocumentClassifier;
import org.apache.streams.exceptions.ActivitySerializerException;
+import org.apache.streams.converter.TypeConverterProcessor;
import org.apache.streams.jackson.StreamsJacksonMapper;
-import org.apache.streams.jackson.TypeConverterProcessor;
import org.apache.streams.pojo.json.Activity;
-import org.apache.streams.twitter.pojo.Delete;
import org.apache.streams.twitter.pojo.Retweet;
import org.apache.streams.twitter.pojo.Tweet;
import org.apache.streams.twitter.serializer.StreamsTwitterMapper;
-import org.apache.streams.twitter.serializer.TwitterJsonActivitySerializer;
+import org.apache.streams.twitter.serializer.TwitterConverterResolver;
+import org.apache.streams.twitter.serializer.TwitterDocumentClassifier;
+import org.apache.streams.twitter.serializer.TwitterJsonActivityConverter;
+import org.apache.streams.twitter.serializer.TwitterJsonRetweetActivityConverter;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
@@ -41,9 +47,9 @@ import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.util.List;
import static org.hamcrest.CoreMatchers.*;
-import static org.hamcrest.Matchers.greaterThan;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
@@ -60,9 +66,9 @@ public class SimpleTweetTest {
private ObjectMapper mapper = StreamsJacksonMapper.getInstance(Lists.newArrayList(StreamsTwitterMapper.TWITTER_FORMAT));
- private static final String TWITTER_JSON= "{\"created_at\":\"Wed Dec 11 22:27:34 +0000 2013\",\"id\":410898682356047872,\"id_str\":\"410898682356047872\",\"text\":\"RT @ughhblog: RRome (Brooklyn, NY) \\u2013 MY GIRL http:\\/\\/t.co\\/x6uxX9PLsH via @indierapblog @RRoseRRome\",\"source\":\"\\u003ca href=\\\"https:\\/\\/about.twitter.com\\/products\\/tweetdeck\\\" rel=\\\"nofollow\\\"\\u003eTweetDeck\\u003c\\/a\\u003e\",\"truncated\":false,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":70463906,\"id_str\":\"70463906\",\"name\":\"MHM DESIGNS, LLC\",\"screen_name\":\"MHMDESIGNS\",\"location\":\"Los Angeles New York\",\"url\":\"http:\\/\\/www.mhmdesigns.com\",\"description\":\"Multi Media Made Simple- Web desig, Graphic Design, Internet Marketing, Photography, Video Production and much much more.\",\"protected\":false,\"followers_count\":10,\"friends_coun
t\":64,\"listed_count\":1,\"created_at\":\"Mon Aug 31 18:31:54 +0000 2009\",\"favourites_count\":0,\"utc_offset\":-28800,\"time_zone\":\"Pacific Time (US & Canada)\",\"geo_enabled\":false,\"verified\":false,\"statuses_count\":87,\"lang\":\"en\",\"contributors_enabled\":false,\"is_translator\":false,\"profile_background_color\":\"9AE4E8\",\"profile_background_image_url\":\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/33456434\\/body.png\",\"profile_background_image_url_https\":\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/33456434\\/body.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\/\\/pbs.twimg.com\\/profile_images\\/391494416\\/mhm_design_logo__normal.png\",\"profile_image_url_https\":\"https:\\/\\/pbs.twimg.com\\/profile_images\\/391494416\\/mhm_design_logo__normal.png\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"BDDCAD\",\"profile_sidebar_fill_color\":\"DDFFCC\",\"profile_text_color\":\"333333\",\"profile_us
e_background_image\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Wed Dec 11 10:56:49 +0000 2013\",\"id\":410724848306892800,\"id_str\":\"410724848306892800\",\"text\":\"RRome (Brooklyn, NY) \\u2013 MY GIRL http:\\/\\/t.co\\/x6uxX9PLsH via @indierapblog @RRoseRRome\",\"source\":\"\\u003ca href=\\\"http:\\/\\/twitter.com\\/tweetbutton\\\" rel=\\\"nofollow\\\"\\u003eTweet Button\\u003c\\/a\\u003e\",\"truncated\":false,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":538836510,\"id_str\":\"538836510\",\"name\":\"UGHHBlog\",\"screen_name\":\"ughhblog\",\"location\":\"Los Angeles\",\"url\":\"http:\\/\\/www.undergroundhiphopblog.com\",\"description\":\"http:\\/\\/UN
DERGROUNDHIPHOPBLOG.com: A top Indie\\/Underground Hip Hop community blog. Submission Email: ughhblog@gmail.com \\/\\/\\/ Official Host: @pawz1\",\"protected\":false,\"followers_count\":2598,\"friends_count\":373,\"listed_count\":25,\"created_at\":\"Wed Mar 28 05:40:49 +0000 2012\",\"favourites_count\":423,\"utc_offset\":-28800,\"time_zone\":\"Pacific Time (US & Canada)\",\"geo_enabled\":false,\"verified\":false,\"statuses_count\":9623,\"lang\":\"en\",\"contributors_enabled\":false,\"is_translator\":false,\"profile_background_color\":\"131516\",\"profile_background_image_url\":\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/544717772\\/UGHHBlogLogo.jpg\",\"profile_background_image_url_https\":\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/544717772\\/UGHHBlogLogo.jpg\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\/\\/pbs.twimg.com\\/profile_images\\/2583702975\\/uas8528qzzdlnsb7igzn_normal.jpeg\",\"profile_image_url_https\":\"https:\\/\\/pbs.tw
img.com\\/profile_images\\/2583702975\\/uas8528qzzdlnsb7igzn_normal.jpeg\",\"profile_link_color\":\"009999\",\"profile_sidebar_border_color\":\"EEEEEE\",\"profile_sidebar_fill_color\":\"EFEFEF\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweet_count\":4,\"favorite_count\":0,\"entities\":{\"hashtags\":[],\"symbols\":[],\"urls\":[{\"url\":\"http:\\/\\/t.co\\/x6uxX9PLsH\",\"expanded_url\":\"http:\\/\\/indierapblog.com\\/rrome-brooklyn-ny-my-girl\\/\",\"display_url\":\"indierapblog.com\\/rrome-brooklyn\\u2026\",\"indices\":[31,53]}],\"user_mentions\":[{\"screen_name\":\"IndieRapBlog\",\"name\":\"IndieRapBlog.com\",\"id\":922776728,\"id_str\":\"922776728\",\"indices\":[58,71]},{\"screen_name\":\"RRoseRRome\",\"name\":\"RRome\",\"id\":76371478,\"id_str\":\"76
371478\",\"indices\":[72,83]}]},\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"retweet_count\":0,\"favorite_count\":0,\"entities\":{\"hashtags\":[],\"symbols\":[],\"urls\":[{\"url\":\"http:\\/\\/t.co\\/x6uxX9PLsH\",\"expanded_url\":\"http:\\/\\/indierapblog.com\\/rrome-brooklyn-ny-my-girl\\/\",\"display_url\":\"indierapblog.com\\/rrome-brooklyn\\u2026\",\"indices\":[45,67]}],\"user_mentions\":[{\"screen_name\":\"ughhblog\",\"name\":\"UGHHBlog\",\"id\":538836510,\"id_str\":\"538836510\",\"indices\":[3,12]},{\"screen_name\":\"IndieRapBlog\",\"name\":\"IndieRapBlog.com\",\"id\":922776728,\"id_str\":\"922776728\",\"indices\":[72,85]},{\"screen_name\":\"RRoseRRome\",\"name\":\"RRome\",\"id\":76371478,\"id_str\":\"76371478\",\"indices\":[86,97]}]},\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"filter_level\":\"medium\",\"lang\":\"en\"}";
+ private static final String RETWEET_JSON= "{\"created_at\":\"Wed Dec 11 22:27:34 +0000 2013\",\"id\":410898682356047872,\"id_str\":\"410898682356047872\",\"text\":\"RT @ughhblog: RRome (Brooklyn, NY) \\u2013 MY GIRL http:\\/\\/t.co\\/x6uxX9PLsH via @indierapblog @RRoseRRome\",\"source\":\"\\u003ca href=\\\"https:\\/\\/about.twitter.com\\/products\\/tweetdeck\\\" rel=\\\"nofollow\\\"\\u003eTweetDeck\\u003c\\/a\\u003e\",\"truncated\":false,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":70463906,\"id_str\":\"70463906\",\"name\":\"MHM DESIGNS, LLC\",\"screen_name\":\"MHMDESIGNS\",\"location\":\"Los Angeles New York\",\"url\":\"http:\\/\\/www.mhmdesigns.com\",\"description\":\"Multi Media Made Simple- Web desig, Graphic Design, Internet Marketing, Photography, Video Production and much much more.\",\"protected\":false,\"followers_count\":10,\"friends_coun
t\":64,\"listed_count\":1,\"created_at\":\"Mon Aug 31 18:31:54 +0000 2009\",\"favourites_count\":0,\"utc_offset\":-28800,\"time_zone\":\"Pacific Time (US & Canada)\",\"geo_enabled\":false,\"verified\":false,\"statuses_count\":87,\"lang\":\"en\",\"contributors_enabled\":false,\"is_translator\":false,\"profile_background_color\":\"9AE4E8\",\"profile_background_image_url\":\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/33456434\\/body.png\",\"profile_background_image_url_https\":\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/33456434\\/body.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\/\\/pbs.twimg.com\\/profile_images\\/391494416\\/mhm_design_logo__normal.png\",\"profile_image_url_https\":\"https:\\/\\/pbs.twimg.com\\/profile_images\\/391494416\\/mhm_design_logo__normal.png\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"BDDCAD\",\"profile_sidebar_fill_color\":\"DDFFCC\",\"profile_text_color\":\"333333\",\"profile_us
e_background_image\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Wed Dec 11 10:56:49 +0000 2013\",\"id\":410724848306892800,\"id_str\":\"410724848306892800\",\"text\":\"RRome (Brooklyn, NY) \\u2013 MY GIRL http:\\/\\/t.co\\/x6uxX9PLsH via @indierapblog @RRoseRRome\",\"source\":\"\\u003ca href=\\\"http:\\/\\/twitter.com\\/tweetbutton\\\" rel=\\\"nofollow\\\"\\u003eTweet Button\\u003c\\/a\\u003e\",\"truncated\":false,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":538836510,\"id_str\":\"538836510\",\"name\":\"UGHHBlog\",\"screen_name\":\"ughhblog\",\"location\":\"Los Angeles\",\"url\":\"http:\\/\\/www.undergroundhiphopblog.com\",\"description\":\"http:\\/\\/UN
DERGROUNDHIPHOPBLOG.com: A top Indie\\/Underground Hip Hop community blog. Submission Email: ughhblog@gmail.com \\/\\/\\/ Official Host: @pawz1\",\"protected\":false,\"followers_count\":2598,\"friends_count\":373,\"listed_count\":25,\"created_at\":\"Wed Mar 28 05:40:49 +0000 2012\",\"favourites_count\":423,\"utc_offset\":-28800,\"time_zone\":\"Pacific Time (US & Canada)\",\"geo_enabled\":false,\"verified\":false,\"statuses_count\":9623,\"lang\":\"en\",\"contributors_enabled\":false,\"is_translator\":false,\"profile_background_color\":\"131516\",\"profile_background_image_url\":\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/544717772\\/UGHHBlogLogo.jpg\",\"profile_background_image_url_https\":\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/544717772\\/UGHHBlogLogo.jpg\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\/\\/pbs.twimg.com\\/profile_images\\/2583702975\\/uas8528qzzdlnsb7igzn_normal.jpeg\",\"profile_image_url_https\":\"https:\\/\\/pbs.tw
img.com\\/profile_images\\/2583702975\\/uas8528qzzdlnsb7igzn_normal.jpeg\",\"profile_link_color\":\"009999\",\"profile_sidebar_border_color\":\"EEEEEE\",\"profile_sidebar_fill_color\":\"EFEFEF\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweet_count\":4,\"favorite_count\":0,\"entities\":{\"hashtags\":[],\"symbols\":[],\"urls\":[{\"url\":\"http:\\/\\/t.co\\/x6uxX9PLsH\",\"expanded_url\":\"http:\\/\\/indierapblog.com\\/rrome-brooklyn-ny-my-girl\\/\",\"display_url\":\"indierapblog.com\\/rrome-brooklyn\\u2026\",\"indices\":[31,53]}],\"user_mentions\":[{\"screen_name\":\"IndieRapBlog\",\"name\":\"IndieRapBlog.com\",\"id\":922776728,\"id_str\":\"922776728\",\"indices\":[58,71]},{\"screen_name\":\"RRoseRRome\",\"name\":\"RRome\",\"id\":76371478,\"id_str\":\"76
371478\",\"indices\":[72,83]}]},\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"lang\":\"en\"},\"retweet_count\":0,\"favorite_count\":0,\"entities\":{\"hashtags\":[],\"symbols\":[],\"urls\":[{\"url\":\"http:\\/\\/t.co\\/x6uxX9PLsH\",\"expanded_url\":\"http:\\/\\/indierapblog.com\\/rrome-brooklyn-ny-my-girl\\/\",\"display_url\":\"indierapblog.com\\/rrome-brooklyn\\u2026\",\"indices\":[45,67]}],\"user_mentions\":[{\"screen_name\":\"ughhblog\",\"name\":\"UGHHBlog\",\"id\":538836510,\"id_str\":\"538836510\",\"indices\":[3,12]},{\"screen_name\":\"IndieRapBlog\",\"name\":\"IndieRapBlog.com\",\"id\":922776728,\"id_str\":\"922776728\",\"indices\":[72,85]},{\"screen_name\":\"RRoseRRome\",\"name\":\"RRome\",\"id\":76371478,\"id_str\":\"76371478\",\"indices\":[86,97]}]},\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"filter_level\":\"medium\",\"lang\":\"en\"}";
- private TwitterJsonActivitySerializer twitterJsonActivitySerializer = new TwitterJsonActivitySerializer();
+ private TwitterJsonRetweetActivityConverter twitterJsonActivitySerializer = new TwitterJsonRetweetActivityConverter();
@Test
public void Tests()
@@ -77,7 +83,7 @@ public class SimpleTweetTest {
ObjectNode event = null;
try {
- event = (ObjectNode) mapper.readTree(TWITTER_JSON);
+ event = (ObjectNode) mapper.readTree(RETWEET_JSON);
} catch (IOException e) {
e.printStackTrace();
Assert.fail();
@@ -85,30 +91,22 @@ public class SimpleTweetTest {
assertThat(event, is(not(nullValue())));
- Tweet tweet = mapper.convertValue(event, Tweet.class);
+ Retweet retweet = mapper.convertValue(event, Retweet.class);
- assertThat(tweet, is(not(nullValue())));
- assertThat(tweet.getCreatedAt(), is(not(nullValue())));
- assertThat(tweet.getText(), is(not(nullValue())));
- assertThat(tweet.getUser(), is(not(nullValue())));
+ assertThat(retweet, is(not(nullValue())));
+ assertThat(retweet.getCreatedAt(), is(not(nullValue())));
+ assertThat(retweet.getText(), is(not(nullValue())));
+ assertThat(retweet.getUser(), is(not(nullValue())));
+ assertThat(retweet.getRetweetedStatus(), is(not(nullValue())));
Activity activity = null;
try {
- activity = twitterJsonActivitySerializer.deserialize(TWITTER_JSON);
+ activity = twitterJsonActivitySerializer.deserialize(retweet);
} catch (ActivitySerializerException e) {
e.printStackTrace();
Assert.fail();
}
- try {
- TypeConverterProcessor converter = new TypeConverterProcessor(String.class, Activity.class);
- converter.prepare(null);
- converter.process(new StreamsDatum(TWITTER_JSON));
- } catch (Throwable e) {
- e.printStackTrace();
- Assert.fail();
- }
-
assertThat(activity, is(not(nullValue())));
assertThat(activity.getId(), is(not(nullValue())));
@@ -116,6 +114,7 @@ public class SimpleTweetTest {
assertThat(activity.getActor().getId(), is(not(nullValue())));
assertThat(activity.getVerb(), is(not(nullValue())));
assertThat(activity.getProvider(), is(not(nullValue())));
+ assertThat(activity.getObject(), is(not(nullValue())));
}
}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TweetActivitySerDeTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TweetActivitySerDeTest.java b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TweetActivitySerDeTest.java
index d6af4d9..2734c42 100644
--- a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TweetActivitySerDeTest.java
+++ b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TweetActivitySerDeTest.java
@@ -18,18 +18,20 @@
package org.apache.streams.twitter.test;
-import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
import com.google.common.collect.Lists;
import org.apache.commons.lang.StringUtils;
+import org.apache.streams.converter.TypeConverterUtil;
+import org.apache.streams.data.ActivityConverter;
import org.apache.streams.jackson.StreamsJacksonMapper;
import org.apache.streams.pojo.json.Activity;
import org.apache.streams.twitter.pojo.Retweet;
import org.apache.streams.twitter.pojo.Tweet;
-import org.apache.streams.twitter.provider.TwitterEventClassifier;
+import org.apache.streams.twitter.serializer.TwitterDocumentClassifier;
import org.apache.streams.twitter.serializer.StreamsTwitterMapper;
-import org.apache.streams.twitter.serializer.TwitterJsonActivitySerializer;
+import org.apache.streams.twitter.serializer.TwitterJsonActivityConverter;
+import org.apache.streams.twitter.serializer.TwitterJsonRetweetActivityConverter;
+import org.apache.streams.twitter.serializer.TwitterJsonTweetActivityConverter;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
@@ -39,7 +41,6 @@ import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
-import static java.util.regex.Pattern.matches;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
@@ -55,9 +56,7 @@ public class TweetActivitySerDeTest {
private final static Logger LOGGER = LoggerFactory.getLogger(TweetActivitySerDeTest.class);
- private ObjectMapper mapper = StreamsJacksonMapper.getInstance(Lists.newArrayList(StreamsTwitterMapper.TWITTER_FORMAT));
-
- private TwitterJsonActivitySerializer twitterJsonActivitySerializer = new TwitterJsonActivitySerializer();
+ private ObjectMapper mapper = StreamsJacksonMapper.getInstance(StreamsTwitterMapper.TWITTER_FORMAT);
@Test
public void Tests()
@@ -66,6 +65,8 @@ public class TweetActivitySerDeTest {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
+ ActivityConverter activityConverter;
+
try {
while (br.ready()) {
String line = br.readLine();
@@ -73,9 +74,20 @@ public class TweetActivitySerDeTest {
{
LOGGER.info("raw: {}", line);
- Class detected = TwitterEventClassifier.detectClass(line);
+ Class detected = TwitterDocumentClassifier.getInstance().detectClass(line);
+
+ if( detected == Tweet.class ) {
+ activityConverter = new TwitterJsonTweetActivityConverter();
+ } else if( detected == Retweet.class ) {
+ activityConverter = new TwitterJsonRetweetActivityConverter();
+ } else {
+ Assert.fail();
+ return;
+ }
+
+ Object typedObject = TypeConverterUtil.convert(line, detected, mapper);
- Activity activity = twitterJsonActivitySerializer.deserialize(line);
+ Activity activity = activityConverter.deserialize(typedObject);
String activitystring = mapper.writeValueAsString(activity);
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TweetSerDeTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TweetSerDeTest.java b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TweetSerDeTest.java
index eba5fd0..afa01ea 100644
--- a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TweetSerDeTest.java
+++ b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TweetSerDeTest.java
@@ -25,11 +25,10 @@ import com.google.common.base.Optional;
import com.google.common.collect.Lists;
import org.apache.commons.lang.StringUtils;
import org.apache.streams.jackson.StreamsJacksonMapper;
-import org.apache.streams.pojo.json.Activity;
import org.apache.streams.twitter.pojo.Delete;
import org.apache.streams.twitter.pojo.Retweet;
import org.apache.streams.twitter.pojo.Tweet;
-import org.apache.streams.twitter.provider.TwitterEventClassifier;
+import org.apache.streams.twitter.serializer.TwitterDocumentClassifier;
import org.apache.streams.twitter.serializer.*;
import org.junit.Assert;
import org.junit.Test;
@@ -40,7 +39,6 @@ import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
-import static java.util.regex.Pattern.matches;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.Matchers.greaterThan;
import static org.junit.Assert.assertEquals;
@@ -59,8 +57,6 @@ public class TweetSerDeTest {
private ObjectMapper mapper = StreamsJacksonMapper.getInstance(Lists.newArrayList(StreamsTwitterMapper.TWITTER_FORMAT));
- private TwitterJsonActivitySerializer twitterJsonActivitySerializer = new TwitterJsonActivitySerializer();
-
@Test
public void Tests()
{
@@ -82,7 +78,7 @@ public class TweetSerDeTest {
{
LOGGER.info("raw: {}", line);
- Class detected = TwitterEventClassifier.detectClass(line);
+ Class detected = TwitterDocumentClassifier.getInstance().detectClass(line);
ObjectNode event = (ObjectNode) mapper.readTree(line);
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TwitterDocumentClassifierTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TwitterDocumentClassifierTest.java b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TwitterDocumentClassifierTest.java
new file mode 100644
index 0000000..a6280a6
--- /dev/null
+++ b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TwitterDocumentClassifierTest.java
@@ -0,0 +1,117 @@
+/*
+ * 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.twitter.test;
+
+import org.apache.streams.data.ActivityConverter;
+import org.apache.streams.data.ActivityConverterFactory;
+import org.apache.streams.data.ActivityConverterResolver;
+import org.apache.streams.twitter.pojo.Delete;
+import org.apache.streams.twitter.pojo.Retweet;
+import org.apache.streams.twitter.pojo.Tweet;
+import org.apache.streams.twitter.pojo.User;
+import org.apache.streams.twitter.serializer.TwitterConverterResolver;
+import org.apache.streams.twitter.serializer.TwitterDocumentClassifier;
+import org.apache.streams.twitter.serializer.TwitterJsonDeleteActivityConverter;
+import org.apache.streams.twitter.serializer.TwitterJsonRetweetActivityConverter;
+import org.apache.streams.twitter.serializer.TwitterJsonTweetActivityConverter;
+import org.apache.streams.twitter.serializer.TwitterJsonUserActivityConverter;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Created by sblackmon on 12/13/13.
+ */
+public class TwitterDocumentClassifierTest {
+
+ private String tweet = "{\"created_at\":\"Wed Dec 11 22:27:34 +0000 2013\",\"id\":410898682381615105,\"id_str\":\"410898682381615105\",\"text\":\"Men's Basketball Single-Game Tickets Available - A limited number of tickets remain for Kentucky's upcoming men's ... http:\\/\\/t.co\\/SH5YZGpdRx\",\"source\":\"\\u003ca href=\\\"http:\\/\\/www.hootsuite.com\\\" rel=\\\"nofollow\\\"\\u003eHootSuite\\u003c\\/a\\u003e\",\"truncated\":false,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":91407775,\"id_str\":\"91407775\",\"name\":\"Winchester, KY\",\"screen_name\":\"winchester_ky\",\"location\":\"\",\"url\":null,\"description\":null,\"protected\":false,\"followers_count\":136,\"friends_count\":0,\"listed_count\":1,\"created_at\":\"Fri Nov 20 19:29:02 +0000 2009\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":fa
lse,\"statuses_count\":1793,\"lang\":\"en\",\"contributors_enabled\":false,\"is_translator\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\/\\/abs.twimg.com\\/images\\/themes\\/theme1\\/bg.png\",\"profile_background_image_url_https\":\"https:\\/\\/abs.twimg.com\\/images\\/themes\\/theme1\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\/\\/pbs.twimg.com\\/profile_images\\/613854495\\/winchester_sociallogo_normal.jpg\",\"profile_image_url_https\":\"https:\\/\\/pbs.twimg.com\\/profile_images\\/613854495\\/winchester_sociallogo_normal.jpg\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors
\":null,\"retweet_count\":0,\"favorite_count\":0,\"entities\":{\"hashtags\":[],\"symbols\":[],\"urls\":[{\"url\":\"http:\\/\\/t.co\\/SH5YZGpdRx\",\"expanded_url\":\"http:\\/\\/ow.ly\\/2C2XL1\",\"display_url\":\"ow.ly\\/2C2XL1\",\"indices\":[118,140]}],\"user_mentions\":[]},\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"filter_level\":\"medium\",\"lang\":\"en\"}\n";
+ private String retweet = "{\"created_at\":\"Wed Dec 11 22:27:34 +0000 2013\",\"id\":410898682385797121,\"id_str\":\"410898682385797121\",\"text\":\"RT @hemocional: Cuando te acarici\\u00e9 me di cuenta que hab\\u00eda vivido toda mi vida con las manos vac\\u00edas.\\nALEJANDRO JODOROWSKY.\",\"source\":\"web\",\"truncated\":false,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":163149656,\"id_str\":\"163149656\",\"name\":\"Carolina\",\"screen_name\":\"_titinaok\",\"location\":\"Montevideo\",\"url\":\"http:\\/\\/www.youtube.com\\/watch?v=N3v5vZ-tU1E\",\"description\":\"Tantas veces me defin\\u00ed ...Soy nada y todo a la vez\",\"protected\":false,\"followers_count\":41,\"friends_count\":75,\"listed_count\":2,\"created_at\":\"Mon Jul 05 17:35:49 +0000 2010\",\"favourites_count\":4697,\"utc_offset\":-10800,\"time_zone\":\"Buenos Aires\",\"geo_enabled\":fal
se,\"verified\":false,\"statuses_count\":5257,\"lang\":\"es\",\"contributors_enabled\":false,\"is_translator\":false,\"profile_background_color\":\"C4A64B\",\"profile_background_image_url\":\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/378800000096791690\\/f64a07abbaa735b39ad7655fdaa2f416.jpeg\",\"profile_background_image_url_https\":\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/378800000096791690\\/f64a07abbaa735b39ad7655fdaa2f416.jpeg\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\/\\/pbs.twimg.com\\/profile_images\\/378800000799213504\\/496d008f457390005825d2eb4ca50a63_normal.jpeg\",\"profile_image_url_https\":\"https:\\/\\/pbs.twimg.com\\/profile_images\\/378800000799213504\\/496d008f457390005825d2eb4ca50a63_normal.jpeg\",\"profile_banner_url\":\"https:\\/\\/pbs.twimg.com\\/profile_banners\\/163149656\\/1379722210\",\"profile_link_color\":\"BF415A\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"B17CED\",\"pr
ofile_text_color\":\"3D1957\",\"profile_use_background_image\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Wed Dec 11 22:25:06 +0000 2013\",\"id\":410898060206960640,\"id_str\":\"410898060206960640\",\"text\":\"Cuando te acarici\\u00e9 me di cuenta que hab\\u00eda vivido toda mi vida con las manos vac\\u00edas.\\nALEJANDRO JODOROWSKY.\",\"source\":\"\\u003ca href=\\\"http:\\/\\/bufferapp.com\\\" rel=\\\"nofollow\\\"\\u003eBuffer\\u003c\\/a\\u003e\",\"truncated\":false,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":552929456,\"id_str\":\"552929456\",\"name\":\"Habilidad emocional\",\"screen_name\":\"hemocional\",\"location\":\"\",\"url\":\"http:\\/\\/www.hab
ilidademocional.com\",\"description\":\"Pensamientos y reflexiones para ayudar a mirar la vida de una manera m\\u00e1s saludable y a crecer interiormente cada d\\u00eda m\\u00e1s. #InteligenciaEmocional #Psicolog\\u00eda\",\"protected\":false,\"followers_count\":34307,\"friends_count\":325,\"listed_count\":361,\"created_at\":\"Fri Apr 13 19:00:11 +0000 2012\",\"favourites_count\":44956,\"utc_offset\":3600,\"time_zone\":\"Madrid\",\"geo_enabled\":false,\"verified\":false,\"statuses_count\":24011,\"lang\":\"es\",\"contributors_enabled\":false,\"is_translator\":false,\"profile_background_color\":\"000000\",\"profile_background_image_url\":\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/378800000123681920\\/aab7226ae139f0ff93b04a08a8541477.jpeg\",\"profile_background_image_url_https\":\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/378800000123681920\\/aab7226ae139f0ff93b04a08a8541477.jpeg\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\/\\/pbs.twimg
.com\\/profile_images\\/2430091220\\/zdkea46xhe3g4e65nuwl_normal.gif\",\"profile_image_url_https\":\"https:\\/\\/pbs.twimg.com\\/profile_images\\/2430091220\\/zdkea46xhe3g4e65nuwl_normal.gif\",\"profile_banner_url\":\"https:\\/\\/pbs.twimg.com\\/profile_banners\\/552929456\\/1383180255\",\"profile_link_color\":\"FF00E1\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"F3F3F3\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweet_count\":9,\"favorite_count\":6,\"entities\":{\"hashtags\":[],\"symbols\":[],\"urls\":[],\"user_mentions\":[]},\"favorited\":false,\"retweeted\":false,\"lang\":\"es\"},\"retweet_count\":0,\"favorite_count\":0,\"entities\":{\"hashtags\":[],\"symbols\":[],\"urls\":[],\"user_mentions\":[{\"screen_name\":\"he
mocional\",\"name\":\"Habilidad emocional\",\"id\":552929456,\"id_str\":\"552929456\",\"indices\":[3,14]}]},\"favorited\":false,\"retweeted\":false,\"filter_level\":\"medium\",\"lang\":\"es\"}\n";
+ private String delete = "{\"delete\":{\"status\":{\"id\":377518972486553600,\"user_id\":1249045572,\"id_str\":\"377518972486553600\",\"user_id_str\":\"1249045572\"}}}\n";
+ private String user = "{\"location\":\"\",\"default_profile\":true,\"profile_background_tile\":false,\"statuses_count\":1,\"lang\":\"en\",\"profile_link_color\":\"0084B4\",\"id\":32386852,\"following\":false,\"protected\":false,\"favourites_count\":0,\"profile_text_color\":\"333333\",\"description\":\"\",\"verified\":false,\"contributors_enabled\":false,\"profile_sidebar_border_color\":\"C0DEED\",\"name\":\"Fred Gilkey\",\"profile_background_color\":\"C0DEED\",\"created_at\":\"Fri Apr 17 12:35:56 +0000 2009\",\"is_translation_enabled\":false,\"default_profile_image\":true,\"followers_count\":2,\"profile_image_url_https\":\"https://abs.twimg.com/sticky/default_profile_images/default_profile_1_normal.png\",\"geo_enabled\":false,\"status\":{\"contributors\":null,\"text\":\"Working\",\"geo\":null,\"retweeted\":false,\"in_reply_to_screen_name\":null,\"truncated\":false,\"lang\":\"en\",\"entities\":{\"symbols\":[],\"urls\":[],\"hashtags\":[],\"user_mentions\":[]},\"in_reply_to_status_
id_str\":null,\"id\":1541596700,\"source\":\"web\",\"in_reply_to_user_id_str\":null,\"favorited\":false,\"in_reply_to_status_id\":null,\"retweet_count\":0,\"created_at\":\"Fri Apr 17 12:37:54 +0000 2009\",\"in_reply_to_user_id\":null,\"favorite_count\":0,\"id_str\":\"1541596700\",\"place\":null,\"coordinates\":null},\"profile_background_image_url\":\"http://abs.twimg.com/images/themes/theme1/bg.png\",\"profile_background_image_url_https\":\"https://abs.twimg.com/images/themes/theme1/bg.png\",\"follow_request_sent\":false,\"entities\":{\"description\":{\"urls\":[]}},\"url\":null,\"utc_offset\":null,\"time_zone\":null,\"notifications\":false,\"profile_use_background_image\":true,\"friends_count\":1,\"profile_sidebar_fill_color\":\"DDEEF6\",\"screen_name\":\"4TYLove\",\"id_str\":\"32386852\",\"profile_image_url\":\"http://abs.twimg.com/sticky/default_profile_images/default_profile_1_normal.png\",\"listed_count\":0,\"is_translator\":false}";
+
+ @Test
+ public void testDetectTweet() {
+ Class result = TwitterDocumentClassifier.getInstance().detectClass(tweet);
+ if( !result.equals(Tweet.class) )
+ Assert.fail();
+ }
+
+ @Test
+ public void testDetectRetweet() {
+ Class result = TwitterDocumentClassifier.getInstance().detectClass(retweet);
+ if( !result.equals(Retweet.class) )
+ Assert.fail();
+ }
+
+ @Test
+ public void testDetectDelete() {
+ Class result = TwitterDocumentClassifier.getInstance().detectClass(delete);
+ if( !result.equals(Delete.class) )
+ Assert.fail();
+ }
+
+ @Test
+ public void testDetectUser() {
+ Class result = TwitterDocumentClassifier.getInstance().detectClass(user);
+ if( !result.equals(User.class) )
+ Assert.fail();
+ }
+
+ @Test
+ public void testDetectTweetConverter() throws Exception {
+ ActivityConverter serializer = ActivityConverterFactory.getInstance(
+ TwitterConverterResolver.getInstance().bestSerializer(
+ TwitterDocumentClassifier.getInstance().detectClass(tweet)
+ )
+ );
+ if( !(serializer instanceof TwitterJsonTweetActivityConverter) )
+ Assert.fail();
+ }
+
+ @Test
+ public void testDetectRetweetConverter() throws Exception {
+ ActivityConverter serializer = ActivityConverterFactory.getInstance(
+ TwitterConverterResolver.getInstance().bestSerializer(
+ TwitterDocumentClassifier.getInstance().detectClass(retweet)
+ )
+ );if( !(serializer instanceof TwitterJsonRetweetActivityConverter) )
+ Assert.fail();
+ }
+
+ @Test
+ public void testDetectDeleteConverter() throws Exception {
+ ActivityConverter serializer = ActivityConverterFactory.getInstance(
+ TwitterConverterResolver.getInstance().bestSerializer(
+ TwitterDocumentClassifier.getInstance().detectClass(delete)
+ )
+ );
+ if( !(serializer instanceof TwitterJsonDeleteActivityConverter) )
+ Assert.fail();
+ }
+
+ @Test
+ public void testDetectUserConverter() throws Exception {
+ ActivityConverter serializer = ActivityConverterFactory.getInstance(
+ TwitterConverterResolver.getInstance().bestSerializer(
+ TwitterDocumentClassifier.getInstance().detectClass(user)
+ )
+ );if( !(serializer instanceof TwitterJsonUserActivityConverter) )
+ Assert.fail();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TwitterEventClassifierTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TwitterEventClassifierTest.java b/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TwitterEventClassifierTest.java
deleted file mode 100644
index 4c7f2f3..0000000
--- a/streams-contrib/streams-provider-twitter/src/test/java/org/apache/streams/twitter/test/TwitterEventClassifierTest.java
+++ /dev/null
@@ -1,100 +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.twitter.test;
-
-import org.apache.streams.data.ActivitySerializer;
-import org.apache.streams.twitter.pojo.Delete;
-import org.apache.streams.twitter.pojo.Retweet;
-import org.apache.streams.twitter.pojo.Tweet;
-import org.apache.streams.twitter.pojo.User;
-import org.apache.streams.twitter.provider.TwitterEventClassifier;
-import org.apache.streams.twitter.serializer.TwitterJsonDeleteActivitySerializer;
-import org.apache.streams.twitter.serializer.TwitterJsonRetweetActivitySerializer;
-import org.apache.streams.twitter.serializer.TwitterJsonTweetActivitySerializer;
-import org.apache.streams.twitter.serializer.TwitterJsonUserActivitySerializer;
-import org.junit.Assert;
-import org.junit.Test;
-
-/**
- * Created by sblackmon on 12/13/13.
- */
-public class TwitterEventClassifierTest {
-
- private String tweet = "{\"created_at\":\"Wed Dec 11 22:27:34 +0000 2013\",\"id\":410898682381615105,\"id_str\":\"410898682381615105\",\"text\":\"Men's Basketball Single-Game Tickets Available - A limited number of tickets remain for Kentucky's upcoming men's ... http:\\/\\/t.co\\/SH5YZGpdRx\",\"source\":\"\\u003ca href=\\\"http:\\/\\/www.hootsuite.com\\\" rel=\\\"nofollow\\\"\\u003eHootSuite\\u003c\\/a\\u003e\",\"truncated\":false,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":91407775,\"id_str\":\"91407775\",\"name\":\"Winchester, KY\",\"screen_name\":\"winchester_ky\",\"location\":\"\",\"url\":null,\"description\":null,\"protected\":false,\"followers_count\":136,\"friends_count\":0,\"listed_count\":1,\"created_at\":\"Fri Nov 20 19:29:02 +0000 2009\",\"favourites_count\":0,\"utc_offset\":null,\"time_zone\":null,\"geo_enabled\":false,\"verified\":fa
lse,\"statuses_count\":1793,\"lang\":\"en\",\"contributors_enabled\":false,\"is_translator\":false,\"profile_background_color\":\"C0DEED\",\"profile_background_image_url\":\"http:\\/\\/abs.twimg.com\\/images\\/themes\\/theme1\\/bg.png\",\"profile_background_image_url_https\":\"https:\\/\\/abs.twimg.com\\/images\\/themes\\/theme1\\/bg.png\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\/\\/pbs.twimg.com\\/profile_images\\/613854495\\/winchester_sociallogo_normal.jpg\",\"profile_image_url_https\":\"https:\\/\\/pbs.twimg.com\\/profile_images\\/613854495\\/winchester_sociallogo_normal.jpg\",\"profile_link_color\":\"0084B4\",\"profile_sidebar_border_color\":\"C0DEED\",\"profile_sidebar_fill_color\":\"DDEEF6\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"default_profile\":true,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors
\":null,\"retweet_count\":0,\"favorite_count\":0,\"entities\":{\"hashtags\":[],\"symbols\":[],\"urls\":[{\"url\":\"http:\\/\\/t.co\\/SH5YZGpdRx\",\"expanded_url\":\"http:\\/\\/ow.ly\\/2C2XL1\",\"display_url\":\"ow.ly\\/2C2XL1\",\"indices\":[118,140]}],\"user_mentions\":[]},\"favorited\":false,\"retweeted\":false,\"possibly_sensitive\":false,\"filter_level\":\"medium\",\"lang\":\"en\"}\n";
- private String retweet = "{\"created_at\":\"Wed Dec 11 22:27:34 +0000 2013\",\"id\":410898682385797121,\"id_str\":\"410898682385797121\",\"text\":\"RT @hemocional: Cuando te acarici\\u00e9 me di cuenta que hab\\u00eda vivido toda mi vida con las manos vac\\u00edas.\\nALEJANDRO JODOROWSKY.\",\"source\":\"web\",\"truncated\":false,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":163149656,\"id_str\":\"163149656\",\"name\":\"Carolina\",\"screen_name\":\"_titinaok\",\"location\":\"Montevideo\",\"url\":\"http:\\/\\/www.youtube.com\\/watch?v=N3v5vZ-tU1E\",\"description\":\"Tantas veces me defin\\u00ed ...Soy nada y todo a la vez\",\"protected\":false,\"followers_count\":41,\"friends_count\":75,\"listed_count\":2,\"created_at\":\"Mon Jul 05 17:35:49 +0000 2010\",\"favourites_count\":4697,\"utc_offset\":-10800,\"time_zone\":\"Buenos Aires\",\"geo_enabled\":fal
se,\"verified\":false,\"statuses_count\":5257,\"lang\":\"es\",\"contributors_enabled\":false,\"is_translator\":false,\"profile_background_color\":\"C4A64B\",\"profile_background_image_url\":\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/378800000096791690\\/f64a07abbaa735b39ad7655fdaa2f416.jpeg\",\"profile_background_image_url_https\":\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/378800000096791690\\/f64a07abbaa735b39ad7655fdaa2f416.jpeg\",\"profile_background_tile\":true,\"profile_image_url\":\"http:\\/\\/pbs.twimg.com\\/profile_images\\/378800000799213504\\/496d008f457390005825d2eb4ca50a63_normal.jpeg\",\"profile_image_url_https\":\"https:\\/\\/pbs.twimg.com\\/profile_images\\/378800000799213504\\/496d008f457390005825d2eb4ca50a63_normal.jpeg\",\"profile_banner_url\":\"https:\\/\\/pbs.twimg.com\\/profile_banners\\/163149656\\/1379722210\",\"profile_link_color\":\"BF415A\",\"profile_sidebar_border_color\":\"000000\",\"profile_sidebar_fill_color\":\"B17CED\",\"pr
ofile_text_color\":\"3D1957\",\"profile_use_background_image\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweeted_status\":{\"created_at\":\"Wed Dec 11 22:25:06 +0000 2013\",\"id\":410898060206960640,\"id_str\":\"410898060206960640\",\"text\":\"Cuando te acarici\\u00e9 me di cuenta que hab\\u00eda vivido toda mi vida con las manos vac\\u00edas.\\nALEJANDRO JODOROWSKY.\",\"source\":\"\\u003ca href=\\\"http:\\/\\/bufferapp.com\\\" rel=\\\"nofollow\\\"\\u003eBuffer\\u003c\\/a\\u003e\",\"truncated\":false,\"in_reply_to_status_id\":null,\"in_reply_to_status_id_str\":null,\"in_reply_to_user_id\":null,\"in_reply_to_user_id_str\":null,\"in_reply_to_screen_name\":null,\"user\":{\"id\":552929456,\"id_str\":\"552929456\",\"name\":\"Habilidad emocional\",\"screen_name\":\"hemocional\",\"location\":\"\",\"url\":\"http:\\/\\/www.hab
ilidademocional.com\",\"description\":\"Pensamientos y reflexiones para ayudar a mirar la vida de una manera m\\u00e1s saludable y a crecer interiormente cada d\\u00eda m\\u00e1s. #InteligenciaEmocional #Psicolog\\u00eda\",\"protected\":false,\"followers_count\":34307,\"friends_count\":325,\"listed_count\":361,\"created_at\":\"Fri Apr 13 19:00:11 +0000 2012\",\"favourites_count\":44956,\"utc_offset\":3600,\"time_zone\":\"Madrid\",\"geo_enabled\":false,\"verified\":false,\"statuses_count\":24011,\"lang\":\"es\",\"contributors_enabled\":false,\"is_translator\":false,\"profile_background_color\":\"000000\",\"profile_background_image_url\":\"http:\\/\\/a0.twimg.com\\/profile_background_images\\/378800000123681920\\/aab7226ae139f0ff93b04a08a8541477.jpeg\",\"profile_background_image_url_https\":\"https:\\/\\/si0.twimg.com\\/profile_background_images\\/378800000123681920\\/aab7226ae139f0ff93b04a08a8541477.jpeg\",\"profile_background_tile\":false,\"profile_image_url\":\"http:\\/\\/pbs.twimg
.com\\/profile_images\\/2430091220\\/zdkea46xhe3g4e65nuwl_normal.gif\",\"profile_image_url_https\":\"https:\\/\\/pbs.twimg.com\\/profile_images\\/2430091220\\/zdkea46xhe3g4e65nuwl_normal.gif\",\"profile_banner_url\":\"https:\\/\\/pbs.twimg.com\\/profile_banners\\/552929456\\/1383180255\",\"profile_link_color\":\"FF00E1\",\"profile_sidebar_border_color\":\"FFFFFF\",\"profile_sidebar_fill_color\":\"F3F3F3\",\"profile_text_color\":\"333333\",\"profile_use_background_image\":true,\"default_profile\":false,\"default_profile_image\":false,\"following\":null,\"follow_request_sent\":null,\"notifications\":null},\"geo\":null,\"coordinates\":null,\"place\":null,\"contributors\":null,\"retweet_count\":9,\"favorite_count\":6,\"entities\":{\"hashtags\":[],\"symbols\":[],\"urls\":[],\"user_mentions\":[]},\"favorited\":false,\"retweeted\":false,\"lang\":\"es\"},\"retweet_count\":0,\"favorite_count\":0,\"entities\":{\"hashtags\":[],\"symbols\":[],\"urls\":[],\"user_mentions\":[{\"screen_name\":\"he
mocional\",\"name\":\"Habilidad emocional\",\"id\":552929456,\"id_str\":\"552929456\",\"indices\":[3,14]}]},\"favorited\":false,\"retweeted\":false,\"filter_level\":\"medium\",\"lang\":\"es\"}\n";
- private String delete = "{\"delete\":{\"status\":{\"id\":377518972486553600,\"user_id\":1249045572,\"id_str\":\"377518972486553600\",\"user_id_str\":\"1249045572\"}}}\n";
- private String user = "{\"location\":\"\",\"default_profile\":true,\"profile_background_tile\":false,\"statuses_count\":1,\"lang\":\"en\",\"profile_link_color\":\"0084B4\",\"id\":32386852,\"following\":false,\"protected\":false,\"favourites_count\":0,\"profile_text_color\":\"333333\",\"description\":\"\",\"verified\":false,\"contributors_enabled\":false,\"profile_sidebar_border_color\":\"C0DEED\",\"name\":\"Fred Gilkey\",\"profile_background_color\":\"C0DEED\",\"created_at\":\"Fri Apr 17 12:35:56 +0000 2009\",\"is_translation_enabled\":false,\"default_profile_image\":true,\"followers_count\":2,\"profile_image_url_https\":\"https://abs.twimg.com/sticky/default_profile_images/default_profile_1_normal.png\",\"geo_enabled\":false,\"status\":{\"contributors\":null,\"text\":\"Working\",\"geo\":null,\"retweeted\":false,\"in_reply_to_screen_name\":null,\"truncated\":false,\"lang\":\"en\",\"entities\":{\"symbols\":[],\"urls\":[],\"hashtags\":[],\"user_mentions\":[]},\"in_reply_to_status_
id_str\":null,\"id\":1541596700,\"source\":\"web\",\"in_reply_to_user_id_str\":null,\"favorited\":false,\"in_reply_to_status_id\":null,\"retweet_count\":0,\"created_at\":\"Fri Apr 17 12:37:54 +0000 2009\",\"in_reply_to_user_id\":null,\"favorite_count\":0,\"id_str\":\"1541596700\",\"place\":null,\"coordinates\":null},\"profile_background_image_url\":\"http://abs.twimg.com/images/themes/theme1/bg.png\",\"profile_background_image_url_https\":\"https://abs.twimg.com/images/themes/theme1/bg.png\",\"follow_request_sent\":false,\"entities\":{\"description\":{\"urls\":[]}},\"url\":null,\"utc_offset\":null,\"time_zone\":null,\"notifications\":false,\"profile_use_background_image\":true,\"friends_count\":1,\"profile_sidebar_fill_color\":\"DDEEF6\",\"screen_name\":\"4TYLove\",\"id_str\":\"32386852\",\"profile_image_url\":\"http://abs.twimg.com/sticky/default_profile_images/default_profile_1_normal.png\",\"listed_count\":0,\"is_translator\":false}";
-
- @Test
- public void testDetectTweet() {
- Class result = TwitterEventClassifier.detectClass(tweet);
- if( !result.equals(Tweet.class) )
- Assert.fail();
- }
-
- @Test
- public void testDetectRetweet() {
- Class result = TwitterEventClassifier.detectClass(retweet);
- if( !result.equals(Retweet.class) )
- Assert.fail();
- }
-
- @Test
- public void testDetectDelete() {
- Class result = TwitterEventClassifier.detectClass(delete);
- if( !result.equals(Delete.class) )
- Assert.fail();
- }
-
- @Test
- public void testDetectUser() {
- Class result = TwitterEventClassifier.detectClass(user);
- if( !result.equals(User.class) )
- Assert.fail();
- }
-
- @Test
- public void testDetectTweetSerializer() {
- ActivitySerializer serializer = TwitterEventClassifier.bestSerializer(tweet);
- if( !(serializer instanceof TwitterJsonTweetActivitySerializer) )
- Assert.fail();
- }
-
- @Test
- public void testDetectRetweetSerializer() {
- ActivitySerializer serializer = TwitterEventClassifier.bestSerializer(retweet);
- if( !(serializer instanceof TwitterJsonRetweetActivitySerializer) )
- Assert.fail();
- }
-
- @Test
- public void testDetectDeleteSerializer() {
- ActivitySerializer serializer = TwitterEventClassifier.bestSerializer(delete);
- if( !(serializer instanceof TwitterJsonDeleteActivitySerializer) )
- Assert.fail();
- }
-
- @Test
- public void testDetectUserSerializer() {
- ActivitySerializer serializer = TwitterEventClassifier.bestSerializer(user);
- if( !(serializer instanceof TwitterJsonUserActivitySerializer) )
- Assert.fail();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-pojo/src/main/java/org/apache/streams/data/ActivityConverter.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/data/ActivityConverter.java b/streams-pojo/src/main/java/org/apache/streams/data/ActivityConverter.java
new file mode 100644
index 0000000..fa74b3a
--- /dev/null
+++ b/streams-pojo/src/main/java/org/apache/streams/data/ActivityConverter.java
@@ -0,0 +1,60 @@
+/*
+ * 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 org.apache.streams.exceptions.ActivitySerializerException;
+import org.apache.streams.pojo.json.Activity;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * Converts non-Activity documents to Activities and back
+ */
+public interface ActivityConverter<T> extends Serializable {
+
+ /**
+ * Gets the supported content type that can be deserialized/serialized
+ *
+ * @return A string representing the format name. Can be an IETF MIME type or other
+ */
+ String serializationFormat();
+
+ /**
+ * Converts the activity to a POJO representation.
+ *
+ * @param deserialized the string
+ * @return a fully populated Activity object
+ */
+ T serialize(Activity deserialized) throws ActivitySerializerException;
+
+ /**
+ * Converts a POJO into an Activity
+ * @param serialized the string representation
+ * @return a fully populated Activity object
+ */
+ Activity deserialize(T serialized) throws ActivitySerializerException;
+
+ /**
+ * Converts multiple documents into a list of Activity objects
+ * @param serializedList a typed List of documents
+ * @return a list of fully populated activities
+ */
+ List<Activity> deserializeAll(List<T> serializedList);
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-pojo/src/main/java/org/apache/streams/data/ActivityConverterFactory.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/data/ActivityConverterFactory.java b/streams-pojo/src/main/java/org/apache/streams/data/ActivityConverterFactory.java
new file mode 100644
index 0000000..3f058ed
--- /dev/null
+++ b/streams-pojo/src/main/java/org/apache/streams/data/ActivityConverterFactory.java
@@ -0,0 +1,29 @@
+package org.apache.streams.data;
+
+import org.apache.streams.data.ActivityConverter;
+
+/**
+ * Created by sblackmon on 11/13/14.
+ */
+public class ActivityConverterFactory {
+
+ /**
+ * Identifies a class that con convert this document to an activity
+ *
+ * @param converterClass known class of the converter
+ * @return an appropriate ActivityConverter
+ */
+ public static ActivityConverter getInstance(Class converterClass) {
+
+ ActivityConverter instance;
+ try {
+ instance = (ActivityConverter)converterClass.newInstance();
+ } catch (InstantiationException e) {
+ return null;
+ } catch (IllegalAccessException e) {
+ return null;
+ }
+ return instance;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-pojo/src/main/java/org/apache/streams/data/ActivityConverterResolver.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/data/ActivityConverterResolver.java b/streams-pojo/src/main/java/org/apache/streams/data/ActivityConverterResolver.java
new file mode 100644
index 0000000..f4d7a92
--- /dev/null
+++ b/streams-pojo/src/main/java/org/apache/streams/data/ActivityConverterResolver.java
@@ -0,0 +1,38 @@
+/*
+ * 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 org.apache.streams.exceptions.ActivitySerializerException;
+
+import java.io.Serializable;
+
+/**
+ * Serializes and deserializes Activities
+ */
+public interface ActivityConverterResolver extends Serializable {
+
+ /**
+ * Identifies a class that con convert this document to an activity
+ *
+ * @param documentClass known or expected class of the document
+ * @return class of an appropriate ActivitySerializer
+ */
+ Class bestSerializer(Class documentClass) throws ActivitySerializerException;
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/aad0e887/streams-pojo/src/main/java/org/apache/streams/data/ActivitySerializer.java
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/java/org/apache/streams/data/ActivitySerializer.java b/streams-pojo/src/main/java/org/apache/streams/data/ActivitySerializer.java
deleted file mode 100644
index 23903e5..0000000
--- a/streams-pojo/src/main/java/org/apache/streams/data/ActivitySerializer.java
+++ /dev/null
@@ -1,60 +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 org.apache.streams.exceptions.ActivitySerializerException;
-import org.apache.streams.pojo.json.Activity;
-
-import java.util.List;
-
-//TODO: Change the name of this class to ActivityConverter STREAMS-68
-/**
- * Serializes and deserializes Activities
- */
-public interface ActivitySerializer<T> {
-
- /**
- * Gets the supported content type that can be deserialized/serialized
- *
- * @return A string representing the format name. Can be an IETF MIME type or other
- */
- String serializationFormat();
-
- /**
- * Converts the activity to a POJO representation.
- *
- * @param deserialized the string
- * @return a fully populated Activity object
- */
- T serialize(Activity deserialized) throws ActivitySerializerException;
-
- /**
- * Converts a POJO into an Activity
- * @param serialized the string representation
- * @return a fully populated Activity object
- */
- Activity deserialize(T serialized) throws ActivitySerializerException;
-
- /**
- * Converts multiple documents into a list of Activity objects
- * @param serializedList a typed List of documents
- * @return a list of fully populated activities
- */
- List<Activity> deserializeAll(List<T> serializedList);
-}
[4/9] incubator-streams git commit: omni-bus update
Posted by sb...@apache.org.
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");
- }
-
-
-}
[5/9] incubator-streams git commit: omni-bus update
Posted by sb...@apache.org.
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();
}