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 2015/09/10 20:50:16 UTC

[1/4] incubator-streams git commit: resolves STREAMS-353

Repository: incubator-streams
Updated Branches:
  refs/heads/master 092021c1e -> bdf509888


resolves STREAMS-353


Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/0f663588
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/0f663588
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/0f663588

Branch: refs/heads/master
Commit: 0f66358865d401e90adf848be013b4dd76957527
Parents: 776a224
Author: Steve Blackmon (@steveblackmon) <sb...@apache.org>
Authored: Wed Aug 19 16:21:14 2015 -0500
Committer: Steve Blackmon (@steveblackmon) <sb...@apache.org>
Committed: Wed Aug 19 16:21:14 2015 -0500

----------------------------------------------------------------------
 streams-components/streams-converters/pom.xml   |  5 ++
 .../converter/PromoteExtensionsProcessor.java   | 83 ++++++++++++++++++++
 .../streams/pojo/extensions/ExtensionUtil.java  | 18 +++++
 .../pojo/extensions/test/ExtensionUtilTest.java | 71 +++++++++++++++++
 4 files changed, 177 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/0f663588/streams-components/streams-converters/pom.xml
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/pom.xml b/streams-components/streams-converters/pom.xml
index 49d453d..96ac8cf 100644
--- a/streams-components/streams-converters/pom.xml
+++ b/streams-components/streams-converters/pom.xml
@@ -38,6 +38,11 @@
             <artifactId>streams-core</artifactId>
         </dependency>
         <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-pojo-extensions</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-core</artifactId>
         </dependency>

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/0f663588/streams-components/streams-converters/src/main/java/org/apache/streams/converter/PromoteExtensionsProcessor.java
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/src/main/java/org/apache/streams/converter/PromoteExtensionsProcessor.java b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/PromoteExtensionsProcessor.java
new file mode 100644
index 0000000..2bff51f
--- /dev/null
+++ b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/PromoteExtensionsProcessor.java
@@ -0,0 +1,83 @@
+/*
+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.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.pojo.extensions.ExtensionUtil;
+import org.apache.streams.pojo.json.Activity;
+import org.apache.streams.pojo.json.ActivityObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * TypeConverterProcessor converts between String json and jackson-compatible POJO objects.
+ *
+ * Activity is one supported jackson-compatible POJO, so JSON String and objects with structual similarities
+ *   to Activity can be converted to Activity objects.
+ *
+ * However, conversion to Activity should probably use {@link ActivityConverterProcessor}
+ *
+ */
+public class PromoteExtensionsProcessor implements StreamsProcessor, Serializable {
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(PromoteExtensionsProcessor.class);
+
+    private List<String> formats = Lists.newArrayList();
+
+    protected ObjectMapper mapper;
+
+    protected Class outClass;
+
+    @Override
+    public List<StreamsDatum> process(StreamsDatum entry) {
+
+        List<StreamsDatum> result = Lists.newLinkedList();
+        Object doc = entry.getDocument();
+
+        if( doc instanceof Activity) {
+            ExtensionUtil.promoteExtensions((Activity)doc);
+        } else if( doc instanceof ActivityObject) {
+            ExtensionUtil.promoteExtensions((ActivityObject)doc);
+        } else {
+            LOGGER.warn("document wrong type: " + doc.getClass());
+        }
+
+        entry.setDocument(doc);
+        result.add(entry);
+
+        return result;
+    }
+
+    @Override
+    public void prepare(Object configurationObject) {
+
+    }
+
+    @Override
+    public void cleanUp() {
+
+    }
+};

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/0f663588/streams-pojo-extensions/src/main/java/org/apache/streams/pojo/extensions/ExtensionUtil.java
----------------------------------------------------------------------
diff --git a/streams-pojo-extensions/src/main/java/org/apache/streams/pojo/extensions/ExtensionUtil.java b/streams-pojo-extensions/src/main/java/org/apache/streams/pojo/extensions/ExtensionUtil.java
index 15da4e7..f2d8e2b 100644
--- a/streams-pojo-extensions/src/main/java/org/apache/streams/pojo/extensions/ExtensionUtil.java
+++ b/streams-pojo-extensions/src/main/java/org/apache/streams/pojo/extensions/ExtensionUtil.java
@@ -67,6 +67,15 @@ public class ExtensionUtil {
         extensions.remove(key);
     };
 
