From 56143b63aa481934def83a253899b6eaff6391b6 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Mon, 8 Nov 2010 09:03:44 -0500 Subject: [PATCH] INT-1553 initial refactoring to introduce Twitter4jTemplate in place of the twitter-connection --- .../twitter/core/Twitter4jTemplate.java | 151 ++++++++++++++++++ .../core/TwitterOperationException.java | 55 +++++++ .../twitter/core/TwitterOperations.java | 42 +++++ .../inbound/AbstractTwitterMessageSource.java | 9 +- .../DirectMessageReceivingMessageSource.java | 3 +- .../MentionReceivingMessageSource.java | 3 +- .../inbound/RateLimitStatusTrigger.java | 16 +- .../TimelineUpdateReceivingMessageSource.java | 3 +- .../oauth/OAuthTwitterFactoryBean.java | 68 -------- ...bstractOutboundTwitterEndpointSupport.java | 17 +- .../DirectMessageSendingMessageHandler.java | 17 +- .../TimelineUpdateSendingMessageHandler.java | 3 +- ...stReceivingMessageSourceParser-context.xml | 6 +- ...TestReceivingMessageSourceParserTests.java | 26 +++ ...estSendingMessageHandlerParser-context.xml | 6 +- .../TwitterConnectionParserTests-context.xml | 22 --- .../config/TwitterConnectionParserTests.java | 50 ------ .../twitter/core/Twitter4jTemplateTests.java | 30 ++++ ...ectMessageReceivingMessageSourceTests.java | 12 +- .../inbound/RateLimitStatusTriggerTests.java | 4 +- ...boundDirectMessageMessageHandlerTests.java | 4 +- 21 files changed, 345 insertions(+), 202 deletions(-) create mode 100644 spring-integration-twitter/src/main/java/org/springframework/integration/twitter/core/Twitter4jTemplate.java create mode 100644 spring-integration-twitter/src/main/java/org/springframework/integration/twitter/core/TwitterOperationException.java create mode 100644 spring-integration-twitter/src/main/java/org/springframework/integration/twitter/core/TwitterOperations.java delete mode 100644 spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/OAuthTwitterFactoryBean.java delete mode 100644 spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TwitterConnectionParserTests-context.xml delete mode 100644 spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TwitterConnectionParserTests.java create mode 100644 spring-integration-twitter/src/test/java/org/springframework/integration/twitter/core/Twitter4jTemplateTests.java diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/core/Twitter4jTemplate.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/core/Twitter4jTemplate.java new file mode 100644 index 0000000000..e2ab5c1481 --- /dev/null +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/core/Twitter4jTemplate.java @@ -0,0 +1,151 @@ +/** + * + */ +package org.springframework.integration.twitter.core; + +import java.util.List; + +import org.springframework.util.Assert; + +import twitter4j.DirectMessage; +import twitter4j.Paging; +import twitter4j.RateLimitStatus; +import twitter4j.Status; +import twitter4j.StatusUpdate; +import twitter4j.Twitter; +import twitter4j.TwitterFactory; +import twitter4j.http.AccessToken; + +/** + * @author Oleg Zhurakousky + * @since 2.0 + * + */ +public class Twitter4jTemplate implements TwitterOperations{ + private final Twitter twitter; + + /** + * Used to construct this template to perform Twitter API calls that do not require authorization. + * (e.g., search) + */ + public Twitter4jTemplate(){ + this.twitter = new TwitterFactory().getInstance(); + } + /** + * Used to construct this template with OAuth authentication/authorization to perform Twitter API calls + * that do require authorization (e.g., send/receive DirectMessage) + * + * @param consumerKey + * @param consumerSecret + * @param accessToken + * @param accessTokenSecret + */ + public Twitter4jTemplate(String consumerKey, String consumerSecret, String accessToken, String accessTokenSecret){ + Assert.hasText(consumerKey, "'consumerKey' must be provided"); + Assert.hasText(consumerSecret, "'consumerSecret' must be provided"); + Assert.hasText(accessToken, "'accessToken' must be provided"); + Assert.hasText(accessTokenSecret, "'accessTokenSecret' must be provided"); + AccessToken at = new AccessToken(accessToken, accessTokenSecret); + this.twitter = new TwitterFactory().getOAuthAuthorizedInstance(consumerKey, consumerSecret, at); + } + + @Override + public String getProfileId() { + try { + return twitter.getScreenName(); + } + catch (Exception e) { + throw new TwitterOperationException("Failed to obtain profile id ", e); + } + } + @Override + public RateLimitStatus getRateLimitStatus() { + try { + return twitter.getRateLimitStatus(); + } + catch (Exception e) { + throw new TwitterOperationException("Failed to obtain Rate Limit status ", e); + } + } + @Override + public List getDirectMessages() { + try { + return twitter.getDirectMessages(); + } + catch (Exception e) { + throw new TwitterOperationException("Failed to receive Direct Messages ", e); + } + } + @Override + public List getDirectMessages(Paging paging) { + try { + return twitter.getDirectMessages(paging); + } + catch (Exception e) { + throw new TwitterOperationException("Failed to receive Direct Messages ", e); + } + } + @Override + public List getMentions() { + try { + return twitter.getMentions(); + } + catch (Exception e) { + throw new TwitterOperationException("Failed to receive Mention statuses ", e); + } + } + @Override + public List getMentions(Paging paging) { + try { + return twitter.getMentions(paging); + } + catch (Exception e) { + throw new TwitterOperationException("Failed to receive Mention statuses ", e); + } + } + @Override + public List getFriendsTimeline() { + try { + return twitter.getFriendsTimeline(); + } + catch (Exception e) { + throw new TwitterOperationException("Failed to receive Timeline statuses ", e); + } + } + @Override + public List getFriendsTimeline(Paging paging) { + try { + return twitter.getFriendsTimeline(paging); + } + catch (Exception e) { + throw new TwitterOperationException("Failed to receive Timeline statuses ", e); + } + } + @Override + public void sendDirectMessage(String userName, String text) { + try { + twitter.sendDirectMessage(userName, text); + } + catch (Exception e) { + throw new TwitterOperationException("Failed to send Direct Message ", e); + } + } + @Override + public void sendDirectMessage(int userId, String text) { + try { + twitter.sendDirectMessage(userId, text); + } + catch (Exception e) { + throw new TwitterOperationException("Failed to send Direct Message ", e); + } + } + @Override + public void updateStatus(StatusUpdate status) { + try { + twitter.updateStatus(status); + } + catch (Exception e) { + throw new TwitterOperationException("Failed to send Status update ", e); + } + } +} diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/core/TwitterOperationException.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/core/TwitterOperationException.java new file mode 100644 index 0000000000..8f52273598 --- /dev/null +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/core/TwitterOperationException.java @@ -0,0 +1,55 @@ +/* + * Copyright 2002-2010 the original author or authors. + * + * Licensed 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.springframework.integration.twitter.core; + +/** + * @author Oleg Zhurakousky + * @since 2.0 + * + */ +@SuppressWarnings("serial") +public class TwitterOperationException extends RuntimeException { + + /** + * + */ + public TwitterOperationException() { + super(); + } + + /** + * @param description + */ + public TwitterOperationException(String description) { + super(description); + } + + /** + * @param throwable + */ + public TwitterOperationException(Throwable throwable) { + super(throwable); + } + + /** + * @param description + * @param throwable + */ + public TwitterOperationException(String description, Throwable throwable) { + super(description, throwable); + } + +} diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/core/TwitterOperations.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/core/TwitterOperations.java new file mode 100644 index 0000000000..867564ef13 --- /dev/null +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/core/TwitterOperations.java @@ -0,0 +1,42 @@ +/** + * + */ +package org.springframework.integration.twitter.core; + +import java.util.List; + +import twitter4j.DirectMessage; +import twitter4j.Paging; +import twitter4j.RateLimitStatus; +import twitter4j.Status; +import twitter4j.StatusUpdate; + +/** + * @author Oleg Zhurakousky + * @since 2.0 + * + */ +public interface TwitterOperations { + + String getProfileId(); + + RateLimitStatus getRateLimitStatus(); + + List getDirectMessages(); + + List getDirectMessages(Paging paging); + + List getMentions(); + + List getMentions(Paging paging); + + List getFriendsTimeline(); + + List getFriendsTimeline(Paging paging); + + void sendDirectMessage(String userName, String text); + + void sendDirectMessage(int userId, String text); + + void updateStatus(StatusUpdate status); +} diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractTwitterMessageSource.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractTwitterMessageSource.java index 4f8904fa65..4ca42f08a6 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractTwitterMessageSource.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractTwitterMessageSource.java @@ -33,6 +33,7 @@ import org.springframework.integration.history.TrackableComponent; import org.springframework.integration.store.MetadataStore; import org.springframework.integration.store.SimpleMetadataStore; import org.springframework.integration.support.MessageBuilder; +import org.springframework.integration.twitter.core.TwitterOperations; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -67,7 +68,7 @@ public abstract class AbstractTwitterMessageSource extends AbstractEndpoint protected volatile long markerId = -1; - protected final Twitter twitter; + protected final TwitterOperations twitter; private final Object markerGuard = new Object(); @@ -75,7 +76,7 @@ public abstract class AbstractTwitterMessageSource extends AbstractEndpoint private final HistoryWritingMessagePostProcessor historyWritingPostProcessor = new HistoryWritingMessagePostProcessor(); - public AbstractTwitterMessageSource(Twitter twitter){ + public AbstractTwitterMessageSource(TwitterOperations twitter){ this.twitter = twitter; } @@ -120,8 +121,8 @@ public abstract class AbstractTwitterMessageSource extends AbstractEndpoint else if (logger.isWarnEnabled()) { logger.warn(this.getClass().getSimpleName() + " has no name. MetadataStore key might not be unique."); } - String accessToken = twitter.getOAuthAccessToken().getToken(); - metadataKeyBuilder.append(accessToken); + String profileId = twitter.getProfileId(); + metadataKeyBuilder.append(profileId); this.metadataKey = metadataKeyBuilder.toString(); } diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/DirectMessageReceivingMessageSource.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/DirectMessageReceivingMessageSource.java index a245540ec6..fedcaa4b96 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/DirectMessageReceivingMessageSource.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/DirectMessageReceivingMessageSource.java @@ -19,6 +19,7 @@ import java.util.Comparator; import java.util.List; import org.springframework.integration.MessagingException; +import org.springframework.integration.twitter.core.TwitterOperations; import org.springframework.util.CollectionUtils; import twitter4j.DirectMessage; @@ -34,7 +35,7 @@ import twitter4j.Twitter; */ public class DirectMessageReceivingMessageSource extends AbstractTwitterMessageSource { - public DirectMessageReceivingMessageSource(Twitter twitter){ + public DirectMessageReceivingMessageSource(TwitterOperations twitter){ super(twitter); } diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/MentionReceivingMessageSource.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/MentionReceivingMessageSource.java index 44ae57bf5c..56c721eff5 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/MentionReceivingMessageSource.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/MentionReceivingMessageSource.java @@ -18,6 +18,7 @@ package org.springframework.integration.twitter.inbound; import java.util.List; import org.springframework.integration.MessagingException; +import org.springframework.integration.twitter.core.TwitterOperations; import twitter4j.Paging; import twitter4j.Status; @@ -31,7 +32,7 @@ import twitter4j.Twitter; */ public class MentionReceivingMessageSource extends AbstractTwitterMessageSource { - public MentionReceivingMessageSource(Twitter twitter){ + public MentionReceivingMessageSource(TwitterOperations twitter){ super(twitter); } @Override diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/RateLimitStatusTrigger.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/RateLimitStatusTrigger.java index 5abbebdcbd..33bf3d5032 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/RateLimitStatusTrigger.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/RateLimitStatusTrigger.java @@ -19,14 +19,12 @@ import java.util.Date; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.springframework.scheduling.SchedulingException; +import org.springframework.integration.twitter.core.TwitterOperations; import org.springframework.scheduling.Trigger; import org.springframework.scheduling.TriggerContext; import org.springframework.util.Assert; import twitter4j.RateLimitStatus; -import twitter4j.Twitter; -import twitter4j.TwitterException; /** * @author Oleg Zhurakousky @@ -34,9 +32,9 @@ import twitter4j.TwitterException; */ class RateLimitStatusTrigger implements Trigger { protected final Log logger = LogFactory.getLog(getClass()); - private Twitter twitter; + private TwitterOperations twitter; - public RateLimitStatusTrigger(Twitter twitter){ + public RateLimitStatusTrigger(TwitterOperations twitter){ Assert.notNull(twitter, "'twitter' must not be null"); this.twitter = twitter; } @@ -48,7 +46,7 @@ class RateLimitStatusTrigger implements Trigger { if (triggerContext.lastCompletionTime() == null){ return new Date(System.currentTimeMillis()); } - try { +// try { RateLimitStatus rateLimitStatus = twitter.getRateLimitStatus(); int secondsUntilReset = rateLimitStatus.getSecondsUntilReset(); int remainingHits = rateLimitStatus.getRemainingHits(); @@ -69,8 +67,8 @@ class RateLimitStatusTrigger implements Trigger { " remaining pull this rate period. The period ends in " + secondsUntilReset); return new Date(System.currentTimeMillis() + msUntilWeCanPullAgain); - } catch (TwitterException e) { - throw new SchedulingException("Failed to schedule the next Twitter update", e); - } +// } catch (TwitterException e) { +// throw new SchedulingException("Failed to schedule the next Twitter update", e); +// } } } diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/TimelineUpdateReceivingMessageSource.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/TimelineUpdateReceivingMessageSource.java index ef63cae268..e9e865ab21 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/TimelineUpdateReceivingMessageSource.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/TimelineUpdateReceivingMessageSource.java @@ -16,6 +16,7 @@ package org.springframework.integration.twitter.inbound; import org.springframework.integration.MessagingException; +import org.springframework.integration.twitter.core.TwitterOperations; import twitter4j.Paging; import twitter4j.Status; @@ -32,7 +33,7 @@ import twitter4j.Twitter; */ public class TimelineUpdateReceivingMessageSource extends AbstractTwitterMessageSource { - public TimelineUpdateReceivingMessageSource(Twitter twitter){ + public TimelineUpdateReceivingMessageSource(TwitterOperations twitter){ super(twitter); } @Override diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/OAuthTwitterFactoryBean.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/OAuthTwitterFactoryBean.java deleted file mode 100644 index 4cf1c5e748..0000000000 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/oauth/OAuthTwitterFactoryBean.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2002-2010 the original author or authors. - * - * Licensed 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.springframework.integration.twitter.oauth; - -import org.springframework.beans.factory.FactoryBean; -import org.springframework.beans.factory.InitializingBean; -import org.springframework.util.Assert; - -import twitter4j.Twitter; -import twitter4j.TwitterFactory; -import twitter4j.http.AccessToken; - -/** - * Will create an OAuth-Authorized instance of Twitter object. - * - * @author Oleg Zhurakousky - * @since 2.0 - */ -public class OAuthTwitterFactoryBean implements FactoryBean, InitializingBean { - private final String consumerKey; - private final String consumerSecret; - private final AccessToken accessToken; - - private volatile Twitter twitter; - - public OAuthTwitterFactoryBean(String consumerKey, String consumerSecret, AccessToken accessToken){ - Assert.hasText(consumerKey, "'consumerKey' must be provided"); - Assert.hasText(consumerSecret, "'consumerSecret' must be provided"); - Assert.notNull(accessToken, "'accessToken' must be provided"); - this.consumerKey = consumerKey; - this.consumerSecret = consumerSecret; - this.accessToken = accessToken; - } - @Override - public Twitter getObject() throws Exception { - Assert.notNull(this.twitter, "OAuthTwitterFactoryBean must be initialized. Invoke afterPropertiesSet() method"); - return twitter; - } - - @Override - public Class getObjectType() { - return Twitter.class; - } - - @Override - public boolean isSingleton() { - return true; - } - - @Override - public void afterPropertiesSet() throws Exception { - this.twitter = new TwitterFactory().getOAuthAuthorizedInstance(consumerKey, consumerSecret, accessToken); - } - -} diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/outbound/AbstractOutboundTwitterEndpointSupport.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/outbound/AbstractOutboundTwitterEndpointSupport.java index 2193fb0612..cbb5ae17b1 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/outbound/AbstractOutboundTwitterEndpointSupport.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/outbound/AbstractOutboundTwitterEndpointSupport.java @@ -16,6 +16,7 @@ package org.springframework.integration.twitter.outbound; import org.springframework.integration.handler.AbstractMessageHandler; +import org.springframework.integration.twitter.core.TwitterOperations; import org.springframework.util.Assert; import twitter4j.Twitter; @@ -28,23 +29,11 @@ import twitter4j.Twitter; * @since 2.0 */ public abstract class AbstractOutboundTwitterEndpointSupport extends AbstractMessageHandler { - //protected volatile OAuthConfiguration configuration; - protected final Twitter twitter; + protected final TwitterOperations twitter; protected final OutboundStatusUpdateMessageMapper supportStatusUpdate = new OutboundStatusUpdateMessageMapper(); - public AbstractOutboundTwitterEndpointSupport(Twitter twitter){ + public AbstractOutboundTwitterEndpointSupport(TwitterOperations twitter){ Assert.notNull(twitter, "'twitter' must not be null"); this.twitter = twitter; } -// public void setConfiguration(OAuthConfiguration configuration) { -// this.configuration = configuration; -// } - -// @Override -// protected void onInit() throws Exception { -// Assert.notNull(this.configuration, "'configuration' can't be null"); -// this.twitter = this.configuration.getTwitter(); -// Assert.notNull(this.twitter, "'twitter' can't be null"); -// } - } diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/outbound/DirectMessageSendingMessageHandler.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/outbound/DirectMessageSendingMessageHandler.java index 3832523ff7..17364965ec 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/outbound/DirectMessageSendingMessageHandler.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/outbound/DirectMessageSendingMessageHandler.java @@ -17,13 +17,10 @@ package org.springframework.integration.twitter.outbound; import org.springframework.integration.Message; -import org.springframework.integration.MessageHandlingException; import org.springframework.integration.twitter.core.TwitterHeaders; +import org.springframework.integration.twitter.core.TwitterOperations; import org.springframework.util.Assert; -import twitter4j.Twitter; -import twitter4j.TwitterException; - /** * Simple adapter to support sending outbound direct messages ("DM"s) using twitter * @@ -33,7 +30,7 @@ import twitter4j.TwitterException; */ public class DirectMessageSendingMessageHandler extends AbstractOutboundTwitterEndpointSupport { - public DirectMessageSendingMessageHandler(Twitter twitter){ + public DirectMessageSendingMessageHandler(TwitterOperations twitter){ super(twitter); } @@ -42,7 +39,7 @@ public class DirectMessageSendingMessageHandler extends AbstractOutboundTwitterE if (this.twitter == null) { this.afterPropertiesSet(); } - try { +// try { Assert.isInstanceOf(String.class, message.getPayload(), "Only payload of type String is supported. If your payload " + "is not of type String consider adding a transformer to the message flow in front of this adapter."); Assert.isTrue(message.getHeaders().containsKey(TwitterHeaders.DM_TARGET_USER_ID), @@ -58,10 +55,10 @@ public class DirectMessageSendingMessageHandler extends AbstractOutboundTwitterE else if (toUser instanceof String) { this.twitter.sendDirectMessage((String) toUser, payload); } - } - catch (TwitterException e) { - throw new MessageHandlingException(message, e); - } +// } +// catch (TwitterException e) { +// throw new MessageHandlingException(message, e); +// } } } diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/outbound/TimelineUpdateSendingMessageHandler.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/outbound/TimelineUpdateSendingMessageHandler.java index a8813f035c..9a1f25c3b3 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/outbound/TimelineUpdateSendingMessageHandler.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/outbound/TimelineUpdateSendingMessageHandler.java @@ -16,6 +16,7 @@ package org.springframework.integration.twitter.outbound; import org.springframework.integration.Message; +import org.springframework.integration.twitter.core.TwitterOperations; import org.springframework.util.Assert; import twitter4j.StatusUpdate; @@ -30,7 +31,7 @@ import twitter4j.Twitter; */ public class TimelineUpdateSendingMessageHandler extends AbstractOutboundTwitterEndpointSupport { - public TimelineUpdateSendingMessageHandler(Twitter twitter){ + public TimelineUpdateSendingMessageHandler(TwitterOperations twitter){ super(twitter); } diff --git a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestReceivingMessageSourceParser-context.xml b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestReceivingMessageSourceParser-context.xml index 57bdc3ade0..4392700bc9 100644 --- a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestReceivingMessageSourceParser-context.xml +++ b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestReceivingMessageSourceParser-context.xml @@ -17,11 +17,7 @@ http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-3.0.xsd http://www.springframework.org/schema/integration/twitter http://www.springframework.org/schema/integration/twitter/spring-integration-twitter.xsd"> - + diff --git a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestReceivingMessageSourceParserTests.java b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestReceivingMessageSourceParserTests.java index 69d34522df..687c11d210 100644 --- a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestReceivingMessageSourceParserTests.java +++ b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestReceivingMessageSourceParserTests.java @@ -16,12 +16,17 @@ package org.springframework.integration.twitter.config; import static junit.framework.Assert.assertFalse; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import org.junit.Test; +import org.springframework.beans.factory.FactoryBean; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.endpoint.SourcePollingChannelAdapter; import org.springframework.integration.test.util.TestUtils; +import org.springframework.integration.twitter.core.Twitter4jTemplate; +import org.springframework.integration.twitter.core.TwitterOperations; import org.springframework.integration.twitter.inbound.AbstractTwitterMessageSource; /** @@ -45,4 +50,25 @@ public class TestReceivingMessageSourceParserTests { ms = (AbstractTwitterMessageSource) TestUtils.getPropertyValue(spca, "source"); assertFalse(ms.isAutoStartup()); } + + public static class TwitterTemplateFactoryBean implements FactoryBean{ + + @Override + public TwitterOperations getObject() throws Exception { + TwitterOperations oper = mock(TwitterOperations.class); + when(oper.getProfileId()).thenReturn("kermit"); + return oper; + } + + @Override + public Class getObjectType() { + return TwitterOperations.class; + } + + @Override + public boolean isSingleton() { + return true; + } + + } } diff --git a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestSendingMessageHandlerParser-context.xml b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestSendingMessageHandlerParser-context.xml index 044982aea1..54ba5ac776 100644 --- a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestSendingMessageHandlerParser-context.xml +++ b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestSendingMessageHandlerParser-context.xml @@ -18,11 +18,7 @@ http://www.springframework.org/schema/integration/twitter http://www.springframework.org/schema/integration/twitter/spring-integration-twitter-2.0.xsd"> - + diff --git a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TwitterConnectionParserTests-context.xml b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TwitterConnectionParserTests-context.xml deleted file mode 100644 index 20ef2561b1..0000000000 --- a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TwitterConnectionParserTests-context.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - diff --git a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TwitterConnectionParserTests.java b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TwitterConnectionParserTests.java deleted file mode 100644 index 0cbf5b1900..0000000000 --- a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TwitterConnectionParserTests.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2002-2010 the original author or authors. - * - * Licensed 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.springframework.integration.twitter.config; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.assertTrue; - -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; -import org.springframework.integration.test.util.TestUtils; -import org.springframework.integration.twitter.oauth.OAuthTwitterFactoryBean; - -import twitter4j.Twitter; -import twitter4j.http.AccessToken; - -/** - * @author Oleg Zhurakousky - * @since 2.0 - * - */ -public class TwitterConnectionParserTests { - - @Test - public void testOAuthTwitterFactoryBean(){ - ApplicationContext ac = new ClassPathXmlApplicationContext("TwitterConnectionParserTests-context.xml", this.getClass()); - OAuthTwitterFactoryBean twitterFb = ac.getBean("&twitter", OAuthTwitterFactoryBean.class); - assertEquals("consumerKey", TestUtils.getPropertyValue(twitterFb, "consumerKey")); - assertEquals("consumerSecret", TestUtils.getPropertyValue(twitterFb, "consumerSecret")); - AccessToken accessToken = (AccessToken) TestUtils.getPropertyValue(twitterFb, "accessToken"); - assertEquals("accessToken", accessToken.getToken()); - assertEquals("accessTokenSecret", accessToken.getTokenSecret()); - Twitter twitter = ac.getBean("twitter", Twitter.class); - assertTrue(twitter.isOAuthEnabled()); - } -} diff --git a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/core/Twitter4jTemplateTests.java b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/core/Twitter4jTemplateTests.java new file mode 100644 index 0000000000..961d552dc2 --- /dev/null +++ b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/core/Twitter4jTemplateTests.java @@ -0,0 +1,30 @@ +/* + * Copyright 2002-2010 the original author or authors. + * + * Licensed 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.springframework.integration.twitter.core; + +import org.junit.Test; + +/** + * @author Oleg Zhurakousky + * + */ +public class Twitter4jTemplateTests { + + @Test + public void testProfileId(){ + + } +} diff --git a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/inbound/DirectMessageReceivingMessageSourceTests.java b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/inbound/DirectMessageReceivingMessageSourceTests.java index 12c0acd924..c6a2043cc0 100644 --- a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/inbound/DirectMessageReceivingMessageSourceTests.java +++ b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/inbound/DirectMessageReceivingMessageSourceTests.java @@ -23,13 +23,13 @@ import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Date; -import java.util.List; import java.util.Queue; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.springframework.integration.test.util.TestUtils; +import org.springframework.integration.twitter.core.TwitterOperations; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.util.CollectionUtils; @@ -37,8 +37,6 @@ import twitter4j.DirectMessage; import twitter4j.Paging; import twitter4j.RateLimitStatus; import twitter4j.ResponseList; -import twitter4j.Twitter; -import twitter4j.http.AccessToken; /** * @author Oleg Zhurakousky @@ -49,12 +47,12 @@ public class DirectMessageReceivingMessageSourceTests { private DirectMessage secondMessage; - private Twitter twitter = mock(Twitter.class); + private TwitterOperations twitter; @Before public void prepare() throws Exception{ - twitter = mock(Twitter.class); + twitter = mock(TwitterOperations.class); firstMessage = mock(DirectMessage.class); when(firstMessage.getCreatedAt()).thenReturn(new Date(5555555555L)); when(firstMessage.getId()).thenReturn(200); @@ -63,7 +61,7 @@ public class DirectMessageReceivingMessageSourceTests { when(secondMessage.getId()).thenReturn(2000); - when(twitter.getOAuthAccessToken()).thenReturn(new AccessToken("token123", "tokenSecret123")); + when(twitter.getProfileId()).thenReturn("kermit"); } @@ -76,7 +74,7 @@ public class DirectMessageReceivingMessageSourceTests { source.setBeanName("twitterEndpoint"); source.afterPropertiesSet(); source.start(); - assertEquals("twitter:inbound-dm-channel-adapter.twitterEndpoint.token123", TestUtils.getPropertyValue(source, "metadataKey")); + assertEquals("twitter:inbound-dm-channel-adapter.twitterEndpoint.kermit", TestUtils.getPropertyValue(source, "metadataKey")); assertTrue(source.isRunning()); } diff --git a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/inbound/RateLimitStatusTriggerTests.java b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/inbound/RateLimitStatusTriggerTests.java index 6b9506c9e9..4eeeace434 100644 --- a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/inbound/RateLimitStatusTriggerTests.java +++ b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/inbound/RateLimitStatusTriggerTests.java @@ -22,10 +22,10 @@ import static org.mockito.Mockito.when; import java.util.Date; import org.junit.Test; +import org.springframework.integration.twitter.core.TwitterOperations; import org.springframework.scheduling.TriggerContext; import twitter4j.RateLimitStatus; -import twitter4j.Twitter; /** * @author Oleg Zhurakousky @@ -35,7 +35,7 @@ public class RateLimitStatusTriggerTests { @Test public void testTriggerImediateAndSubsequentExecutionTime() throws Exception{ - Twitter twitter = mock(Twitter.class); + TwitterOperations twitter = mock(TwitterOperations.class); RateLimitStatusTrigger trigger = new RateLimitStatusTrigger(twitter); TriggerContext context = mock(TriggerContext.class); Date currentDate = new Date(System.currentTimeMillis()); diff --git a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/outbound/OutboundDirectMessageMessageHandlerTests.java b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/outbound/OutboundDirectMessageMessageHandlerTests.java index 34353bb45d..459a96e6f3 100644 --- a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/outbound/OutboundDirectMessageMessageHandlerTests.java +++ b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/outbound/OutboundDirectMessageMessageHandlerTests.java @@ -23,16 +23,16 @@ import static org.mockito.Mockito.verify; import org.junit.Test; import org.springframework.integration.support.MessageBuilder; import org.springframework.integration.twitter.core.TwitterHeaders; +import org.springframework.integration.twitter.core.TwitterOperations; import twitter4j.GeoLocation; -import twitter4j.Twitter; /** * @author Oleg Zhurakousky */ public class OutboundDirectMessageMessageHandlerTests { - private Twitter twitter = mock(Twitter.class); + private TwitterOperations twitter = mock(TwitterOperations.class); @Test public void validateSendDirectMessage() throws Exception{