Repository: camel
Updated Branches:
  refs/heads/master b09eca278 -> eb16b5c14


http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/AbstractStatusConsumer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/AbstractStatusConsumer.java
 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/AbstractStatusConsumer.java
new file mode 100644
index 0000000..1e87e14
--- /dev/null
+++ 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/AbstractStatusConsumer.java
@@ -0,0 +1,55 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.twitter.consumer.timeline;
+
+import java.util.List;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.component.twitter.TwitterEndpoint;
+import org.apache.camel.component.twitter.consumer.TwitterConsumer;
+import org.apache.camel.component.twitter.consumer.TwitterEventType;
+import twitter4j.Status;
+import twitter4j.TwitterException;
+
+/**
+ * Consumes the user's home timeline.
+ */
+abstract class AbstractStatusConsumer extends TwitterConsumer {
+
+    public AbstractStatusConsumer(TwitterEndpoint endpoint) {
+        super(endpoint);
+    }
+
+    @Override
+    public List<Exchange> pollConsume() throws TwitterException {
+        List<Status> statusList =  doPoll();
+        for (int i = 0; i < statusList.size(); i++) {
+            setLastIdIfGreater(statusList.get(i).getId());
+        }
+
+        return TwitterEventType.STATUS.createExchangeList(endpoint, 
statusList);
+    }
+
+    @Override
+    public List<Exchange> directConsume() throws TwitterException {
+        return TwitterEventType.STATUS.createExchangeList(endpoint, 
doDirect());
+    }
+
+    protected abstract List<Status> doPoll() throws TwitterException;
+
+    protected abstract List<Status> doDirect() throws TwitterException;
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/HomeConsumer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/HomeConsumer.java
 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/HomeConsumer.java
index 98d7912..252bacc 100644
--- 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/HomeConsumer.java
+++ 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/HomeConsumer.java
@@ -19,30 +19,25 @@ package 
org.apache.camel.component.twitter.consumer.timeline;
 import java.util.List;
 
 import org.apache.camel.component.twitter.TwitterEndpoint;
-import org.apache.camel.component.twitter.consumer.Twitter4JConsumer;
-
-import twitter4j.Paging;
 import twitter4j.Status;
 import twitter4j.TwitterException;
 
 /**
  * Consumes the user's home timeline.
  */
-public class HomeConsumer extends Twitter4JConsumer {
+public class HomeConsumer extends AbstractStatusConsumer {
 
-    public HomeConsumer(TwitterEndpoint te) {
-        super(te);
+    public HomeConsumer(TwitterEndpoint endpoint) {
+        super(endpoint);
     }
 
-    public List<Status> pollConsume() throws TwitterException {
-        List<Status> list = 
te.getProperties().getTwitter().getHomeTimeline(new Paging(lastId));
-        for (Status s : list) {
-            checkLastId(s.getId());
-        }
-        return list;
+    @Override
+    protected List<Status> doPoll() throws TwitterException {
+        return getTwitter().getHomeTimeline(getLastIdPaging());
     }
 
-    public List<Status> directConsume() throws TwitterException {
-        return te.getProperties().getTwitter().getHomeTimeline();
+    @Override
+    protected List<Status> doDirect() throws TwitterException {
+        return getTwitter().getHomeTimeline();
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/MentionsConsumer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/MentionsConsumer.java
 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/MentionsConsumer.java
index b3eee88..c3671c8 100644
--- 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/MentionsConsumer.java
+++ 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/MentionsConsumer.java
@@ -19,30 +19,25 @@ package 
org.apache.camel.component.twitter.consumer.timeline;
 import java.util.List;
 
 import org.apache.camel.component.twitter.TwitterEndpoint;
-import org.apache.camel.component.twitter.consumer.Twitter4JConsumer;
-
-import twitter4j.Paging;
 import twitter4j.Status;
 import twitter4j.TwitterException;
 
 /**
  * Consumes tweets in which the user has been mentioned.
  */
-public class MentionsConsumer extends Twitter4JConsumer {
+public class MentionsConsumer extends AbstractStatusConsumer {
 
-    public MentionsConsumer(TwitterEndpoint te) {
-        super(te);
+    public MentionsConsumer(TwitterEndpoint endpoint) {
+        super(endpoint);
     }
 
-    public List<Status> pollConsume() throws TwitterException {
-        List<Status> list = 
te.getProperties().getTwitter().getMentionsTimeline(new Paging(lastId));
-        for (Status s : list) {
-            checkLastId(s.getId());
-        }
-        return list;
+    @Override
+    protected List<Status> doPoll() throws TwitterException {
+        return getTwitter().getMentionsTimeline(getLastIdPaging());
     }
 
-    public List<Status> directConsume() throws TwitterException {
-        return te.getProperties().getTwitter().getMentionsTimeline();
+    @Override
+    protected List<Status> doDirect() throws TwitterException {
+        return getTwitter().getMentionsTimeline();
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/RetweetsConsumer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/RetweetsConsumer.java
 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/RetweetsConsumer.java
index 13ff455..dfd0815 100644
--- 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/RetweetsConsumer.java
+++ 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/RetweetsConsumer.java
@@ -19,30 +19,25 @@ package 
org.apache.camel.component.twitter.consumer.timeline;
 import java.util.List;
 
 import org.apache.camel.component.twitter.TwitterEndpoint;
-import org.apache.camel.component.twitter.consumer.Twitter4JConsumer;
-
-import twitter4j.Paging;
 import twitter4j.Status;
 import twitter4j.TwitterException;
 
 /**
  * Consumes a user's tweets that have been retweeted
  */
-public class RetweetsConsumer extends Twitter4JConsumer {
+public class RetweetsConsumer extends AbstractStatusConsumer {
 
-    public RetweetsConsumer(TwitterEndpoint te) {
-        super(te);
+    public RetweetsConsumer(TwitterEndpoint endpoint) {
+        super(endpoint);
     }
 
-    public List<Status> pollConsume() throws TwitterException {
-        List<Status> list = 
te.getProperties().getTwitter().getRetweetsOfMe(new Paging(lastId));
-        for (Status s : list) {
-            checkLastId(s.getId());
-        }
-        return list;
+    @Override
+    protected List<Status> doPoll() throws TwitterException {
+        return getTwitter().getRetweetsOfMe(getLastIdPaging());
     }
 
-    public List<Status> directConsume() throws TwitterException {
-        return te.getProperties().getTwitter().getRetweetsOfMe();
+    @Override
+    protected List<Status> doDirect() throws TwitterException {
+        return getTwitter().getRetweetsOfMe();
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/UserConsumer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/UserConsumer.java
 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/UserConsumer.java
index 53736f8..51ef02a 100644
--- 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/UserConsumer.java
+++ 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/consumer/timeline/UserConsumer.java
@@ -19,30 +19,25 @@ package 
org.apache.camel.component.twitter.consumer.timeline;
 import java.util.List;
 
 import org.apache.camel.component.twitter.TwitterEndpoint;
-import org.apache.camel.component.twitter.consumer.Twitter4JConsumer;
-
-import twitter4j.Paging;
 import twitter4j.Status;
 import twitter4j.TwitterException;
 
 /**
  * Consumes the timeline of a given user.
  */
-public class UserConsumer extends Twitter4JConsumer {
+public class UserConsumer extends AbstractStatusConsumer {
 
-    public UserConsumer(TwitterEndpoint te) {
-        super(te);
+    public UserConsumer(TwitterEndpoint endpoint) {
+        super(endpoint);
     }
 
-    public List<Status> pollConsume() throws TwitterException {
-        List<Status> list = 
te.getProperties().getTwitter().getUserTimeline(te.getProperties().getUser(), 
new Paging(lastId));
-        for (Status s : list) {
-            checkLastId(s.getId());
-        }
-        return list;
+    @Override
+    protected List<Status> doPoll() throws TwitterException {
+        return 
getTwitter().getUserTimeline(endpoint.getProperties().getUser(), 
getLastIdPaging());
     }
 
-    public List<Status> directConsume() throws TwitterException {
-        return 
te.getProperties().getTwitter().getUserTimeline(te.getProperties().getUser());
+    @Override
+    protected List<Status> doDirect() throws TwitterException {
+        return 
getTwitter().getUserTimeline(endpoint.getProperties().getUser());
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/ConsumerType.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/ConsumerType.java
 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/ConsumerType.java
index 12962e2..721182d 100644
--- 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/ConsumerType.java
+++ 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/ConsumerType.java
@@ -16,16 +16,14 @@
  */
 package org.apache.camel.component.twitter.data;
 
-public enum ConsumerType {
+import org.apache.camel.component.twitter.TwitterHelper;
 
+public enum ConsumerType {
     TIMELINE, SEARCH, DIRECTMESSAGE, STREAMING, UNKNOWN;
 
+    private static final ConsumerType[] VALUES = values();
+
     public static ConsumerType fromUri(String uri) {
-        for (ConsumerType consumerType : ConsumerType.values()) {
-            if (consumerType.name().equalsIgnoreCase(uri)) {
-                return consumerType;
-            }
-        }
-        return ConsumerType.UNKNOWN;
+        return TwitterHelper.enumFromString(VALUES, uri, ConsumerType.UNKNOWN);
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/EndpointType.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/EndpointType.java
 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/EndpointType.java
index cba0e75..40738e0 100644
--- 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/EndpointType.java
+++ 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/EndpointType.java
@@ -16,16 +16,14 @@
  */
 package org.apache.camel.component.twitter.data;
 
-public enum EndpointType {
+import org.apache.camel.component.twitter.TwitterHelper;
 
+public enum EndpointType {
     POLLING, DIRECT, EVENT;
 
+    private static final EndpointType[] VALUES = values();
+
     public static EndpointType fromUri(String uri) {
-        for (EndpointType endpointType : EndpointType.values()) {
-            if (endpointType.name().equalsIgnoreCase(uri)) {
-                return endpointType;
-            }
-        }
-        return EndpointType.DIRECT;
+        return TwitterHelper.enumFromString(VALUES, uri, EndpointType.DIRECT);
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/StreamingType.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/StreamingType.java
 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/StreamingType.java
index 86f03a4..02d8f00 100644
--- 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/StreamingType.java
+++ 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/StreamingType.java
@@ -16,15 +16,14 @@
  */
 package org.apache.camel.component.twitter.data;
 
+import org.apache.camel.component.twitter.TwitterHelper;
+
 public enum StreamingType {
     SAMPLE, FILTER, USER, UNKNOWN;
 
+    private static final StreamingType[] VALUES = values();
+
     public static StreamingType fromUri(String uri) {
-        for (StreamingType streamType : StreamingType.values()) {
-            if (streamType.name().equalsIgnoreCase(uri)) {
-                return streamType;
-            }
-        }
-        return StreamingType.UNKNOWN;
+        return TwitterHelper.enumFromString(VALUES, uri, 
StreamingType.UNKNOWN);
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/TimelineType.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/TimelineType.java
 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/TimelineType.java
index b6e1e49..9b24574 100644
--- 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/TimelineType.java
+++ 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/TimelineType.java
@@ -16,15 +16,14 @@
  */
 package org.apache.camel.component.twitter.data;
 
+import org.apache.camel.component.twitter.TwitterHelper;
+
 public enum TimelineType {
     PUBLIC, HOME, USER, MENTIONS, RETWEETSOFME, UNKNOWN;
 
+    private static final TimelineType[] VALUES = values();
+
     public static TimelineType fromUri(String uri) {
-        for (TimelineType timelineType : TimelineType.values()) {
-            if (timelineType.name().equalsIgnoreCase(uri)) {
-                return timelineType;
-            }
-        }
-        return TimelineType.UNKNOWN;
+        return TwitterHelper.enumFromString(VALUES, uri, TimelineType.UNKNOWN);
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/TrendsType.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/TrendsType.java
 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/TrendsType.java
index 88195eb..11608c6 100644
--- 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/TrendsType.java
+++ 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/data/TrendsType.java
@@ -16,15 +16,14 @@
  */
 package org.apache.camel.component.twitter.data;
 
+import org.apache.camel.component.twitter.TwitterHelper;
+
 public enum TrendsType {
     DAILY, WEEKLY, UNKNOWN;
 
+    private static final TrendsType[] VALUES = values();
+
     public static TrendsType fromUri(String uri) {
-        for (TrendsType trendType : TrendsType.values()) {
-            if (trendType.name().equalsIgnoreCase(uri)) {
-                return trendType;
-            }
-        }
-        return TrendsType.UNKNOWN;
+        return TwitterHelper.enumFromString(VALUES, uri, TrendsType.UNKNOWN);
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/DirectMessageProducer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/DirectMessageProducer.java
 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/DirectMessageProducer.java
index 6995e16..3f22526 100644
--- 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/DirectMessageProducer.java
+++ 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/DirectMessageProducer.java
@@ -25,15 +25,15 @@ import org.apache.camel.util.ObjectHelper;
 /**
  * Produces text as a direct message.
  */
-public class DirectMessageProducer extends Twitter4JProducer {
+public class DirectMessageProducer extends TwitterProducer {
 
-    public DirectMessageProducer(TwitterEndpoint te) {
-        super(te);
+    public DirectMessageProducer(TwitterEndpoint endpoint) {
+        super(endpoint);
     }
 
     public void process(Exchange exchange) throws Exception {
         // send direct message
-        String toUsername = te.getProperties().getUser();
+        String toUsername = endpoint.getProperties().getUser();
         if 
(ObjectHelper.isNotEmpty(exchange.getIn().getHeader(TwitterConstants.TWITTER_USER,
 String.class))) {
             toUsername = 
exchange.getIn().getHeader(TwitterConstants.TWITTER_USER, String.class);
         }
@@ -43,7 +43,7 @@ public class DirectMessageProducer extends Twitter4JProducer {
             throw new CamelExchangeException("Username not configured on 
TwitterEndpoint", exchange);
         } else {
             log.debug("Sending to: {} message: {}", toUsername, text);
-            te.getProperties().getTwitter().sendDirectMessage(toUsername, 
text);
+            
endpoint.getProperties().getTwitter().sendDirectMessage(toUsername, text);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/SearchProducer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/SearchProducer.java
 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/SearchProducer.java
index 408dd6f..a44fcb6 100644
--- 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/SearchProducer.java
+++ 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/SearchProducer.java
@@ -28,12 +28,12 @@ import twitter4j.QueryResult;
 import twitter4j.Status;
 import twitter4j.Twitter;
 
-public class SearchProducer extends Twitter4JProducer {
+public class SearchProducer extends TwitterProducer {
 
     private volatile long lastId;
 
-    public SearchProducer(TwitterEndpoint te) {
-        super(te);
+    public SearchProducer(TwitterEndpoint endpoint) {
+        super(endpoint);
     }
 
     @Override
@@ -43,7 +43,7 @@ public class SearchProducer extends Twitter4JProducer {
         // keywords from header take precedence
         String keywords = 
exchange.getIn().getHeader(TwitterConstants.TWITTER_KEYWORDS, String.class);
         if (keywords == null) {
-            keywords = te.getProperties().getKeywords();
+            keywords = endpoint.getProperties().getKeywords();
         }
 
         if (keywords == null) {
@@ -53,14 +53,14 @@ public class SearchProducer extends Twitter4JProducer {
         Query query = new Query(keywords);
 
         // filter of older tweets
-        if (te.getProperties().isFilterOld() && myLastId != 0) {
+        if (endpoint.getProperties().isFilterOld() && myLastId != 0) {
             query.setSinceId(myLastId);
         }
         
         // since id
         Long sinceId = 
exchange.getIn().getHeader(TwitterConstants.TWITTER_SINCEID, Long.class);
         if (sinceId == null) {
-            sinceId = te.getProperties().getSinceId();
+            sinceId = endpoint.getProperties().getSinceId();
         }
         if (ObjectHelper.isNotEmpty(sinceId)) {
             query.setSinceId(sinceId);
@@ -75,17 +75,17 @@ public class SearchProducer extends Twitter4JProducer {
         // language
         String lang = 
exchange.getIn().getHeader(TwitterConstants.TWITTER_SEARCH_LANGUAGE, 
String.class);
         if (lang == null) {
-            lang = te.getProperties().getLang();
+            lang = endpoint.getProperties().getLang();
         }
 
         if (ObjectHelper.isNotEmpty(lang)) {
             query.setLang(lang);
         }
 
-        // number of elemnt per page
+        // number of elements per page
         Integer count = 
exchange.getIn().getHeader(TwitterConstants.TWITTER_COUNT, Integer.class);
         if (count == null) {
-            count = te.getProperties().getCount();
+            count = endpoint.getProperties().getCount();
         }
         if (ObjectHelper.isNotEmpty(count)) {
             query.setCount(count);
@@ -94,10 +94,10 @@ public class SearchProducer extends Twitter4JProducer {
         // number of pages
         Integer numberOfPages = 
exchange.getIn().getHeader(TwitterConstants.TWITTER_NUMBER_OF_PAGES, 
Integer.class);
         if (numberOfPages == null) {
-            numberOfPages = te.getProperties().getNumberOfPages();
+            numberOfPages = endpoint.getProperties().getNumberOfPages();
         }
 
-        Twitter twitter = te.getProperties().getTwitter();
+        Twitter twitter = endpoint.getProperties().getTwitter();
         log.debug("Searching twitter with keywords: {}", keywords);
         QueryResult results = twitter.search(query);
         List<Status> list = results.getTweets();
@@ -111,7 +111,7 @@ public class SearchProducer extends Twitter4JProducer {
             list.addAll(results.getTweets());
         }
 
-        if (te.getProperties().isFilterOld()) {
+        if (endpoint.getProperties().isFilterOld()) {
             for (Status t : list) {
                 long newId = t.getId();
                 if (newId > myLastId) {

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/Twitter4JProducer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/Twitter4JProducer.java
 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/Twitter4JProducer.java
deleted file mode 100644
index 8e70401..0000000
--- 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/Twitter4JProducer.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.twitter.producer;
-
-import org.apache.camel.component.twitter.TwitterEndpoint;
-import org.apache.camel.impl.DefaultProducer;
-
-/**
- * Abstracts common producer capabilities.
- */
-public abstract class Twitter4JProducer extends DefaultProducer {
-
-    /**
-     * Instance of TwitterEndpoint.
-     */
-    protected TwitterEndpoint te;
-
-    protected Twitter4JProducer(TwitterEndpoint te) {
-        super(te);
-        this.te = te;
-    }
-}

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/TwitterProducer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/TwitterProducer.java
 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/TwitterProducer.java
new file mode 100644
index 0000000..0f798e7
--- /dev/null
+++ 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/TwitterProducer.java
@@ -0,0 +1,37 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.twitter.producer;
+
+import org.apache.camel.component.twitter.TwitterEndpoint;
+import org.apache.camel.impl.DefaultProducer;
+
+/**
+ * Abstracts common producer capabilities.
+ */
+public abstract class TwitterProducer extends DefaultProducer {
+
+    /**
+     * Instance of TwitterEndpoint.
+     */
+    protected TwitterEndpoint endpoint;
+
+    protected TwitterProducer(TwitterEndpoint endpoint) {
+        super(endpoint);
+
+        this.endpoint = endpoint;
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/UserProducer.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/UserProducer.java
 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/UserProducer.java
index 1fa90ce..7e809dd 100644
--- 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/UserProducer.java
+++ 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/producer/UserProducer.java
@@ -25,10 +25,10 @@ import twitter4j.StatusUpdate;
 /**
  * Produces text as a status update.
  */
-public class UserProducer extends Twitter4JProducer {
+public class UserProducer extends TwitterProducer {
 
-    public UserProducer(TwitterEndpoint te) {
-        super(te);
+    public UserProducer(TwitterEndpoint endpoint) {
+        super(endpoint);
     }
 
     @Override
@@ -56,10 +56,10 @@ public class UserProducer extends Twitter4JProducer {
     }
 
     private Status updateStatus(StatusUpdate status) throws Exception {
-        Status reponse = te.getProperties().getTwitter().updateStatus(status);
+        Status response = 
endpoint.getProperties().getTwitter().updateStatus(status);
         log.debug("Updated status: {}", status);
-        log.debug("Status id: {}", reponse.getId());
-        return reponse;
+        log.debug("Status id: {}", response.getId());
+        return response;
     }
 
     private Status updateStatus(String status) throws Exception {
@@ -68,7 +68,7 @@ public class UserProducer extends Twitter4JProducer {
             status = status.substring(0, 160);
         }
 
-        Status response = te.getProperties().getTwitter().updateStatus(status);
+        Status response = 
endpoint.getProperties().getTwitter().updateStatus(status);
         log.debug("Updated status: {}", status);
         log.debug("Status id: {}", response.getId());
         return response;

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/util/TwitterConverter.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/util/TwitterConverter.java
 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/util/TwitterConverter.java
index 68e9bf2..2b55814 100644
--- 
a/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/util/TwitterConverter.java
+++ 
b/components/camel-twitter/src/main/java/org/apache/camel/component/twitter/util/TwitterConverter.java
@@ -23,6 +23,7 @@ import twitter4j.DirectMessage;
 import twitter4j.Status;
 import twitter4j.Trend;
 import twitter4j.Trends;
+import twitter4j.UserList;
 
 /**
  * Utility for converting between Twitter4J and camel-twitter data layers.
@@ -36,18 +37,18 @@ public final class TwitterConverter {
 
     @Converter
     public static String toString(Status status) throws ParseException {
-        StringBuilder s = new StringBuilder();
-        s.append(status.getCreatedAt()).append(" 
(").append(status.getUser().getScreenName()).append(") ");
-        s.append(status.getText());
-        return s.toString();
+        return new StringBuilder()
+            .append(status.getCreatedAt()).append(" 
(").append(status.getUser().getScreenName()).append(") ")
+            .append(status.getText())
+            .toString();
     }
 
     @Converter
     public static String toString(DirectMessage dm) throws ParseException {
-        StringBuilder s = new StringBuilder();
-        s.append(dm.getCreatedAt()).append(" 
(").append(dm.getSenderScreenName()).append(") ");
-        s.append(dm.getText());
-        return s.toString();
+        return new StringBuilder()
+            .append(dm.getCreatedAt()).append(" 
(").append(dm.getSenderScreenName()).append(") ")
+            .append(dm.getText())
+            .toString();
     }
 
     @Converter
@@ -70,4 +71,15 @@ public final class TwitterConverter {
         }
         return s.toString();
     }
+
+    @Converter
+    public static String toString(UserList userList) throws ParseException {
+         return new StringBuilder()
+             .append(userList.getCreatedAt()).append(" 
(").append(userList.getUser().getScreenName()).append(") ")
+             .append(userList.getFullName())
+             .append(',')
+             .append(userList.getURI())
+             .append(',')
+             .toString();
+    }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/CamelTwitterTestSupport.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/CamelTwitterTestSupport.java
 
b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/CamelTwitterTestSupport.java
index 9ec7752..bd6fe48 100644
--- 
a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/CamelTwitterTestSupport.java
+++ 
b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/CamelTwitterTestSupport.java
@@ -22,6 +22,7 @@ import java.net.URL;
 import java.util.Properties;
 
 import org.apache.camel.test.junit4.CamelTestSupport;
+import org.apache.camel.util.ObjectHelper;
 
 public class CamelTwitterTestSupport extends CamelTestSupport {
 
@@ -31,32 +32,54 @@ public class CamelTwitterTestSupport extends 
CamelTestSupport {
     protected String accessTokenSecret;
 
     public CamelTwitterTestSupport() {
-        URL url = getClass().getResource("/test-options.properties");
-
-        InputStream inStream;
-        try {
-            inStream = url.openStream();
-        } catch (IOException e) {
-            e.printStackTrace();
-            throw new IllegalAccessError("test-options.properties could not be 
found");
-        }
-
         Properties properties = new Properties();
-        try {
-            properties.load(inStream);
-        } catch (IOException e) {
-            e.printStackTrace();
-            throw new IllegalAccessError("test-options.properties could not be 
found");
+
+        // Load from env
+        addProperty(properties, "consumer.key", "CAMEL_TWITTER_CONSUMER_KEY");
+        addProperty(properties, "consumer.secret" , 
"CAMEL_TWITTER_CONSUMER_SECRET");
+        addProperty(properties, "access.token" , "CAMEL_TWITTER_ACCESS_TOKEN");
+        addProperty(properties, "access.token.secret" , 
"CAMEL_TWITTER_ACCESS_TOKE_SECRET");
+
+        // if any of the properties is not set, load test-options.properties
+        if (!properties.containsKey("consumer.key")
+            || !properties.containsKey("consumer.secret")
+            || !properties.containsKey("access.token")
+            || !properties.containsKey("access.token.secret")) {
+
+            URL url = getClass().getResource("/test-options.properties");
+
+            try (InputStream inStream = url.openStream()) {
+                properties.load(inStream);
+            } catch (IOException e) {
+                e.printStackTrace();
+                throw new IllegalAccessError("test-options.properties could 
not be found");
+            }
         }
 
-        consumerKey = properties.get("consumer.key").toString();
-        consumerSecret = properties.get("consumer.secret").toString();
-        accessToken = properties.get("access.token").toString();
-        accessTokenSecret = properties.get("access.token.secret").toString();
+        consumerKey = properties.getProperty("consumer.key");
+        consumerSecret = properties.getProperty("consumer.secret");
+        accessToken = properties.getProperty("access.token");
+        accessTokenSecret = properties.getProperty("access.token.secret");
+
+        ObjectHelper.notNull(consumerKey, "consumer.key");
+        ObjectHelper.notNull(consumerSecret, "consumer.secret");
+        ObjectHelper.notNull(accessToken, "access.token");
+        ObjectHelper.notNull(accessTokenSecret, "access.token.secret");
     }
 
     protected String getUriTokens() {
-        return "consumerKey=" + consumerKey + "&consumerSecret=" + 
consumerSecret + "&accessToken="
-                + accessToken + "&accessTokenSecret=" + accessTokenSecret;
+        return "consumerKey=" + consumerKey
+            + "&consumerSecret=" + consumerSecret
+            + "&accessToken=" + accessToken
+            + "&accessTokenSecret=" + accessTokenSecret;
+    }
+
+    protected void addProperty(Properties properties, String name, String 
envName) {
+        if (!properties.containsKey(name)) {
+            String value = System.getenv(envName);
+            if (ObjectHelper.isNotEmpty(value)) {
+                properties.setProperty(name, value);
+            }
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/UserStreamingTest.java
----------------------------------------------------------------------
diff --git 
a/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/UserStreamingTest.java
 
b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/UserStreamingTest.java
new file mode 100644
index 0000000..82c12a9
--- /dev/null
+++ 
b/components/camel-twitter/src/test/java/org/apache/camel/component/twitter/UserStreamingTest.java
@@ -0,0 +1,49 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.twitter;
+
+import java.util.concurrent.TimeUnit;
+
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.junit.Ignore;
+import org.junit.Test;
+
+@Ignore
+public class UserStreamingTest extends CamelTwitterTestSupport  {
+
+    @Test
+    public void testUserStreaming() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:user-streaming");
+        mock.setResultWaitTime(TimeUnit.MILLISECONDS.convert(1, 
TimeUnit.MINUTES));
+        mock.expectedMessageCount(1);
+        mock.assertIsSatisfied();
+    }
+
+
+    @Override
+    protected RouteBuilder createRouteBuilder() {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("twitter://streaming/user?type=event&" + getUriTokens())
+                    
.to("log:org.apache.camel.component.twitter?level=INFO&showHeaders=true")
+                    .to("mock:user-streaming");
+            }
+        };
+    }
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/33b3bd5c/components/camel-twitter/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/components/camel-twitter/src/test/resources/log4j.properties 
b/components/camel-twitter/src/test/resources/log4j.properties
index 5f943d5..92383d0 100644
--- a/components/camel-twitter/src/test/resources/log4j.properties
+++ b/components/camel-twitter/src/test/resources/log4j.properties
@@ -22,6 +22,7 @@ log4j.rootLogger=INFO, file
 
 #log4j.logger.twitter4j=DEBUG
 #log4j.logger.org.apache.camel.component.twitter=DEBUG
+#log4j.logger.org.apache.camel.component.twitter=DEBUG, out
 #log4j.logger.org.apache.camel=DEBUG
 
 # CONSOLE appender not used by default

Reply via email to