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