You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streams.apache.org by mf...@apache.org on 2016/10/12 19:00:18 UTC

[20/53] [abbrv] incubator-streams git commit: WIP for apachecon

WIP for apachecon


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

Branch: refs/heads/invalid_headers
Commit: 1bc84dbc614cc0537e3238a6786a005f609b429c
Parents: 114c1c5
Author: Steve Blackmon @steveblackmon <sb...@apache.org>
Authored: Fri May 6 19:45:12 2016 -0500
Committer: Steve Blackmon @steveblackmon <sb...@apache.org>
Committed: Wed Jun 1 12:51:43 2016 -0500

----------------------------------------------------------------------
 pom.xml                                         |  10 -
 streams-config/pom.xml                          |   2 +-
 .../spring/streams-cassandra-context.xml        |  25 ++
 .../src/main/jsonschema/com/twitter/tweet.json  |   6 +-
 streams-plugins/pom.xml                         |   4 +
 .../streams-plugin-cassandra/pom.xml            | 244 ++++++++++++
 .../StreamsCassandraGenerationConfig.java       |  81 ++++
 .../StreamsCassandraResourceGenerator.java      | 376 +++++++++++++++++++
 .../StreamsCassandraResourceGeneratorMojo.java  |  93 +++++
 .../src/site/markdown/index.md                  |  22 ++
 ...treamsCassandraResourceGeneratorCLITest.java |  50 +++
 ...reamsCassandraResourceGeneratorMojoTest.java |  75 ++++
 .../StreamsCassandraResourceGeneratorTest.java  | 124 ++++++
 .../resources/streams-plugin-cassandra/pom.xml  |  75 ++++
 .../streams-plugin-elasticsearch/pom.xml        | 245 ++++++++++++
 .../StreamsElasticsearchGenerationConfig.java   |  81 ++++
 .../StreamsElasticsearchResourceGenerator.java  | 373 ++++++++++++++++++
 ...reamsElasticsearchResourceGeneratorMojo.java |  93 +++++
 .../src/site/markdown/index.md                  |  22 ++
 ...sElasticsearchResourceGeneratorMojoTest.java |  50 +++
 ...reamsElasticsearchResourceGeneratorTest.java | 139 +++++++
 .../streams-plugin-elasticsearch/pom.xml        |  75 ++++
 streams-plugins/streams-plugin-hbase/pom.xml    | 244 ++++++++++++
 .../hbase/StreamsHbaseGenerationConfig.java     |  90 +++++
 .../hbase/StreamsHbaseResourceGenerator.java    | 204 ++++++++++
 .../StreamsHbaseResourceGeneratorMojo.java      |  93 +++++
 .../src/site/markdown/index.md                  |  22 ++
 .../StreamsHbaseResourceGeneratorCLITest.java   |  41 ++
 .../StreamsHbaseResourceGeneratorMojoTest.java  |  65 ++++
 .../test/StreamsHbaseResourceGeneratorTest.java | 125 ++++++
 .../test/resources/streams-plugin-hbase/pom.xml |  76 ++++
 streams-plugins/streams-plugin-hive/pom.xml     |   6 +
 .../hive/StreamsHiveResourceGenerator.java      |   7 +-
 .../hive/StreamsHiveResourceGeneratorMojo.java  |  33 +-
 .../src/site/markdown/index.md                  |  22 ++
 .../StreamsHiveResourceGeneratorCLITest.java    |  41 ++
 .../StreamsHiveResourceGeneratorMojoTest.java   |  64 ++++
 .../test/StreamsHiveResourceGeneratorTest.java  |  21 +-
 .../test/resources/streams-plugin-hive/pom.xml  |  41 +-
 streams-plugins/streams-plugin-pig/pom.xml      | 244 ++++++++++++
 .../plugins/pig/StreamsPigGenerationConfig.java |  84 +++++
 .../pig/StreamsPigResourceGenerator.java        | 317 ++++++++++++++++
 .../pig/StreamsPigResourceGeneratorMojo.java    |  93 +++++
 .../src/site/markdown/index.md                  |  22 ++
 .../StreamsPigResourceGeneratorCLITest.java     |  39 ++
 .../StreamsPigResourceGeneratorMojoTest.java    |  64 ++++
 .../test/StreamsPigResourceGeneratorTest.java   | 122 ++++++
 .../src/test/resources/expected/media_link.pig  |   1 +
 .../resources/expected/objectTypes/file.pig     |   1 +
 .../expected/objectTypes/photo-album.pig        |   1 +
 .../test/resources/streams-plugin-pig/pom.xml   |  75 ++++
 streams-plugins/streams-plugin-pojo/pom.xml     |   7 -
 .../plugins/StreamsPojoSourceGenerator.java     |  16 +-
 .../plugins/StreamsPojoSourceGeneratorMojo.java |  43 +--
 .../src/site/markdown/index.md                  |  22 ++
 .../test/StreamsPojoSourceGeneratorCLITest.java |  43 +++
 .../StreamsPojoSourceGeneratorMojoTest.java     |  68 +---
 .../test/StreamsPojoSourceGeneratorTest.java    |  28 +-
 .../test/resources/streams-plugin-pojo/pom.xml  |   1 +
 .../org/apache/streams/schema/FieldUtil.java    |  30 ++
 .../org/apache/streams/schema/FileUtil.java     |  13 +-
 .../apache/streams/schema/GenerationConfig.java |   4 +-
 .../org/apache/streams/schema/SchemaUtil.java   |   4 +-
 .../src/main/jsonschema/activity.json           |  10 +-
 .../src/main/jsonschema/collection.json         |   2 +-
 .../src/main/jsonschema/media_link.json         |   2 +-
 streams-schemas/src/main/jsonschema/object.json |   6 +-
 .../src/main/jsonschema/objectTypes/alert.json  |   2 +-
 .../jsonschema/objectTypes/application.json     |   2 +-
 .../main/jsonschema/objectTypes/article.json    |   2 +-
 .../src/main/jsonschema/objectTypes/audio.json  |   2 +-
 .../src/main/jsonschema/objectTypes/badge.json  |   2 +-
 .../src/main/jsonschema/objectTypes/binary.json |   2 +-
 .../main/jsonschema/objectTypes/bookmark.json   |   2 +-
 .../main/jsonschema/objectTypes/comment.json    |   2 +-
 .../src/main/jsonschema/objectTypes/device.json |   2 +-
 .../src/main/jsonschema/objectTypes/event.json  |   2 +-
 .../src/main/jsonschema/objectTypes/file.json   |   2 +-
 .../src/main/jsonschema/objectTypes/folder.json |   2 +-
 .../src/main/jsonschema/objectTypes/game.json   |   2 +-
 .../src/main/jsonschema/objectTypes/group.json  |   2 +-
 .../src/main/jsonschema/objectTypes/image.json  |   2 +-
 .../src/main/jsonschema/objectTypes/issue.json  |   2 +-
 .../src/main/jsonschema/objectTypes/job.json    |   2 +-
 .../src/main/jsonschema/objectTypes/list.json   |   2 +-
 .../src/main/jsonschema/objectTypes/note.json   |   2 +-
 .../src/main/jsonschema/objectTypes/offer.json  |   2 +-
 .../jsonschema/objectTypes/organization.json    |   2 +-
 .../src/main/jsonschema/objectTypes/page.json   |   2 +-
 .../main/jsonschema/objectTypes/permission.json |   2 +-
 .../src/main/jsonschema/objectTypes/person.json |   2 +-
 .../jsonschema/objectTypes/photo-album.json     |   2 +-
 .../src/main/jsonschema/objectTypes/photo.json  |   2 +-
 .../src/main/jsonschema/objectTypes/place.json  |  18 +-
 .../main/jsonschema/objectTypes/playlist.json   |   2 +-
 .../main/jsonschema/objectTypes/process.json    |   2 +-
 .../main/jsonschema/objectTypes/product.json    |   2 +-
 .../main/jsonschema/objectTypes/property.json   |   2 +-
 .../main/jsonschema/objectTypes/question.json   |   2 +-
 .../src/main/jsonschema/objectTypes/review.json |   2 +-
 .../src/main/jsonschema/objectTypes/role.json   |   2 +-
 .../main/jsonschema/objectTypes/service.json    |   2 +-
 .../src/main/jsonschema/objectTypes/song.json   |   2 +-
 .../src/main/jsonschema/objectTypes/status.json |   2 +-
 .../src/main/jsonschema/objectTypes/task.json   |   2 +-
 .../src/main/jsonschema/objectTypes/team.json   |   2 +-
 .../src/main/jsonschema/objectTypes/video.json  |   2 +-
 .../src/main/jsonschema/verbs/accept.json       |   2 +-
 .../src/main/jsonschema/verbs/access.json       |   2 +-
 .../src/main/jsonschema/verbs/acknowledge.json  |   2 +-
 .../src/main/jsonschema/verbs/add.json          |   2 +-
 .../src/main/jsonschema/verbs/agree.json        |   2 +-
 .../src/main/jsonschema/verbs/append.json       |   2 +-
 .../src/main/jsonschema/verbs/approve.json      |   2 +-
 .../src/main/jsonschema/verbs/archive.json      |   2 +-
 .../src/main/jsonschema/verbs/assign.json       |   2 +-
 .../src/main/jsonschema/verbs/at.json           |   2 +-
 .../src/main/jsonschema/verbs/attach.json       |   2 +-
 .../src/main/jsonschema/verbs/attend.json       |   2 +-
 .../src/main/jsonschema/verbs/author.json       |   2 +-
 .../src/main/jsonschema/verbs/authorize.json    |   2 +-
 .../src/main/jsonschema/verbs/borrow.json       |   2 +-
 .../src/main/jsonschema/verbs/build.json        |   2 +-
 .../src/main/jsonschema/verbs/cancel.json       |   2 +-
 .../src/main/jsonschema/verbs/checkin.json      |   2 +-
 .../src/main/jsonschema/verbs/close.json        |   2 +-
 .../src/main/jsonschema/verbs/complete.json     |   2 +-
 .../src/main/jsonschema/verbs/confirm.json      |   2 +-
 .../src/main/jsonschema/verbs/consume.json      |   2 +-
 .../src/main/jsonschema/verbs/create.json       |   2 +-
 .../src/main/jsonschema/verbs/delete.json       |   2 +-
 .../src/main/jsonschema/verbs/deliver.json      |   2 +-
 .../src/main/jsonschema/verbs/deny.json         |   2 +-
 .../src/main/jsonschema/verbs/disagree.json     |   2 +-
 .../src/main/jsonschema/verbs/dislike.json      |   2 +-
 .../src/main/jsonschema/verbs/experience.json   |   2 +-
 .../src/main/jsonschema/verbs/favorite.json     |   2 +-
 .../src/main/jsonschema/verbs/find.json         |   2 +-
 .../jsonschema/verbs/flag-as-inappropriate.json |   2 +-
 .../src/main/jsonschema/verbs/follow.json       |   2 +-
 .../src/main/jsonschema/verbs/give.json         |   2 +-
 .../src/main/jsonschema/verbs/host.json         |   2 +-
 .../src/main/jsonschema/verbs/ignore.json       |   2 +-
 .../src/main/jsonschema/verbs/insert.json       |   2 +-
 .../src/main/jsonschema/verbs/install.json      |   2 +-
 .../src/main/jsonschema/verbs/interact.json     |   2 +-
 .../src/main/jsonschema/verbs/invite.json       |   2 +-
 .../src/main/jsonschema/verbs/join.json         |   2 +-
 .../src/main/jsonschema/verbs/leave.json        |   2 +-
 .../src/main/jsonschema/verbs/like.json         |   2 +-
 .../src/main/jsonschema/verbs/listen.json       |   2 +-
 .../src/main/jsonschema/verbs/lose.json         |   2 +-
 .../src/main/jsonschema/verbs/make-friend.json  |   2 +-
 .../src/main/jsonschema/verbs/open.json         |   2 +-
 .../src/main/jsonschema/verbs/play.json         |   2 +-
 .../src/main/jsonschema/verbs/post.json         |   2 +-
 .../src/main/jsonschema/verbs/present.json      |   2 +-
 .../src/main/jsonschema/verbs/purchase.json     |   2 +-
 .../src/main/jsonschema/verbs/qualify.json      |   2 +-
 .../src/main/jsonschema/verbs/read.json         |   2 +-
 .../src/main/jsonschema/verbs/receive.json      |   2 +-
 .../src/main/jsonschema/verbs/reject.json       |   2 +-
 .../main/jsonschema/verbs/remove-friend.json    |   2 +-
 .../src/main/jsonschema/verbs/remove.json       |   2 +-
 .../src/main/jsonschema/verbs/replace.json      |   2 +-
 .../main/jsonschema/verbs/request-friend.json   |   2 +-
 .../src/main/jsonschema/verbs/request.json      |   2 +-
 .../src/main/jsonschema/verbs/resolve.json      |   2 +-
 .../src/main/jsonschema/verbs/retract.json      |   2 +-
 .../src/main/jsonschema/verbs/return.json       |   2 +-
 .../src/main/jsonschema/verbs/rsvp-maybe.json   |   2 +-
 .../src/main/jsonschema/verbs/rsvp-no.json      |   2 +-
 .../src/main/jsonschema/verbs/rsvp-yes.json     |   2 +-
 .../src/main/jsonschema/verbs/satisfy.json      |   2 +-
 .../src/main/jsonschema/verbs/save.json         |   2 +-
 .../src/main/jsonschema/verbs/schedule.json     |   2 +-
 .../src/main/jsonschema/verbs/search.json       |   4 +-
 .../src/main/jsonschema/verbs/sell.json         |   2 +-
 .../src/main/jsonschema/verbs/send.json         |  10 +-
 .../src/main/jsonschema/verbs/share.json        |   2 +-
 .../src/main/jsonschema/verbs/sponsor.json      |   2 +-
 .../src/main/jsonschema/verbs/start.json        |   2 +-
 .../main/jsonschema/verbs/stop-following.json   |   4 +-
 .../src/main/jsonschema/verbs/submit.json       |   2 +-
 .../src/main/jsonschema/verbs/tag.json          |   2 +-
 .../src/main/jsonschema/verbs/terminate.json    |   2 +-
 .../src/main/jsonschema/verbs/tie.json          |   2 +-
 .../src/main/jsonschema/verbs/unfavorite.json   |   2 +-
 .../src/main/jsonschema/verbs/unlike.json       |   2 +-
 .../src/main/jsonschema/verbs/unsatisfy.json    |   2 +-
 .../src/main/jsonschema/verbs/unsave.json       |   2 +-
 .../src/main/jsonschema/verbs/unshare.json      |   2 +-
 .../src/main/jsonschema/verbs/update.json       |   2 +-
 .../src/main/jsonschema/verbs/use.json          |   2 +-
 .../src/main/jsonschema/verbs/watch.json        |   2 +-
 .../src/main/jsonschema/verbs/win.json          |   2 +-
 .../src/site/resources/activity.json            | 108 ------
 streams-schemas/src/site/resources/activity.xsd |  94 -----
 .../src/site/resources/collection.json          |  47 ---
 .../src/site/resources/media_link.json          |  34 --
 streams-schemas/src/site/resources/object.json  |  98 -----
 .../src/site/resources/objectTypes/alert.json   |  19 -
 .../site/resources/objectTypes/application.json |  19 -
 .../src/site/resources/objectTypes/article.json |  19 -
 .../src/site/resources/objectTypes/audio.json   |  19 -
 .../src/site/resources/objectTypes/badge.json   |  19 -
 .../src/site/resources/objectTypes/binary.json  |  19 -
 .../site/resources/objectTypes/bookmark.json    |  19 -
 .../src/site/resources/objectTypes/comment.json |  19 -
 .../src/site/resources/objectTypes/device.json  |  19 -
 .../src/site/resources/objectTypes/event.json   |  51 ---
 .../src/site/resources/objectTypes/file.json    |  25 --
 .../src/site/resources/objectTypes/folder.json  |  19 -
 .../src/site/resources/objectTypes/game.json    |  19 -
 .../src/site/resources/objectTypes/group.json   |  19 -
 .../src/site/resources/objectTypes/image.json   |  22 --
 .../src/site/resources/objectTypes/issue.json   |  25 --
 .../src/site/resources/objectTypes/job.json     |  19 -
 .../src/site/resources/objectTypes/list.json    |  28 --
 .../src/site/resources/objectTypes/note.json    |  19 -
 .../src/site/resources/objectTypes/offer.json   |  19 -
 .../resources/objectTypes/organization.json     |  19 -
 .../src/site/resources/objectTypes/page.json    |  19 -
 .../site/resources/objectTypes/permission.json  |  36 --
 .../src/site/resources/objectTypes/person.json  |  25 --
 .../site/resources/objectTypes/photo-album.json |  19 -
 .../src/site/resources/objectTypes/photo.json   |  23 --
 .../src/site/resources/objectTypes/place.json   |  43 ---
 .../site/resources/objectTypes/playlist.json    |  19 -
 .../src/site/resources/objectTypes/process.json |  19 -
 .../src/site/resources/objectTypes/product.json |  25 --
 .../site/resources/objectTypes/property.json    |  48 ---
 .../site/resources/objectTypes/question.json    |  28 --
 .../src/site/resources/objectTypes/review.json  |  22 --
 .../src/site/resources/objectTypes/role.json    |  25 --
 .../src/site/resources/objectTypes/service.json |  19 -
 .../src/site/resources/objectTypes/song.json    |  19 -
 .../src/site/resources/objectTypes/status.json  |  19 -
 .../src/site/resources/objectTypes/task.json    |  40 --
 .../src/site/resources/objectTypes/team.json    |  19 -
 .../src/site/resources/objectTypes/video.json   |  19 -
 .../src/site/resources/verbs/accept.json        |  24 --
 .../src/site/resources/verbs/access.json        |  24 --
 .../src/site/resources/verbs/acknowledge.json   |  24 --
 .../src/site/resources/verbs/add.json           |  24 --
 .../src/site/resources/verbs/agree.json         |  24 --
 .../src/site/resources/verbs/append.json        |  24 --
 .../src/site/resources/verbs/approve.json       |  24 --
 .../src/site/resources/verbs/archive.json       |  24 --
 .../src/site/resources/verbs/assign.json        |  24 --
 .../src/site/resources/verbs/at.json            |  24 --
 .../src/site/resources/verbs/attach.json        |  24 --
 .../src/site/resources/verbs/attend.json        |  24 --
 .../src/site/resources/verbs/author.json        |  24 --
 .../src/site/resources/verbs/authorize.json     |  24 --
 .../src/site/resources/verbs/borrow.json        |  24 --
 .../src/site/resources/verbs/build.json         |  24 --
 .../src/site/resources/verbs/cancel.json        |  24 --
 .../src/site/resources/verbs/checkin.json       |  24 --
 .../src/site/resources/verbs/close.json         |  24 --
 .../src/site/resources/verbs/complete.json      |  24 --
 .../src/site/resources/verbs/confirm.json       |  24 --
 .../src/site/resources/verbs/consume.json       |  24 --
 .../src/site/resources/verbs/create.json        |  24 --
 .../src/site/resources/verbs/delete.json        |  24 --
 .../src/site/resources/verbs/deliver.json       |  24 --
 .../src/site/resources/verbs/deny.json          |  24 --
 .../src/site/resources/verbs/disagree.json      |  24 --
 .../src/site/resources/verbs/dislike.json       |  24 --
 .../src/site/resources/verbs/experience.json    |  24 --
 .../src/site/resources/verbs/favorite.json      |  24 --
 .../src/site/resources/verbs/find.json          |  24 --
 .../resources/verbs/flag-as-inappropriate.json  |  24 --
 .../src/site/resources/verbs/follow.json        |  24 --
 .../src/site/resources/verbs/give.json          |  24 --
 .../src/site/resources/verbs/host.json          |  24 --
 .../src/site/resources/verbs/ignore.json        |  24 --
 .../src/site/resources/verbs/insert.json        |  24 --
 .../src/site/resources/verbs/install.json       |  24 --
 .../src/site/resources/verbs/interact.json      |  24 --
 .../src/site/resources/verbs/invite.json        |  24 --
 .../src/site/resources/verbs/join.json          |  24 --
 .../src/site/resources/verbs/leave.json         |  24 --
 .../src/site/resources/verbs/like.json          |  24 --
 .../src/site/resources/verbs/listen.json        |  24 --
 .../src/site/resources/verbs/lose.json          |  24 --
 .../src/site/resources/verbs/make-friend.json   |  24 --
 .../src/site/resources/verbs/open.json          |  24 --
 .../src/site/resources/verbs/play.json          |  24 --
 .../src/site/resources/verbs/post.json          |  24 --
 .../src/site/resources/verbs/present.json       |  24 --
 .../src/site/resources/verbs/purchase.json      |  24 --
 .../src/site/resources/verbs/qualify.json       |  24 --
 .../src/site/resources/verbs/read.json          |  24 --
 .../src/site/resources/verbs/receive.json       |  24 --
 .../src/site/resources/verbs/reject.json        |  24 --
 .../src/site/resources/verbs/remove-friend.json |  24 --
 .../src/site/resources/verbs/remove.json        |  24 --
 .../src/site/resources/verbs/replace.json       |  24 --
 .../site/resources/verbs/request-friend.json    |  24 --
 .../src/site/resources/verbs/request.json       |  24 --
 .../src/site/resources/verbs/resolve.json       |  24 --
 .../src/site/resources/verbs/retract.json       |  24 --
 .../src/site/resources/verbs/return.json        |  24 --
 .../src/site/resources/verbs/rsvp-maybe.json    |  24 --
 .../src/site/resources/verbs/rsvp-no.json       |  24 --
 .../src/site/resources/verbs/rsvp-yes.json      |  24 --
 .../src/site/resources/verbs/satisfy.json       |  24 --
 .../src/site/resources/verbs/save.json          |  24 --
 .../src/site/resources/verbs/schedule.json      |  24 --
 .../src/site/resources/verbs/search.json        |  24 --
 .../src/site/resources/verbs/sell.json          |  24 --
 .../src/site/resources/verbs/send.json          |  24 --
 .../src/site/resources/verbs/share.json         |  24 --
 .../src/site/resources/verbs/sponsor.json       |  24 --
 .../src/site/resources/verbs/start.json         |  24 --
 .../site/resources/verbs/stop-following.json    |  24 --
 .../src/site/resources/verbs/submit.json        |  24 --
 .../src/site/resources/verbs/tag.json           |  24 --
 .../src/site/resources/verbs/terminate.json     |  24 --
 .../src/site/resources/verbs/tie.json           |  24 --
 .../src/site/resources/verbs/unfavorite.json    |  24 --
 .../src/site/resources/verbs/unlike.json        |  24 --
 .../src/site/resources/verbs/unsatisfy.json     |  24 --
 .../src/site/resources/verbs/unsave.json        |  24 --
 .../src/site/resources/verbs/unshare.json       |  24 --
 .../src/site/resources/verbs/update.json        |  34 --
 .../src/site/resources/verbs/use.json           |  24 --
 .../src/site/resources/verbs/watch.json         |  24 --
 .../src/site/resources/verbs/win.json           |  24 --
 .../schema/test/SchemaOrderingTests.java        | 146 +++++++
 .../streams/schema/test/SchemaStoreTests.java   |  76 ++++
 .../src/test/resources/activities/accept.json   |  16 +
 .../src/test/resources/activities/access.json   |  17 +
 .../test/resources/activities/acknowledge.json  |  16 +
 .../src/test/resources/activities/add.json      |  21 ++
 .../src/test/resources/activities/agree.json    |  15 +
 .../src/test/resources/activities/append.json   |  16 +
 .../src/test/resources/activities/approve.json  |  20 +
 .../src/test/resources/activities/archive.json  |  15 +
 .../src/test/resources/activities/assign.json   |  20 +
 .../src/test/resources/activities/at.json       |  15 +
 .../src/test/resources/activities/attach.json   |  20 +
 .../src/test/resources/activities/attend.json   |  15 +
 .../src/test/resources/activities/author.json   |  15 +
 .../test/resources/activities/authorize.json    |  23 ++
 .../src/test/resources/activities/borrow.json   |  21 ++
 .../src/test/resources/activities/build.json    |  16 +
 .../src/test/resources/activities/cancel.json   |  16 +
 .../src/test/resources/activities/checkin.json  |  16 +
 .../src/test/resources/activities/close.json    |  16 +
 .../src/test/resources/activities/complete.json |  16 +
 .../src/test/resources/activities/confirm.json  |  17 +
 .../src/test/resources/activities/consume.json  |  16 +
 .../src/test/resources/activities/create.json   |  15 +
 .../src/test/resources/activities/delete.json   |  16 +
 .../src/test/resources/activities/deliver.json  |  20 +
 .../src/test/resources/activities/deny.json     |  23 ++
 .../src/test/resources/activities/disagree.json |  30 ++
 .../src/test/resources/activities/dislike.json  |  15 +
 .../test/resources/activities/experience.json   |  16 +
 .../src/test/resources/activities/favorite.json |  15 +
 .../src/test/resources/activities/find.json     |  19 +
 .../activities/flag-as-inappropriate.json       |  24 ++
 .../src/test/resources/activities/follow.json   |  15 +
 .../src/test/resources/activities/give.json     |  28 ++
 .../src/test/resources/activities/host.json     |  15 +
 .../src/test/resources/activities/ignore.json   |  15 +
 .../src/test/resources/activities/insert.json   |  19 +
 .../src/test/resources/activities/install.json  |  18 +
 .../src/test/resources/activities/interact.json |  16 +
 .../src/test/resources/activities/invite.json   |  19 +
 .../src/test/resources/activities/join.json     |  15 +
 .../src/test/resources/activities/leave.json    |  15 +
 .../src/test/resources/activities/like.json     |  22 ++
 .../src/test/resources/activities/listen.json   |  15 +
 .../src/test/resources/activities/lose.json     |  15 +
 .../test/resources/activities/make-friend.json  |  15 +
 .../src/test/resources/activities/open.json     |  15 +
 .../src/test/resources/activities/play.json     |  15 +
 .../src/test/resources/activities/post.json     |  25 ++
 .../src/test/resources/activities/present.json  |  15 +
 .../src/test/resources/activities/purchase.json |  16 +
 .../src/test/resources/activities/qualify.json  |  15 +
 .../src/test/resources/activities/read.json     |  16 +
 .../src/test/resources/activities/receive.json  |  16 +
 .../src/test/resources/activities/reject.json   |  15 +
 .../resources/activities/remove-friend.json     |  15 +
 .../src/test/resources/activities/remove.json   |  23 ++
 .../src/test/resources/activities/replace.json  |  19 +
 .../resources/activities/request-friend.json    |  16 +
 .../src/test/resources/activities/request.json  |  23 ++
 .../src/test/resources/activities/resolve.json  |  15 +
 .../src/test/resources/activities/retract.json  |  26 ++
 .../src/test/resources/activities/return.json   |  19 +
 .../test/resources/activities/rsvp-maybe.json   |  16 +
 .../src/test/resources/activities/rsvp-no.json  |  16 +
 .../src/test/resources/activities/rsvp-yes.json |  16 +
 .../src/test/resources/activities/satisfy.json  |  21 ++
 .../src/test/resources/activities/save.json     |  20 +
 .../src/test/resources/activities/schedule.json |  15 +
 .../src/test/resources/activities/search.json   |  21 ++
 .../src/test/resources/activities/sell.json     |  19 +
 .../src/test/resources/activities/send.json     |  19 +
 .../src/test/resources/activities/share.json    |  16 +
 .../src/test/resources/activities/sponsor.json  |  17 +
 .../src/test/resources/activities/start.json    |  15 +
 .../resources/activities/stop-following.json    |  15 +
 .../src/test/resources/activities/submit.json   |  15 +
 .../src/test/resources/activities/tag.json      |  19 +
 .../test/resources/activities/terminate.json    |  15 +
 .../src/test/resources/activities/tie.json      |  24 ++
 .../test/resources/activities/unfavorite.json   |  15 +
 .../src/test/resources/activities/unlike.json   |  15 +
 .../test/resources/activities/unsatisfy.json    |  20 +
 .../src/test/resources/activities/unsave.json   |  15 +
 .../src/test/resources/activities/unshare.json  |  15 +
 .../src/test/resources/activities/update.json   |  15 +
 .../src/test/resources/activities/use.json      |  15 +
 .../src/test/resources/activities/watch.json    |  16 +
 .../src/test/resources/activities/win.json      |  15 +
 .../src/test/resources/media_link.json          |   7 +
 .../src/test/resources/objects/event.json       |  18 +
 .../src/test/resources/objects/group.json       |  16 +
 .../src/test/resources/objects/issue.json       |   9 +
 .../src/test/resources/objects/note.json        |  12 +
 .../src/test/resources/objects/permission.json  |   9 +
 .../src/test/resources/objects/place.json       |   9 +
 .../src/test/resources/objects/task.json        |  16 +
 .../src/test/resources/objects/video.json       |   8 +
 430 files changed, 6688 insertions(+), 3771 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 6010572..08058ab 100644
