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 2016/06/01 17:41:09 UTC
[20/32] 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/95a02d71
Tree: http://git-wip-us.apache.org/repos/asf/incubator-streams/tree/95a02d71
Diff: http://git-wip-us.apache.org/repos/asf/incubator-streams/diff/95a02d71
Branch: refs/feature/STREAMS-389,398
Commit: 95a02d71c8b28ffda7ef37a151efd896d65b1223
Parents: 02dc8ef
Author: Steve Blackmon @steveblackmon <sb...@apache.org>
Authored: Fri May 6 19:45:12 2016 -0500
Committer: Steve Blackmon @steveblackmon <sb...@apache.org>
Committed: Fri May 6 19:45:12 2016 -0500
----------------------------------------------------------------------
pom.xml | 10 -
streams-config/pom.xml | 8 +-
.../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(+), 3777 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/95a02d71/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 30ec5e7..da99ed5 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/95a02d71/streams-config/pom.xml
----------------------------------------------------------------------
diff --git a/streams-config/pom.xml b/streams-config/pom.xml
index f9d8de9..5cd118d 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>
@@ -121,12 +121,6 @@
<groupId>org.jsonschema2pojo</groupId>
<artifactId>jsonschema2pojo-maven-plugin</artifactId>
<configuration>
- <addCompileSourceRoot>true</addCompileSourceRoot>
- <generateBuilders>true</generateBuilders>
- <sourcePaths>
- <sourcePath>src/main/jsonschema</sourcePath>
- </sourcePaths>
- <outputDirectory>target/generated-sources/jsonschema2pojo</outputDirectory>
<targetPackage>org.apache.streams.config</targetPackage>
<useLongIntegers>true</useLongIntegers>
<useJodaDates>true</useJodaDates>
http://git-wip-us.apache.org/repos/asf/incubator-streams/blob/95a02d71/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/95a02d71/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/95a02d71/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/95a02d71/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/95a02d71/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/95a02d71/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/95a02d71/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/95a02d71/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/95a02d71/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/95a02d71/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/95a02d71/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/95a02d71/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