Re: svn commit: r723844 - in /activemq/camel/trunk: camel-core/src/main/java/org/a
|
|||||
![]()
Re: svn commit: r723844 - in /activemq/camel/trunk: camel-core/src/main/java/org/a
|
Hi Jon
You could consider using generic for your comparator PublishedDateComparator Comparator<SyncFeed> so the compare method uses SyncFeed as parameters BTW: This sort feature does it also apply for the camel-atom component? If so is the wiki updated? /Claus Ibsen Apache Camel Committer Blog: http://davsclaus.blogspot.com/ On Fri, Dec 5, 2008 at 9:10 PM, <[hidden email]> wrote: > Author: janstey > Date: Fri Dec 5 12:10:50 2008 > New Revision: 723844 > > URL: http://svn.apache.org/viewvc?rev=723844&view=rev > Log: > CAMEL-1101 - Add option to sort entries by published date. > > Added: > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/PublishedDateComparator.java (with props) > activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortDefaultsTest.java (with props) > activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortTest.java (with props) > Modified: > activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java > activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/AggregatorType.java > activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/AggregationCollection.java > activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEndpoint.java > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEntryPollingConsumer.java > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/UpdatedDateFilter.java > activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerTest.java > > Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java > URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java?rev=723844&r1=723843&r2=723844&view=diff > ============================================================================== > --- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java (original) > +++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java Fri Dec 5 12:10:50 2008 > @@ -270,6 +270,21 @@ > } > > /** > + * Validates that the assertions fail on this endpoint > + > + * @param timeoutForEmptyEndpoints the timeout in milliseconds that we > + * should wait for the test to be true > + */ > + public void assertIsNotSatisfied(long timeoutForEmptyEndpoints) throws InterruptedException { > + try { > + assertIsSatisfied(timeoutForEmptyEndpoints); > + fail("Expected assertion failure!"); > + } catch (AssertionError e) { > + LOG.info("Caught expected failure: " + e); > + } > + } > + > + /** > * Specifies the expected number of message exchanges that should be > * received by this endpoint > * > > Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/AggregatorType.java > URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/AggregatorType.java?rev=723844&r1=723843&r2=723844&view=diff > ============================================================================== > --- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/AggregatorType.java (original) > +++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/AggregatorType.java Fri Dec 5 12:10:50 2008 > @@ -289,7 +289,7 @@ > //------------------------------------------------------------------------- > > /** > - * Sets the in batch size for number of exchanges recieved > + * Sets the in batch size for number of exchanges received > * > * @param batchSize the batch size > * @return builder > > Modified: activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/AggregationCollection.java > URL: http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/AggregationCollection.java?rev=723844&r1=723843&r2=723844&view=diff > ============================================================================== > --- activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/AggregationCollection.java (original) > +++ activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/AggregationCollection.java Fri Dec 5 12:10:50 2008 > @@ -69,7 +69,7 @@ > int size(); > > /** > - * Clears this colleciton > + * Clears this collection > */ > void clear(); > > > Modified: activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java > URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java?rev=723844&r1=723843&r2=723844&view=diff > ============================================================================== > --- activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java (original) > +++ activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java Fri Dec 5 12:10:50 2008 > @@ -35,6 +35,7 @@ > protected Date lastUpdate; > protected boolean filter = true; > private boolean feedHeader = true; > + private boolean sortEntries = false; > > public FeedEndpoint(String endpointUri, FeedComponent component, String feedUri) { > super(endpointUri, component); > @@ -163,6 +164,17 @@ > return feedHeader; > } > > + /** > + * Sets whether to sort entries by published date. Only works when splitEntries = true. > + */ > + public void setSortEntries(boolean sortEntries) { > + this.sortEntries = sortEntries; > + } > + > + public boolean isSortEntries() { > + return sortEntries ; > + } > + > // Implementation methods > //------------------------------------------------------------------------- > > > Added: activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/PublishedDateComparator.java > URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/PublishedDateComparator.java?rev=723844&view=auto > ============================================================================== > --- activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/PublishedDateComparator.java (added) > +++ activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/PublishedDateComparator.java Fri Dec 5 12:10:50 2008 > @@ -0,0 +1,32 @@ > +/** > + * 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.rss; > + > +import com.sun.syndication.feed.synd.SyndEntry; > + > +import java.util.Comparator; > + > +public class PublishedDateComparator implements Comparator { > + > + public int compare(Object o1, Object o2) { > + SyndEntry s1 = (SyndEntry) o1; > + SyndEntry s2 = (SyndEntry) o2; > + return s2.getPublishedDate().compareTo(s1.getPublishedDate()); > + } > + > +} > \ No newline at end of file > > Propchange: activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/PublishedDateComparator.java > ------------------------------------------------------------------------------ > svn:eol-style = native > > Modified: activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEndpoint.java > URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEndpoint.java?rev=723844&r1=723843&r2=723844&view=diff > ============================================================================== > --- activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEndpoint.java (original) > +++ activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEndpoint.java Fri Dec 5 12:10:50 2008 > @@ -44,7 +44,7 @@ > */ > public static final String HEADER_RSS_FEED = "org.apache.camel.component.rss.feed"; > protected static final transient Log LOG = LogFactory.getLog(RssEndpoint.class); > - > + > public RssEndpoint(String endpointUri, FeedComponent component, String feedUri) { > super(endpointUri, component, feedUri); > } > > Modified: activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEntryPollingConsumer.java > URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEntryPollingConsumer.java?rev=723844&r1=723843&r2=723844&view=diff > ============================================================================== > --- activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEntryPollingConsumer.java (original) > +++ activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEntryPollingConsumer.java Fri Dec 5 12:10:50 2008 > @@ -16,12 +16,15 @@ > */ > package org.apache.camel.component.rss; > > +import java.util.ArrayList; > +import java.util.Collections; > import java.util.Date; > > import com.sun.syndication.feed.synd.SyndFeed; > > import org.apache.camel.Processor; > import org.apache.camel.component.feed.EntryFilter; > +import org.apache.camel.component.feed.FeedEndpoint; > import org.apache.camel.component.feed.FeedEntryPollingConsumer; > > > @@ -39,10 +42,17 @@ > protected void populateList(Object feed) throws Exception { > if (list == null) { > list = ((SyndFeed)feed).getEntries(); > + if (endpoint.isSortEntries()) { > + sortEntries(); > + } > entryIndex = list.size() - 1; > } > } > > + protected void sortEntries() { > + Collections.sort(list, new PublishedDateComparator()); > + } > + > @Override > protected Object createFeed() throws Exception { > return RssUtils.createFeed(endpoint.getFeedUri()); > @@ -55,5 +65,5 @@ > > protected EntryFilter createEntryFilter(Date lastUpdate) { > return new UpdatedDateFilter(lastUpdate); > - } > + } > } > > Modified: activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/UpdatedDateFilter.java > URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/UpdatedDateFilter.java?rev=723844&r1=723843&r2=723844&view=diff > ============================================================================== > --- activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/UpdatedDateFilter.java (original) > +++ activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/UpdatedDateFilter.java Fri Dec 5 12:10:50 2008 > @@ -42,6 +42,9 @@ > > public boolean isValidEntry(FeedEndpoint endpoint, Object feed, Object entry) { > Date updated = ((SyndEntry)entry).getUpdatedDate(); > + if (updated == null) { // never been updated so get published date > + updated = ((SyndEntry)entry).getPublishedDate(); > + } > if (updated == null) { > if (LOG.isDebugEnabled()) { > LOG.debug("No updated time for entry so assuming its valid: entry=[" + entry + "]"); > @@ -49,7 +52,7 @@ > return true; > } > if (lastUpdate != null) { > - if (lastUpdate.after(updated)) { > + if (lastUpdate.after(updated) || lastUpdate.equals(updated)) { > if (LOG.isDebugEnabled()) { > LOG.debug("Entry is older than lastupdate=[" + lastUpdate > + "], no valid entry=[" + entry + "]"); > @@ -57,7 +60,7 @@ > return false; > } > } > - lastUpdate = updated; > + lastUpdate = updated; > return true; > } > > > Modified: activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerTest.java > URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerTest.java?rev=723844&r1=723843&r2=723844&view=diff > ============================================================================== > --- activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerTest.java (original) > +++ activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerTest.java Fri Dec 5 12:10:50 2008 > @@ -31,7 +31,7 @@ > protected RouteBuilder createRouteBuilder() throws Exception { > return new RouteBuilder() { > public void configure() throws Exception { > - from("rss:file:src/test/data/rss20.xml?splitEntries=true&consumer.delay=100").to("mock:result"); > + from("rss:file:src/test/data/rss20.xml?splitEntries=true&sortEntries=true&consumer.delay=100").to("mock:result"); > } > }; > } > > Added: activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortDefaultsTest.java > URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortDefaultsTest.java?rev=723844&view=auto > ============================================================================== > --- activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortDefaultsTest.java (added) > +++ activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortDefaultsTest.java Fri Dec 5 12:10:50 2008 > @@ -0,0 +1,44 @@ > +/** > + * 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.rss; > + > +import com.sun.syndication.feed.synd.SyndEntry; > +import com.sun.syndication.feed.synd.SyndFeed; > + > +import java.util.Date; > + > +import javax.naming.Context; > + > +import org.apache.camel.Body; > +import org.apache.camel.ContextTestSupport; > +import org.apache.camel.builder.ExpressionBuilder; > +import org.apache.camel.builder.RouteBuilder; > +import org.apache.camel.component.mock.MockEndpoint; > +import org.apache.camel.util.jndi.JndiContext; > + > +public class RssEntrySortDefaultsTest extends RssEntrySortTest { > + protected RouteBuilder createRouteBuilder() throws Exception { > + return new RouteBuilder() { > + public void configure() throws Exception { > + from("rss:file:src/test/data/rss20.xml?splitEntries=true&sortEntries=true&consumer.delay=50").to("mock:sorted"); > + > + // should NOT sort by default > + from("rss:file:src/test/data/rss20.xml?splitEntries=true&consumer.delay=50").to("mock:unsorted"); > + } > + }; > + } > +} > > Propchange: activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortDefaultsTest.java > ------------------------------------------------------------------------------ > svn:eol-style = native > > Added: activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortTest.java > URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortTest.java?rev=723844&view=auto > ============================================================================== > --- activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortTest.java (added) > +++ activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortTest.java Fri Dec 5 12:10:50 2008 > @@ -0,0 +1,73 @@ > +/** > + * 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.rss; > + > +import com.sun.syndication.feed.synd.SyndEntry; > +import com.sun.syndication.feed.synd.SyndFeed; > + > +import java.util.Date; > + > +import javax.naming.Context; > + > +import org.apache.camel.Body; > +import org.apache.camel.ContextTestSupport; > +import org.apache.camel.builder.ExpressionBuilder; > +import org.apache.camel.builder.RouteBuilder; > +import org.apache.camel.component.mock.MockEndpoint; > +import org.apache.camel.util.jndi.JndiContext; > + > +public class RssEntrySortTest extends ContextTestSupport { > + > + public void testSortedEntries() throws Exception { > + MockEndpoint mock = getMockEndpoint("mock:sorted"); > + mock.expectsAscending(ExpressionBuilder.beanExpression("myBean", "getPubDate")); > + mock.expectedMessageCount(10); > + mock.assertIsSatisfied(); > + } > + > + public void testUnSortedEntries() throws Exception { > + MockEndpoint mock = getMockEndpoint("mock:unsorted"); > + mock.expectsAscending(ExpressionBuilder.beanExpression("myBean", "getPubDate")); > + mock.expectedMessageCount(10); > + mock.setResultWaitTime(2000L); > + mock.assertIsNotSatisfied(2000L); > + } > + > + @Override > + protected Context createJndiContext() throws Exception { > + JndiContext jndi = new JndiContext(); > + jndi.bind("myBean", new MyBean()); > + return jndi; > + } > + > + protected RouteBuilder createRouteBuilder() throws Exception { > + return new RouteBuilder() { > + public void configure() throws Exception { > + from("rss:file:src/test/data/rss20.xml?splitEntries=true&sortEntries=true&consumer.delay=50").to("mock:sorted"); > + from("rss:file:src/test/data/rss20.xml?splitEntries=true&sortEntries=false&consumer.delay=50").to("mock:unsorted"); > + } > + }; > + } > + > + public static class MyBean { > + public Date getPubDate(@Body Object body) { > + SyndFeed feed = (SyndFeed) body; > + SyndEntry syndEntry = (SyndEntry) feed.getEntries().get(0); > + return syndEntry.getPublishedDate(); > + } > + } > +} > > Propchange: activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortTest.java > ------------------------------------------------------------------------------ > svn:eol-style = native > > > |
Good idea. I'll add this as a TODO to the JIRA. As you guessed (by me adding
the option to FeedEndpoint) I plan to put this into the Atom compoenent as well... I just ran out of time yesterday to do it :) Will get to it on monday. On Sat, Dec 6, 2008 at 7:31 AM, Claus Ibsen <[hidden email]> wrote: > Hi Jon > > You could consider using generic for your comparator > PublishedDateComparator > Comparator<SyncFeed> so the compare method uses SyncFeed as parameters > > BTW: This sort feature does it also apply for the camel-atom > component? If so is the wiki updated? > > > /Claus Ibsen > Apache Camel Committer > Blog: http://davsclaus.blogspot.com/ > > > > On Fri, Dec 5, 2008 at 9:10 PM, <[hidden email]> wrote: > > Author: janstey > > Date: Fri Dec 5 12:10:50 2008 > > New Revision: 723844 > > > > URL: http://svn.apache.org/viewvc?rev=723844&view=rev > > Log: > > CAMEL-1101 - Add option to sort entries by published date. > > > > Added: > > > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/PublishedDateComparator.java > (with props) > > > activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortDefaultsTest.java > (with props) > > > activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortTest.java > (with props) > > Modified: > > > activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java > > > activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/AggregatorType.java > > > activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/AggregationCollection.java > > > activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java > > > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEndpoint.java > > > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEntryPollingConsumer.java > > > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/UpdatedDateFilter.java > > > activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerTest.java > > > > Modified: > activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java > > URL: > http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java?rev=723844&r1=723843&r2=723844&view=diff > > > ============================================================================== > > --- > activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java > (original) > > +++ > activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/component/mock/MockEndpoint.java > Fri Dec 5 12:10:50 2008 > > @@ -270,6 +270,21 @@ > > } > > > > /** > > + * Validates that the assertions fail on this endpoint > > + > > + * @param timeoutForEmptyEndpoints the timeout in milliseconds that > we > > + * should wait for the test to be true > > + */ > > + public void assertIsNotSatisfied(long timeoutForEmptyEndpoints) > throws InterruptedException { > > + try { > > + assertIsSatisfied(timeoutForEmptyEndpoints); > > + fail("Expected assertion failure!"); > > + } catch (AssertionError e) { > > + LOG.info("Caught expected failure: " + e); > > + } > > + } > > + > > + /** > > * Specifies the expected number of message exchanges that should be > > * received by this endpoint > > * > > > > Modified: > activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/AggregatorType.java > > URL: > http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/AggregatorType.java?rev=723844&r1=723843&r2=723844&view=diff > > > ============================================================================== > > --- > activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/AggregatorType.java > (original) > > +++ > activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/model/AggregatorType.java > Fri Dec 5 12:10:50 2008 > > @@ -289,7 +289,7 @@ > > > //------------------------------------------------------------------------- > > > > /** > > - * Sets the in batch size for number of exchanges recieved > > + * Sets the in batch size for number of exchanges received > > * > > * @param batchSize the batch size > > * @return builder > > > > Modified: > activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/AggregationCollection.java > > URL: > http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/AggregationCollection.java?rev=723844&r1=723843&r2=723844&view=diff > > > ============================================================================== > > --- > activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/AggregationCollection.java > (original) > > +++ > activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/aggregate/AggregationCollection.java > Fri Dec 5 12:10:50 2008 > > @@ -69,7 +69,7 @@ > > int size(); > > > > /** > > - * Clears this colleciton > > + * Clears this collection > > */ > > void clear(); > > > > > > Modified: > activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java > > URL: > http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java?rev=723844&r1=723843&r2=723844&view=diff > > > ============================================================================== > > --- > activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java > (original) > > +++ > activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java > Fri Dec 5 12:10:50 2008 > > @@ -35,6 +35,7 @@ > > protected Date lastUpdate; > > protected boolean filter = true; > > private boolean feedHeader = true; > > + private boolean sortEntries = false; > > > > public FeedEndpoint(String endpointUri, FeedComponent component, > String feedUri) { > > super(endpointUri, component); > > @@ -163,6 +164,17 @@ > > return feedHeader; > > } > > > > + /** > > + * Sets whether to sort entries by published date. Only works when > splitEntries = true. > > + */ > > + public void setSortEntries(boolean sortEntries) { > > + this.sortEntries = sortEntries; > > + } > > + > > + public boolean isSortEntries() { > > + return sortEntries ; > > + } > > + > > // Implementation methods > > > //------------------------------------------------------------------------- > > > > > > Added: > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/PublishedDateComparator.java > > URL: > http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/PublishedDateComparator.java?rev=723844&view=auto > > > ============================================================================== > > --- > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/PublishedDateComparator.java > (added) > > +++ > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/PublishedDateComparator.java > Fri Dec 5 12:10:50 2008 > > @@ -0,0 +1,32 @@ > > +/** > > + * 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.rss; > > + > > +import com.sun.syndication.feed.synd.SyndEntry; > > + > > +import java.util.Comparator; > > + > > +public class PublishedDateComparator implements Comparator { > > + > > + public int compare(Object o1, Object o2) { > > + SyndEntry s1 = (SyndEntry) o1; > > + SyndEntry s2 = (SyndEntry) o2; > > + return s2.getPublishedDate().compareTo(s1.getPublishedDate()); > > + } > > + > > +} > > \ No newline at end of file > > > > Propchange: > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/PublishedDateComparator.java > > > ------------------------------------------------------------------------------ > > svn:eol-style = native > > > > Modified: > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEndpoint.java > > URL: > http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEndpoint.java?rev=723844&r1=723843&r2=723844&view=diff > > > ============================================================================== > > --- > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEndpoint.java > (original) > > +++ > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEndpoint.java > Fri Dec 5 12:10:50 2008 > > @@ -44,7 +44,7 @@ > > */ > > public static final String HEADER_RSS_FEED = > "org.apache.camel.component.rss.feed"; > > protected static final transient Log LOG = > LogFactory.getLog(RssEndpoint.class); > > - > > + > > public RssEndpoint(String endpointUri, FeedComponent component, > String feedUri) { > > super(endpointUri, component, feedUri); > > } > > > > Modified: > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEntryPollingConsumer.java > > URL: > http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEntryPollingConsumer.java?rev=723844&r1=723843&r2=723844&view=diff > > > ============================================================================== > > --- > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEntryPollingConsumer.java > (original) > > +++ > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssEntryPollingConsumer.java > Fri Dec 5 12:10:50 2008 > > @@ -16,12 +16,15 @@ > > */ > > package org.apache.camel.component.rss; > > > > +import java.util.ArrayList; > > +import java.util.Collections; > > import java.util.Date; > > > > import com.sun.syndication.feed.synd.SyndFeed; > > > > import org.apache.camel.Processor; > > import org.apache.camel.component.feed.EntryFilter; > > +import org.apache.camel.component.feed.FeedEndpoint; > > import org.apache.camel.component.feed.FeedEntryPollingConsumer; > > > > > > @@ -39,10 +42,17 @@ > > protected void populateList(Object feed) throws Exception { > > if (list == null) { > > list = ((SyndFeed)feed).getEntries(); > > + if (endpoint.isSortEntries()) { > > + sortEntries(); > > + } > > entryIndex = list.size() - 1; > > } > > } > > > > + protected void sortEntries() { > > + Collections.sort(list, new PublishedDateComparator()); > > + } > > + > > @Override > > protected Object createFeed() throws Exception { > > return RssUtils.createFeed(endpoint.getFeedUri()); > > @@ -55,5 +65,5 @@ > > > > protected EntryFilter createEntryFilter(Date lastUpdate) { > > return new UpdatedDateFilter(lastUpdate); > > - } > > + } > > } > > > > Modified: > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/UpdatedDateFilter.java > > URL: > http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/UpdatedDateFilter.java?rev=723844&r1=723843&r2=723844&view=diff > > > ============================================================================== > > --- > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/UpdatedDateFilter.java > (original) > > +++ > activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/UpdatedDateFilter.java > Fri Dec 5 12:10:50 2008 > > @@ -42,6 +42,9 @@ > > > > public boolean isValidEntry(FeedEndpoint endpoint, Object feed, > Object entry) { > > Date updated = ((SyndEntry)entry).getUpdatedDate(); > > + if (updated == null) { // never been updated so get published > date > > + updated = ((SyndEntry)entry).getPublishedDate(); > > + } > > if (updated == null) { > > if (LOG.isDebugEnabled()) { > > LOG.debug("No updated time for entry so assuming its > valid: entry=[" + entry + "]"); > > @@ -49,7 +52,7 @@ > > return true; > > } > > if (lastUpdate != null) { > > - if (lastUpdate.after(updated)) { > > + if (lastUpdate.after(updated) || lastUpdate.equals(updated)) > { > > if (LOG.isDebugEnabled()) { > > LOG.debug("Entry is older than lastupdate=[" + > lastUpdate > > + "], no valid entry=[" + entry + "]"); > > @@ -57,7 +60,7 @@ > > return false; > > } > > } > > - lastUpdate = updated; > > + lastUpdate = updated; > > return true; > > } > > > > > > Modified: > activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerTest.java > > URL: > http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerTest.java?rev=723844&r1=723843&r2=723844&view=diff > > > ============================================================================== > > --- > activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerTest.java > (original) > > +++ > activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntryPollingConsumerTest.java > Fri Dec 5 12:10:50 2008 > > @@ -31,7 +31,7 @@ > > protected RouteBuilder createRouteBuilder() throws Exception { > > return new RouteBuilder() { > > public void configure() throws Exception { > > - > from("rss:file:src/test/data/rss20.xml?splitEntries=true&consumer.delay=100").to("mock:result"); > > + > from("rss:file:src/test/data/rss20.xml?splitEntries=true&sortEntries=true&consumer.delay=100").to("mock:result"); > > } > > }; > > } > > > > Added: > activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortDefaultsTest.java > > URL: > http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortDefaultsTest.java?rev=723844&view=auto > > > ============================================================================== > > --- > activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortDefaultsTest.java > (added) > > +++ > activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortDefaultsTest.java > Fri Dec 5 12:10:50 2008 > > @@ -0,0 +1,44 @@ > > +/** > > + * 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.rss; > > + > > +import com.sun.syndication.feed.synd.SyndEntry; > > +import com.sun.syndication.feed.synd.SyndFeed; > > + > > +import java.util.Date; > > + > > +import javax.naming.Context; > > + > > +import org.apache.camel.Body; > > +import org.apache.camel.ContextTestSupport; > > +import org.apache.camel.builder.ExpressionBuilder; > > +import org.apache.camel.builder.RouteBuilder; > > +import org.apache.camel.component.mock.MockEndpoint; > > +import org.apache.camel.util.jndi.JndiContext; > > + > > +public class RssEntrySortDefaultsTest extends RssEntrySortTest { > > + protected RouteBuilder createRouteBuilder() throws Exception { > > + return new RouteBuilder() { > > + public void configure() throws Exception { > > + > from("rss:file:src/test/data/rss20.xml?splitEntries=true&sortEntries=true&consumer.delay=50").to("mock:sorted"); > > + > > + // should NOT sort by default > > + > from("rss:file:src/test/data/rss20.xml?splitEntries=true&consumer.delay=50").to("mock:unsorted"); > > + } > > + }; > > + } > > +} > > > > Propchange: > activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortDefaultsTest.java > > > ------------------------------------------------------------------------------ > > svn:eol-style = native > > > > Added: > activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortTest.java > > URL: > http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortTest.java?rev=723844&view=auto > > > ============================================================================== > > --- > activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortTest.java > (added) > > +++ > activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortTest.java > Fri Dec 5 12:10:50 2008 > > @@ -0,0 +1,73 @@ > > +/** > > + * 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.rss; > > + > > +import com.sun.syndication.feed.synd.SyndEntry; > > +import com.sun.syndication.feed.synd.SyndFeed; > > + > > +import java.util.Date; > > + > > +import javax.naming.Context; > > + > > +import org.apache.camel.Body; > > +import org.apache.camel.ContextTestSupport; > > +import org.apache.camel.builder.ExpressionBuilder; > > +import org.apache.camel.builder.RouteBuilder; > > +import org.apache.camel.component.mock.MockEndpoint; > > +import org.apache.camel.util.jndi.JndiContext; > > + > > +public class RssEntrySortTest extends ContextTestSupport { > > + > > + public void testSortedEntries() throws Exception { > > + MockEndpoint mock = getMockEndpoint("mock:sorted"); > > + mock.expectsAscending(ExpressionBuilder.beanExpression("myBean", > "getPubDate")); > > + mock.expectedMessageCount(10); > > + mock.assertIsSatisfied(); > > + } > > + > > + public void testUnSortedEntries() throws Exception { > > + MockEndpoint mock = getMockEndpoint("mock:unsorted"); > > + mock.expectsAscending(ExpressionBuilder.beanExpression("myBean", > "getPubDate")); > > + mock.expectedMessageCount(10); > > + mock.setResultWaitTime(2000L); > > + mock.assertIsNotSatisfied(2000L); > > + } > > + > > + @Override > > + protected Context createJndiContext() throws Exception { > > + JndiContext jndi = new JndiContext(); > > + jndi.bind("myBean", new MyBean()); > > + return jndi; > > + } > > + > > + protected RouteBuilder createRouteBuilder() throws Exception { > > + return new RouteBuilder() { > > + public void configure() throws Exception { > > + > from("rss:file:src/test/data/rss20.xml?splitEntries=true&sortEntries=true&consumer.delay=50").to("mock:sorted"); > > + > from("rss:file:src/test/data/rss20.xml?splitEntries=true&sortEntries=false&consumer.delay=50").to("mock:unsorted"); > > + } > > + }; > > + } > > + > > + public static class MyBean { > > + public Date getPubDate(@Body Object body) { > > + SyndFeed feed = (SyndFeed) body; > > + SyndEntry syndEntry = (SyndEntry) feed.getEntries().get(0); > > + return syndEntry.getPublishedDate(); > > + } > > + } > > +} > > > > Propchange: > activemq/camel/trunk/components/camel-rss/src/test/java/org/apache/camel/component/rss/RssEntrySortTest.java > > > ------------------------------------------------------------------------------ > > svn:eol-style = native > > > > > > > -- Cheers, Jon http://janstey.blogspot.com/ |
Free forum by Nabble | Edit this page |