+    public static void promoteExtensions(Activity activity) {
+        Map<String,Object> extensions = ensureExtensions(activity);
+        for( String key : extensions.keySet() ) {
+            activity.getAdditionalProperties().put(key, extensions.get(key));
+            removeExtension(activity, key);
+        }
+        activity.getAdditionalProperties().remove("extensions");
+    };
+
     public static Map<String, Object> getExtensions(ActivityObject object) {
         ActivityObject activityObject = mapper.convertValue(object, ActivityObject.class);
         Map<String,Object> extensions = ensureExtensions(object);
@@ -97,6 +106,15 @@ public class ExtensionUtil {
         extensions.remove(key);
     };
 
+    public static void promoteExtensions(ActivityObject object) {
+        Map<String,Object> extensions = ensureExtensions(object);
+        for( String key : extensions.keySet() ) {
+            object.getAdditionalProperties().put(key, extensions.get(key));
+            removeExtension(object, key);
+        }
+        object.getAdditionalProperties().remove("extensions");
+    };
+
     /**
      * Creates a standard extension property
      * @param activity activity to create the property in

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/0f663588/streams-pojo-extensions/src/test/java/org/apache/streams/pojo/extensions/test/ExtensionUtilTest.java
----------------------------------------------------------------------
diff --git a/streams-pojo-extensions/src/test/java/org/apache/streams/pojo/extensions/test/ExtensionUtilTest.java b/streams-pojo-extensions/src/test/java/org/apache/streams/pojo/extensions/test/ExtensionUtilTest.java
new file mode 100644
index 0000000..f14c67e
--- /dev/null
+++ b/streams-pojo-extensions/src/test/java/org/apache/streams/pojo/extensions/test/ExtensionUtilTest.java
@@ -0,0 +1,71 @@
+/*
+ * 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.pojo.extensions;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.base.Strings;
+import com.google.common.collect.Maps;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+import org.apache.streams.pojo.extensions.ExtensionUtil;
+import org.apache.streams.pojo.json.Activity;
+import org.apache.streams.pojo.json.ActivityObject;
+import org.junit.Test;
+
+import java.util.Map;
+
+/**
+ *  Test ExtensionUtil methods
+ */
+public class ExtensionUtilTest {
+
+    ObjectMapper mapper = StreamsJacksonMapper.getInstance();
+
+    /**
+     * Test promoteExtensions(Activity)
+     */
+    @Test
+    public void testActivityPromoteExtensions() throws Exception {
+        Activity activity = new Activity();
+        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activity);
+        extensions.put("extension", "value");
+        ExtensionUtil.setExtensions(activity, extensions);
+        assert(!Strings.isNullOrEmpty((String)ExtensionUtil.getExtension(activity, "extension")));
+        ExtensionUtil.promoteExtensions(activity);
+        extensions = ExtensionUtil.getExtensions(activity);
+        assert(extensions.size() == 0);
+        assert(activity.getAdditionalProperties().get("extension").equals("value"));
+    }
+
+    /**
+     * Test promoteExtensions(ActivityObject)
+     */
+    @Test
+    public void testActivityObjectPromoteExtensions() throws Exception {
+        ActivityObject activityObject = new ActivityObject();
+        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activityObject);
+        extensions.put("extension", "value");
+        ExtensionUtil.setExtensions(activityObject, extensions);
+        assert(!Strings.isNullOrEmpty((String)ExtensionUtil.getExtension(activityObject, "extension")));
+        ExtensionUtil.promoteExtensions(activityObject);
+        extensions = ExtensionUtil.getExtensions(activityObject);
+        assert(extensions.size() == 0);
+        assert(activityObject.getAdditionalProperties().get("extension").equals("value"));
+    }
+
+}


[2/4] incubator-streams git commit: adopts the Singleton model used by most other Util classes in project

Posted by sb...@apache.org.
adopts the Singleton model used by most other Util classes in project


Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/4bec4a91
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/4bec4a91
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/4bec4a91

Branch: refs/heads/master
Commit: 4bec4a911283ea624bf7f21cfdf7e4bc7058c360
Parents: 0f66358
Author: Steve Blackmon (@steveblackmon) <sb...@apache.org>
Authored: Tue Aug 25 15:00:36 2015 -0500
Committer: Steve Blackmon (@steveblackmon) <sb...@apache.org>
Committed: Tue Aug 25 15:00:36 2015 -0500

----------------------------------------------------------------------
 .../converter/PromoteExtensionsProcessor.java   |  8 +--
 .../streams/pojo/extensions/ExtensionUtil.java  | 65 +++++++++++++-------
 .../pojo/extensions/test/ExtensionUtilTest.java | 37 +++++++----
 3 files changed, 73 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/4bec4a91/streams-components/streams-converters/src/main/java/org/apache/streams/converter/PromoteExtensionsProcessor.java
----------------------------------------------------------------------
diff --git a/streams-components/streams-converters/src/main/java/org/apache/streams/converter/PromoteExtensionsProcessor.java b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/PromoteExtensionsProcessor.java
index 2bff51f..c5be883 100644
--- a/streams-components/streams-converters/src/main/java/org/apache/streams/converter/PromoteExtensionsProcessor.java
+++ b/streams-components/streams-converters/src/main/java/org/apache/streams/converter/PromoteExtensionsProcessor.java
@@ -45,7 +45,7 @@ public class PromoteExtensionsProcessor implements StreamsProcessor, Serializabl
 
     private final static Logger LOGGER = LoggerFactory.getLogger(PromoteExtensionsProcessor.class);
 
-    private List<String> formats = Lists.newArrayList();
+    private ExtensionUtil extensionUtil;
 
     protected ObjectMapper mapper;
 
@@ -58,9 +58,9 @@ public class PromoteExtensionsProcessor implements StreamsProcessor, Serializabl
         Object doc = entry.getDocument();
 
         if( doc instanceof Activity) {
-            ExtensionUtil.promoteExtensions((Activity)doc);
+            extensionUtil.promoteExtensions((Activity)doc);
         } else if( doc instanceof ActivityObject) {
-            ExtensionUtil.promoteExtensions((ActivityObject)doc);
+            extensionUtil.promoteExtensions((ActivityObject)doc);
         } else {
             LOGGER.warn("document wrong type: " + doc.getClass());
         }
