You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@streams.apache.org by sb...@apache.org on 2014/01/09 18:27:58 UTC
svn commit: r1556893 [16/25] - in /incubator/streams/branches/sblackmon: ./
streams-config-graph/ streams-config-graph/src/
streams-config-graph/src/main/ streams-config-graph/src/main/java/
streams-config-graph/src/main/java/org/ streams-config-graph/...
Added: incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/jsonschema/com/gnip/Gnip.json
URL: http://svn.apache.org/viewvc/incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/jsonschema/com/gnip/Gnip.json?rev=1556893&view=auto
==============================================================================
--- incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/jsonschema/com/gnip/Gnip.json (added)
+++ incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/jsonschema/com/gnip/Gnip.json Thu Jan 9 17:27:50 2014
@@ -0,0 +1,811 @@
+{
+ "type": "object",
+ "$schema": "http://json-schema.org/draft-03/schema",
+ "javaType": "com.gnip.pojo.Gnip",
+ "id": "#",
+ "properties": {
+ "profileLocations": {
+ "properties": {
+ "geo": {
+ "properties": {
+ "type": {
+ "type": "string"
+ },
+ "coordinates": {
+ "type": "double"
+ }
+ }
+ },
+ "address": {
+ "properties": {
+ "region": {
+ "type": "string"
+ },
+ "countryCode": {
+ "type": "string"
+ },
+ "locality": {
+ "type": "string"
+ },
+ "country": {
+ "type": "string"
+ }
+ }
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "objectType": {
+ "type": "string"
+ }
+ }
+ },
+ "klout_score": {
+ "type": "long"
+ },
+ "urls": {
+ "properties": {
+ "expanded_url": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ },
+ "language": {
+ "properties": {
+ "value": {
+ "type": "string"
+ }
+ }
+ },
+ "body": {
+ "type": "string"
+ },
+ "inReplyTo": {
+ "properties": {
+ "content": {
+ "type": "string"
+ },
+ "author": {
+ "properties": {
+ "link": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ }
+ }
+ },
+ "link": {
+ "type": "string"
+ }
+ }
+ },
+ "tumblrRebloggedRoot": {
+ "properties": {
+ "author": {
+ "properties": {
+ "link": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ }
+ }
+ },
+ "link": {
+ "type": "string"
+ }
+ }
+ },
+ "favoritesCount": {
+ "type": "long"
+ },
+ "geo": {
+ "properties": {
+ "type": {
+ "type": "string"
+ },
+ "coordinates": {
+ "type": "double"
+ }
+ }
+ },
+ "location": {
+ "javaType": "com.gnip.config.Location",
+ "properties": {
+ "geo": {
+ "properties": {
+ "type": {
+ "type": "string"
+ },
+ "coordinates": {
+ "type": "double"
+ }
+ }
+ },
+ "name": {
+ "type": "string"
+ },
+ "link": {
+ "type": "string"
+ },
+ "twitter_country_code": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "objectType": {
+ "type": "string"
+ },
+ "country_code": {
+ "type": "string"
+ }
+ }
+ },
+ "link": {
+ "type": "string"
+ },
+ "twitter_lang": {
+ "type": "string"
+ },
+ "retweetCount": {
+ "type": "long"
+ },
+ "postedTime": {
+ "type": "string"
+ },
+ "provider": {
+ "javaType": "com.gnip.config.Provider",
+ "properties": {
+ "link": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "objectType": {
+ "type": "string"
+ }
+ }
+ },
+ "actor": {
+ "javaType": "com.gnip.config.Actor",
+ "properties": {
+ "twitterTimeZone": {
+ "type": "string"
+ },
+ "summary": {
+ "type": "string"
+ },
+ "friendsCount": {
+ "type": "long"
+ },
+ "favoritesCount": {
+ "type": "long"
+ },
+ "location": {
+ "properties": {
+ "displayName": {
+ "type": "string"
+ },
+ "objectType": {
+ "type": "string"
+ }
+ }
+ },
+ "link": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "postedTime": {
+ "type": "string"
+ },
+ "links": {
+ "properties": {
+ "rel": {
+ "type": "string"
+ },
+ "href": {
+ "type": "string"
+ }
+ }
+ },
+ "listedCount": {
+ "type": "long"
+ },
+ "id": {
+ "type": "string"
+ },
+ "languages": {
+ "type": "string"
+ },
+ "verified": {
+ "type": "boolean"
+ },
+ "utcOffset": {
+ "type": "string"
+ },
+ "followersCount": {
+ "type": "long"
+ },
+ "statusesCount": {
+ "type": "long"
+ },
+ "preferredUsername": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "objectType": {
+ "type": "string"
+ }
+ },
+ "object": {
+ "javaType": "com.gnip.config.Object",
+ "properties": {
+ "summary": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "link": {
+ "type": "string"
+ },
+ "postedTime": {
+ "type": "string"
+ },
+ "objectType": {
+ "type": "string"
+ }
+ }
+ },
+ "actor": {
+ "properties": {
+ "twitterTimeZone": {
+ "type": "string"
+ },
+ "summary": {
+ "type": "string"
+ },
+ "friendsCount": {
+ "type": "long"
+ },
+ "favoritesCount": {
+ "type": "long"
+ },
+ "location": {
+ "properties": {
+ "displayName": {
+ "type": "string"
+ },
+ "objectType": {
+ "type": "string"
+ }
+ }
+ },
+ "link": {
+ "type": "string"
+ },
+ "image": {
+ "type": "string"
+ },
+ "postedTime": {
+ "type": "string"
+ },
+ "links": {
+ "properties": {
+ "rel": {
+ "type": "string"
+ },
+ "href": {
+ "type": "string"
+ }
+ }
+ },
+ "listedCount": {
+ "type": "long"
+ },
+ "i": {
+ "type": "string"
+ },
+ "languages": {
+ "type": "string"
+ },
+ "verified": {
+ "type": "boolean"
+ },
+ "utcOffset": {
+ "type": "string"
+ },
+ "followersCount": {
+ "type": "long"
+ },
+ "statusesCount": {
+ "type": "long"
+ },
+ "preferredUsername": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "objectType": {
+ "type": "string"
+ }
+ }
+ },
+ "tumblrFormat": {
+ "type": "string"
+ },
+ "embedCode": {
+ "type": "string"
+ },
+ "id": {
+ "type": "string"
+ },
+ "quoteSource": {
+ "type": "string"
+ },
+ "verb": {
+ "type": "string"
+ },
+ "tumblrReblogKey": {
+ "type": "string"
+ },
+ "tumblrType": {
+ "type": "string"
+ },
+ "generator": {
+ "properties": {
+ "link": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ }
+ }
+ },
+ "year": {
+ "type": "long"
+ },
+ "artist": {
+ "type": "string"
+ },
+ "albumArt": {
+ "type": "string"
+ },
+ "tags": {
+ "properties": {
+ "displayName": {
+ "type": "string"
+ }
+ }
+ },
+ "inReplyTo": {
+ "properties": {
+ "link": {
+ "type": "string"
+ }
+ }
+ },
+ "geo": {
+ "properties": {
+ "type": {
+ "type": "string"
+ },
+ "coordinates": {
+ "type": "double"
+ }
+ }
+ },
+ "favoritesCount": {
+ "type": "long"
+ },
+ "twitter_lang": {
+ "type": "string"
+ },
+ "image": {
+ "properties": {
+ "height": {
+ "type": "long"
+ },
+ "width": {
+ "type": "long"
+ },
+ "link": {
+ "type": "string"
+ }
+ }
+ },
+ "provider": {
+ "properties": {
+ "link": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "objectType": {
+ "type": "string"
+ }
+ }
+ },
+ "trackNumber": {
+ "type": "string"
+ },
+ "twitter_entities": {
+ "properties": {
+ "urls": {
+ "properties": {
+ "expanded_url": {
+ "type": "string"
+ },
+ "indices": {
+ "type": "long"
+ },
+ "display_url": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ },
+ "hashtags": {
+ "properties": {
+ "text": {
+ "type": "string"
+ },
+ "indices": {
+ "type": "long"
+ }
+ }
+ },
+ "media": {
+ "properties": {
+ "sizes": {
+ "properties": {
+ "thumb": {
+ "properties": {
+ "w": {
+ "type": "long"
+ },
+ "resize": {
+ "type": "string"
+ },
+ "h": {
+ "type": "long"
+ }
+ }
+ },
+ "small": {
+ "properties": {
+ "w": {
+ "type": "long"
+ },
+ "resize": {
+ "type": "string"
+ },
+ "h": {
+ "type": "long"
+ }
+ }
+ },
+ "medium": {
+ "properties": {
+ "w": {
+ "type": "long"
+ },
+ "resize": {
+ "type": "string"
+ },
+ "h": {
+ "type": "long"
+ }
+ }
+ },
+ "large": {
+ "properties": {
+ "w": {
+ "type": "long"
+ },
+ "resize": {
+ "type": "string"
+ },
+ "h": {
+ "type": "long"
+ }
+ }
+ }
+ }
+ },
+ "id": {
+ "type": "long"
+ },
+ "media_url_https": {
+ "type": "string"
+ },
+ "media_url": {
+ "type": "string"
+ },
+ "expanded_url": {
+ "type": "string"
+ },
+ "source_status_id_str": {
+ "type": "string"
+ },
+ "indices": {
+ "type": "long"
+ },
+ "source_status_id": {
+ "type": "long"
+ },
+ "id_str": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "display_url": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ },
+ "user_mentions": {
+ "properties": {
+ "id": {
+ "type": "long"
+ },
+ "name": {
+ "type": "string"
+ },
+ "indices": {
+ "type": "long"
+ },
+ "screen_name": {
+ "type": "string"
+ },
+ "id_str": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "targetUrl": {
+ "type": "string"
+ },
+ "content": {
+ "type": "string"
+ },
+ "source": {
+ "properties": {
+ "link": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ }
+ }
+ },
+ "items": {
+ "properties": {
+ "summary": {
+ "type": "string"
+ },
+ "image": {
+ "properties": {
+ "height": {
+ "type": "long"
+ },
+ "width": {
+ "type": "long"
+ },
+ "link": {
+ "type": "string"
+ }
+ }
+ },
+ "objectType": {
+ "type": "string"
+ },
+ "fullImage": {
+ "properties": {
+ "height": {
+ "type": "long"
+ },
+ "width": {
+ "type": "long"
+ },
+ "link": {
+ "type": "string"
+ }
+ }
+ }
+ }
+ },
+ "totalItems": {
+ "type": "long"
+ },
+ "displayName": {
+ "type": "string"
+ },
+ "objectType": {
+ "type": "string"
+ }
+ }
+ },
+ "twitter_entities": {
+ "properties": {
+ "urls": {
+ "properties": {
+ "expanded_url": {
+ "type": "string"
+ },
+ "indices": {
+ "type": "long"
+ },
+ "display_url": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ },
+ "hashtags": {
+ "properties": {
+ "text": {
+ "type": "string"
+ },
+ "indices": {
+ "type": "long"
+ }
+ }
+ },
+ "media": {
+ "properties": {
+ "sizes": {
+ "properties": {
+ "thumb": {
+ "properties": {
+ "w": {
+ "type": "long"
+ },
+ "resize": {
+ "type": "string"
+ },
+ "h": {
+ "type": "long"
+ }
+ }
+ },
+ "small": {
+ "properties": {
+ "w": {
+ "type": "long"
+ },
+ "resize": {
+ "type": "string"
+ },
+ "h": {
+ "type": "long"
+ }
+ }
+ },
+ "medium": {
+ "properties": {
+ "w": {
+ "type": "long"
+ },
+ "resize": {
+ "type": "string"
+ },
+ "h": {
+ "type": "long"
+ }
+ }
+ },
+ "large": {
+ "properties": {
+ "w": {
+ "type": "long"
+ },
+ "resize": {
+ "type": "string"
+ },
+ "h": {
+ "type": "long"
+ }
+ }
+ }
+ }
+ },
+ "id": {
+ "type": "long"
+ },
+ "media_url_https": {
+ "type": "string"
+ },
+ "media_url": {
+ "type": "string"
+ },
+ "expanded_url": {
+ "type": "string"
+ },
+ "source_status_id_str": {
+ "type": "string"
+ },
+ "indices": {
+ "type": "long"
+ },
+ "source_status_id": {
+ "type": "long"
+ },
+ "id_str": {
+ "type": "string"
+ },
+ "type": {
+ "type": "string"
+ },
+ "display_url": {
+ "type": "string"
+ },
+ "url": {
+ "type": "string"
+ }
+ }
+ },
+ "user_mentions": {
+ "properties": {
+ "id": {
+ "type": "long"
+ },
+ "name": {
+ "type": "string"
+ },
+ "indices": {
+ "type": "long"
+ },
+ "screen_name": {
+ "type": "string"
+ },
+ "id_str": {
+ "type": "string"
+ }
+ }
+ }
+ },
+ "tumblrRebloggedFrom": {
+ "properties": {
+ "author": {
+ "properties": {
+ "link": {
+ "type": "string"
+ },
+ "displayName": {
+ "type": "string"
+ }
+ }
+ },
+ "link": {
+ "type": "string"
+ }
+ }
+ },
+ "twitter_filter_level": {
+ "type": "string"
+ }
+ }
+}
\ No newline at end of file
Added: incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/xmlschema/com/gnip/binding.xjb
URL: http://svn.apache.org/viewvc/incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/xmlschema/com/gnip/binding.xjb?rev=1556893&view=auto
==============================================================================
--- incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/xmlschema/com/gnip/binding.xjb (added)
+++ incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/xmlschema/com/gnip/binding.xjb Thu Jan 9 17:27:50 2014
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
+ version="2.1">
+ <jaxb:globalBindings>
+ <!-- Use java.util.Calendar instead of javax.xml.datatype.XMLGregorianCalendar for xs:dateTime -->
+ <jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime"
+ parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
+ printMethod="javax.xml.bind.DatatypeConverter.printDateTime" />
+
+ <!-- Force all classes implements Serializable -->
+ <xjc:serializable uid="1" />
+ </jaxb:globalBindings>
+
+</jaxb:bindings>
\ No newline at end of file
Added: incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/xmlschema/com/gnip/entry.xsd
URL: http://svn.apache.org/viewvc/incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/xmlschema/com/gnip/entry.xsd?rev=1556893&view=auto
==============================================================================
--- incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/xmlschema/com/gnip/entry.xsd (added)
+++ incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/gnip-powertrack/src/main/xmlschema/com/gnip/entry.xsd Thu Jan 9 17:27:50 2014
@@ -0,0 +1,381 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+ <xs:element name="entry" type="entry"/>
+
+ <xs:complexType name="entry">
+ <xs:sequence>
+ <xs:element name="title" type="xs:string" minOccurs="0"/>
+ <xs:element name="id" type="xs:string" minOccurs="0"/>
+ <!--<xs:element name="fb:id" type="xs:positiveInteger" minOccurs="0"/>-->
+ <xs:element name="link" minOccurs="0">
+ <xs:complexType>
+ <xs:attribute name="rel" type="xs:string"/>
+ <xs:attribute name="type" type="xs:string"/>
+ <xs:attribute name="href" type="xs:string"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="published" type="xs:string" minOccurs="0"/>
+ <xs:element name="updated" type="xs:string" minOccurs="0"/>
+ <xs:element name="author" type="author" minOccurs="0"/>
+ <xs:element name="category" minOccurs="0">
+ <xs:complexType>
+ <xs:attribute name="term" type="xs:string"/>
+ <xs:attribute name="label" type="xs:string"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="articles" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="article" type="article" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="article">
+ <xs:sequence>
+ <xs:element name="sequenceId" type="xs:string" minOccurs="0"/>
+ <xs:element name="id" type="xs:string"/>
+ <xs:element name="language" type="xs:string"/>
+ <xs:element name="title" type="xs:string"/>
+ <xs:element name="subTitle" type="xs:string" minOccurs="0"/>
+ <xs:element name="content" type="xs:string" minOccurs="0"/>
+ <xs:element name="contentWithMarkup" type="xs:string" minOccurs="0"/>
+ <xs:element name="tags" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="tag" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="publishedDate" type="xs:string"/>
+ <xs:element name="harvestDate" type="xs:string"/>
+ <xs:element name="embargoDate" type="xs:string" minOccurs="0"/>
+ <xs:element name="licenseEndDate" type="xs:string"/>
+ <xs:element name="url" type="xs:string"/>
+ <xs:element name="originalUrl" type="xs:string" minOccurs="0"/>
+ <xs:element name="commentsUrl" type="xs:string"/>
+ <xs:element name="outboundUrls" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="outboundUrl" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="wordCount" type="xs:string" minOccurs="0"/>
+ <xs:element name="dataFormat" type="xs:string"/>
+ <xs:element name="copyright" type="xs:string"/>
+ <xs:element name="loginStatus" type="xs:string"/>
+ <xs:element name="duplicateGroupId" type="xs:string"/>
+ <xs:element name="contentGroupIds" type="xs:string" minOccurs="0"/>
+ <xs:element name="harvest" type="harvest" minOccurs="0"/>
+ <xs:element name="media" type="media"/>
+ <xs:element name="publishingPlatform" type="articlePublishingPlatform"/>
+ <xs:element name="adultLanguage" type="xs:string"/>
+ <xs:element name="topics" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="topic" type="topic" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="companies" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="company" type="company" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="locations" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="location" type="articleLocation" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="semantics" type="semantics" minOccurs="0"/>
+ <xs:element name="print" type="print" minOccurs="0"/>
+ <xs:element name="broadcast" type="broadcast" minOccurs="0"/>
+ <xs:element name="author" type="author"/>
+ <xs:element name="source" type="source"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="harvest">
+ <xs:sequence>
+ <xs:element name="headlineVia" type="xs:string"/>
+ <xs:element name="contentVia" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="media">
+ <xs:sequence>
+ <xs:element name="audio" type="audioOrVideo" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="image" type="image" minOccurs="0" maxOccurs="unbounded"/>
+ <xs:element name="video" type="audioOrVideo" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="audioOrVideo">
+ <xs:sequence>
+ <xs:element name="url" type="xs:string"/>
+ <xs:element name="mimeType" type="xs:string"/>
+ <xs:element name="caption" type="xs:string"/>
+ <xs:element name="duration" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="image">
+ <xs:sequence>
+ <xs:element name="url" type="xs:string"/>
+ <xs:element name="mimeType" type="xs:string"/>
+ <xs:element name="caption" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="articlePublishingPlatform">
+ <xs:sequence>
+ <xs:element name="itemId" type="xs:string"/>
+ <xs:element name="statusId" type="xs:string"/>
+ <xs:element name="inReplyToUserId" type="xs:string"/>
+ <xs:element name="inReplyToStatusId" type="xs:string"/>
+ <xs:element name="totalViews" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="topic">
+ <xs:sequence>
+ <xs:element name="name" type="xs:string" minOccurs="0"/>
+ <xs:element name="group" type="xs:string" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="company">
+ <xs:sequence>
+ <xs:element name="name" type="xs:string"/>
+ <xs:element name="symbol" type="xs:string"/>
+ <xs:element name="exchange" type="xs:string"/>
+ <xs:element name="isin" type="xs:string"/>
+ <xs:element name="cusip" type="xs:string" minOccurs="0"/>
+ <xs:element name="titleCount" type="xs:int"/>
+ <xs:element name="contentCount" type="xs:int"/>
+ <xs:element name="primary" type="xs:boolean"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="articleLocation">
+ <xs:sequence>
+ <xs:element name="name" type="xs:string"/>
+ <xs:element name="type" type="xs:string"/>
+ <xs:element name="class" type="xs:string"/>
+ <xs:element name="mentions" type="xs:string"/>
+ <xs:element name="confidence" type="xs:string"/>
+ <xs:element name="country" type="country"/>
+ <xs:element name="region" type="xs:string"/>
+ <xs:element name="subregion" type="xs:string"/>
+ <xs:element name="state" type="state"/>
+ <xs:element name="latitude" type="xs:string"/>
+ <xs:element name="longitude" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="country">
+ <xs:sequence>
+ <xs:element name="confidence" type="xs:string" minOccurs="0"/>
+ <xs:element name="fipsCode" type="xs:string" minOccurs="0"/>
+ <xs:element name="isoCode" type="xs:string" minOccurs="0"/>
+ <xs:element name="name" type="xs:string" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="state">
+ <xs:sequence>
+ <xs:element name="confidence" type="xs:string" minOccurs="0"/>
+ <xs:element name="fipsCode" type="xs:string" minOccurs="0"/>
+ <xs:element name="name" type="xs:string" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="semantics">
+ <xs:sequence>
+ <xs:element name="events" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="event" type="semanticsItem" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="entities" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="entity" type="semanticsItem" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="semanticsItem">
+ <xs:sequence>
+ <xs:element name="properties" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="property" type="property" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="property">
+ <xs:sequence>
+ <xs:element name="name" type="xs:string" minOccurs="0"/>
+ <xs:element name="value" type="xs:string" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="print">
+ <xs:sequence>
+ <xs:element name="supplement" type="xs:string"/>
+ <xs:element name="publicationEdition" type="xs:string"/>
+ <xs:element name="regionalEdition" type="xs:string"/>
+ <xs:element name="section" type="xs:string"/>
+ <xs:element name="pageNumber" type="xs:string"/>
+ <xs:element name="sizeCm" type="xs:string"/>
+ <xs:element name="sizePercentage" type="xs:string"/>
+ <xs:element name="originLeft" type="xs:string"/>
+ <xs:element name="originTop" type="xs:string"/>
+ <xs:element name="width" type="xs:string"/>
+ <xs:element name="height" type="xs:string"/>
+ <xs:element name="byLine" type="xs:string"/>
+ <xs:element name="photo" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="broadcast">
+ <xs:sequence>
+ <xs:element name="marketName" type="xs:string"/>
+ <xs:element name="nationalNetwork" type="xs:string"/>
+ <xs:element name="title" type="xs:string"/>
+ <xs:element name="lines" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="line" type="line" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="line">
+ <xs:sequence>
+ <xs:element name="date" type="xs:string" minOccurs="0"/>
+ <xs:element name="text" type="xs:string" minOccurs="0"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="author">
+ <xs:sequence>
+ <xs:element name="name" type="xs:string"/>
+ <xs:element name="homeUrl" type="xs:string"/>
+ <xs:element name="email" type="xs:string"/>
+ <xs:element name="description" type="xs:string"/>
+ <xs:element name="dateLastActive" type="xs:string"/>
+ <xs:element name="publishingPlatform" type="authorPublishingPlatform"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="authorPublishingPlatform">
+ <xs:sequence>
+ <xs:element name="userName" type="xs:string"/>
+ <xs:element name="userId" type="xs:string"/>
+ <xs:element name="statusesCount" type="xs:string"/>
+ <xs:element name="totalViews" type="xs:string"/>
+ <xs:element name="followingCount" type="xs:string"/>
+ <xs:element name="followersCount" type="xs:string"/>
+ <xs:element name="kloutScore" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="source">
+ <xs:sequence>
+ <xs:element name="id" type="xs:string" minOccurs="0"/>
+ <xs:element name="name" type="xs:string"/>
+ <xs:element name="homeUrl" type="xs:string"/>
+ <xs:element name="publisher" type="xs:string"/>
+ <xs:element name="primaryLanguage" type="xs:string"/>
+ <xs:element name="primaryMediaType" type="xs:string"/>
+ <xs:element name="category" type="xs:string"/>
+ <xs:element name="editorialRank" type="xs:string"/>
+ <xs:element name="publicationId" type="xs:string" minOccurs="0"/>
+ <xs:element name="channelCode" type="xs:string" minOccurs="0"/>
+ <xs:element name="location" type="sourceLocation"/>
+ <xs:element name="feedSource" type="xs:string" minOccurs="0"/>
+ <xs:element name="feed" type="feed"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="sourceLocation">
+ <xs:sequence>
+ <xs:element name="country" type="xs:string"/>
+ <xs:element name="countryCode" type="xs:string"/>
+ <xs:element name="region" type="xs:string"/>
+ <xs:element name="subregion" type="xs:string"/>
+ <xs:element name="state" type="xs:string"/>
+ <xs:element name="zipArea" type="xs:string"/>
+ <xs:element name="zipCode" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="feed">
+ <xs:sequence>
+ <xs:element name="id" type="xs:string"/>
+ <xs:element name="name" type="xs:string"/>
+ <xs:element name="url" type="xs:string" minOccurs="0"/>
+ <xs:element name="mediaType" type="xs:string"/>
+ <xs:element name="publishingPlatform" type="xs:string"/>
+ <xs:element name="idFromPublisher" type="xs:string"/>
+ <xs:element name="generator" type="xs:string"/>
+ <xs:element name="description" type="xs:string"/>
+ <xs:element name="tags" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="tag" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="imageUrl" type="xs:string"/>
+ <xs:element name="copyright" type="xs:string"/>
+ <xs:element name="language" type="xs:string"/>
+ <xs:element name="dataFormat" type="xs:string"/>
+ <xs:element name="rank" type="rank"/>
+ <xs:element name="inWhiteList" type="xs:string"/>
+ <xs:element name="autoTopics" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="autoTopic" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="editorialTopics" minOccurs="0">
+ <xs:complexType>
+ <xs:sequence>
+ <xs:element name="editorialTopic" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+ </xs:sequence>
+ </xs:complexType>
+ </xs:element>
+ <xs:element name="genre" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+
+ <xs:complexType name="rank">
+ <xs:sequence>
+ <xs:element name="autoRank" type="xs:string"/>
+ <xs:element name="autoRankOrder" type="xs:string"/>
+ <xs:element name="inboundLinkCount" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+</xs:schema>
+
Added: incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/gnip-powertrack/src/test/java/org/apache/streams/gnip/powertrack/test/PowerTrackDeserializationTest.java
URL: http://svn.apache.org/viewvc/incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/gnip-powertrack/src/test/java/org/apache/streams/gnip/powertrack/test/PowerTrackDeserializationTest.java?rev=1556893&view=auto
==============================================================================
--- incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/gnip-powertrack/src/test/java/org/apache/streams/gnip/powertrack/test/PowerTrackDeserializationTest.java (added)
+++ incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/gnip-powertrack/src/test/java/org/apache/streams/gnip/powertrack/test/PowerTrackDeserializationTest.java Thu Jan 9 17:27:50 2014
@@ -0,0 +1,37 @@
+package org.apache.streams.gnip.powertrack.test;
+
+import org.apache.streams.gnip.powertrack.PowerTrackActivitySerializer;
+import org.junit.Assert;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Created with IntelliJ IDEA.
+ * User: rebanks
+ * Date: 9/6/13
+ * Time: 9:28 AM
+ * To change this template use File | Settings | File Templates.
+ */
+public class PowerTrackDeserializationTest {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(PowerTrackActivitySerializer.class);
+
+ private static final String ptData1= "{\"gnip\":{\"matching_rules\":[{\"tag\":\"toujours_DE_DE_de\"}],\"klout_score\":32,\"klout_profile\":{\"topics\":[],\"klout_user_id\":\"141018977628748348\",\"link\":\"http://klout.com/user/id/141018977628748348\"},\"language\":{\"value\":\"fr\"}},\"body\":\"RT @Albayraakkk: J'attends ton SMS, tu attends le miens. On croit toujours que l'autre va envoyer un message en premier. Bref, on ne se par\\u201a??\",\"favoritesCount\":0,\"link\":\"http://twitter.com/alexandragriett/statuses/375760903104638976\",\"retweetCount\":168,\"twitter_lang\":\"fr\",\"postedTime\":\"2013-09-05T23:22:35.000Z\",\"provider\":{\"link\":\"http://www.twitter.com\",\"displayName\":\"Twitter\",\"objectType\":\"service\"},\"actor\":{\"summary\":null,\"twitterTimeZone\":null,\"friendsCount\":68,\"favoritesCount\":3,\"link\":\"http://www.twitter.com/alexandragriett\",\"postedTime\":\"2013-05-01T17:52:16.000Z\",\"image\":\"https://si0.twimg.com/profile_images/37880000041435
3370/ef4170ca183eed9f7f30665712baba05_normal.jpeg\",\"links\":[{\"rel\":\"me\",\"href\":null}],\"listedCount\":0,\"id\":\"id:twitter.com:1395160326\",\"languages\":[\"fr\"],\"verified\":false,\"utcOffset\":null,\"followersCount\":47,\"preferredUsername\":\"alexandragriett\",\"displayName\":\"MauvaiseIdee\",\"statusesCount\":333,\"objectType\":\"person\"},\"object\":{\"body\":\"J'attends ton SMS, tu attends le miens. On croit toujours que l'autre va envoyer un message en premier. Bref, on ne se parle plus...\",\"favoritesCount\":24,\"link\":\"http://twitter.com/Albayraakkk/statuses/370496182172540928\",\"twitter_lang\":\"fr\",\"postedTime\":\"2013-08-22T10:42:27.000Z\",\"provider\":{\"link\":\"http://www.twitter.com\",\"displayName\":\"Twitter\",\"objectType\":\"service\"},\"actor\":{\"summary\":\"Le meilleur est dans mes favoris ! J'followback sur Instagram : http://instagram.com/Albayraakkk Kik : Cihan69200 #TeamBooba #TeamLacrim\",\"twitterTimeZone\":\"Athens\",\"friendsCount\":24
998,\"favoritesCount\":677,\"location\":{\"displayName\":\"Dans Ta Timeline\",\"objectType\":\"place\"},\"link\":\"http://www.twitter.com/Albayraakkk\",\"postedTime\":\"2012-06-23T20:59:05.000Z\",\"image\":\"https://si0.twimg.com/profile_images/378800000410070574/26edc26ad5ccb223da8b850244b468eb_normal.jpeg\",\"links\":[{\"rel\":\"me\",\"href\":\"http://facebook.com/CihanAlbayraak\"}],\"listedCount\":69,\"id\":\"id:twitter.com:616472380\",\"languages\":[\"fr\"],\"verified\":false,\"utcOffset\":\"10800\",\"followersCount\":76068,\"preferredUsername\":\"Albayraakkk\",\"displayName\":\"LA VIRGULE \\u201a??\",\"statusesCount\":671,\"objectType\":\"person\"},\"object\":{\"summary\":\"J'attends ton SMS, tu attends le miens. On croit toujours que l'autre va envoyer un message en premier. Bref, on ne se parle plus...\",\"id\":\"object:search.twitter.com,2005:370496182172540928\",\"link\":\"http://twitter.com/Albayraakkk/statuses/370496182172540928\",\"postedTime\":\"2013-08-22T10:42:27.000Z
\",\"objectType\":\"note\"},\"twitter_entities\":{\"symbols\":[],\"urls\":[],\"hashtags\":[],\"user_mentions\":[]},\"id\":\"tag:search.twitter.com,2005:370496182172540928\",\"verb\":\"post\",\"generator\":{\"link\":\"http://twitter.com/download/iphone\",\"displayName\":\"Twitter for iPhone\"},\"objectType\":\"activity\"},\"twitter_entities\":{\"symbols\":[],\"urls\":[],\"hashtags\":[],\"user_mentions\":[{\"id\":616472380,\"name\":\"LA VIRGULE \\u201a??\",\"indices\":[3,15],\"screen_name\":\"Albayraakkk\",\"id_str\":\"616472380\"}]},\"twitter_filter_level\":\"medium\",\"content\":\"RT @Albayraakkk: J'attends ton SMS, tu attends le miens. On croit toujours que l'autre va envoyer un message en premier. Bref, on ne se par\\u201a??\",\"id\":\"tag:search.twitter.com,2005:375760903104638976\",\"verb\":\"share\",\"generator\":{\"link\":\"http://twitter.com/download/iphone\",\"displayName\":\"Twitter for iPhone\"},\"published\":\"2013-09-05T23:22:35.000Z\",\"objectType\":\"activity\"}";
+
+ @Test
+ public void deserializationTest() {
+
+ PowerTrackActivitySerializer serializer = new PowerTrackActivitySerializer();
+ try {
+ Object activity = serializer.deserialize(ptData1);
+ } catch( Exception e ) {
+ LOGGER.error(e.getMessage(), e );
+ e.printStackTrace();
+ Assert.fail();
+ }
+ }
+
+
+
+}
Added: incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/pom.xml
URL: http://svn.apache.org/viewvc/incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/pom.xml?rev=1556893&view=auto
==============================================================================
--- incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/pom.xml (added)
+++ incubator/streams/branches/sblackmon/streams-contrib/streams-provider-gnip/pom.xml Thu Jan 9 17:27:50 2014
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <groupId>org.apache.streams</groupId>
+ <artifactId>streams-contrib</artifactId>
+ <version>0.1-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>streams-provider-gnip</artifactId>
+
+ <packaging>pom</packaging>
+
+ <properties>
+
+ </properties>
+
+ <modules>
+ <module>gnip-powertrack</module>
+ <module>gnip-edc-facebook</module>
+ <module>gnip-edc-flickr</module>
+ <module>gnip-edc-googleplus</module>
+ <module>gnip-edc-instagram</module>
+ <module>gnip-edc-reddit</module>
+ <module>gnip-edc-youtube</module>
+ </modules>
+
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.streams</groupId>
+ <artifactId>streams-config</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.streams</groupId>
+ <artifactId>streams-core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.streams</groupId>
+ <artifactId>streams-pojo</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project>
Added: incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/pom.xml
URL: http://svn.apache.org/viewvc/incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/pom.xml?rev=1556893&view=auto
==============================================================================
--- incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/pom.xml (added)
+++ incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/pom.xml Thu Jan 9 17:27:50 2014
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <parent>
+ <groupId>org.apache.streams</groupId>
+ <artifactId>streams-contrib</artifactId>
+ <version>0.1-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+
+ <artifactId>streams-provider-moreover</artifactId>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-annotations</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.datatype</groupId>
+ <artifactId>jackson-datatype-json-org</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.jsonschema2pojo</groupId>
+ <artifactId>jsonschema2pojo-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.streams</groupId>
+ <artifactId>streams-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.streams</groupId>
+ <artifactId>streams-pojo</artifactId>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <sourceDirectory>src/main/java</sourceDirectory>
+ <testSourceDirectory>src/test/java</testSourceDirectory>
+ <resources>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ <testResources>
+ <testResource>
+ <directory>src/test/resources</directory>
+ </testResource>
+ </testResources>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>build-helper-maven-plugin</artifactId>
+ <version>1.8</version>
+ <executions>
+ <execution>
+ <id>add-source-jsonschema2pojo</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>target/generated-sources/jsonschema2pojo</source>
+ </sources>
+ </configuration>
+ </execution>
+ <execution>
+ <id>add-source-jaxb2</id>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>add-source</goal>
+ </goals>
+ <configuration>
+ <sources>
+ <source>target/generated-sources/jaxb2</source>
+ </sources>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.jsonschema2pojo</groupId>
+ <artifactId>jsonschema2pojo-maven-plugin</artifactId>
+ <configuration>
+ <addCompileSourceRoot>true</addCompileSourceRoot>
+ <generateBuilders>true</generateBuilders>
+ <sourcePaths>
+ <sourcePath>src/main/jsonschema/com/moreover</sourcePath>
+ </sourcePaths>
+ <outputDirectory>target/generated-sources/jsonschema2pojo</outputDirectory>
+ <targetPackage>com.moreover</targetPackage>
+ <useLongIntegers>true</useLongIntegers>
+ <useJodaDates>false</useJodaDates>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.jvnet.jaxb2.maven2</groupId>
+ <artifactId>maven-jaxb2-plugin</artifactId>
+ <configuration>
+ <schemaDirectory>src/main/xmlschema/com/moreover/</schemaDirectory>
+ <generateDirectory>target/generated-sources/jaxb2</generateDirectory>
+ <verbose>true</verbose>
+ <debug>true</debug>
+ <encoding>${project.build.sourceEncoding}</encoding>
+ <forceRegenerate>true</forceRegenerate>
+ <removeOldOutput>false</removeOldOutput>
+ <generatePackage>com.moreover.api</generatePackage>
+ <plugins>
+ <plugin>
+ <groupId>org.jvnet.jaxb2_commons</groupId>
+ <artifactId>jaxb2-basics</artifactId>
+ <version>0.6.5</version>
+ </plugin>
+ </plugins>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
\ No newline at end of file
Added: incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverJsonActivitySerializer.java
URL: http://svn.apache.org/viewvc/incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverJsonActivitySerializer.java?rev=1556893&view=auto
==============================================================================
--- incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverJsonActivitySerializer.java (added)
+++ incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverJsonActivitySerializer.java Thu Jan 9 17:27:50 2014
@@ -0,0 +1,72 @@
+package org.apache.streams.data;
+
+import com.fasterxml.jackson.databind.AnnotationIntrospector;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector;
+import com.moreover.api.Article;
+import org.apache.commons.lang.NotImplementedException;
+import org.apache.streams.data.util.MoreoverUtils;
+import org.apache.streams.pojo.json.Activity;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * Deserializes Moreover JSON format into Activities
+ */
+public class MoreoverJsonActivitySerializer implements ActivitySerializer {
+ @Override
+ public String serializationFormat() {
+ return "application/json+vnd.moreover.com.v1";
+ }
+
+ @Override
+ public String serialize(Activity deserialized) {
+ throw new UnsupportedOperationException("Cannot currently serialize to Moreover JSON");
+ }
+
+ @Override
+ public Activity deserialize(String serialized) {
+ serialized = serialized.replaceAll("\\[[ ]*\\]", "null");
+
+ System.out.println(serialized);
+
+ ObjectMapper mapper = new ObjectMapper();
+ AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(mapper.getTypeFactory());
+ mapper.setAnnotationIntrospector(introspector);
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, Boolean.FALSE);
+ mapper.configure(DeserializationFeature.FAIL_ON_INVALID_SUBTYPE, Boolean.FALSE);
+ mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, Boolean.TRUE);
+ mapper.configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, Boolean.TRUE);
+ mapper.configure(DeserializationFeature.WRAP_EXCEPTIONS, Boolean.TRUE);
+
+ Article article;
+ try {
+ ObjectNode node = (ObjectNode)mapper.readTree(serialized);
+ node.remove("tags");
+ node.remove("locations");
+ node.remove("companies");
+ node.remove("topics");
+ node.remove("media");
+ node.remove("outboundUrls");
+ ObjectNode jsonNodes = (ObjectNode) node.get("source").get("feed");
+ jsonNodes.remove("editorialTopics");
+ jsonNodes.remove("tags");
+ jsonNodes.remove("autoTopics");
+ article = mapper.convertValue(node, Article.class);
+ } catch (IOException e) {
+ throw new IllegalArgumentException("Unable to deserialize", e);
+ }
+ return MoreoverUtils.convert(article);
+ }
+
+ @Override
+ public List<Activity> deserializeAll(String serializedList) {
+ throw new NotImplementedException("Not currently implemented");
+ }
+
+
+}
Added: incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverXmlActivitySerializer.java
URL: http://svn.apache.org/viewvc/incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverXmlActivitySerializer.java?rev=1556893&view=auto
==============================================================================
--- incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverXmlActivitySerializer.java (added)
+++ incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/MoreoverXmlActivitySerializer.java Thu Jan 9 17:27:50 2014
@@ -0,0 +1,86 @@
+package org.apache.streams.data;
+
+import com.moreover.api.Article;
+import com.moreover.api.ArticlesResponse;
+import com.moreover.api.ObjectFactory;
+import org.apache.commons.lang.SerializationException;
+import org.apache.streams.data.util.MoreoverUtils;
+import org.apache.streams.pojo.json.Activity;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Deserializes the Moreover Article XML and converts it to an instance of {@link Activity}
+ */
+public class MoreoverXmlActivitySerializer implements ActivitySerializer {
+
+ //JAXBContext is threadsafe (supposedly)
+ private final JAXBContext articleContext;
+ private final JAXBContext articlesContext;
+
+ public MoreoverXmlActivitySerializer() {
+ articleContext = createContext(Article.class);
+ articlesContext = createContext(ArticlesResponse.class);
+ }
+
+ @Override
+ public String serializationFormat() {
+ return "application/xml+vnd.moreover.com.v1";
+ }
+
+ @Override
+ public String serialize(Activity deserialized) {
+ throw new UnsupportedOperationException("Cannot currently serialize to Moreover");
+ }
+
+ @Override
+ public Activity deserialize(String serialized) {
+ Article article = deserializeMoreover(serialized);
+ return MoreoverUtils.convert(article);
+ }
+
+ @Override
+ public List<Activity> deserializeAll(String serializedList) {
+ ArticlesResponse response = deserializeMoreoverResponse(serializedList);
+ List<Activity> activities = new LinkedList<Activity>();
+ for(Article article : response.getArticles().getArticle()) {
+ activities.add(MoreoverUtils.convert(article));
+ }
+ return activities;
+ }
+
+ private Article deserializeMoreover(String serialized){
+ try {
+ Unmarshaller unmarshaller = articleContext.createUnmarshaller();
+ return (Article) unmarshaller.unmarshal(new StringReader(serialized));
+ } catch (JAXBException e) {
+ throw new SerializationException("Unable to deserialize Moreover data", e);
+ }
+ }
+
+ private ArticlesResponse deserializeMoreoverResponse(String serialized){
+ try {
+ Unmarshaller unmarshaller = articlesContext.createUnmarshaller();
+ return ((JAXBElement<ArticlesResponse>) unmarshaller.unmarshal(new StringReader(serialized))).getValue();
+ } catch (JAXBException e) {
+ throw new SerializationException("Unable to deserialize Moreover data", e);
+ }
+ }
+
+ private JAXBContext createContext(Class articleClass) {
+ JAXBContext context;
+ try {
+ context = JAXBContext.newInstance(articleClass.getPackage().getName(), ObjectFactory.class.getClassLoader());
+ } catch (JAXBException e) {
+ throw new IllegalStateException("Unable to create JAXB Context for Moreover data", e);
+ }
+ return context;
+ }
+}
Added: incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverClient.java
URL: http://svn.apache.org/viewvc/incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverClient.java?rev=1556893&view=auto
==============================================================================
--- incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverClient.java (added)
+++ incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverClient.java Thu Jan 9 17:27:50 2014
@@ -0,0 +1,83 @@
+package org.apache.streams.data.moreover;
+
+import org.apache.commons.io.IOUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.StringWriter;
+import java.math.BigInteger;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.nio.charset.Charset;
+import java.util.Date;
+
+/**
+ *
+ */
+public class MoreoverClient {
+ private static final Logger logger = LoggerFactory.getLogger(MoreoverClient.class);
+
+ private static final String BASE_URL = "http://metabase.moreover.com/com.facebook.api/v10/articles?key=%s&limit=%s&sequence_id=%s";
+ private final String id;
+ private String apiKey;
+ private BigInteger lastSequenceId = BigInteger.ZERO;
+ //testing purpose only
+ public long pullTime;
+ private boolean debug;
+
+ public MoreoverClient(String id, String apiKey) {
+ logger.info("Constructed new client for id:{} key:{}", id, apiKey);
+ this.id = id;
+ this.apiKey = apiKey;
+ }
+
+ public MoreoverResult getArticlesAfter(String sequenceId, int limit) throws IOException {
+ String urlString = String.format(BASE_URL, this.apiKey, limit, (sequenceId == null ? 0 : sequenceId));
+ logger.debug("Making call to {}", urlString);
+ long start = System.nanoTime();
+ MoreoverResult result = new MoreoverResult(id, getArticles(new URL(urlString)), start, System.nanoTime());
+ logger.debug("Maximum sequence from last call {}", result.getMaxSequencedId());
+ if(!result.getMaxSequencedId().equals(BigInteger.ZERO))
+ this.lastSequenceId = result.getMaxSequencedId();
+ return result;
+ }
+
+ public MoreoverResult getNextBatch() throws IOException{
+ //logger.debug("Getting next results for {} {} {}", this.id, this.apiKey, this.lastSequenceId);
+ return getArticlesAfter(this.lastSequenceId.toString(), 500);
+ }
+
+ private String getArticles2(URL url) throws IOException {
+ HttpURLConnection cn = (HttpURLConnection) url.openConnection();
+ cn.setRequestMethod("GET");
+ cn.addRequestProperty("Content-Type", "text/xml;charset=UTF-8");
+ cn.setDoInput(true);
+ cn.setDoOutput(false);
+ BufferedReader reader = new BufferedReader(new InputStreamReader(cn.getInputStream(), Charset.forName("UTF-8")));
+ String line = null;
+ StringBuilder builder = new StringBuilder();
+ String s = "";
+ String result = new String(s.getBytes(Charset.forName("UTF-8")), Charset.forName("UTF-8"));
+ while((line = reader.readLine()) != null) {
+ result+=line;
+ }
+ pullTime = new Date().getTime();
+ return result;
+ }
+
+ private String getArticles(URL url) throws IOException{
+ HttpURLConnection cn = (HttpURLConnection) url.openConnection();
+ cn.setRequestMethod("GET");
+ cn.addRequestProperty("Content-Type", "text/xml;charset=UTF-8");
+ cn.setDoInput(true);
+ cn.setDoOutput(false);
+ StringWriter writer = new StringWriter();
+ IOUtils.copy(new InputStreamReader(cn.getInputStream(), Charset.forName("UTF-8")), writer);
+ writer.flush();
+ pullTime = new Date().getTime();
+ return writer.toString();
+ }
+}
Added: incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverProvider.java
URL: http://svn.apache.org/viewvc/incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverProvider.java?rev=1556893&view=auto
==============================================================================
--- incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverProvider.java (added)
+++ incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverProvider.java Thu Jan 9 17:27:50 2014
@@ -0,0 +1,77 @@
+package org.apache.streams.data.moreover;
+
+import com.google.common.collect.Lists;
+import org.apache.streams.core.StreamsProvider;
+import org.apache.streams.core.StreamsResultSet;
+import org.apache.streams.moreover.MoreoverConfiguration;
+import org.apache.streams.moreover.MoreoverKeyData;
+import org.joda.time.DateTime;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.math.BigInteger;
+import java.util.Arrays;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
+import java.util.concurrent.*;
+
+public class MoreoverProvider implements StreamsProvider {
+
+ private static Logger logger = LoggerFactory.getLogger(MoreoverProvider.class);
+ private volatile Queue<StreamsResultSet> resultQueue = new ConcurrentLinkedQueue<StreamsResultSet>();
+ private List<ExecutorService> tasks = new LinkedList<ExecutorService>();
+ private List<MoreoverKeyData> keys;
+ private boolean started = false;
+
+ public MoreoverProvider(MoreoverConfiguration moreoverConfiguration) {
+ this.keys = Lists.newArrayList();
+ for( MoreoverKeyData apiKey : moreoverConfiguration.getApiKeys()) {
+ this.keys.add(apiKey);
+ }
+ this.keys = Arrays.asList();
+ }
+
+ public MoreoverProvider(MoreoverKeyData... keys) {
+ this.keys = Arrays.asList(keys);
+ }
+
+ @Override
+ public synchronized void start() {
+ logger.trace("Starting Producer");
+ if(!started) {
+ logger.trace("Producer not started. Initializing");
+ for(MoreoverKeyData key : keys) {
+ MoreoverProviderTask task = new MoreoverProviderTask(key.getId(), key.getKey(), this.resultQueue, key.getStartingSequence());
+ ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
+ service.scheduleWithFixedDelay(task, 0, MoreoverProviderTask.LATENCY, TimeUnit.SECONDS);
+ logger.info("Started producer for {} with service {}", key.getKey(), service.toString());
+ this.tasks.add(service);
+ }
+ started = true;
+ }
+ }
+
+ @Override
+ public synchronized void stop() {
+ for(ExecutorService service: tasks) {
+ service.shutdown();
+ }
+ }
+
+ @Override
+ public StreamsResultSet readCurrent() {
+ return resultQueue.peek();
+ }
+
+ @Override
+ public StreamsResultSet readNew(BigInteger sequence) {
+ return null;
+ }
+
+ @Override
+ public StreamsResultSet readRange(DateTime start, DateTime end) {
+ return null;
+ }
+
+}
Added: incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverProviderTask.java
URL: http://svn.apache.org/viewvc/incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverProviderTask.java?rev=1556893&view=auto
==============================================================================
--- incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverProviderTask.java (added)
+++ incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverProviderTask.java Thu Jan 9 17:27:50 2014
@@ -0,0 +1,67 @@
+package org.apache.streams.data.moreover;
+
+import org.apache.streams.core.StreamsResultSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Queue;
+
+/**
+ * Task to pull from the Morever API
+ */
+public class MoreoverProviderTask implements Runnable {
+
+ public static final int LATENCY = 10;
+ public static final int REQUIRED_LATENCY = LATENCY * 1000;
+ private static Logger logger = LoggerFactory.getLogger(MoreoverProviderTask.class);
+
+ private final String lastSequence;
+ private final String apiKey;
+ private final String apiId;
+ private final Queue<StreamsResultSet> results;
+ private final MoreoverClient moClient;
+ private boolean started = false;
+
+ public MoreoverProviderTask(String apiId, String apiKey, Queue<StreamsResultSet> results, String lastSequence) {
+ //logger.info("Constructed new task {} for {} {} {}", UUID.randomUUID().toString(), apiId, apiKey, lastSequence);
+ this.apiId = apiId;
+ this.apiKey = apiKey;
+ this.results = results;
+ this.lastSequence = lastSequence;
+ this.moClient = new MoreoverClient(this.apiId, this.apiKey);
+ initializeClient(moClient);
+ }
+
+ @Override
+ public void run() {
+ try {
+ ensureTime(moClient);
+ MoreoverResult result = started ? moClient.getNextBatch() : moClient.getArticlesAfter(lastSequence, 500);
+ started = true;
+ results.offer(new MoreoverResultSetWrapper(result));
+ logger.info("ApiKey={}\tlastSequenceid={}", this.apiKey, result.getMaxSequencedId());
+ } catch (Exception e) {
+ logger.error("Exception while polling moreover", e);
+ }
+ }
+
+ private void ensureTime(MoreoverClient moClient) {
+ try {
+ long gap = System.currentTimeMillis() - moClient.pullTime;
+ if (gap < REQUIRED_LATENCY)
+ Thread.sleep(REQUIRED_LATENCY - gap);
+ } catch (Exception e) {
+ logger.warn("Error sleeping for latency");
+ }
+ }
+
+ private void initializeClient(MoreoverClient moClient) {
+ try {
+ moClient.getArticlesAfter("0", 2);
+ } catch (Exception e) {
+ logger.error("Failed to start stream, {}", this.apiKey);
+ logger.error("Exception : ", e);
+ throw new IllegalStateException("Unable to initialize stream", e);
+ }
+ }
+}
Added: incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverResult.java
URL: http://svn.apache.org/viewvc/incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverResult.java?rev=1556893&view=auto
==============================================================================
--- incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverResult.java (added)
+++ incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverResult.java Thu Jan 9 17:27:50 2014
@@ -0,0 +1,151 @@
+package org.apache.streams.data.moreover;
+
+import com.fasterxml.aalto.stax.InputFactoryImpl;
+import com.fasterxml.aalto.stax.OutputFactoryImpl;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule;
+import com.fasterxml.jackson.dataformat.xml.XmlFactory;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+import com.google.common.collect.ImmutableList;
+import com.moreover.api.Article;
+import org.apache.streams.core.StreamsDatum;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+import java.io.Serializable;
+import java.math.BigInteger;
+import java.util.Iterator;
+
+
+public class MoreoverResult implements Iterable<StreamsDatum> {
+ private static final Logger logger = LoggerFactory.getLogger(MoreoverClient.class);
+
+ private ObjectMapper mapper;
+ private XmlMapper xmlMapper;
+
+ private String xmlString;
+ private String jsonString;
+ private ObjectNode resultObject;
+ private JsonNode articlesArray;
+ private long start;
+ private long end;
+ private String clientId;
+ private BigInteger maxSequencedId = BigInteger.ZERO;
+
+
+ protected MoreoverResult(String clientId, String xmlString, long start, long end) {
+ this.xmlString = xmlString;
+ this.clientId = clientId;
+ this.start = start;
+ this.end = end;
+ XmlFactory f = new XmlFactory(new InputFactoryImpl(),
+ new OutputFactoryImpl());
+
+ JacksonXmlModule module = new JacksonXmlModule();
+
+ module.setDefaultUseWrapper(false);
+
+ xmlMapper = new XmlMapper(f, module);
+
+ xmlMapper
+ .configure(
+ DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY,
+ Boolean.TRUE);
+ xmlMapper
+ .configure(
+ DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT,
+ Boolean.TRUE);
+ xmlMapper
+ .configure(
+ DeserializationFeature.USE_JAVA_ARRAY_FOR_JSON_ARRAY,
+ Boolean.TRUE);
+ xmlMapper.configure(
+ DeserializationFeature.READ_ENUMS_USING_TO_STRING,
+ Boolean.TRUE);
+
+ }
+
+ public String getClientId() {
+ return clientId;
+ }
+
+ public long getStart() {
+ return start;
+ }
+
+ public long getEnd() {
+ return end;
+ }
+
+ public String getJSONString() {
+
+ if( this.jsonString != null ) {
+ return jsonString;
+ }
+ else {
+ try {
+ this.resultObject = xmlMapper.readValue(xmlString, ObjectNode.class);
+ this.jsonString = mapper.writeValueAsString(this.resultObject);
+ this.articlesArray = (JsonNode)this.resultObject.get("articles");
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ for (JsonNode articleNode : ImmutableList.copyOf(articlesArray.elements())) {
+ Article article = mapper.convertValue(articleNode, Article.class);
+ BigInteger temp = new BigInteger(article.getSequenceId());
+ logger.trace("Prior max sequence Id {} current candidate {}", this.maxSequencedId, temp);
+ if (temp.compareTo(this.maxSequencedId) > 0) {
+ this.maxSequencedId = temp;
+ logger.debug("New max sequence Id {}", this.maxSequencedId);
+ }
+
+ }
+ return jsonString;
+ }
+
+ public String getXmlString() {
+ return this.xmlString;
+ }
+
+ public BigInteger getMaxSequencedId() {
+ return this.maxSequencedId;
+ }
+
+ @Override
+ @SuppressWarnings("unchecked")
+ public Iterator<StreamsDatum> iterator() {
+ // TODO: I don't understand the purpose of this class. destroy
+ //return new JsonStringIterator(articlesArray.iterator());
+ return null;
+ }
+
+ protected static class JsonStringIterator implements Iterator<Serializable> {
+
+ private Iterator<Serializable> underlying;
+
+ protected JsonStringIterator(Iterator<Serializable> underlying) {
+ this.underlying = underlying;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return underlying.hasNext();
+ }
+
+ @Override
+ public String next() {
+ return underlying.next().toString();
+ }
+
+ @Override
+ public void remove() {
+ underlying.remove();
+ }
+ }
+}
Added: incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverResultSetWrapper.java
URL: http://svn.apache.org/viewvc/incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverResultSetWrapper.java?rev=1556893&view=auto
==============================================================================
--- incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverResultSetWrapper.java (added)
+++ incubator/streams/branches/sblackmon/streams-contrib/streams-provider-moreover/src/main/java/org/apache/streams/data/moreover/MoreoverResultSetWrapper.java Thu Jan 9 17:27:50 2014
@@ -0,0 +1,41 @@
+package org.apache.streams.data.moreover;
+
+import org.apache.streams.core.StreamsDatum;
+import org.apache.streams.core.StreamsResultSet;
+
+import java.math.BigInteger;
+import java.util.Iterator;
+
+public class MoreoverResultSetWrapper implements StreamsResultSet {
+
+ private MoreoverResult underlying;
+
+ public MoreoverResultSetWrapper(MoreoverResult underlying) {
+ this.underlying = underlying;
+ }
+
+ @Override
+ public long getStartTime() {
+ return underlying.getStart();
+ }
+
+ @Override
+ public long getEndTime() {
+ return underlying.getEnd();
+ }
+
+ @Override
+ public String getSourceId() {
+ return underlying.getClientId();
+ }
+
+ @Override
+ public BigInteger getMaxSequence() {
+ return underlying.getMaxSequencedId();
+ }
+
+ @Override
+ public Iterator<StreamsDatum> iterator() {
+ return underlying.iterator();
+ }
+}