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/10/25 21:01:23 UTC

[1/5] git commit: blueprints, first commit

Repository: incubator-streams
Updated Branches:
  refs/heads/blueprints [created] 2d61837df


blueprints, first commit


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

Branch: refs/heads/blueprints
Commit: 4217ac499570b72b61178f5b144886d4fa1be4c8
Parents: eec3aa9
Author: sblackmon <sb...@apache.org>
Authored: Fri Oct 24 12:02:10 2014 -0500
Committer: sblackmon <sb...@apache.org>
Committed: Fri Oct 24 12:02:10 2014 -0500

----------------------------------------------------------------------
 .../streams-persist-blueprints/README.md        | 16 ++++
 .../streams-persist-blueprints/pom.xml          | 95 ++++++++++++++++++++
 .../BlueprintsEdgeWriterConfiguration.json      | 24 +++++
 .../BlueprintsVertexWriterConfiguration.json    | 23 +++++
 .../BlueprintsWriterConfiguration.json          | 28 ++++++
 streams-pojo/pom.xml                            | 36 --------
 6 files changed, 186 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/4217ac49/streams-contrib/streams-persist-blueprints/README.md
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-persist-blueprints/README.md b/streams-contrib/streams-persist-blueprints/README.md
new file mode 100644
index 0000000..57d18c7
--- /dev/null
+++ b/streams-contrib/streams-persist-blueprints/README.md
@@ -0,0 +1,16 @@
+streams-persist-mongo
+=====================
+
+Read and write to MongoDB
+
+Example configuration:
+
+    {
+        "mongo": {
+            "host": "localhost",
+            "port": 27017,
+            "db": "local",
+            "collection": "startup_log"
+        }
+    }
+

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/4217ac49/streams-contrib/streams-persist-blueprints/pom.xml
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-persist-blueprints/pom.xml b/streams-contrib/streams-persist-blueprints/pom.xml
new file mode 100644
index 0000000..aae9183
--- /dev/null
+++ b/streams-contrib/streams-persist-blueprints/pom.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+    <parent>
+        <artifactId>streams-contrib</artifactId>
+        <groupId>org.apache.streams</groupId>
+        <version>0.1-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>streams-persist-mongo</artifactId>
+
+    <properties>
+        <mongo-driver.version>2.12.0-rc0</mongo-driver.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-config</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-pojo</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-util</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.mongodb</groupId>
+            <artifactId>mongo-java-driver</artifactId>
+            <version>${mongo-driver.version}</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>com.fasterxml.jackson.core</groupId>
+                    <artifactId>jackson-core</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.codehaus.mojo</groupId>
+                <artifactId>build-helper-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>add-source</id>
+                        <phase>generate-sources</phase>
+                        <goals>
+                            <goal>add-source</goal>
+                        </goals>
+                        <configuration>
+                            <sources>
+                                <source>target/generated-sources/jsonschema2pojo</source>
+                            </sources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.jsonschema2pojo</groupId>
+                <artifactId>jsonschema2pojo-maven-plugin</artifactId>
+                <configuration>
+                    <addCompileSourceRoot>true</addCompileSourceRoot>
+                    <generateBuilders>true</generateBuilders>
+                    <sourcePaths>
+                        <sourcePath>src/main/jsonschema/org/apache/streams/mongo/MongoConfiguration.json</sourcePath>
+                    </sourcePaths>
+                    <outputDirectory>target/generated-sources/jsonschema2pojo</outputDirectory>
+                    <targetPackage>org.apache.streams.mongo.pojo</targetPackage>
+                    <useLongIntegers>true</useLongIntegers>
+                    <useJodaDates>true</useJodaDates>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/4217ac49/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsEdgeWriterConfiguration.json
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsEdgeWriterConfiguration.json b/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsEdgeWriterConfiguration.json
new file mode 100644
index 0000000..0061868
--- /dev/null
+++ b/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsEdgeWriterConfiguration.json
@@ -0,0 +1,24 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-03/schema",
+    "id": "#",
+    "javaType" : "org.apache.streams.blueprints.BlueprintsVertexWriterConfiguration",
+    "extends": {"$ref":"BlueprintsWriterConfiguration.json"},
+    "javaInterfaces": ["java.io.Serializable"],
+    "properties": {
+        "verbs": {
+            "type": "array",
+            "required": false,
+            "items": {
+                "type": "string"
+            }
+        },
+        "objectTypes": {
+            "type": "array",
+            "required": false,
+            "items": {
+                "type": "string"
+            }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/4217ac49/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsVertexWriterConfiguration.json
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsVertexWriterConfiguration.json b/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsVertexWriterConfiguration.json
new file mode 100644
index 0000000..441d4ba
--- /dev/null
+++ b/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsVertexWriterConfiguration.json
@@ -0,0 +1,23 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-03/schema",
+    "id": "#",
+    "javaType" : "org.apache.streams.blueprints.BlueprintsVertexWriterConfiguration",
+    "javaInterfaces": ["java.io.Serializable"],
+    "properties": {
+        "verbs": {
+            "type": "array",
+            "required": false,
+            "items": {
+                "type": "string"
+            }
+        },
+        "objectTypes": {
+            "type": "array",
+            "required": false,
+            "items": {
+                "type": "string"
+            }
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/4217ac49/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsWriterConfiguration.json
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsWriterConfiguration.json b/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsWriterConfiguration.json
new file mode 100644
index 0000000..0dbd6be
--- /dev/null
+++ b/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsWriterConfiguration.json
@@ -0,0 +1,28 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-03/schema",
+    "id": "#",
+    "javaType" : "org.apache.streams.blueprints.BlueprintsWriterConfiguration",
+    "extends": {"$ref":"BlueprintsConfiguration.json"},
+    "javaInterfaces": ["java.io.Serializable"],
+    "properties": {
+        "bulk": {
+            "type": "boolean",
+            "description": "Index in large or small batches",
+            "default": "false"
+        },
+        "batchSize": {
+            "type": "integer",
+            "description": "Item Count before flush",
+            "default": 100
+        },
+        "vertices": {
+            "type": "object",
+            "$ref": "./BlueprintsVertexWriterConfiguration.json"
+        },
+        "edges": {
+            "type": "object",
+            "$ref": "./BlueprintsEdgeWriterConfiguration.json"
+        }
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/4217ac49/streams-pojo/pom.xml
----------------------------------------------------------------------
diff --git a/streams-pojo/pom.xml b/streams-pojo/pom.xml
index 2fc9a69..d8ba083 100644
--- a/streams-pojo/pom.xml
+++ b/streams-pojo/pom.xml
@@ -148,42 +148,6 @@
                         <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/collection.json</sourcePath>
                         <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/media_link.json</sourcePath>
                         <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/object.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/article.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/audio.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/bookmark.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/comment.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/event.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/file.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/folder.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/group.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/list.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/note.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/person.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/photo-album.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/photo.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/place.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/playlist.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/product.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/property.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/review.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/service.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/song.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/status.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/video.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/favorite.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/follow.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/join.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/like.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/make-friend.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/play.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/post.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/rsvp-maybe.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/rsvp-no.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/rsvp-yes.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/save.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/share.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/tag.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/update.json</sourcePath>
                     </sourcePaths>
                     <outputDirectory>target/generated-sources/jsonschema2pojo</outputDirectory>
                     <targetPackage>org.apache.streams.pojo.json</targetPackage>


[5/5] git commit: Merge branch 'STREAMS-57' into blueprints

Posted by sb...@apache.org.
Merge branch 'STREAMS-57' into blueprints

Conflicts:
	streams-pojo/pom.xml


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

Branch: refs/heads/blueprints
Commit: 2d61837df1e43c079d4fc661f8ff77c3c8cfb91c
Parents: 4b59608 efa59fb
Author: sblackmon <sb...@apache.org>
Authored: Sat Oct 25 12:52:14 2014 -0500
Committer: sblackmon <sb...@apache.org>
Committed: Sat Oct 25 12:52:14 2014 -0500

----------------------------------------------------------------------
 .../twitter/processor/TwitterTypeConverter.java |  1 +
 .../provider/TwitterEventClassifier.java        |  2 +-
 .../TwitterJsonActivitySerializer.java          |  4 ++
 ...erJsonUserstreameventActivitySerializer.java | 40 +++++++++++++++++---
 .../test/TwitterEventClassifierTest.java        | 14 +++++++
 streams-pojo/pom.xml                            |  2 +
 .../streams/pojo/json/verbs/stop-following.json | 16 ++++++++
 .../apache/streams/pojo/json/verbs/unlike.json  | 16 ++++++++
 8 files changed, 88 insertions(+), 7 deletions(-)
----------------------------------------------------------------------



[2/5] git commit: blueprints, second commit

Posted by sb...@apache.org.
blueprints, second commit


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

Branch: refs/heads/blueprints
Commit: 7b210841e7d01c5eb4b8755bc06cf53168b51b8a
Parents: 4217ac4
Author: sblackmon <sb...@apache.org>
Authored: Fri Oct 24 12:04:15 2014 -0500
Committer: sblackmon <sb...@apache.org>
Committed: Fri Oct 24 12:04:15 2014 -0500

----------------------------------------------------------------------
 streams-contrib/pom.xml                         |  1 +
 .../streams-persist-blueprints/pom.xml          | 30 ++++++++++++--------
 .../BlueprintsEdgeWriterConfiguration.json      |  3 +-
 3 files changed, 20 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/7b210841/streams-contrib/pom.xml
----------------------------------------------------------------------
diff --git a/streams-contrib/pom.xml b/streams-contrib/pom.xml
index e290466..b33d7be 100644
--- a/streams-contrib/pom.xml
+++ b/streams-contrib/pom.xml
@@ -37,6 +37,7 @@
     </properties>
 
     <modules>
+        <module>streams-persist-blueprints</module>
         <module>streams-persist-cassandra</module>
         <module>streams-persist-console</module>
         <module>streams-persist-elasticsearch</module>

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/7b210841/streams-contrib/streams-persist-blueprints/pom.xml
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-persist-blueprints/pom.xml b/streams-contrib/streams-persist-blueprints/pom.xml
index aae9183..d8989f8 100644
--- a/streams-contrib/streams-persist-blueprints/pom.xml
+++ b/streams-contrib/streams-persist-blueprints/pom.xml
@@ -9,10 +9,10 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <artifactId>streams-persist-mongo</artifactId>
+    <artifactId>streams-persist-blueprints</artifactId>
 
     <properties>
-        <mongo-driver.version>2.12.0-rc0</mongo-driver.version>
+        <tinkerpop.version>2.6.0</tinkerpop.version>
     </properties>
 
     <dependencies>
@@ -37,15 +37,21 @@
             <version>${project.version}</version>
         </dependency>
         <dependency>
-            <groupId>org.mongodb</groupId>
-            <artifactId>mongo-java-driver</artifactId>
-            <version>${mongo-driver.version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>com.fasterxml.jackson.core</groupId>
-                    <artifactId>jackson-core</artifactId>
-                </exclusion>
-            </exclusions>
+            <groupId>com.tinkerpop.blueprints</groupId>
+            <artifactId>blueprints-core</artifactId>
+            <version>${tinkerpop.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.tinkerpop.blueprints</groupId>
+            <artifactId>blueprints-rexster-graph</artifactId>
+            <version>${tinkerpop.version}</version>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>com.tinkerpop.rexster</groupId>
+            <artifactId>rexster-protocol</artifactId>
+            <version>${tinkerpop.version}</version>
+            <optional>true</optional>
         </dependency>
     </dependencies>
     <build>
@@ -75,7 +81,7 @@
                     <addCompileSourceRoot>true</addCompileSourceRoot>
                     <generateBuilders>true</generateBuilders>
                     <sourcePaths>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/mongo/MongoConfiguration.json</sourcePath>
+                        <sourcePath>src/main/jsonschema</sourcePath>
                     </sourcePaths>
                     <outputDirectory>target/generated-sources/jsonschema2pojo</outputDirectory>
                     <targetPackage>org.apache.streams.mongo.pojo</targetPackage>

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/7b210841/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsEdgeWriterConfiguration.json
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsEdgeWriterConfiguration.json b/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsEdgeWriterConfiguration.json
index 0061868..e9b7997 100644
--- a/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsEdgeWriterConfiguration.json
+++ b/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsEdgeWriterConfiguration.json
@@ -2,8 +2,7 @@
     "type": "object",
     "$schema": "http://json-schema.org/draft-03/schema",
     "id": "#",
-    "javaType" : "org.apache.streams.blueprints.BlueprintsVertexWriterConfiguration",
-    "extends": {"$ref":"BlueprintsWriterConfiguration.json"},
+    "javaType" : "org.apache.streams.blueprints.BlueprintsEdgeWriterConfiguration",
     "javaInterfaces": ["java.io.Serializable"],
     "properties": {
         "verbs": {


[4/5] git commit: adds support for follow events

Posted by sb...@apache.org.
adds support for follow events


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

Branch: refs/heads/blueprints
Commit: efa59fba8aa2c1685aeb26af7872a860824b0db9
Parents: eec3aa9
Author: sblackmon <sb...@apache.org>
Authored: Sat Oct 25 12:51:22 2014 -0500
Committer: sblackmon <sb...@apache.org>
Committed: Sat Oct 25 12:51:22 2014 -0500

----------------------------------------------------------------------
 .../twitter/processor/TwitterTypeConverter.java |  1 +
 .../provider/TwitterEventClassifier.java        |  2 +-
 .../TwitterJsonActivitySerializer.java          |  4 ++
 ...erJsonUserstreameventActivitySerializer.java | 40 +++++++++++++++++---
 .../test/TwitterEventClassifierTest.java        | 14 +++++++
 streams-pojo/pom.xml                            | 38 +------------------
 .../streams/pojo/json/verbs/stop-following.json | 16 ++++++++
 .../apache/streams/pojo/json/verbs/unlike.json  | 16 ++++++++
 8 files changed, 88 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/efa59fba/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/processor/TwitterTypeConverter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/processor/TwitterTypeConverter.java b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/processor/TwitterTypeConverter.java
index 74cce27..871dee8 100644
--- a/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/processor/TwitterTypeConverter.java
+++ b/streams-contrib/streams-provider-twitter/src/main/java/org/apache/streams/twitter/processor/TwitterTypeConverter.java
@@ -31,6 +31,7 @@ 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.pojo.UserstreamEvent;
 import org.apache.streams.twitter.provider.TwitterEventClassifier;
 import org.apache.streams.twitter.serializer.*;
 import org.slf4j.Logger;

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/efa59fba/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
index 432a047..c639176 100644
--- 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
@@ -65,7 +65,7 @@ public class TwitterEventClassifier {
         else if( objectNode.findValue("friends") != null ||
                 objectNode.findValue("friends_str") != null )
             return FriendList.class;
-        else if( objectNode.findValue("target_object") != null )
+        else if( objectNode.findValue("event") != null )
             return UserstreamEvent.class;
         else if ( objectNode.findValue("location") != null && objectNode.findValue("user") == null)
             return User.class;

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/efa59fba/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
index 5b5be96..e0f1017 100644
--- 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
@@ -39,6 +39,7 @@ public class TwitterJsonActivitySerializer implements ActivitySerializer<String>
     TwitterJsonRetweetActivitySerializer retweetActivitySerializer = new TwitterJsonRetweetActivitySerializer();
     TwitterJsonDeleteActivitySerializer deleteActivitySerializer = new TwitterJsonDeleteActivitySerializer();
     TwitterJsonUserActivitySerializer userActivitySerializer = new TwitterJsonUserActivitySerializer();
+    TwitterJsonUserstreameventActivitySerializer userstreameventActivitySerializer = new TwitterJsonUserstreameventActivitySerializer();
 
     @Override
     public String serializationFormat() {
@@ -64,6 +65,9 @@ public class TwitterJsonActivitySerializer implements ActivitySerializer<String>
             activity = deleteActivitySerializer.deserialize(serialized);
         else if( documentSubType == User.class )
             activity = userActivitySerializer.deserialize(serialized);
+        else if( documentSubType == UserstreamEvent.class )
+            activity = userstreameventActivitySerializer.deserialize(serialized);
+
         else throw new ActivitySerializerException("unrecognized type");
 
         return activity;

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/efa59fba/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
index edaec01..8c39a89 100644
--- 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
@@ -24,12 +24,21 @@ 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.data.util.ActivityUtil;
 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.Favorite;
+import org.apache.streams.pojo.json.Follow;
+import org.apache.streams.pojo.json.Like;
+import org.apache.streams.pojo.json.StopFollowing;
+import org.apache.streams.pojo.json.Unlike;
+import org.apache.streams.twitter.pojo.Tweet;
 import org.apache.streams.twitter.pojo.UserstreamEvent;
+import org.apache.streams.twitter.serializer.util.TwitterActivityUtil;
 
+import java.io.IOException;
 import java.util.List;
 
 import static org.apache.streams.twitter.serializer.util.TwitterActivityUtil.*;
@@ -56,7 +65,17 @@ public class TwitterJsonUserstreameventActivitySerializer implements ActivitySer
 
     @Override
     public Activity deserialize(String serialized) throws ActivitySerializerException {
-        return null;
+
+        ObjectMapper mapper = StreamsTwitterMapper.getInstance();
+        ObjectNode objectNode = null;
+        try {
+            objectNode = mapper.readValue(serialized, ObjectNode.class);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return convert(objectNode);
     }
 
     @Override
@@ -78,7 +97,7 @@ public class TwitterJsonUserstreameventActivitySerializer implements ActivitySer
         activity.setActor(buildActor(event));
         activity.setVerb(detectVerb(event));
         activity.setObject(buildActivityObject(event));
-        activity.setId(formatId(activity.getVerb()));
+        activity.setId(ActivityUtil.getActivityId("twitter", activity.getVerb()));
         if(Strings.isNullOrEmpty(activity.getId()))
             throw new ActivitySerializerException("Unable to determine activity id");
         activity.setProvider(getProvider());
@@ -87,19 +106,28 @@ public class TwitterJsonUserstreameventActivitySerializer implements ActivitySer
 
     public Actor buildActor(UserstreamEvent event) {
         Actor actor = new Actor();
-        //actor.setId(formatId(delete.getDelete().getStatus().getUserIdStr()));
+        actor.setId(ActivityUtil.getObjectId("twitter", "page", event.getSource()));
+        actor.setObjectType("page");
         return actor;
     }
 
     public ActivityObject buildActivityObject(UserstreamEvent event) {
         ActivityObject actObj = new ActivityObject();
-        //actObj.setId(formatId(delete.getDelete().getStatus().getIdStr()));
-        //actObj.setObjectType("tweet");
+        actObj.setId(ActivityUtil.getObjectId("twitter", "page", event.getTarget()));
+        actObj.setObjectType("page");
         return actObj;
     }
 
     public String detectVerb(UserstreamEvent event) {
-        return null;
+        if( event.getEventType().equals(UserstreamEvent.EventType.FOLLOW))
+            return (new Follow()).getVerb();
+        if( event.getEventType().equals(UserstreamEvent.EventType.UNFOLLOW))
+            return (new StopFollowing()).getVerb();
+        if( event.getEventType().equals(UserstreamEvent.EventType.FAVORITE))
+            return (new Like()).getVerb();
+        if( event.getEventType().equals(UserstreamEvent.EventType.UNFAVORITE))
+            return (new Unlike()).getVerb();
+        else return null;
     }
 
     public ActivityObject buildTarget(UserstreamEvent event) {

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/efa59fba/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
index e416ec7..b7bed6a 100644
--- 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
@@ -22,6 +22,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.pojo.User;
+import org.apache.streams.twitter.pojo.UserstreamEvent;
 import org.apache.streams.twitter.provider.TwitterEventClassifier;
 import org.junit.Assert;
 import org.junit.Test;
@@ -35,6 +36,12 @@ public class TwitterEventClassifierTest {
     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}";
+    private String follow = "{\n" +
+            "  \"target\": 123456789,\n" +
+            "  \"source\": 987654321,\n" +
+            "  \"event\":\"follow\",\n" +
+            "  \"created_at\": \"Sat Sep 4 16:10:54 +0000 2010\"\n" +
+            "}";
 
     @Test
     public void testDetectTweet() {
@@ -63,4 +70,11 @@ public class TwitterEventClassifierTest {
         if( !result.equals(User.class) )
             Assert.fail();
     }
+
+    @Test
+    public void testDetectUserstreamevent() {
+        Class result = TwitterEventClassifier.detectClass(follow);
+        if( !result.equals(UserstreamEvent.class) )
+            Assert.fail();
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/efa59fba/streams-pojo/pom.xml
----------------------------------------------------------------------
diff --git a/streams-pojo/pom.xml b/streams-pojo/pom.xml
index 2fc9a69..f3d2ca2 100644
--- a/streams-pojo/pom.xml
+++ b/streams-pojo/pom.xml
@@ -148,42 +148,8 @@
                         <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/collection.json</sourcePath>
                         <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/media_link.json</sourcePath>
                         <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/object.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/article.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/audio.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/bookmark.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/comment.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/event.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/file.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/folder.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/group.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/list.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/note.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/person.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/photo-album.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/photo.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/place.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/playlist.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/product.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/property.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/review.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/service.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/song.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/status.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes/video.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/favorite.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/follow.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/join.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/like.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/make-friend.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/play.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/post.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/rsvp-maybe.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/rsvp-no.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/rsvp-yes.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/save.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/share.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/tag.json</sourcePath>
-                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs/update.json</sourcePath>
+                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/objectTypes</sourcePath>
+                        <sourcePath>src/main/jsonschema/org/apache/streams/pojo/json/verbs</sourcePath>
                     </sourcePaths>
                     <outputDirectory>target/generated-sources/jsonschema2pojo</outputDirectory>
                     <targetPackage>org.apache.streams.pojo.json</targetPackage>

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/efa59fba/streams-pojo/src/main/jsonschema/org/apache/streams/pojo/json/verbs/stop-following.json
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/jsonschema/org/apache/streams/pojo/json/verbs/stop-following.json b/streams-pojo/src/main/jsonschema/org/apache/streams/pojo/json/verbs/stop-following.json
new file mode 100644
index 0000000..972da75
--- /dev/null
+++ b/streams-pojo/src/main/jsonschema/org/apache/streams/pojo/json/verbs/stop-following.json
@@ -0,0 +1,16 @@
+{
+  "type" : "object",
+  "title" : "Follow",
+  "description" : "To stop following an object",
+  "extends": {"$ref":"../activity.json"},
+  "properties" :{
+    "verb" :{
+      "type" : "string",
+      "default" : "stop-following"
+    },
+    "title" : {
+      "type" : "string",
+      "default" : "{actor.displayName} stopped following {object.displayName}"
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/efa59fba/streams-pojo/src/main/jsonschema/org/apache/streams/pojo/json/verbs/unlike.json
----------------------------------------------------------------------
diff --git a/streams-pojo/src/main/jsonschema/org/apache/streams/pojo/json/verbs/unlike.json b/streams-pojo/src/main/jsonschema/org/apache/streams/pojo/json/verbs/unlike.json
new file mode 100644
index 0000000..fac7919
--- /dev/null
+++ b/streams-pojo/src/main/jsonschema/org/apache/streams/pojo/json/verbs/unlike.json
@@ -0,0 +1,16 @@
+{
+  "type" : "object",
+  "title" : "Follow",
+  "description" : "To remove an object from collection of liked items",
+  "extends": {"$ref":"../activity.json"},
+  "properties" :{
+    "verb" :{
+      "type" : "string",
+      "default" : "unlike"
+    },
+    "title" : {
+      "type" : "string",
+      "default" : "{actor.displayName} unliked {object.displayName}"
+    }
+  }
+}


[3/5] git commit: Configs and untested writer

Posted by sb...@apache.org.
Configs and untested writer


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

Branch: refs/heads/blueprints
Commit: 4b59608350c292053dae6c063c1c414c38f99861
Parents: 7b21084
Author: sblackmon <sb...@apache.org>
Authored: Fri Oct 24 14:15:21 2014 -0500
Committer: sblackmon <sb...@apache.org>
Committed: Fri Oct 24 14:15:21 2014 -0500

----------------------------------------------------------------------
 .../blueprints/BlueprintsConfigurator.java      |  62 ++++++
 .../blueprints/BlueprintsPersistWriter.java     | 202 +++++++++++++++++++
 .../blueprints/BlueprintsConfiguration.json     |  26 +++
 3 files changed, 290 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/4b596083/streams-contrib/streams-persist-blueprints/src/main/java/org/apache/streams/blueprints/BlueprintsConfigurator.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-persist-blueprints/src/main/java/org/apache/streams/blueprints/BlueprintsConfigurator.java b/streams-contrib/streams-persist-blueprints/src/main/java/org/apache/streams/blueprints/BlueprintsConfigurator.java
new file mode 100644
index 0000000..a9d2dd8
--- /dev/null
+++ b/streams-contrib/streams-persist-blueprints/src/main/java/org/apache/streams/blueprints/BlueprintsConfigurator.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.blueprints;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.typesafe.config.Config;
+import com.typesafe.config.ConfigRenderOptions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Created by sblackmon on 12/10/13.
+ */
+public class BlueprintsConfigurator {
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(BlueprintsConfigurator.class);
+
+    private final static ObjectMapper mapper = new ObjectMapper();
+
+    public static BlueprintsConfiguration detectConfiguration(Config blueprints) {
+
+        BlueprintsConfiguration blueprintsConfiguration = new BlueprintsConfiguration();
+
+        try {
+            blueprintsConfiguration = mapper.readValue(blueprints.root().render(ConfigRenderOptions.concise()), BlueprintsConfiguration.class);
+        } catch (Exception e) {
+            e.printStackTrace();
+            LOGGER.warn("Could not parse BlueprintsConfiguration");
+        }
+        return blueprintsConfiguration;
+    }
+
+    public static BlueprintsWriterConfiguration detectWriterConfiguration(Config blueprints) {
+
+        BlueprintsWriterConfiguration blueprintsConfiguration = new BlueprintsWriterConfiguration();
+
+        try {
+            blueprintsConfiguration = mapper.readValue(blueprints.root().render(ConfigRenderOptions.concise()), BlueprintsWriterConfiguration.class);
+        } catch (Exception e) {
+            e.printStackTrace();
+            LOGGER.warn("Could not parse BlueprintsConfiguration");
+        }
+        return blueprintsConfiguration;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/4b596083/streams-contrib/streams-persist-blueprints/src/main/java/org/apache/streams/blueprints/BlueprintsPersistWriter.java
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-persist-blueprints/src/main/java/org/apache/streams/blueprints/BlueprintsPersistWriter.java b/streams-contrib/streams-persist-blueprints/src/main/java/org/apache/streams/blueprints/BlueprintsPersistWriter.java
new file mode 100644
index 0000000..4a68afc
--- /dev/null
+++ b/streams-contrib/streams-persist-blueprints/src/main/java/org/apache/streams/blueprints/BlueprintsPersistWriter.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 org.apache.streams.blueprints;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+import com.tinkerpop.blueprints.Edge;
+import com.tinkerpop.blueprints.Element;
+import com.tinkerpop.blueprints.Graph;
+import com.tinkerpop.blueprints.Vertex;
+import com.tinkerpop.blueprints.impls.rexster.RexsterGraph;
+import com.tinkerpop.rexster.client.RexsterClient;
+import com.tinkerpop.rexster.client.RexsterClientFactory;
+import org.apache.streams.config.StreamsConfigurator;
+import org.apache.streams.core.StreamsDatum;
+import org.apache.streams.core.StreamsPersistWriter;
+import org.apache.streams.jackson.StreamsJacksonMapper;
+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.IOException;
+import java.net.UnknownHostException;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Queue;
+import java.util.concurrent.*;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+public class BlueprintsPersistWriter implements StreamsPersistWriter {
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(BlueprintsPersistWriter.class);
+    private final static long MAX_WRITE_LATENCY = 1000;
+
+    private BlueprintsWriterConfiguration configuration;
+
+    protected RexsterClient client;
+    protected RexsterGraph graph;
+    private ObjectMapper mapper = StreamsJacksonMapper.getInstance();
+    private volatile AtomicLong lastWrite = new AtomicLong(System.currentTimeMillis());
+    private ScheduledExecutorService backgroundFlushTask = Executors.newSingleThreadScheduledExecutor();
+
+    protected final ReadWriteLock lock = new ReentrantReadWriteLock();
+
+    public BlueprintsPersistWriter() {
+        this(BlueprintsConfigurator.detectWriterConfiguration(StreamsConfigurator.config.getConfig("blueprints")));
+    }
+
+    public BlueprintsPersistWriter(BlueprintsWriterConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+    @Override
+    public void write(StreamsDatum streamsDatum) {
+
+    }
+
+    @Override
+    public void prepare(Object configurationObject) {
+
+        connectToGraph();
+
+        Preconditions.checkNotNull(client);
+
+        Preconditions.checkNotNull(graph);
+        Preconditions.checkNotNull(graph.getGraphURI());
+
+    }
+
+    @Override
+    public void cleanUp() {
+
+        graph.shutdown();
+
+        try {
+            client.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            client = null;
+        }
+
+    }
+
+    protected List<Element> persistElements(StreamsDatum streamsDatum) {
+        List<Element> elements = Lists.newArrayList();
+        Activity activity = null;
+        if (streamsDatum.getDocument() instanceof Activity) {
+            activity = (Activity) streamsDatum.getDocument();
+        } else if (streamsDatum.getDocument() instanceof ObjectNode) {
+            activity = mapper.convertValue(streamsDatum.getDocument(), Activity.class);
+        } else if (streamsDatum.getDocument() instanceof String) {
+            try {
+                activity = mapper.readValue((String) streamsDatum.getDocument(), Activity.class);
+            } catch (Throwable e) {
+                LOGGER.warn(e.getMessage());
+                return elements;
+            }
+        } else {
+            return elements;
+        }
+
+        // what gets persisted is configurable
+        // we may add vertices and/or edges
+
+        // always add vertices first
+        // what types of verbs are relevant for adding vertices?
+        if( configuration.getVertices().getVerbs().contains(activity.getVerb().toString())) {
+
+            // what objectTypes are relevant for adding vertices?
+            if( configuration.getVertices().getObjectTypes().contains(activity.getActor().getObjectType())) {
+                elements.add(persistVertex(activity.getActor()));
+            }
+
+            if( configuration.getVertices().getObjectTypes().contains(activity.getObject().getObjectType())) {
+                elements.add(persistVertex(activity.getObject()));
+            }
+
+        }
+
+        // always add edges last
+        // what types of verbs are relevant for adding edges?
+        if( configuration.getEdges().getVerbs().contains(activity.getVerb().toString())) {
+
+            // what objectTypes are relevant for adding edges?
+            if( configuration.getEdges().getObjectTypes().contains(activity.getActor().getObjectType())
+                &&
+                configuration.getEdges().getObjectTypes().contains(activity.getObject().getObjectType())) {
+                elements.add(persistEdge(activity));
+            }
+
+        }
+        return elements;
+    }
+
+    private synchronized void connectToGraph() {
+
+        if( configuration.getType().equals(BlueprintsConfiguration.Type.REXSTER)) {
+            try {
+                client = RexsterClientFactory.open(
+                        configuration.getHost(),
+                        configuration.getGraph());
+                StringBuilder uri = new StringBuilder()
+                        .append("http://")
+                        .append(configuration.getHost())
+                        .append(":")
+                        .append(configuration.getPort())
+                        .append("/graphs/")
+                        .append(configuration.getGraph());
+                graph = new RexsterGraph(uri.toString());
+            } catch (Exception e) {
+                LOGGER.error("ERROR: ", e.getMessage());
+            }
+            return;
+
+        }
+    }
+
+    protected Vertex persistVertex(ActivityObject object) {
+        Iterator<Vertex> existing = graph.query().limit(1).has("id", object.getId()).vertices().iterator();
+        if( !existing.hasNext()) {
+            Vertex vertex = graph.addVertex(object);
+            return vertex;
+        } else {
+            return existing.next();
+        }
+    }
+
+    protected Edge persistEdge(Activity activity) {
+        Iterator<Edge> existing = graph.query().limit(1).has("id", activity.getId()).edges().iterator();
+        if( !existing.hasNext()) {
+            Vertex s = persistVertex(activity.getActor());
+            Vertex d = persistVertex(activity.getObject());
+            Edge edge = graph.addEdge(activity, s, d, activity.getVerb());
+            return edge;
+        } else {
+            return existing.next();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/4b596083/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsConfiguration.json
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsConfiguration.json b/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsConfiguration.json
new file mode 100644
index 0000000..fa60a78
--- /dev/null
+++ b/streams-contrib/streams-persist-blueprints/src/main/jsonschema/org/apache/streams/blueprints/BlueprintsConfiguration.json
@@ -0,0 +1,26 @@
+{
+    "type": "object",
+    "$schema": "http://json-schema.org/draft-03/schema",
+    "id": "#",
+    "javaType" : "org.apache.streams.blueprints.BlueprintsConfiguration",
+    "javaInterfaces": ["java.io.Serializable"],
+    "properties": {
+        "type": {
+            "type": "string",
+            "description": "Blueprint DB type",
+            "enum" : ["tinkergraph", "rexster"]
+        },
+        "host": {
+            "type": "string",
+            "description": "Blueprint DB host"
+        },
+        "port": {
+            "type": "integer",
+            "description": "Blueprint DB Port"
+        },
+        "graph": {
+            "type": "string",
+            "description": "Blueprint DB Graph ID"
+        }
+    }
+}
\ No newline at end of file