From bef427e6b3c5dacbfa48ef7a8435917a91c9e565 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Wed, 27 Oct 2010 17:55:17 -0400 Subject: [PATCH] INT-1471, Twitter polishing after making it Polling consumer --- .../twitter/config/UpdateEndpointParser.java | 4 +- ...AbstractInboundTwitterEndpointSupport.java | 43 ++++++++--------- ...ctInboundTwitterStatusEndpointSupport.java | 47 ------------------- .../inbound/InboundDirectMessageEndpoint.java | 29 ++++-------- .../inbound/InboundMentionEndpoint.java | 4 +- .../InboundTimelineUpdateEndpoint.java | 3 +- .../TestReceivingUsingNamespace-context.xml | 20 ++++---- .../config/TestReceivingUsingNamespace.java | 3 +- 8 files changed, 47 insertions(+), 106 deletions(-) delete mode 100644 spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractInboundTwitterStatusEndpointSupport.java diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/config/UpdateEndpointParser.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/config/UpdateEndpointParser.java index 1db2486c1c..9cdc63b5c7 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/config/UpdateEndpointParser.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/config/UpdateEndpointParser.java @@ -18,6 +18,7 @@ package org.springframework.integration.twitter.config; import static org.springframework.integration.twitter.config.TwitterNamespaceHandler.BASE_PACKAGE; import org.springframework.beans.BeanMetadataElement; +import org.springframework.beans.factory.config.RuntimeBeanReference; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.xml.ParserContext; @@ -51,8 +52,7 @@ public class UpdateEndpointParser extends AbstractPollingInboundChannelAdapterPa } BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(className); IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "twitter-connection", "configuration"); - IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "id", "persistentIdentifier"); String name = BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(), parserContext.getRegistry()); - return builder.getBeanDefinition(); + return new RuntimeBeanReference(name); } } diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractInboundTwitterEndpointSupport.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractInboundTwitterEndpointSupport.java index ab810e1f47..33f64533de 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractInboundTwitterEndpointSupport.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractInboundTwitterEndpointSupport.java @@ -16,18 +16,19 @@ package org.springframework.integration.twitter.inbound; -import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.List; import java.util.Queue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ScheduledFuture; import org.springframework.beans.factory.BeanFactory; -import org.springframework.context.Lifecycle; +import org.springframework.context.SmartLifecycle; import org.springframework.integration.Message; import org.springframework.integration.context.IntegrationContextUtils; -import org.springframework.integration.context.IntegrationObjectSupport; import org.springframework.integration.core.MessageSource; +import org.springframework.integration.endpoint.AbstractEndpoint; import org.springframework.integration.history.HistoryWritingMessagePostProcessor; import org.springframework.integration.history.TrackableComponent; import org.springframework.integration.store.MetadataStore; @@ -54,8 +55,8 @@ import twitter4j.Twitter; * @since 2.0 */ @SuppressWarnings("rawtypes") -public abstract class AbstractInboundTwitterEndpointSupport extends IntegrationObjectSupport - implements MessageSource, Lifecycle, TrackableComponent { +public abstract class AbstractInboundTwitterEndpointSupport extends AbstractEndpoint + implements MessageSource, SmartLifecycle, TrackableComponent { private volatile MetadataStore metadataStore; @@ -72,8 +73,6 @@ public abstract class AbstractInboundTwitterEndpointSupport extends Integrati protected Twitter twitter; private final Object markerGuard = new Object(); - - private volatile boolean isRunning; private volatile ScheduledFuture twitterUpdatePollingTask; @@ -120,38 +119,35 @@ public abstract class AbstractInboundTwitterEndpointSupport extends Integrati + "." + this.configuration.getConsumerKey(); } + @SuppressWarnings("unchecked") protected void forwardAll(List tResponses) { - List stats = new ArrayList(); - for (T t : tResponses) { - stats.add(t); - } - for (T twitterResponse : this.sort(stats)) { + Collections.sort(tResponses, this.getComparator()); + for (T twitterResponse : tResponses) { forward(twitterResponse); } } - abstract protected List sort(List rl); - abstract Runnable getApiCallback(); + + protected Comparator getComparator() { + return new Comparator() { + public int compare(Status status, Status status1) { + return status.getCreatedAt().compareTo(status1.getCreatedAt()); + } + }; + } @Override - public void start() { + protected void doStart(){ historyWritingPostProcessor.setTrackableComponent(this); RateLimitStatusTrigger trigger = new RateLimitStatusTrigger(this.twitter); Runnable apiCallback = this.getApiCallback(); twitterUpdatePollingTask = this.getTaskScheduler().schedule(apiCallback, trigger); - this.isRunning = true; } @Override - public void stop() { + protected void doStop(){ twitterUpdatePollingTask.cancel(true); - this.isRunning = false; - } - - @Override - public boolean isRunning() { - return this.isRunning; } @Override @@ -192,5 +188,4 @@ public abstract class AbstractInboundTwitterEndpointSupport extends Integrati protected void markLastStatusId(long statusId) { this.metadataStore.put(this.metadataKey, String.valueOf(statusId)); } - } diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractInboundTwitterStatusEndpointSupport.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractInboundTwitterStatusEndpointSupport.java deleted file mode 100644 index f26d4f711d..0000000000 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/AbstractInboundTwitterStatusEndpointSupport.java +++ /dev/null @@ -1,47 +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.inbound; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import twitter4j.Status; - -/** - * Simple base class for the reply and timeline cases (as well as any other {@link twitter4j.Status} implementations of - * {@link twitter4j.TwitterResponse}. - * - * @author Josh Long - * @author Oleg ZHurakousky - */ -abstract public class AbstractInboundTwitterStatusEndpointSupport extends AbstractInboundTwitterEndpointSupport { - - private Comparator statusComparator = new Comparator() { - public int compare(Status status, Status status1) { - return status.getCreatedAt().compareTo(status1.getCreatedAt()); - } - }; - - @Override - protected List sort(List rl) { - List statusArrayList = new ArrayList(); - statusArrayList.addAll(rl); - Collections.sort(statusArrayList, statusComparator); - - return statusArrayList; - } -} diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/InboundDirectMessageEndpoint.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/InboundDirectMessageEndpoint.java index dc0130768d..fcf2ee10dc 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/InboundDirectMessageEndpoint.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/InboundDirectMessageEndpoint.java @@ -15,8 +15,6 @@ */ package org.springframework.integration.twitter.inbound; -import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -34,24 +32,6 @@ import twitter4j.Paging; */ public class InboundDirectMessageEndpoint extends AbstractInboundTwitterEndpointSupport { - private Comparator dmComparator = new Comparator() { - public int compare(DirectMessage directMessage, DirectMessage directMessage1) { - return directMessage.getCreatedAt().compareTo(directMessage1.getCreatedAt()); - } - }; - - @Override - protected List sort(List rl) { - - List dms = new ArrayList(); - - dms.addAll(rl); - - Collections.sort(dms, dmComparator); - - return dms; - } - @Override public String getComponentType() { return "twitter:inbound-dm-channel-adapter"; @@ -84,4 +64,13 @@ public class InboundDirectMessageEndpoint extends AbstractInboundTwitterEndpoint }; return apiCallback; } + + @SuppressWarnings("rawtypes") + protected Comparator getComparator() { + return new Comparator() { + public int compare(DirectMessage directMessage, DirectMessage directMessage1) { + return directMessage.getCreatedAt().compareTo(directMessage1.getCreatedAt()); + } + }; + } } diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/InboundMentionEndpoint.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/InboundMentionEndpoint.java index 10496eaac5..627c145baa 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/InboundMentionEndpoint.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/InboundMentionEndpoint.java @@ -20,6 +20,7 @@ import java.util.List; import org.springframework.integration.MessagingException; import twitter4j.Paging; +import twitter4j.Status; /** * Handles forwarding all new {@link twitter4j.Status} that are 'replies' or 'mentions' to some other tweet. @@ -27,7 +28,7 @@ import twitter4j.Paging; * @author Josh Long * @author Oleg Zhurakousky */ -public class InboundMentionEndpoint extends AbstractInboundTwitterStatusEndpointSupport { +public class InboundMentionEndpoint extends AbstractInboundTwitterEndpointSupport { @Override public String getComponentType() { @@ -57,5 +58,4 @@ public class InboundMentionEndpoint extends AbstractInboundTwitterStatusEndpoint }; return apiCallback; } - } diff --git a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/InboundTimelineUpdateEndpoint.java b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/InboundTimelineUpdateEndpoint.java index 9d232f5b82..7f3c52b6e9 100644 --- a/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/InboundTimelineUpdateEndpoint.java +++ b/spring-integration-twitter/src/main/java/org/springframework/integration/twitter/inbound/InboundTimelineUpdateEndpoint.java @@ -18,6 +18,7 @@ package org.springframework.integration.twitter.inbound; import org.springframework.integration.MessagingException; import twitter4j.Paging; +import twitter4j.Status; /** @@ -28,7 +29,7 @@ import twitter4j.Paging; * @author Oleg Zhurakousky * @since 2.0 */ -public class InboundTimelineUpdateEndpoint extends AbstractInboundTwitterStatusEndpointSupport { +public class InboundTimelineUpdateEndpoint extends AbstractInboundTwitterEndpointSupport { @Override public String getComponentType() { diff --git a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestReceivingUsingNamespace-context.xml b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestReceivingUsingNamespace-context.xml index f66c88bd13..a17c20ebd5 100644 --- a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestReceivingUsingNamespace-context.xml +++ b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestReceivingUsingNamespace-context.xml @@ -33,16 +33,20 @@ consumer-secret="${twitter.oauth.consumerSecret}"/> - - - - + - - + + - - + + + + + + + + + diff --git a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestReceivingUsingNamespace.java b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestReceivingUsingNamespace.java index 39453be9fb..b655cebdb1 100644 --- a/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestReceivingUsingNamespace.java +++ b/spring-integration-twitter/src/test/java/org/springframework/integration/twitter/config/TestReceivingUsingNamespace.java @@ -18,7 +18,6 @@ package org.springframework.integration.twitter.config; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import org.junit.Ignore; import org.junit.Test; import org.springframework.context.support.ClassPathXmlApplicationContext; @@ -29,7 +28,7 @@ import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestReceivingUsingNamespace { @Test - @Ignore +// @Ignore /* * In order to run this test you need to provide values to the twitter.properties file */