--- a/pom.xml
+++ b/pom.xml
@@ -81,12 +81,6 @@
             <subscribe>dev-subscribe@streams.incubator.apache.org</subscribe>
             <unsubscribe>dev-unsubscribe@streams.incubator.apache.org</unsubscribe>
         </mailingList>
-        <mailingList>
-            <name>User Mailing List</name>
-            <post>user@streams.incubator.apache.org</post>
-            <subscribe>user-subscribe@streams.incubator.apache.org</subscribe>
-            <unsubscribe>user-unsubscribe@streams.incubator.apache.org</unsubscribe>
-        </mailingList>
     </mailingLists>
 
     <repositories>
@@ -185,10 +179,6 @@
 
     <packaging>pom</packaging>
 
-    <properties>
-        <jsonschema2pojo.version>0.4.22</jsonschema2pojo.version>
-    </properties>
-
     <build>
         <plugins>
             <plugin>

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-config/pom.xml
----------------------------------------------------------------------
diff --git a/streams-config/pom.xml b/streams-config/pom.xml
index 38d5554..f4a8ebc 100644
--- a/streams-config/pom.xml
+++ b/streams-config/pom.xml
@@ -111,7 +111,7 @@
                         </goals>
                         <configuration>
                             <sources>
-                                <source>target/generated-sources/jsonschema2pojo</source>
+                                <source>${project.basedir}/target/generated-sources/jsonschema2pojo</source>
                             </sources>
                         </configuration>
                     </execution>

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-contrib/streams-persist-cassandra/src/site/resources/META_INF/spring/streams-cassandra-context.xml
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-persist-cassandra/src/site/resources/META_INF/spring/streams-cassandra-context.xml b/streams-contrib/streams-persist-cassandra/src/site/resources/META_INF/spring/streams-cassandra-context.xml
new file mode 100644
index 0000000..842c918
--- /dev/null
+++ b/streams-contrib/streams-persist-cassandra/src/site/resources/META_INF/spring/streams-cassandra-context.xml
@@ -0,0 +1,25 @@
+<!--
+  ~ 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.
+  -->
+<beans
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xmlns="http://www.springframework.org/schema/beans"
+        xmlns:context="http://www.springframework.org/schema/context"
+        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
+
+</beans>

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-contrib/streams-provider-twitter/src/main/jsonschema/com/twitter/tweet.json
----------------------------------------------------------------------
diff --git a/streams-contrib/streams-provider-twitter/src/main/jsonschema/com/twitter/tweet.json b/streams-contrib/streams-provider-twitter/src/main/jsonschema/com/twitter/tweet.json
index 34ca3fa..bdd2201 100644
--- a/streams-contrib/streams-provider-twitter/src/main/jsonschema/com/twitter/tweet.json
+++ b/streams-contrib/streams-provider-twitter/src/main/jsonschema/com/twitter/tweet.json
@@ -97,9 +97,9 @@
                              },
                              "indices": {
                                  "type": "array",
-                                 "items": [{
-                                         "type": "integer"
-                                 }]
+                                 "items": {
+                                     "type": "integer"
+                                 }
                              }
                           }
                     }

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/pom.xml
----------------------------------------------------------------------
diff --git a/streams-plugins/pom.xml b/streams-plugins/pom.xml
index b90e2d5..5d403ac 100644
--- a/streams-plugins/pom.xml
+++ b/streams-plugins/pom.xml
@@ -36,7 +36,11 @@
     </properties>
 
     <modules>