@@ -73,7 +73,7 @@ public class PromoteExtensionsProcessor implements StreamsProcessor, Serializabl
 
     @Override
     public void prepare(Object configurationObject) {
-
+        extensionUtil = ExtensionUtil.getInstance();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/4bec4a91/streams-pojo-extensions/src/main/java/org/apache/streams/pojo/extensions/ExtensionUtil.java
----------------------------------------------------------------------
diff --git a/streams-pojo-extensions/src/main/java/org/apache/streams/pojo/extensions/ExtensionUtil.java b/streams-pojo-extensions/src/main/java/org/apache/streams/pojo/extensions/ExtensionUtil.java
index f2d8e2b..be995b0 100644
--- a/streams-pojo-extensions/src/main/java/org/apache/streams/pojo/extensions/ExtensionUtil.java
+++ b/streams-pojo-extensions/src/main/java/org/apache/streams/pojo/extensions/ExtensionUtil.java
@@ -19,6 +19,7 @@
 package org.apache.streams.pojo.extensions;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.google.common.base.Strings;
 import com.google.common.collect.Maps;
 import org.apache.streams.jackson.StreamsJacksonMapper;
 import org.apache.streams.pojo.json.Activity;
@@ -31,43 +32,63 @@ import java.util.Map;
  */
 public class ExtensionUtil {
 
+    public static final String DEFAULT_EXTENSION_PROPERTY = "extensions";
+
+    private static final ExtensionUtil INSTANCE = new ExtensionUtil(DEFAULT_EXTENSION_PROPERTY);
+
+    private String extensionProperty;
+
+    public static ExtensionUtil getInstance(){
+        return INSTANCE;
+    }
+
+    public static ExtensionUtil getInstance(String property){
+        return new ExtensionUtil(property);
+    }
+
+    private ExtensionUtil(String extensionProperty) {
+        if( !Strings.isNullOrEmpty(extensionProperty) )
+            this.extensionProperty = extensionProperty;
+        else
+            this.extensionProperty = DEFAULT_EXTENSION_PROPERTY;
+    }
+
     /**
      * Property on the activity object to use for extensions
      */
-    public static final String EXTENSION_PROPERTY = "extensions";
 
     private static final ObjectMapper mapper = StreamsJacksonMapper.getInstance();
 
-    public static Map<String, Object> getExtensions(Activity activity) {
+    public Map<String, Object> getExtensions(Activity activity) {
         Map<String,Object> extensions = ensureExtensions(activity);
         return extensions;
     }
 
-    public static Object getExtension(Activity activity, String key) {
+    public Object getExtension(Activity activity, String key) {
         Map<String,Object> extensions = ensureExtensions(activity);
         return extensions.get(key);
     }
 
-    public static void setExtensions(Activity activity, Map<String, Object> extensions) {
-        activity.setAdditionalProperty(EXTENSION_PROPERTY, extensions);
+    public void setExtensions(Activity activity, Map<String, Object> extensions) {
+        activity.setAdditionalProperty(extensionProperty, extensions);
     };
 
-    public static void addExtension(Activity activity, String key, Object extension) {
+    public void addExtension(Activity activity, String key, Object extension) {
         Map<String,Object> extensions = ensureExtensions(activity);
         extensions.put(key, extension);
     };
 
-    public static void addExtensions(Activity activity, Map<String, Object> extensions) {
+    public void addExtensions(Activity activity, Map<String, Object> extensions) {
         for( Map.Entry<String, Object> item : extensions.entrySet())
             addExtension(activity, item.getKey(), item.getValue());
     };
 
-    public static void removeExtension(Activity activity, String key) {
+    public void removeExtension(Activity activity, String key) {
         Map<String,Object> extensions = ensureExtensions(activity);
         extensions.remove(key);
     };
 
-    public static void promoteExtensions(Activity activity) {
+    public void promoteExtensions(Activity activity) {
         Map<String,Object> extensions = ensureExtensions(activity);
         for( String key : extensions.keySet() ) {
             activity.getAdditionalProperties().put(key, extensions.get(key));
@@ -76,43 +97,43 @@ public class ExtensionUtil {
         activity.getAdditionalProperties().remove("extensions");
     };
 
-    public static Map<String, Object> getExtensions(ActivityObject object) {
+    public Map<String, Object> getExtensions(ActivityObject object) {
         ActivityObject activityObject = mapper.convertValue(object, ActivityObject.class);
         Map<String,Object> extensions = ensureExtensions(object);
         return extensions;
     }
 
-    public static Object getExtension(ActivityObject object, String key) {
+    public Object getExtension(ActivityObject object, String key) {
         Map<String,Object> extensions = ensureExtensions(object);
         return extensions.get(key);
     }
 
-    public static void setExtensions(ActivityObject object, Map<String, Object> extensions) {
-        object.setAdditionalProperty(EXTENSION_PROPERTY, extensions);
+    public void setExtensions(ActivityObject object, Map<String, Object> extensions) {
+        object.setAdditionalProperty(extensionProperty, extensions);
     };
 
-    public static void addExtension(ActivityObject object, String key, Object extension) {
+    public void addExtension(ActivityObject object, String key, Object extension) {
         Map<String,Object> extensions = ensureExtensions(object);
         extensions.put(key, extension);
     };
 
-    public static void addExtensions(ActivityObject object, Map<String, Object> extensions) {
+    public void addExtensions(ActivityObject object, Map<String, Object> extensions) {
         for( Map.Entry<String, Object> item : extensions.entrySet())
             addExtension(object, item.getKey(), item.getValue());
     };
 
-    public static void removeExtension(ActivityObject object, String key) {
+    public void removeExtension(ActivityObject object, String key) {
         Map<String,Object> extensions = ensureExtensions(object);
         extensions.remove(key);
     };
 
-    public static void promoteExtensions(ActivityObject object) {
+    public void promoteExtensions(ActivityObject object) {
         Map<String,Object> extensions = ensureExtensions(object);
         for( String key : extensions.keySet() ) {
             object.getAdditionalProperties().put(key, extensions.get(key));
             removeExtension(object, key);
         }
-        object.getAdditionalProperties().remove("extensions");
+        object.getAdditionalProperties().remove(extensionProperty);
     };
 
     /**
@@ -121,8 +142,8 @@ public class ExtensionUtil {
      * @return the Map representing the extensions property
      */
     @SuppressWarnings("unchecked")
-    public static Map<String, Object> ensureExtensions(Activity activity) {
-        Map<String,Object> extensions = (Map<String,Object>) activity.getAdditionalProperties().get(EXTENSION_PROPERTY);
+    public Map<String, Object> ensureExtensions(Activity activity) {
+        Map<String,Object> extensions = (Map<String,Object>) activity.getAdditionalProperties().get(extensionProperty);
         if(extensions == null) {
             extensions = Maps.newHashMap();
             setExtensions(activity, extensions);
@@ -136,8 +157,8 @@ public class ExtensionUtil {
      * @return the Map representing the extensions property
      */
     @SuppressWarnings("unchecked")
-    public static Map<String, Object> ensureExtensions(ActivityObject object) {
-        Map<String,Object> extensions = (Map<String,Object>) object.getAdditionalProperties().get(EXTENSION_PROPERTY);
+    public Map<String, Object> ensureExtensions(ActivityObject object) {
+        Map<String,Object> extensions = (Map<String,Object>) object.getAdditionalProperties().get(extensionProperty);
         if(extensions == null) {
             extensions = Maps.newHashMap();
             setExtensions(object, extensions);

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/4bec4a91/streams-pojo-extensions/src/test/java/org/apache/streams/pojo/extensions/test/ExtensionUtilTest.java
----------------------------------------------------------------------
diff --git a/streams-pojo-extensions/src/test/java/org/apache/streams/pojo/extensions/test/ExtensionUtilTest.java b/streams-pojo-extensions/src/test/java/org/apache/streams/pojo/extensions/test/ExtensionUtilTest.java
index f14c67e..b3c54c5 100644
--- a/streams-pojo-extensions/src/test/java/org/apache/streams/pojo/extensions/test/ExtensionUtilTest.java
+++ b/streams-pojo-extensions/src/test/java/org/apache/streams/pojo/extensions/test/ExtensionUtilTest.java
@@ -16,7 +16,7 @@
  * under the License.
  */
 
-package org.apache.streams.pojo.extensions;
+package org.apache.streams.pojo.extensions.test;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.base.Strings;
@@ -36,18 +36,19 @@ public class ExtensionUtilTest {
 
     ObjectMapper mapper = StreamsJacksonMapper.getInstance();
 
+    ExtensionUtil extensionUtil = ExtensionUtil.getInstance();
     /**
      * Test promoteExtensions(Activity)
      */
     @Test
     public void testActivityPromoteExtensions() throws Exception {
         Activity activity = new Activity();
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activity);
+        Map<String, Object> extensions = extensionUtil.ensureExtensions(activity);
         extensions.put("extension", "value");
-        ExtensionUtil.setExtensions(activity, extensions);
-        assert(!Strings.isNullOrEmpty((String)ExtensionUtil.getExtension(activity, "extension")));
-        ExtensionUtil.promoteExtensions(activity);
-        extensions = ExtensionUtil.getExtensions(activity);
+        extensionUtil.setExtensions(activity, extensions);
+        assert(!Strings.isNullOrEmpty((String)extensionUtil.getExtension(activity, "extension")));
+        extensionUtil.promoteExtensions(activity);
+        extensions = extensionUtil.getExtensions(activity);
         assert(extensions.size() == 0);
         assert(activity.getAdditionalProperties().get("extension").equals("value"));
     }
@@ -58,14 +59,28 @@ public class ExtensionUtilTest {
     @Test
     public void testActivityObjectPromoteExtensions() throws Exception {
         ActivityObject activityObject = new ActivityObject();
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activityObject);
+        Map<String, Object> extensions = extensionUtil.ensureExtensions(activityObject);
         extensions.put("extension", "value");
-        ExtensionUtil.setExtensions(activityObject, extensions);
-        assert(!Strings.isNullOrEmpty((String)ExtensionUtil.getExtension(activityObject, "extension")));
-        ExtensionUtil.promoteExtensions(activityObject);
-        extensions = ExtensionUtil.getExtensions(activityObject);
+        extensionUtil.setExtensions(activityObject, extensions);
+        assert(!Strings.isNullOrEmpty((String)extensionUtil.getExtension(activityObject, "extension")));
+        extensionUtil.promoteExtensions(activityObject);
+        extensions = extensionUtil.getExtensions(activityObject);
         assert(extensions.size() == 0);
         assert(activityObject.getAdditionalProperties().get("extension").equals("value"));
     }
 
+    @Test
+    public void testActivitySetCustomExtension() throws Exception {
+        ExtensionUtil customExtensionUtil = ExtensionUtil.getInstance("ext");
+        Activity activity = new Activity();
+        Map<String, Object> extensions = customExtensionUtil.ensureExtensions(activity);
+        String value = "value";
+        extensions.put("extension", value);
+        customExtensionUtil.setExtensions(activity, extensions);
+        assert(!Strings.isNullOrEmpty((String)customExtensionUtil.getExtension(activity, "extension")));
+        extensions = customExtensionUtil.getExtensions(activity);
+        assert(value.equals((String)extensions.get("extension")));
+        assert(activity.getAdditionalProperties().get("ext") != null);
+    }
+
 }


[4/4] incubator-streams git commit: Merge branch 'STREAMS-353'

Posted by sb...@apache.org.
Merge branch 'STREAMS-353'

* STREAMS-353:
  changes existing modules to use Singleton access method for ExtensionUtil
  adopts the Singleton model used by most other Util classes in project
  resolves STREAMS-353


Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/bdf50988
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/bdf50988
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/bdf50988

Branch: refs/heads/master
Commit: bdf509888c1e26f291c10ca74a1e555f65ace635
Parents: 092021c cc5d316
Author: Steve Blackmon (@steveblackmon) <sb...@apache.org>
Authored: Thu Sep 10 13:31:23 2015 -0500
Committer: Steve Blackmon (@steveblackmon) <sb...@apache.org>
Committed: Thu Sep 10 13:31:23 2015 -0500

----------------------------------------------------------------------
 streams-components/streams-converters/pom.xml   |  5 ++
 .../converter/PromoteExtensionsProcessor.java   | 83 +++++++++++++++++++
 .../http/processor/SimpleHTTPGetProcessor.java  |  2 +-
 .../http/processor/SimpleHTTPPostProcessor.java |  2 +-
 .../processor/PercolateTagProcessor.java        |  4 +-
 .../peoplepattern/AccountTypeProcessor.java     |  2 +-
 .../peoplepattern/DemographicsProcessor.java    |  2 +-
 .../regex/AbstractRegexExtensionExtractor.java  |  2 +-
 .../regex/RegexHashtagExtractorTest.java        |  2 +-
 .../regex/RegexMentionExtractorTest.java        |  2 +-
 .../DatasiftInstagramActivitySerializer.java    |  2 +-
 .../DatasiftInteractionActivitySerializer.java  |  4 +-
 .../DatasiftTwitterActivitySerializer.java      |  4 +-
 .../serializer/FacebookActivityUtil.java        |  2 +-
 .../com/gplus/api/GPlusActivitySerializer.java  |  2 +-
 .../reddit/api/RedditActivitySerializer.java    |  2 +-
 .../GMailMessageActivitySerializer.java         |  2 +-
 .../serializer/util/GooglePlusActivityUtil.java |  2 +-
 .../serializer/util/InstagramActivityUtil.java  |  4 +-
 .../apache/streams/data/util/MoreoverUtils.java |  4 +-
 .../SysomosBeatActivityConverter.java           |  2 +-
 .../youtube/serializer/YoutubeActivityUtil.java |  2 +-
 .../streams/pojo/extensions/ExtensionUtil.java  | 77 +++++++++++++-----
 .../pojo/extensions/test/ExtensionUtilTest.java | 86 ++++++++++++++++++++
 24 files changed, 256 insertions(+), 45 deletions(-)
----------------------------------------------------------------------



[3/4] incubator-streams git commit: changes existing modules to use Singleton access method for ExtensionUtil

Posted by sb...@apache.org.
changes existing modules to use Singleton access method for ExtensionUtil


Project: http://git-wip-us.apache.org/repos/asf/incubator-streams/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-streams/commit/cc5d316f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/cc5d316f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/cc5d316f

Branch: refs/heads/master
Commit: cc5d316f5ce5a43fa529cbaa062ede49e2631e14
Parents: 4bec4a9
Author: Steve Blackmon (@steveblackmon) <sb...@apache.org>
Authored: Tue Aug 25 15:02:22 2015 -0500
Committer: Steve Blackmon (@steveblackmon) <sb...@apache.org>
Committed: Tue Aug 25 15:02:22 2015 -0500

----------------------------------------------------------------------
 .../components/http/processor/SimpleHTTPGetProcessor.java        | 2 +-
 .../components/http/processor/SimpleHTTPPostProcessor.java       | 2 +-
 .../streams/elasticsearch/processor/PercolateTagProcessor.java   | 4 +---
 .../org/apache/streams/peoplepattern/AccountTypeProcessor.java   | 2 +-
 .../org/apache/streams/peoplepattern/DemographicsProcessor.java  | 2 +-
 .../apache/streams/regex/AbstractRegexExtensionExtractor.java    | 2 +-
 .../java/org/apache/streams/regex/RegexHashtagExtractorTest.java | 2 +-
 .../java/org/apache/streams/regex/RegexMentionExtractorTest.java | 2 +-
 .../datasift/serializer/DatasiftInstagramActivitySerializer.java | 2 +-
 .../serializer/DatasiftInteractionActivitySerializer.java        | 4 ++--
 .../datasift/serializer/DatasiftTwitterActivitySerializer.java   | 4 ++--
 .../apache/streams/facebook/serializer/FacebookActivityUtil.java | 2 +-
 .../src/main/java/com/gplus/api/GPlusActivitySerializer.java     | 2 +-
 .../src/main/java/com/reddit/api/RedditActivitySerializer.java   | 2 +-
 .../google/gmail/provider/GMailMessageActivitySerializer.java    | 2 +-
 .../com/google/gplus/serializer/util/GooglePlusActivityUtil.java | 2 +-
 .../streams/instagram/serializer/util/InstagramActivityUtil.java | 4 ++--
 .../main/java/org/apache/streams/data/util/MoreoverUtils.java    | 4 ++--
 .../streams/sysomos/conversion/SysomosBeatActivityConverter.java | 2 +-
 .../main/java/com/youtube/serializer/YoutubeActivityUtil.java    | 2 +-
 20 files changed, 24 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/streams-components/streams-http/src/main/java/org/apache/streams/components/http/processor/SimpleHTTPGetProcessor.java
----------------------------------------------------------------------
diff --git a/streams-components/streams-http/src/main/java/org/apache/streams/components/http/processor/SimpleHTTPGetProcessor.java b/streams-components/streams-http/src/main/java/org/apache/streams/components/http/processor/SimpleHTTPGetProcessor.java
index 670b8b5..3f5a5c4 100644
--- a/streams-components/streams-http/src/main/java/org/apache/streams/components/http/processor/SimpleHTTPGetProcessor.java
+++ b/streams-components/streams-http/src/main/java/org/apache/streams/components/http/processor/SimpleHTTPGetProcessor.java
@@ -181,7 +181,7 @@ public class SimpleHTTPGetProcessor implements StreamsProcessor {
 
         ActivityObject extensionEntity = getEntityToExtend(rootDocument);
 
-        ExtensionUtil.addExtension(extensionEntity, this.configuration.getExtension(), extensionFragment);
+        ExtensionUtil.getInstance().addExtension(extensionEntity, this.configuration.getExtension(), extensionFragment);
 
         rootDocument = setEntityToExtend(rootDocument, extensionEntity);
 

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/streams-components/streams-http/src/main/java/org/apache/streams/components/http/processor/SimpleHTTPPostProcessor.java
----------------------------------------------------------------------
diff --git a/streams-components/streams-http/src/main/java/org/apache/streams/components/http/processor/SimpleHTTPPostProcessor.java b/streams-components/streams-http/src/main/java/org/apache/streams/components/http/processor/SimpleHTTPPostProcessor.java
index 761b7bf..f0ba2fd 100644
--- a/streams-components/streams-http/src/main/java/org/apache/streams/components/http/processor/SimpleHTTPPostProcessor.java
+++ b/streams-components/streams-http/src/main/java/org/apache/streams/components/http/processor/SimpleHTTPPostProcessor.java
@@ -193,7 +193,7 @@ public class SimpleHTTPPostProcessor implements StreamsProcessor {
 
         ActivityObject extensionEntity = getEntityToExtend(rootDocument);
 
-        ExtensionUtil.addExtension(extensionEntity, this.configuration.getExtension(), extensionFragment);
+        ExtensionUtil.getInstance().addExtension(extensionEntity, this.configuration.getExtension(), extensionFragment);
 
         rootDocument = setEntityToExtend(rootDocument, extensionEntity);
 

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/streams-contrib/streams-persist-elasticsearch/src/main/java/org/apache/streams/elasticsearch/processor/PercolateTagProcessor.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-persist-elasticsearch/src/main/java/org/apache/streams/elasticsearch/processor/PercolateTagProcessor.java b/streams-contrib/streams-persist-elasticsearch/src/main/java/org/apache/streams/elasticsearch/processor/PercolateTagProcessor.java
index 32ff131..d1de6f9 100644
--- a/streams-contrib/streams-persist-elasticsearch/src/main/java/org/apache/streams/elasticsearch/processor/PercolateTagProcessor.java
+++ b/streams-contrib/streams-persist-elasticsearch/src/main/java/org/apache/streams/elasticsearch/processor/PercolateTagProcessor.java
@@ -182,11 +182,9 @@ public class PercolateTagProcessor implements StreamsProcessor {
     }
 
     protected void appendMatches(ArrayNode tagArray, Activity activity) {
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activity);
 
-        extensions.put(TAGS_EXTENSION, tagArray);
+        ExtensionUtil.getInstance().addExtension(activity, TAGS_EXTENSION, tagArray);
 
-        activity.setAdditionalProperty(ActivityUtil.EXTENSION_PROPERTY, extensions);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/streams-contrib/streams-processor-peoplepattern/src/main/java/org/apache/streams/peoplepattern/AccountTypeProcessor.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-processor-peoplepattern/src/main/java/org/apache/streams/peoplepattern/AccountTypeProcessor.java b/streams-contrib/streams-processor-peoplepattern/src/main/java/org/apache/streams/peoplepattern/AccountTypeProcessor.java
index d30922e..bac96bf 100644
--- a/streams-contrib/streams-processor-peoplepattern/src/main/java/org/apache/streams/peoplepattern/AccountTypeProcessor.java
+++ b/streams-contrib/streams-processor-peoplepattern/src/main/java/org/apache/streams/peoplepattern/AccountTypeProcessor.java
@@ -64,7 +64,7 @@ public class AccountTypeProcessor extends SimpleHTTPGetProcessor {
         Activity activity = mapper.convertValue(entry.getDocument(), Activity.class);
         Actor actor = activity.getActor();
         ActivityObject actorObject = mapper.convertValue(actor, ActivityObject.class);
-        String username = (String) ExtensionUtil.getExtension(actorObject, "screenName");
+        String username = (String) ExtensionUtil.getInstance().getExtension(actorObject, "screenName");
         Map<String, String> params = Maps.newHashMap();
         params.put("id", actor.getId());
         params.put("name", actor.getDisplayName());

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/streams-contrib/streams-processor-peoplepattern/src/main/java/org/apache/streams/peoplepattern/DemographicsProcessor.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-processor-peoplepattern/src/main/java/org/apache/streams/peoplepattern/DemographicsProcessor.java b/streams-contrib/streams-processor-peoplepattern/src/main/java/org/apache/streams/peoplepattern/DemographicsProcessor.java
index 68016b8..238685d 100644
--- a/streams-contrib/streams-processor-peoplepattern/src/main/java/org/apache/streams/peoplepattern/DemographicsProcessor.java
+++ b/streams-contrib/streams-processor-peoplepattern/src/main/java/org/apache/streams/peoplepattern/DemographicsProcessor.java
@@ -64,7 +64,7 @@ public class DemographicsProcessor extends SimpleHTTPGetProcessor {
         Activity activity = mapper.convertValue(entry.getDocument(), Activity.class);
         Actor actor = activity.getActor();
         ActivityObject actorObject = mapper.convertValue(actor, ActivityObject.class);
-        String username = (String) ExtensionUtil.getExtension(actorObject, "screenName");
+        String username = (String) ExtensionUtil.getInstance().getExtension(actorObject, "screenName");
         Map<String, String> params = Maps.newHashMap();
         params.put("id", actor.getId());
         params.put("name", actor.getDisplayName());

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/streams-contrib/streams-processor-regex/src/main/java/org/apache/streams/regex/AbstractRegexExtensionExtractor.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-processor-regex/src/main/java/org/apache/streams/regex/AbstractRegexExtensionExtractor.java b/streams-contrib/streams-processor-regex/src/main/java/org/apache/streams/regex/AbstractRegexExtensionExtractor.java
index e2be262..e4fa0e0 100644
--- a/streams-contrib/streams-processor-regex/src/main/java/org/apache/streams/regex/AbstractRegexExtensionExtractor.java
+++ b/streams-contrib/streams-processor-regex/src/main/java/org/apache/streams/regex/AbstractRegexExtensionExtractor.java
@@ -117,7 +117,7 @@ public abstract class AbstractRegexExtensionExtractor<T> implements StreamsProce
 
     @SuppressWarnings("unchecked")
     protected Collection<T> ensureTargetObject(Activity activity) {
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activity);
+        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(activity);
         Set<T> hashtags;
         if(extensions.containsKey(extensionKey) && extensions.get(extensionKey) != null) {
             hashtags = Sets.newHashSet((Iterable<T>) extensions.get(extensionKey));

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/streams-contrib/streams-processor-regex/src/test/java/org/apache/streams/regex/RegexHashtagExtractorTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-processor-regex/src/test/java/org/apache/streams/regex/RegexHashtagExtractorTest.java b/streams-contrib/streams-processor-regex/src/test/java/org/apache/streams/regex/RegexHashtagExtractorTest.java
index e4f2257..2de4aa8 100644
--- a/streams-contrib/streams-processor-regex/src/test/java/org/apache/streams/regex/RegexHashtagExtractorTest.java
+++ b/streams-contrib/streams-processor-regex/src/test/java/org/apache/streams/regex/RegexHashtagExtractorTest.java
@@ -67,7 +67,7 @@ public class RegexHashtagExtractorTest {
         List<StreamsDatum> result = new RegexHashtagExtractor().process(datum);
         assertThat(result.size(), is(equalTo(1)));
         Activity output = (Activity)result.get(0).getDocument();
-        Set<String> extracted = (Set) ExtensionUtil.ensureExtensions(output).get(RegexHashtagExtractor.EXTENSION_KEY);
+        Set<String> extracted = (Set) ExtensionUtil.getInstance().ensureExtensions(output).get(RegexHashtagExtractor.EXTENSION_KEY);
         Sets.SetView<String> diff = Sets.difference(extracted, hashtags);
         assertThat(diff.size(), is(equalTo(0)));
     }

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/streams-contrib/streams-processor-regex/src/test/java/org/apache/streams/regex/RegexMentionExtractorTest.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-processor-regex/src/test/java/org/apache/streams/regex/RegexMentionExtractorTest.java b/streams-contrib/streams-processor-regex/src/test/java/org/apache/streams/regex/RegexMentionExtractorTest.java
index 8aa6561..c7778a8 100644
--- a/streams-contrib/streams-processor-regex/src/test/java/org/apache/streams/regex/RegexMentionExtractorTest.java
+++ b/streams-contrib/streams-processor-regex/src/test/java/org/apache/streams/regex/RegexMentionExtractorTest.java
@@ -76,7 +76,7 @@ public class RegexMentionExtractorTest {
         List<StreamsDatum> result = new RegexMentionsExtractor().process(datum);
         assertThat(result.size(), is(equalTo(1)));
         Activity output = (Activity)result.get(0).getDocument();
-        Set<String> extracted = (Set) ExtensionUtil.ensureExtensions(output).get(RegexMentionsExtractor.EXTENSION_KEY);
+        Set<String> extracted = (Set) ExtensionUtil.getInstance().ensureExtensions(output).get(RegexMentionsExtractor.EXTENSION_KEY);
         Sets.SetView<String> diff = Sets.difference(extracted, mentions);
         assertThat(diff.size(), is(equalTo(0)));
     }

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/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
index 03d6735..1ed805d 100644
--- 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
@@ -98,7 +98,7 @@ public class DatasiftInstagramActivitySerializer extends DatasiftInteractionActi
     }
 
     public void addInstagramExtensions(Activity activity, Instagram instagram) {
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activity);
+        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(activity);
         List<String> hashTags;
         if(instagram.getMedia() != null) {
             hashTags = instagram.getMedia().getTags();

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/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
index b506820..79bf940 100644
--- 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
@@ -127,7 +127,7 @@ public class DatasiftInteractionActivitySerializer implements ActivitySerializer
     }
 
     public static void addDatasiftExtension(Activity activity, Datasift datasift) {
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activity);
+        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(activity);
         extensions.put("datasift", datasift);
     }
 
@@ -230,7 +230,7 @@ public class DatasiftInteractionActivitySerializer implements ActivitySerializer
     }
 
     public static void addLocationExtension(Activity activity, Interaction interaction) {
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activity);
+        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(activity);
         Map<String, Object> location = new HashMap<String, Object>();
         Map<String, Double> coordinates = new HashMap<String, Double>();
         coordinates.put("latitude", interaction.getGeo().getLatitude());

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/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
index 8242da9..cbd29dd 100644
--- 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
@@ -179,7 +179,7 @@ public class DatasiftTwitterActivitySerializer extends DatasiftInteractionActivi
     }
 
     public void addLocationExtension(Activity activity, Twitter twitter) {
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activity);
+        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(activity);
         Map<String, Object> location = Maps.newHashMap();
         double[] coordiantes = new double[] { twitter.getGeo().getLongitude(), twitter.getGeo().getLatitude() };
         Map<String, Object> coords = Maps.newHashMap();
@@ -191,7 +191,7 @@ public class DatasiftTwitterActivitySerializer extends DatasiftInteractionActivi
 
     public void addTwitterExtensions(Activity activity, Twitter twitter, Interaction interaction) {
         Retweet retweet = twitter.getRetweet();
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activity);
+        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(activity);
         List<String> hashTags = Lists.newLinkedList();
         List<Object> hts = Lists.newLinkedList();
         if(twitter.getHashtags() != null) {

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookActivityUtil.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookActivityUtil.java b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookActivityUtil.java
index 8821006..7c945a7 100644
--- a/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookActivityUtil.java
+++ b/streams-contrib/streams-provider-facebook/src/main/java/org/apache/streams/facebook/serializer/FacebookActivityUtil.java
@@ -216,7 +216,7 @@ public class FacebookActivityUtil {
      */
     public static void buildExtensions(Activity activity, Post post) {
         ObjectMapper mapper = StreamsJacksonMapper.getInstance();
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activity);
+        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(activity);
 
         if(post.getLikes() != null && post.getLikes().size() > 0) {
             Map<String, Object> likes = Maps.newHashMap();

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/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
index b1f0ae0..8b04d26 100644
--- 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
@@ -74,7 +74,7 @@ public class GPlusActivitySerializer implements ActivitySerializer<String> {
         Activity activity = new Activity();
         try {
             activity = jsonMapper.readValue(fixedObject.toString(), Activity.class);
-            Map<String, Object> extension = ExtensionUtil.ensureExtensions(activity);
+            Map<String, Object> extension = ExtensionUtil.getInstance().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 ) {

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/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
index 73b326e..d715629 100644
--- 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
@@ -82,7 +82,7 @@ public class RedditActivitySerializer implements ActivitySerializer<String> {
         Activity activity = new Activity();
         try {
             activity = jsonMapper.readValue(fixedObject.toString(), Activity.class);
-            Map<String, Object> extension = ExtensionUtil.ensureExtensions(activity);
+            Map<String, Object> extension = ExtensionUtil.getInstance().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")){

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/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
index 3eaac41..7592bab 100644
--- 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
@@ -170,7 +170,7 @@ public class GMailMessageActivitySerializer implements ActivitySerializer<GmailM
     }
 
     public static void addGMailExtension(Activity activity, GmailMessage gmailMessage) {
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activity);
+        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(activity);
         extensions.put("gmail", gmailMessage);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/serializer/util/GooglePlusActivityUtil.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/serializer/util/GooglePlusActivityUtil.java b/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/serializer/util/GooglePlusActivityUtil.java
index c8ef01e..7f2a134 100644
--- a/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/serializer/util/GooglePlusActivityUtil.java
+++ b/streams-contrib/streams-provider-google/google-gplus/src/main/java/com/google/gplus/serializer/util/GooglePlusActivityUtil.java
@@ -149,7 +149,7 @@ public class GooglePlusActivityUtil {
      * @param gPlusActivity
      */
     private static void addGPlusExtensions(Activity activity, com.google.api.services.plus.model.Activity gPlusActivity) {
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activity);
+        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(activity);
 
         com.google.api.services.plus.model.Activity.PlusObject object = gPlusActivity.getObject();
         extensions.put("googlePlus", gPlusActivity);

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/util/InstagramActivityUtil.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/util/InstagramActivityUtil.java b/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/util/InstagramActivityUtil.java
index 3e5099b..f5aaa4e 100644
--- a/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/util/InstagramActivityUtil.java
+++ b/streams-contrib/streams-provider-instagram/src/main/java/org/apache/streams/instagram/serializer/util/InstagramActivityUtil.java
@@ -284,7 +284,7 @@ public class InstagramActivityUtil {
      * @param item the object to use as the source
      */
     public static void addLocationExtension(Activity activity, MediaFeedData item) {
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activity);
+        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(activity);
 
         if(item.getLocation() != null) {
             Map<String, Object> coordinates = new HashMap<String, Object>();
@@ -322,7 +322,7 @@ public class InstagramActivityUtil {
      * @param item
      */
     public static void addInstagramExtensions(Activity activity, MediaFeedData item) {
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activity);
+        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(activity);
 
         addLocationExtension(activity, item);
 

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/util/MoreoverUtils.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/util/MoreoverUtils.java b/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/util/MoreoverUtils.java
index 9b2cc3f..0424875 100644
--- a/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/util/MoreoverUtils.java
+++ b/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/util/MoreoverUtils.java
@@ -119,7 +119,7 @@ public class MoreoverUtils {
     }
 
     public static void addLocationExtension(Activity activity, Source value) {
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activity);
+        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(activity);
         String country = value.getLocation().getCountryCode() == null ? value.getLocation().getCountry() : value.getLocation().getCountryCode();
         if (country != null) {
             Map<String, Object> location = new HashMap<String, Object>();
@@ -129,7 +129,7 @@ public class MoreoverUtils {
     }
 
     public static void addLanguageExtension(Activity activity, Article value) {
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activity);
+        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(activity);
         String language = value.getLanguage();
         if (language != null) {
             extensions.put(LANGUAGE_EXTENSION, language);

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/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 1733057..a86259e 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
@@ -50,7 +50,7 @@ public class SysomosBeatActivityConverter {
         converted.setUrl(beat.getLink());
         converted.setActor(new Actor());
         Map<String, BeatApi.BeatResponse.Beat.Tag> mappedTags = mapTags(beat);
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(converted);
+        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(converted);
         extensions.put("keywords", beat.getContent());
         setLocation(beat, extensions);
         setObject(beat, converted);

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/cc5d316f/streams-contrib/streams-provider-youtube/src/main/java/com/youtube/serializer/YoutubeActivityUtil.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-youtube/src/main/java/com/youtube/serializer/YoutubeActivityUtil.java b/streams-contrib/streams-provider-youtube/src/main/java/com/youtube/serializer/YoutubeActivityUtil.java
index 0474567..09621e6 100644
--- a/streams-contrib/streams-provider-youtube/src/main/java/com/youtube/serializer/YoutubeActivityUtil.java
+++ b/streams-contrib/streams-provider-youtube/src/main/java/com/youtube/serializer/YoutubeActivityUtil.java
@@ -144,7 +144,7 @@ public class YoutubeActivityUtil {
      * @param video
      */
     private static void addYoutubeExtensions(Activity activity, Video video) {
-        Map<String, Object> extensions = ExtensionUtil.ensureExtensions(activity);
+        Map<String, Object> extensions = ExtensionUtil.getInstance().ensureExtensions(activity);
 
         extensions.put("youtube", video);