+        <module>streams-plugin-cassandra</module>
+        <module>streams-plugin-elasticsearch</module>
+        <module>streams-plugin-hbase</module>
         <module>streams-plugin-hive</module>
+        <module>streams-plugin-pig</module>
         <module>streams-plugin-pojo</module>
  	</modules>
 

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-cassandra/pom.xml b/streams-plugins/streams-plugin-cassandra/pom.xml
new file mode 100644
index 0000000..b2dbf36
--- /dev/null
+++ b/streams-plugins/streams-plugin-cassandra/pom.xml
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.apache.streams.plugins</groupId>
+    <artifactId>streams-plugin-cassandra</artifactId>
+    <version>0.3-incubating-SNAPSHOT</version>
+    <packaging>maven-plugin</packaging>
+
+    <parent>
+        <groupId>org.apache.streams</groupId>
+        <artifactId>streams-plugins</artifactId>
+        <version>0.3-incubating-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+
+    <properties>
+        <cassandra.version>3.0.0</cassandra.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-config</artifactId>
+            <version>${project.version}</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>commons-logging</artifactId>
+                    <groupId>commons-logging</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-schemas</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.reflections</groupId>
+            <artifactId>reflections</artifactId>
+            <version>0.9.9</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-aether-provider</artifactId>
+            <version>3.3.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-artifact</artifactId>
+            <version>3.3.3</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-compat</artifactId>
+            <version>3.3.3</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-core</artifactId>
+            <version>3.3.3</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.sonatype.aether</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-plugin-api</artifactId>
+            <version>3.3.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-resources-plugin</artifactId>
+            <version>2.7</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.apache.maven</groupId>
+                    <artifactId>*</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven.shared</groupId>
+            <artifactId>maven-verifier</artifactId>
+            <version>1.6</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.plexus</groupId>
+            <artifactId>plexus-utils</artifactId>
+            <version>3.0.15</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-plugin-plugin</artifactId>
+            <version>3.4</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>commons-logging</artifactId>
+                    <groupId>commons-logging</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven.plugin-tools</groupId>
+            <artifactId>maven-plugin-tools-api</artifactId>
+            <version>3.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven.plugin-tools</groupId>
+            <artifactId>maven-plugin-annotations</artifactId>
+            <version>3.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven.plugin-tools</groupId>
+            <artifactId>maven-plugin-tools-generators</artifactId>
+            <version>3.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven.plugin-testing</groupId>
+            <artifactId>maven-plugin-testing-harness</artifactId>
+            <version>3.3.0</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+            <version>2.6</version>
+        </dependency>
+        <dependency>
+            <groupId>joda-time</groupId>
+            <artifactId>joda-time</artifactId>
+            <version>2.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.joda</groupId>
+            <artifactId>joda-convert</artifactId>
+            <version>1.8.1</version>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <sourceDirectory>src/main/java</sourceDirectory>
+        <testSourceDirectory>src/test/java</testSourceDirectory>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+            </resource>
+        </resources>
+        <testResources>
+            <testResource>
+                <directory>src/test/resources</directory>
+            </testResource>
+        </testResources>
+        <plugins>
+            <plugin>
+                <artifactId>maven-plugin-plugin</artifactId>
+                <version>3.4</version>
+                <configuration>
+                    <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>mojo-descriptor</id>
+                        <phase>process-classes</phase>
+                        <goals>
+                            <goal>descriptor</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.reflections</groupId>
+                <artifactId>reflections-maven</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>reflections</goal>
+                        </goals>
+                        <phase>process-classes</phase>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>2.4</version>
+                <executions>
+                    <execution>
+                        <id>resource-dependencies</id>
+                        <phase>process-test-resources</phase>
+                        <goals>
+                            <goal>unpack-dependencies</goal>
+                        </goals>
+                        <configuration>
+                            <includeGroupIds>org.apache.streams</includeGroupIds>
+                            <includeArtifactIds>streams-schemas</includeArtifactIds>
+                            <includes>**/*.json</includes>
+                            <outputDirectory>${project.build.directory}/test-classes/streams-schemas</outputDirectory>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+
+        </plugins>
+    </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-cassandra/src/main/java/org/apache/streams/plugins/cassandra/StreamsCassandraGenerationConfig.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-cassandra/src/main/java/org/apache/streams/plugins/cassandra/StreamsCassandraGenerationConfig.java b/streams-plugins/streams-plugin-cassandra/src/main/java/org/apache/streams/plugins/cassandra/StreamsCassandraGenerationConfig.java
new file mode 100644
index 0000000..28e20e4
--- /dev/null
+++ b/streams-plugins/streams-plugin-cassandra/src/main/java/org/apache/streams/plugins/cassandra/StreamsCassandraGenerationConfig.java
@@ -0,0 +1,81 @@
+package org.apache.streams.plugins.cassandra;
+
+import org.apache.streams.schema.GenerationConfig;
+import org.jsonschema2pojo.DefaultGenerationConfig;
+import org.jsonschema2pojo.util.URLUtil;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Configures StreamsHiveResourceGenerator
+ *
+ *
+ */
+public class StreamsCassandraGenerationConfig extends DefaultGenerationConfig implements GenerationConfig {
+
+    public String getSourceDirectory() {
+        return sourceDirectory;
+    }
+
+    public List<String> getSourcePaths() {
+        return sourcePaths;
+    }
+
+    private String sourceDirectory;
+    private List<String> sourcePaths = new ArrayList<String>();
+    private String targetDirectory;
+    private int maxDepth = 1;
+
+    public Set<String> getExclusions() {
+        return exclusions;
+    }
+
+    public void setExclusions(Set<String> exclusions) {
+        this.exclusions = exclusions;
+    }
+
+    private Set<String> exclusions = new HashSet<String>();
+
+    public int getMaxDepth() {
+        return maxDepth;
+    }
+
+    public void setSourceDirectory(String sourceDirectory) {
+        this.sourceDirectory = sourceDirectory;
+    }
+
+    public void setSourcePaths(List<String> sourcePaths) {
+        this.sourcePaths = sourcePaths;
+    }
+
+    public void setTargetDirectory(String targetDirectory) {
+        this.targetDirectory = targetDirectory;
+    }
+
+    public File getTargetDirectory() {
+        return new File(targetDirectory);
+    }
+
+    public Iterator<URL> getSource() {
+        if (null != sourceDirectory) {
+            return Collections.singleton(URLUtil.parseURL(sourceDirectory)).iterator();
+        }
+        List<URL> sourceURLs = new ArrayList<URL>();
+        if( sourcePaths != null && sourcePaths.size() > 0)
+            for (String source : sourcePaths) {
+                sourceURLs.add(URLUtil.parseURL(source));
+            }
+        return sourceURLs.iterator();
+    }
+
+    public void setMaxDepth(int maxDepth) {
+        this.maxDepth = maxDepth;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-cassandra/src/main/java/org/apache/streams/plugins/cassandra/StreamsCassandraResourceGenerator.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-cassandra/src/main/java/org/apache/streams/plugins/cassandra/StreamsCassandraResourceGenerator.java b/streams-plugins/streams-plugin-cassandra/src/main/java/org/apache/streams/plugins/cassandra/StreamsCassandraResourceGenerator.java
new file mode 100644
index 0000000..787ae02
--- /dev/null
+++ b/streams-plugins/streams-plugin-cassandra/src/main/java/org/apache/streams/plugins/cassandra/StreamsCassandraResourceGenerator.java
@@ -0,0 +1,376 @@
+package org.apache.streams.plugins.cassandra;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.base.Joiner;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
+import org.apache.streams.schema.FieldType;
+import org.apache.streams.schema.FieldUtil;
+import org.apache.streams.schema.GenerationConfig;
+import org.apache.streams.schema.Schema;
+import org.apache.streams.schema.SchemaStore;
+import org.apache.streams.schema.URIUtil;
+import org.jsonschema2pojo.util.URLUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.commons.lang3.StringUtils.defaultString;
+import static org.apache.streams.schema.FileUtil.dropExtension;
+import static org.apache.streams.schema.FileUtil.dropSourcePathPrefix;
+import static org.apache.streams.schema.FileUtil.resolveRecursive;
+import static org.apache.streams.schema.FileUtil.swapExtension;
+import static org.apache.streams.schema.FileUtil.writeFile;
+
+/**
+ * Created by sblackmon on 5/3/16.
+ */
+public class StreamsCassandraResourceGenerator implements Runnable {
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(StreamsCassandraResourceGenerator.class);
+
+    private final static String LS = System.getProperty("line.separator");
+
+    private StreamsCassandraGenerationConfig config;
+
+    private SchemaStore schemaStore = new SchemaStore();
+
+    private int currentDepth = 0;
+
+    public static void main(String[] args) {
+        StreamsCassandraGenerationConfig config = new StreamsCassandraGenerationConfig();
+
+        String sourceDirectory = "./target/test-classes/activities";
+        String targetDirectory = "./target/generated-resources/cassandra";
+
+        if( args.length > 0 )
+            sourceDirectory = args[0];
+        if( args.length > 1 )
+            targetDirectory = args[1];
+
+        config.setSourceDirectory(sourceDirectory);
+        config.setTargetDirectory(targetDirectory);
+
+        StreamsCassandraResourceGenerator streamsCassandraResourceGenerator = new StreamsCassandraResourceGenerator(config);
+        Thread thread = new Thread(streamsCassandraResourceGenerator);
+        thread.start();
+        try {
+            thread.join();
+        } catch (InterruptedException e) {
+            LOGGER.error("InterruptedException", e);
+        } catch (Exception e) {
+            LOGGER.error("Exception", e);
+        }
+        return;
+    }
+
+    public StreamsCassandraResourceGenerator(StreamsCassandraGenerationConfig config) {
+        this.config = config;
+    }
+
+    public void run() {
+
+        checkNotNull(config);
+
+        generate(config);
+
+    }
+
+    public void generate(StreamsCassandraGenerationConfig config) {
+
+        LinkedList<File> sourceFiles = new LinkedList<File>();
+
+        for (Iterator<URL> sources = config.getSource(); sources.hasNext();) {
+            URL source = sources.next();
+            sourceFiles.add(URLUtil.getFileFromURL(source));
+        }
+
+        LOGGER.info("Seeded with {} source paths:", sourceFiles.size());
+
+        resolveRecursive((GenerationConfig)config, sourceFiles);
+
+        LOGGER.info("Resolved {} schema files:", sourceFiles.size());
+
+        for (Iterator<File> iterator = sourceFiles.iterator(); iterator.hasNext();) {
+            File item = iterator.next();
+            schemaStore.create(item.toURI());
+        }
+
+        LOGGER.info("Identified {} objects:", schemaStore.getSize());
+
+        String outputFile = config.getTargetDirectory() + "/" + "types.cql";
+        StringBuilder typesContent = new StringBuilder();
+
+        for (Iterator<Schema> schemaIterator = schemaStore.getSchemaIterator(); schemaIterator.hasNext(); ) {
+            Schema schema = schemaIterator.next();
+            currentDepth = 0;
+            if( schema.getURI().getScheme().equals("file")) {
+                String inputFile = schema.getURI().getPath();
+                String resourcePath = dropSourcePathPrefix(inputFile, config.getSourceDirectory());
+                for (String sourcePath : config.getSourcePaths()) {
+                    resourcePath = dropSourcePathPrefix(resourcePath, sourcePath);
+                }
+
+                LOGGER.info("Processing {}:", resourcePath);
+
+                String resourceId = schemaSymbol(schema);
+
+                String resourceContent = generateResource(schema, resourceId);
+
+                typesContent.append(resourceContent);
+
+                LOGGER.info("Added {}:", resourceId);
+            }
+        }
+
+        writeFile(outputFile, typesContent.toString());
+
+    }
+
+    public String generateResource(Schema schema, String resourceId) {
+        StringBuilder resourceBuilder = new StringBuilder();
+        resourceBuilder.append("CREATE TYPE ");
+        resourceBuilder.append(resourceId);
+        resourceBuilder.append(" IF NOT EXISTS (");
+        resourceBuilder.append(LS);
+        resourceBuilder = appendRootObject(resourceBuilder, schema, resourceId, ' ');
+        resourceBuilder.append(");");
+        resourceBuilder.append(LS);
+        return resourceBuilder.toString();
+    }
+
+    public StringBuilder appendRootObject(StringBuilder builder, Schema schema, String resourceId, Character seperator) {
+        ObjectNode propertiesNode = schemaStore.resolveProperties(schema, null, resourceId);
+        if( propertiesNode.get("id") != null ) {
+            builder.append("id text PRIMARY KEY,");
+            builder.append(LS);
+            propertiesNode.remove("id");
+        }
+        if( propertiesNode != null && propertiesNode.isObject() && propertiesNode.size() > 0) {
+            builder = appendPropertiesNode(builder, schema, propertiesNode, seperator);
+        }
+        return builder;
+    }
+
+    private StringBuilder appendValueField(StringBuilder builder, Schema schema, String fieldId, FieldType fieldType, Character seperator) {
+        // safe to append nothing
+        checkNotNull(builder);
+        builder.append(cqlEscape(fieldId));
+        builder.append(seperator);
+        builder.append(cqlType(fieldType));
+        return builder;
+    }
+
+    public StringBuilder appendArrayItems(StringBuilder builder, Schema schema, String fieldId, ObjectNode itemsNode, Character seperator) {
+        // not safe to append nothing
+        checkNotNull(builder);
+        if( itemsNode == null ) return builder;
+        if( itemsNode.has("type")) {
+            try {
+                FieldType itemType = FieldUtil.determineFieldType(itemsNode);
+                switch( itemType ) {
+                    case OBJECT:
+                        Schema objectSchema = null;
+                        URI parentURI = null;
+                        if( itemsNode.has("$ref") || itemsNode.has("extends") ) {
+                            JsonNode refNode = itemsNode.get("$ref");
+                            JsonNode extendsNode = itemsNode.get("extends");
+                            if (refNode != null && refNode.isValueNode())
+                                parentURI = URI.create(refNode.asText());
+                            else if (extendsNode != null && extendsNode.isObject())
+                                parentURI = URI.create(extendsNode.get("$ref").asText());
+                            URI absoluteURI;
+                            if (parentURI.isAbsolute())
+                                absoluteURI = parentURI;
+                            else {
+                                absoluteURI = schema.getURI().resolve(parentURI);
+                                if (!absoluteURI.isAbsolute() || (absoluteURI.isAbsolute() && !schemaStore.getByUri(absoluteURI).isPresent() ))
+                                    absoluteURI = schema.getParentURI().resolve(parentURI);
+                            }
+                            if (absoluteURI != null && absoluteURI.isAbsolute()) {
+                                Optional<Schema> schemaLookup = schemaStore.getByUri(absoluteURI);
+                                if (schemaLookup.isPresent()) {
+                                    objectSchema = schemaLookup.get();
+                                }
+                            }
+                        }
+                        // have to resolve schema here
+
+                        builder = appendArrayObject(builder, objectSchema, fieldId, seperator);
+                        break;
+                    case ARRAY:
+                        ObjectNode subArrayItems = (ObjectNode) itemsNode.get("items");
+                        builder = appendArrayItems(builder, schema, fieldId, subArrayItems, seperator);
+                        break;
+                    default:
+                        builder = appendArrayField(builder, schema, fieldId, itemType, seperator);
+                }
+            } catch (Exception e) {
+                LOGGER.warn("No item type resolvable for {}", fieldId);
+            }
+        }
+        checkNotNull(builder);
+        return builder;
+    }
+
+    private StringBuilder appendArrayField(StringBuilder builder, Schema schema, String fieldId, FieldType fieldType, Character seperator) {
+        // safe to append nothing
+        checkNotNull(builder);
+        checkNotNull(fieldId);
+        builder.append(cqlEscape(fieldId));
+        builder.append(seperator);
+        builder.append("list<"+cqlType(fieldType)+">");
+        checkNotNull(builder);
+        return builder;
+    }
+
+    private StringBuilder appendArrayObject(StringBuilder builder, Schema schema, String fieldId, Character seperator) {
+        // safe to append nothing
+        checkNotNull(builder);
+        String schemaSymbol = schemaSymbol(schema);
+        if( !Strings.isNullOrEmpty(fieldId) && schemaSymbol != null ) {
+            builder.append(cqlEscape(fieldId));
+            builder.append(seperator);
+            builder.append("list<" + schemaSymbol + ">");
+            builder.append(LS);
+        }
+        checkNotNull(builder);
+        return builder;
+    }
+
+    private StringBuilder appendSchemaField(StringBuilder builder, Schema schema, String fieldId, Character seperator) {
+        // safe to append nothing
+        checkNotNull(builder);
+        String schemaSymbol = schemaSymbol(schema);
+        if( !Strings.isNullOrEmpty(fieldId) && schemaSymbol != null ) {
+            builder.append(cqlEscape(fieldId));
+            builder.append(seperator);
+            builder.append(schemaSymbol);
+        }
+        checkNotNull(builder);
+        return builder;
+    }
+
+    /*
+     can this be moved to streams-schemas if schemastore available in scope?
+     maybe an interface?
+     lot of boilerplate / reuse between plugins
+     however treatment is way different when resolving a type symbol vs resolving and listing fields .
+     */
+    private StringBuilder appendPropertiesNode(StringBuilder builder, Schema schema, ObjectNode propertiesNode, Character seperator) {
+        checkNotNull(builder);
+        checkNotNull(propertiesNode);
+        Iterator<Map.Entry<String, JsonNode>> fields = propertiesNode.fields();
+        Joiner joiner = Joiner.on(","+LS).skipNulls();
+        List<String> fieldStrings = Lists.newArrayList();
+        for( ; fields.hasNext(); ) {
+            Map.Entry<String, JsonNode> field = fields.next();
+            String fieldId = field.getKey();
+            if( !config.getExclusions().contains(fieldId) && field.getValue().isObject()) {
+                ObjectNode fieldNode = (ObjectNode) field.getValue();
+                FieldType fieldType = FieldUtil.determineFieldType(fieldNode);
+                if (fieldType != null ) {
+                    switch (fieldType) {
+                        case ARRAY:
+                            ObjectNode itemsNode = (ObjectNode) fieldNode.get("items");
+                            if( currentDepth <= config.getMaxDepth()) {
+                                StringBuilder arrayItemsBuilder = appendArrayItems(new StringBuilder(), schema, fieldId, itemsNode, seperator);
+                                if( !Strings.isNullOrEmpty(arrayItemsBuilder.toString())) {
+                                    fieldStrings.add(arrayItemsBuilder.toString());
+                                }
+                            }
+                            break;
+                        case OBJECT:
+                            Schema objectSchema = null;
+                            URI parentURI = null;
+                            if( fieldNode.has("$ref") || fieldNode.has("extends") ) {
+                                JsonNode refNode = fieldNode.get("$ref");
+                                JsonNode extendsNode = fieldNode.get("extends");
+                                if (refNode != null && refNode.isValueNode())
+                                    parentURI = URI.create(refNode.asText());
+                                else if (extendsNode != null && extendsNode.isObject())
+                                    parentURI = URI.create(extendsNode.get("$ref").asText());
+                                URI absoluteURI;
+                                if (parentURI.isAbsolute())
+                                    absoluteURI = parentURI;
+                                else {
+                                    absoluteURI = schema.getURI().resolve(parentURI);
+                                    if (!absoluteURI.isAbsolute() || (absoluteURI.isAbsolute() && !schemaStore.getByUri(absoluteURI).isPresent() ))
+                                        absoluteURI = schema.getParentURI().resolve(parentURI);
+                                }
+                                if (absoluteURI != null && absoluteURI.isAbsolute()) {
+                                    Optional<Schema> schemaLookup = schemaStore.getByUri(absoluteURI);
+                                    if (schemaLookup.isPresent()) {
+                                        objectSchema = schemaLookup.get();
+                                    }
+                                }
+                            }
+                            //ObjectNode childProperties = schemaStore.resolveProperties(schema, fieldNode, fieldId);
+                            if( currentDepth < config.getMaxDepth()) {
+                                StringBuilder structFieldBuilder = appendSchemaField(new StringBuilder(), objectSchema, fieldId, seperator);
+                                if( !Strings.isNullOrEmpty(structFieldBuilder.toString())) {
+                                    fieldStrings.add(structFieldBuilder.toString());
+                                }
+                            }
+                            break;
+                        default:
+                            StringBuilder valueFieldBuilder = appendValueField(new StringBuilder(), schema, fieldId, fieldType, seperator);
+                            if( !Strings.isNullOrEmpty(valueFieldBuilder.toString())) {
+                                fieldStrings.add(valueFieldBuilder.toString());
+                            }
+                    }
+                }
+            }
+        }
+        builder.append(joiner.join(fieldStrings)).append(LS);
+        Preconditions.checkNotNull(builder);
+        return builder;
+    }
+
+    private static String cqlEscape( String fieldId ) {
+        return "`"+fieldId+"`";
+    }
+
+    private static String cqlType( FieldType fieldType ) {
+        switch( fieldType ) {
+            case STRING:
+                return "text";
+            case INTEGER:
+                return "int";
+            case NUMBER:
+                return "double";
+            case OBJECT:
+                return "tuple";
+            case ARRAY:
+                return "list";
+            default:
+                return fieldType.name().toUpperCase();
+        }
+    }
+
+    private String schemaSymbol( Schema schema ) {
+        if (schema == null) return null;
+        // this needs to return whatever
+        if (schema.getURI().getScheme().equals("file")) {
+            String inputFile = schema.getURI().getPath();
+            String resourcePath = dropSourcePathPrefix(inputFile, config.getSourceDirectory());
+            for (String sourcePath : config.getSourcePaths()) {
+                resourcePath = dropSourcePathPrefix(resourcePath, sourcePath);
+            }
+            return dropExtension(resourcePath).replace("/", "_");
+        } else {
+            return "IDK";
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-cassandra/src/main/java/org/apache/streams/plugins/cassandra/StreamsCassandraResourceGeneratorMojo.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-cassandra/src/main/java/org/apache/streams/plugins/cassandra/StreamsCassandraResourceGeneratorMojo.java b/streams-plugins/streams-plugin-cassandra/src/main/java/org/apache/streams/plugins/cassandra/StreamsCassandraResourceGeneratorMojo.java
new file mode 100644
index 0000000..2e9a37f
--- /dev/null
+++ b/streams-plugins/streams-plugin-cassandra/src/main/java/org/apache/streams/plugins/cassandra/StreamsCassandraResourceGeneratorMojo.java
@@ -0,0 +1,93 @@
+package org.apache.streams.plugins.cassandra;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Component;
+import org.apache.maven.plugins.annotations.Execute;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.util.List;
+
+@Mojo(  name = "cassandra",
+        defaultPhase = LifecyclePhase.GENERATE_RESOURCES
+)
+@Execute(   goal = "cassandra",
+            phase = LifecyclePhase.GENERATE_RESOURCES
+)
+public class StreamsCassandraResourceGeneratorMojo extends AbstractMojo {
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(StreamsCassandraResourceGeneratorMojo.class);
+
+    private volatile MojoFailureException mojoFailureException;
+
+    @Component
+    private MavenProject project;
+
+//    @Component
+//    private Settings settings;
+//
+//    @Parameter( defaultValue = "${localRepository}", readonly = true, required = true )
+//    protected ArtifactRepository localRepository;
+//
+//    @Parameter( defaultValue = "${plugin}", readonly = true ) // Maven 3 only
+//    private PluginDescriptor plugin;
+//
+    @Parameter( defaultValue = "${project.basedir}", readonly = true )
+    private File basedir;
+
+    @Parameter( defaultValue = "src/main/jsonschema", readonly = true ) // Maven 3 only
+    public String sourceDirectory;
+
+    @Parameter( readonly = true ) // Maven 3 only
+    public List<String> sourcePaths;
+
+    @Parameter(defaultValue = "target/generated-resources/cassandra", readonly = true)
+    public String targetDirectory;
+
+    public void execute() throws MojoExecutionException, MojoFailureException {
+
+        //addProjectDependenciesToClasspath();
+
+        StreamsCassandraGenerationConfig config = new StreamsCassandraGenerationConfig();
+
+        if( sourcePaths != null && sourcePaths.size() > 0)
+            config.setSourcePaths(sourcePaths);
+        else
+            config.setSourceDirectory(sourceDirectory);
+        config.setTargetDirectory(targetDirectory);
+
+        StreamsCassandraResourceGenerator streamsCassandraResourceGenerator = new StreamsCassandraResourceGenerator(config);
+
+        Thread.UncaughtExceptionHandler h = new Thread.UncaughtExceptionHandler() {
+            public void uncaughtException(Thread th, Throwable ex) {
+                LOGGER.error("Exception", ex);
+                mojoFailureException = new MojoFailureException("Exception", ex);
+            }
+        };
+        Thread.setDefaultUncaughtExceptionHandler(h);
+        Thread thread = new Thread(streamsCassandraResourceGenerator);
+        thread.setUncaughtExceptionHandler(h);
+        try {
+            thread.start();
+            thread.join();
+        } catch (InterruptedException e) {
+            LOGGER.error("InterruptedException", e);
+        } catch (Exception e) {
+            LOGGER.error("Exception", e);
+            mojoFailureException = new MojoFailureException("Exception", e);
+        }
+
+        if( mojoFailureException != null )
+            throw mojoFailureException;
+
+        return;
+    }
+
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-cassandra/src/site/markdown/index.md
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-cassandra/src/site/markdown/index.md b/streams-plugins/streams-plugin-cassandra/src/site/markdown/index.md
new file mode 100644
index 0000000..d0c2129
--- /dev/null
+++ b/streams-plugins/streams-plugin-cassandra/src/site/markdown/index.md
@@ -0,0 +1,22 @@
+org.apache.streams.plugins:streams-plugin-cassandra
+===================================================
+
+streams-plugin-cassandra generates resources from json schemas to assist with indexing of json data using Apache Cassandra.
+
+#### Usage
+
+Run within a module containing a src/main/jsonschema directory
+
+    mvn org.apache.streams.plugins:streams-plugin-cassandra:0.3-incubating-SNAPSHOT:cassandra
+
+Output will be placed in target/generated-resources/cassandra by default
+
+#### Example
+
+[streams-plugin-cassandra/pom.xml](streams-plugin-cassandra/pom.xml "streams-plugin-cassandra/pom.xml")
+
+#### Documentation
+
+[JavaDocs](apidocs/index.html "JavaDocs")
+
+###### Licensed under Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-cassandra/src/test/java/org/apache/streams/plugins/cassandra/test/StreamsCassandraResourceGeneratorCLITest.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-cassandra/src/test/java/org/apache/streams/plugins/cassandra/test/StreamsCassandraResourceGeneratorCLITest.java b/streams-plugins/streams-plugin-cassandra/src/test/java/org/apache/streams/plugins/cassandra/test/StreamsCassandraResourceGeneratorCLITest.java
new file mode 100644
index 0000000..465a326
--- /dev/null
+++ b/streams-plugins/streams-plugin-cassandra/src/test/java/org/apache/streams/plugins/cassandra/test/StreamsCassandraResourceGeneratorCLITest.java
@@ -0,0 +1,50 @@
+package org.apache.streams.plugins.cassandra.test;
+
+import com.google.common.collect.Lists;
+import com.google.common.io.Files;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.streams.plugins.cassandra.StreamsCassandraResourceGenerator;
+import org.junit.Test;
+
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Collection;
+import java.util.List;
+
+import static org.apache.streams.plugins.cassandra.test.StreamsCassandraResourceGeneratorTest.cqlFilter;
+
+/**
+ * Created by sblackmon on 5/5/16.
+ */
+public class StreamsCassandraResourceGeneratorCLITest {
+
+    @Test
+    public void testStreamsHiveResourceGeneratorCLI() throws Exception {
+
+        String sourceDirectory = "target/test-classes/streams-schemas";
+        String targetDirectory = "target/generated-resources/cassandra-cli";
+
+        List<String> argsList = Lists.newArrayList(sourceDirectory, targetDirectory);
+        StreamsCassandraResourceGenerator.main(argsList.toArray(new String[0]));
+
+        File testOutput = new File( targetDirectory );
+
+        assert( testOutput != null );
+        assert( testOutput.exists() == true );
+        assert( testOutput.isDirectory() == true );
+
+        Iterable<File> outputIterator = Files.fileTreeTraverser().breadthFirstTraversal(testOutput)
+                .filter(cqlFilter);
+        Collection<File> outputCollection = Lists.newArrayList(outputIterator);
+        assert( outputCollection.size() == 1 );
+
+        Path path = Paths.get("types.cql");
+
+        String typesCqlBytes = new String(
+                java.nio.file.Files.readAllBytes(path));
+
+        assert( StringUtils.countMatches(typesCqlBytes, "CREATE TYPE") == 133 );
+
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-cassandra/src/test/java/org/apache/streams/plugins/cassandra/test/StreamsCassandraResourceGeneratorMojoTest.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-cassandra/src/test/java/org/apache/streams/plugins/cassandra/test/StreamsCassandraResourceGeneratorMojoTest.java b/streams-plugins/streams-plugin-cassandra/src/test/java/org/apache/streams/plugins/cassandra/test/StreamsCassandraResourceGeneratorMojoTest.java
new file mode 100644
index 0000000..aad069f
--- /dev/null
+++ b/streams-plugins/streams-plugin-cassandra/src/test/java/org/apache/streams/plugins/cassandra/test/StreamsCassandraResourceGeneratorMojoTest.java
@@ -0,0 +1,75 @@
+package org.apache.streams.plugins.cassandra.test;
+
+import com.google.common.collect.Lists;
+import com.google.common.io.Files;
+import junit.framework.TestCase;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.maven.it.Verifier;
+import org.apache.maven.it.util.ResourceExtractor;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import static org.apache.streams.plugins.cassandra.test.StreamsCassandraResourceGeneratorTest.cqlFilter;
+
+/**
+ * Tests that streams-plugin-hive running via maven generates hql resources
+ */
+public class StreamsCassandraResourceGeneratorMojoTest extends TestCase {
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(StreamsCassandraResourceGeneratorMojoTest.class);
+
+    protected void setUp() throws Exception
+    {
+        // required for mojo lookups to work
+        super.setUp();
+    }
+
+    @Test
+    public void testStreamsCassandraResourceGeneratorMojo() throws Exception {
+
+        File testDir = ResourceExtractor.simpleExtractResources( getClass(), "/streams-plugin-cassandra" );
+
+        Verifier verifier;
+
+        verifier = new Verifier( testDir.getAbsolutePath() );
+
+        List cliOptions = new ArrayList();
+        cliOptions.add( "-N" );
+        verifier.executeGoals( Lists.<String>newArrayList(
+                "clean",
+                "dependency:unpack-dependencies",
+                "generate-resources"));
+
+        verifier.verifyErrorFreeLog();
+
+        verifier.resetStreams();
+
+        File testOutput = new File( "./target/generated-resources/test-mojo");
+
+        assert( testOutput != null );
+        assert( testOutput.exists() == true );
+        assert( testOutput.isDirectory() == true );
+
+        Iterable<File> outputIterator = Files.fileTreeTraverser().breadthFirstTraversal(testOutput)
+                .filter(cqlFilter);
+        Collection<File> outputCollection = Lists.newArrayList(outputIterator);
+        assert( outputCollection.size() == 1 );
+
+        Path path = Paths.get("./target/generated-sources/test/types.cql");
+
+        String typesCqlBytes = new String(
+                java.nio.file.Files.readAllBytes(path));
+
+        assert( StringUtils.countMatches(typesCqlBytes, "CREATE TYPE") == 133 );
+
+        assert( !typesCqlBytes.contains("IDK"));
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-cassandra/src/test/java/org/apache/streams/plugins/cassandra/test/StreamsCassandraResourceGeneratorTest.java
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-cassandra/src/test/java/org/apache/streams/plugins/cassandra/test/StreamsCassandraResourceGeneratorTest.java b/streams-plugins/streams-plugin-cassandra/src/test/java/org/apache/streams/plugins/cassandra/test/StreamsCassandraResourceGeneratorTest.java
new file mode 100644
index 0000000..d46eaa6
--- /dev/null
+++ b/streams-plugins/streams-plugin-cassandra/src/test/java/org/apache/streams/plugins/cassandra/test/StreamsCassandraResourceGeneratorTest.java
@@ -0,0 +1,124 @@
+package org.apache.streams.plugins.cassandra.test;
+
+import com.google.common.base.Charsets;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+import com.google.common.io.Files;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.streams.plugins.cassandra.StreamsCassandraGenerationConfig;
+import org.apache.streams.plugins.cassandra.StreamsCassandraResourceGenerator;
+import org.junit.Assert;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.annotation.Nullable;
+import java.io.File;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import static org.apache.streams.schema.FileUtil.dropSourcePathPrefix;
+
+/**
+ * Test that cassandra resources are generated.
+ */
+public class StreamsCassandraResourceGeneratorTest {
+
+    private final static Logger LOGGER = LoggerFactory.getLogger(StreamsCassandraResourceGeneratorTest.class);
+
+    public static final Predicate<File> cqlFilter = new Predicate<File>() {
+        @Override
+        public boolean apply(@Nullable File file) {
+            if( file.getName().endsWith(".cql") )
+                return true;
+            else return false;
+        }
+    };
+
+    /**
+     * Test that cassandra resources are generated
+     *
+     * @throws Exception
+     */
+    @Test
+    public void StreamsCassandraResourceGenerator() throws Exception {
+
+        StreamsCassandraGenerationConfig config = new StreamsCassandraGenerationConfig();
+
+        String sourceDirectory = "target/test-classes/streams-schemas";
+
+        config.setSourceDirectory(sourceDirectory);
+
+        config.setTargetDirectory("target/generated-sources/test");
+
+        config.setExclusions(Sets.newHashSet("attachments"));
+
+        config.setMaxDepth(2);
+
+        StreamsCassandraResourceGenerator streamsCassandraResourceGenerator = new StreamsCassandraResourceGenerator(config);
+        Thread thread = new Thread(streamsCassandraResourceGenerator);
+        thread.start();
+        try {
+            thread.join();
+        } catch (InterruptedException e) {
+            LOGGER.error("InterruptedException", e);
+        } catch (Exception e) {
+            LOGGER.error("Exception", e);
+        }
+
+        File testOutput = new File( "./target/generated-sources/test");
+
+        assert( testOutput != null );
+        assert( testOutput.exists() == true );
+        assert( testOutput.isDirectory() == true );
+
+        Iterable<File> outputIterator = Files.fileTreeTraverser().breadthFirstTraversal(testOutput)
+                .filter(cqlFilter);
+        Collection<File> outputCollection = Lists.newArrayList(outputIterator);
+        assert( outputCollection.size() == 1 );
+
+        Path path = Paths.get("./target/generated-sources/test/types.cql");
+
+        String typesCqlBytes = new String(
+                java.nio.file.Files.readAllBytes(path));
+
+        assert( StringUtils.countMatches(typesCqlBytes, "CREATE TYPE") == 133 );
+
+        assert( !typesCqlBytes.contains("IDK"));
+
+
+//        String expectedDirectory = "target/test-classes/expected";
+//        File testExpected = new File( expectedDirectory );
+//
+//        Iterable<File> expectedIterator = Files.fileTreeTraverser().breadthFirstTraversal(testExpected)
+//                .filter(cqlFilter);
+//        Collection<File> expectedCollection = Lists.newArrayList(expectedIterator);
+//
+//        int fails = 0;
+//
+//        Iterator<File> iterator = expectedCollection.iterator();
+//        while( iterator.hasNext() ) {
+//            File objectExpected = iterator.next();
+//            String expectedEnd = dropSourcePathPrefix(objectExpected.getAbsolutePath(),  expectedDirectory);
+//            File objectActual = new File(config.getTargetDirectory() + "/" + expectedEnd);
+//            LOGGER.info("Comparing: {} and {}", objectExpected.getAbsolutePath(), objectActual.getAbsolutePath());
+//            assert( objectActual.exists());
+//            if( FileUtils.contentEquals(objectActual, objectExpected) == true ) {
+//                LOGGER.info("Exact Match!");
+//            } else {
+//                LOGGER.info("No Match!");
+//                fails++;
+//            }
+//        }
+//        if( fails > 0 ) {
+//            LOGGER.info("Fails: {}", fails);
+//            Assert.fail();
+//        }
+
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/1bc84dbc/streams-plugins/streams-plugin-cassandra/src/test/resources/streams-plugin-cassandra/pom.xml
----------------------------------------------------------------------
diff --git a/streams-plugins/streams-plugin-cassandra/src/test/resources/streams-plugin-cassandra/pom.xml b/streams-plugins/streams-plugin-cassandra/src/test/resources/streams-plugin-cassandra/pom.xml
new file mode 100644
index 0000000..064ea52
--- /dev/null
+++ b/streams-plugins/streams-plugin-cassandra/src/test/resources/streams-plugin-cassandra/pom.xml
@@ -0,0 +1,75 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.apache.streams.plugins</groupId>
+    <artifactId>streams-plugin-cassandra-test</artifactId>
+    <version>0.3-incubating-SNAPSHOT</version>
+    <packaging>jar</packaging>
+    <name>Test StreamsCassandraResourceGeneratorMojo</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <version>4.11</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.streams</groupId>
+            <artifactId>streams-schemas</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.streams.plugins</groupId>
+                <artifactId>streams-plugin-cassandra</artifactId>
+                <version>0.3-incubating-SNAPSHOT</version>
+                <configuration>
+                    <sourcePaths>
+                        <sourcePath>target/test-classes/streams-schemas/activity.json</sourcePath>
+                        <sourcePath>target/test-classes/streams-schemas/collection.json</sourcePath>
+                        <sourcePath>target/test-classes/streams-schemas/media_link.json</sourcePath>
+                        <sourcePath>target/test-classes/streams-schemas/object.json</sourcePath>
+                        <sourcePath>target/test-classes/streams-schemas/objectTypes</sourcePath>
+                        <sourcePath>target/test-classes/streams-schemas/verbs</sourcePath>
+                    </sourcePaths>
+                    <targetDirectory>target/generated-resources/test-mojo</targetDirectory>
+                </configuration>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>cassandra</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>2.10</version>
+                <configuration>
+                    <includes>**/*.json</includes>
+                    <outputDirectory>${project.build.directory}/test-classes/streams-schemas</outputDirectory>
+                    <includeGroupIds>org.apache.streams</includeGroupIds>
+                    <includeArtifactIds>streams-schemas</includeArtifactIds>
+                    <includeTypes>jar,test-jar</includeTypes>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>unpack-schemas</id>
+                        <phase>process-resources</phase>
+                        <goals>
+                            <goal>unpack-dependencies</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file