You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ja...@apache.org on 2008/12/02 19:49:05 UTC

svn commit: r722562 - in /activemq/camel/trunk/components: camel-atom/ camel-atom/src/main/java/org/apache/camel/component/atom/ camel-atom/src/main/java/org/apache/camel/component/feed/ camel-atom/src/test/java/org/apache/camel/component/atom/ camel-r...

Author: janstey
Date: Tue Dec  2 10:49:04 2008
New Revision: 722562

URL: http://svn.apache.org/viewvc?rev=722562&view=rev
Log:
CAMEL-1101 - moving some common feed stuff into a feed component... there is still more to be done with this.

Added:
    activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/
    activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedComponent.java   (with props)
    activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedConsumer.java   (with props)
    activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java   (with props)
Removed:
    activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomConsumerSupport.java
Modified:
    activemq/camel/trunk/components/camel-atom/pom.xml
    activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomComponent.java
    activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomEndpoint.java
    activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomEntryPollingConsumer.java
    activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomPollingConsumer.java
    activemq/camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerTest.java
    activemq/camel/trunk/components/camel-rss/pom.xml
    activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssComponent.java
    activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssConsumerSupport.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

Modified: activemq/camel/trunk/components/camel-atom/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-atom/pom.xml?rev=722562&r1=722561&r2=722562&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-atom/pom.xml (original)
+++ activemq/camel/trunk/components/camel-atom/pom.xml Tue Dec  2 10:49:04 2008
@@ -34,7 +34,7 @@
   <description>Camel Atom support</description>
 
   <properties>
-    <camel.osgi.export.pkg>org.apache.camel.component.atom.*</camel.osgi.export.pkg>
+    <camel.osgi.export.pkg>org.apache.camel.component.atom.*;org.apache.camel.component.feed.*</camel.osgi.export.pkg>
   </properties>
 
   <repositories>

Modified: activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomComponent.java?rev=722562&r1=722561&r2=722562&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomComponent.java (original)
+++ activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomComponent.java Tue Dec  2 10:49:04 2008
@@ -19,6 +19,8 @@
 import java.util.Map;
 
 import org.apache.camel.Endpoint;
+import org.apache.camel.component.feed.FeedComponent;
+import org.apache.camel.component.feed.FeedEndpoint;
 import org.apache.camel.impl.DefaultComponent;
 
 /**
@@ -28,9 +30,10 @@
  *
  * @version $Revision$
  */
-public class AtomComponent extends DefaultComponent {
+public class AtomComponent extends FeedComponent {
 
-    protected Endpoint createEndpoint(String uri, String remaining, Map parameters) throws Exception {
+    @Override
+    protected FeedEndpoint createEndpoint(String uri, String remaining, Map parameters) throws Exception {
         return new AtomEndpoint(uri, this, remaining);
     }
 

Modified: activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomEndpoint.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomEndpoint.java?rev=722562&r1=722561&r2=722562&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomEndpoint.java (original)
+++ activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomEndpoint.java Tue Dec  2 10:49:04 2008
@@ -24,6 +24,9 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.component.feed.FeedComponent;
+import org.apache.camel.component.feed.FeedConsumer;
+import org.apache.camel.component.feed.FeedEndpoint;
 import org.apache.camel.impl.DefaultPollingEndpoint;
 import org.apache.camel.util.ObjectHelper;
 
@@ -32,132 +35,45 @@
  *
  * @version $Revision$
  */
-public class AtomEndpoint extends DefaultPollingEndpoint {
-
+public class AtomEndpoint extends FeedEndpoint {
     /**
      * Header key for the {@link org.apache.abdera.model.Feed} object is stored on the in message on the exchange.
      */
     public static final String HEADER_ATOM_FEED = "org.apache.camel.component.atom.feed";
-
-    private String atomUri;
-    private boolean splitEntries = true;
-    private Date lastUpdate;
-    private boolean filter = true;
-
-    public AtomEndpoint(String endpointUri, AtomComponent component, String atomUri) {
-        super(endpointUri, component);
-        this.atomUri = atomUri;
-
-        ObjectHelper.notNull(atomUri, "atomUri property");
+    
+    public AtomEndpoint(String endpointUri, FeedComponent component, String feedUri) {
+        super(endpointUri, component, feedUri);
     }
 
-    public AtomEndpoint(String endpointUri, String atomUri) {
-        this(endpointUri);
-        this.atomUri = atomUri;
-
-        ObjectHelper.notNull(atomUri, "atomUri property");
+    public AtomEndpoint(String endpointUri, String feedUri) {
+        super(endpointUri, feedUri);
     }
 
     public AtomEndpoint(String endpointUri) {
         super(endpointUri);
-    }
+    }   
 
-    public boolean isSingleton() {
-        return true;
-    }
-
-    public Producer createProducer() throws Exception {
-        throw new UnsupportedOperationException("AtomProducer is not implemented");
-    }
-
-    public Consumer createConsumer(Processor processor) throws Exception {
-        AtomConsumerSupport answer;
-        if (isSplitEntries()) {
-            answer = new AtomEntryPollingConsumer(this, processor, filter, lastUpdate);
-        } else {
-            answer = new AtomPollingConsumer(this, processor);
-        }
-        // ScheduledPollConsumer default delay is 500 millis and that is too often for polling a feed,
-        // so we override with a new default value. End user can override this value by providing a consumer.delay parameter
-        answer.setDelay(AtomConsumerSupport.DEFAULT_CONSUMER_DELAY);
-        configureConsumer(answer);
-        return answer;
-    }
-
-    /**
-     * Creates an Exchange with the entries as the in body.
-     *
-     * @param feed   the atom feed
-     * @return the created exchange
-     */
-    public Exchange createExchange(Feed feed) {
-        Exchange exchange = createExchange();
-        exchange.getIn().setBody(feed.getEntries());
-        exchange.getIn().setHeader(HEADER_ATOM_FEED, feed);
+    @Override
+    public Exchange createExchange(Object feed) {
+        Exchange exchange = createExchangeWithFeedHeader(feed, HEADER_ATOM_FEED);
+        exchange.getIn().setBody(((Feed)feed).getEntries());
         return exchange;
     }
 
-    /**
-     * Creates an Exchange with the given entry as the in body.
-     *
-     * @param feed   the atom feed
-     * @param entry  the entry as the in body
-     * @return the created exchange
-     */
-    public Exchange createExchange(Feed feed, Entry entry) {
-        Exchange exchange = createExchange();
+    @Override
+    public Exchange createExchange(Object feed, Object entry) {
+        Exchange exchange = createExchangeWithFeedHeader(feed, HEADER_ATOM_FEED);
         exchange.getIn().setBody(entry);
-        exchange.getIn().setHeader(HEADER_ATOM_FEED, feed);
         return exchange;
     }
 
-    // Properties
-    //-------------------------------------------------------------------------
-
-    public String getAtomUri() {
-        return atomUri;
-    }
-
-    public void setAtomUri(String atomUri) {
-        this.atomUri = atomUri;
-    }
-
-    public boolean isSplitEntries() {
-        return splitEntries;
-    }
-
-    /**
-     * Sets whether or not entries should be sent individually or whether the entire
-     * feed should be sent as a single message
-     */
-    public void setSplitEntries(boolean splitEntries) {
-        this.splitEntries = splitEntries;
-    }
-
-    public Date getLastUpdate() {
-        return lastUpdate;
+    @Override
+    protected FeedConsumer createEntryPollingConsumer(FeedEndpoint feedEndpoint, Processor processor, boolean filter, Date lastUpdate) {
+        return new AtomEntryPollingConsumer(this, processor, filter, lastUpdate);
+    }  
+    
+    @Override
+    protected FeedConsumer createPollingConsumer(FeedEndpoint feedEndpoint, Processor processor) {
+        return new AtomPollingConsumer(this, processor); 
     }
-
-    /**
-     * Sets the timestamp to be used for filtering entries from the atom feeds.
-     * This options is only in conjunction with the splitEntries.
-     */
-    public void setLastUpdate(Date lastUpdate) {
-        this.lastUpdate = lastUpdate;
-    }
-
-    public boolean isFilter() {
-        return filter;
-    }
-
-    /**
-     * Sets wether to use filtering or not of the entries.
-     */
-    public void setFilter(boolean filter) {
-        this.filter = filter;
-    }
-
-    // Implementation methods
-    //-------------------------------------------------------------------------
-
 }

Modified: activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomEntryPollingConsumer.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomEntryPollingConsumer.java?rev=722562&r1=722561&r2=722562&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomEntryPollingConsumer.java (original)
+++ activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomEntryPollingConsumer.java Tue Dec  2 10:49:04 2008
@@ -55,7 +55,7 @@
 
             boolean valid = true;
             if (entryFilter != null) {
-                valid = entryFilter.isValidEntry(endpoint, document, entry);
+                valid = entryFilter.isValidEntry((AtomEndpoint)endpoint, document, entry);
             }
             if (valid) {
                 Exchange exchange = endpoint.createExchange(feed, entry);
@@ -71,7 +71,7 @@
 
     private Document<Feed> getDocument() throws IOException, ParseException {
         if (document == null) {
-            document = AtomUtils.parseDocument(endpoint.getAtomUri());
+            document = AtomUtils.parseDocument(endpoint.getFeedUri());
             list = document.getRoot().getEntries();
             entryIndex = list.size() - 1;
         }

Modified: activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomPollingConsumer.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomPollingConsumer.java?rev=722562&r1=722561&r2=722562&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomPollingConsumer.java (original)
+++ activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/atom/AtomPollingConsumer.java Tue Dec  2 10:49:04 2008
@@ -20,20 +20,21 @@
 import org.apache.abdera.model.Feed;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
+import org.apache.camel.component.feed.FeedConsumer;
 
 /**
  * Consumer to poll atom feeds and return the full feed.
  *
  * @version $Revision$
  */
-public class AtomPollingConsumer extends AtomConsumerSupport {
+public class AtomPollingConsumer extends FeedConsumer {
 
     public AtomPollingConsumer(AtomEndpoint endpoint, Processor processor) {
         super(endpoint, processor);
     }
 
     protected void poll() throws Exception {
-        Document<Feed> document = AtomUtils.parseDocument(endpoint.getAtomUri());
+        Document<Feed> document = AtomUtils.parseDocument(endpoint.getFeedUri());
         Feed feed = document.getRoot();
         Exchange exchange = endpoint.createExchange(feed);
         getProcessor().process(exchange);

Added: activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedComponent.java?rev=722562&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedComponent.java (added)
+++ activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedComponent.java Tue Dec  2 10:49:04 2008
@@ -0,0 +1,31 @@
+/**
+ * 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.feed;
+
+import java.util.Map;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.impl.DefaultComponent;
+
+/**
+ * A base class for feed (atom, RSS) components.
+ */
+public abstract class FeedComponent extends DefaultComponent {
+
+    protected abstract FeedEndpoint createEndpoint(String uri, String remaining, Map parameters) throws Exception;
+
+}

Propchange: activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedComponent.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedConsumer.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedConsumer.java?rev=722562&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedConsumer.java (added)
+++ activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedConsumer.java Tue Dec  2 10:49:04 2008
@@ -0,0 +1,34 @@
+/**
+ * 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.feed;
+
+import org.apache.camel.Processor;
+import org.apache.camel.impl.ScheduledPollConsumer;
+
+/**
+ * Base class for consuming feeds.
+ */
+public abstract class FeedConsumer extends ScheduledPollConsumer {
+    public static final long DEFAULT_CONSUMER_DELAY = 60 * 1000L;
+    protected final FeedEndpoint endpoint;
+
+    public FeedConsumer(FeedEndpoint endpoint, Processor processor) {
+        super(endpoint, processor);
+        this.endpoint = endpoint;
+    }
+
+}

Propchange: activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedConsumer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 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=722562&view=auto
==============================================================================
--- activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java (added)
+++ activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java Tue Dec  2 10:49:04 2008
@@ -0,0 +1,157 @@
+/**
+ * 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.feed;
+
+import java.util.Date;
+
+import org.apache.abdera.model.Entry;
+import org.apache.abdera.model.Feed;
+import org.apache.camel.Consumer;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.impl.DefaultPollingEndpoint;
+import org.apache.camel.util.ObjectHelper;
+
+/**
+ * A base class for feed (atom, RSS) endpoints.
+ */
+public abstract class FeedEndpoint extends DefaultPollingEndpoint {
+
+    protected String feedUri;
+    protected boolean splitEntries = true;
+    protected Date lastUpdate;
+    protected boolean filter = true;
+
+    public FeedEndpoint(String endpointUri, FeedComponent component, String feedUri) {
+        super(endpointUri, component);
+        this.feedUri = feedUri;
+
+        ObjectHelper.notNull(feedUri, "feedUri property");
+    }
+
+    public FeedEndpoint(String endpointUri, String feedUri) {
+        this(endpointUri);
+        this.feedUri = feedUri;
+
+        ObjectHelper.notNull(feedUri, "feedUri property");
+    }
+
+    public FeedEndpoint(String endpointUri) {
+        super(endpointUri);
+    }
+
+    public boolean isSingleton() {
+        return true;
+    }
+
+    public Producer createProducer() throws Exception {
+        throw new UnsupportedOperationException("FeedProducer is not implemented");
+    }
+
+    public Consumer createConsumer(Processor processor) throws Exception {
+        FeedConsumer answer;
+        if (isSplitEntries()) {
+            answer = createEntryPollingConsumer(this, processor, filter, lastUpdate);
+        } else {
+            answer = createPollingConsumer(this, processor);
+        }
+        
+        // ScheduledPollConsumer default delay is 500 millis and that is too often for polling a feed,
+        // so we override with a new default value. End user can override this value by providing a consumer.delay parameter
+        answer.setDelay(FeedConsumer.DEFAULT_CONSUMER_DELAY);
+        configureConsumer(answer);
+        return answer;
+    }
+
+    protected abstract FeedConsumer createPollingConsumer(FeedEndpoint feedEndpoint, Processor processor);
+
+    protected abstract FeedConsumer createEntryPollingConsumer(FeedEndpoint feedEndpoint, Processor processor, boolean filter, Date lastUpdate);
+
+    protected Exchange createExchangeWithFeedHeader(Object feed, String header) {
+        Exchange exchange = createExchange();
+        exchange.getIn().setHeader(header, feed);
+        return exchange;
+    }    
+    
+    /**
+     * Creates an Exchange with the entries as the in body.
+     *
+     * @param feed   the atom feed
+     * @return the created exchange
+     */
+    public abstract Exchange createExchange(Object feed);
+
+    /**
+     * Creates an Exchange with the given entry as the in body.
+     *
+     * @param feed   the feed
+     * @param entry  the entry as the in body
+     * @return the created exchange
+     */
+    public abstract Exchange createExchange(Object feed, Object entry);
+
+    // Properties
+    //-------------------------------------------------------------------------
+
+    public String getFeedUri() {
+        return feedUri;
+    }
+
+    public void setFeedUri(String feedUri) {
+        this.feedUri = feedUri;
+    }
+
+    public boolean isSplitEntries() {
+        return splitEntries;
+    }
+
+    /**
+     * Sets whether or not entries should be sent individually or whether the entire
+     * feed should be sent as a single message
+     */
+    public void setSplitEntries(boolean splitEntries) {
+        this.splitEntries = splitEntries;
+    }
+
+    public Date getLastUpdate() {
+        return lastUpdate;
+    }
+
+    /**
+     * Sets the timestamp to be used for filtering entries from the atom feeds.
+     * This options is only in conjunction with the splitEntries.
+     */
+    public void setLastUpdate(Date lastUpdate) {
+        this.lastUpdate = lastUpdate;
+    }
+
+    public boolean isFilter() {
+        return filter;
+    }
+
+    /**
+     * Sets whether to use filtering or not of the entries.
+     */
+    public void setFilter(boolean filter) {
+        this.filter = filter;
+    }
+
+    // Implementation methods
+    //-------------------------------------------------------------------------
+
+}

Propchange: activemq/camel/trunk/components/camel-atom/src/main/java/org/apache/camel/component/feed/FeedEndpoint.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: activemq/camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerTest.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerTest.java?rev=722562&r1=722561&r2=722562&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerTest.java (original)
+++ activemq/camel/trunk/components/camel-atom/src/test/java/org/apache/camel/component/atom/AtomPollingConsumerTest.java Tue Dec  2 10:49:04 2008
@@ -59,8 +59,8 @@
             public void configure() throws Exception {
                 from("atom:file:src/test/data/feed.atom?splitEntries=false").to("mock:result");
 
-                // this is a bit weird syntax that normally is not used using the atomUri parameter
-                from("atom:?atomUri=file:src/test/data/feed.atom&splitEntries=false").to("mock:result2");
+                // this is a bit weird syntax that normally is not used using the feedUri parameter
+                from("atom:?feedUri=file:src/test/data/feed.atom&splitEntries=false").to("mock:result2");
             }
         };
     }

Modified: activemq/camel/trunk/components/camel-rss/pom.xml
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rss/pom.xml?rev=722562&r1=722561&r2=722562&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-rss/pom.xml (original)
+++ activemq/camel/trunk/components/camel-rss/pom.xml Tue Dec  2 10:49:04 2008
@@ -22,6 +22,16 @@
       <artifactId>camel-core</artifactId>
     </dependency>
     <dependency>
+      <groupId>org.apache.camel</groupId>
+      <artifactId>camel-atom</artifactId>
+      <exclusions>
+        <exclusion>
+          <groupId>org.apache.abdera</groupId>
+          <artifactId>abdera-extensions-main</artifactId>
+        </exclusion>
+      </exclusions>      
+    </dependency>
+    <dependency>
       <groupId>rome</groupId>
       <artifactId>rome</artifactId>
       <version>0.9</version>

Modified: activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssComponent.java?rev=722562&r1=722561&r2=722562&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssComponent.java (original)
+++ activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssComponent.java Tue Dec  2 10:49:04 2008
@@ -19,6 +19,8 @@
 import java.util.Map;
 
 import org.apache.camel.Endpoint;
+import org.apache.camel.component.feed.FeedComponent;
+import org.apache.camel.component.feed.FeedEndpoint;
 import org.apache.camel.impl.DefaultComponent;
 
 /**
@@ -27,9 +29,9 @@
  * Camel uses <a href="https://rome.dev.java.net/">ROME</a> as the RSS implementation.  
  *
  */
-public class RssComponent extends DefaultComponent {
+public class RssComponent extends FeedComponent {
 
-    protected Endpoint createEndpoint(String uri, String remaining, Map parameters) throws Exception {
+    protected FeedEndpoint createEndpoint(String uri, String remaining, Map parameters) throws Exception {
         return new RssEndpoint(uri, this, remaining);        
     }
 }

Modified: activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssConsumerSupport.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssConsumerSupport.java?rev=722562&r1=722561&r2=722562&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssConsumerSupport.java (original)
+++ activemq/camel/trunk/components/camel-rss/src/main/java/org/apache/camel/component/rss/RssConsumerSupport.java Tue Dec  2 10:49:04 2008
@@ -27,22 +27,21 @@
 import com.sun.syndication.io.XmlReader;
 
 import org.apache.camel.Processor;
+import org.apache.camel.component.feed.FeedConsumer;
+import org.apache.camel.component.feed.FeedEndpoint;
 import org.apache.camel.impl.ScheduledPollConsumer;
 
 /**
  * Base class for consuming RSS feeds.
  */
-public abstract class RssConsumerSupport extends ScheduledPollConsumer {
-    public static final long DEFAULT_CONSUMER_DELAY = 60 * 1000L;
-    protected final RssEndpoint endpoint;
+public abstract class RssConsumerSupport extends FeedConsumer {
 
-    public RssConsumerSupport(RssEndpoint endpoint, Processor processor) {
+    public RssConsumerSupport(FeedEndpoint endpoint, Processor processor) {
         super(endpoint, processor);
-        this.endpoint = endpoint;
     }
 
     protected SyndFeed createFeed() throws IOException, MalformedURLException, FeedException {
-        InputStream in = new URL(endpoint.getRssUri()).openStream();
+        InputStream in = new URL(endpoint.getFeedUri()).openStream();
         SyndFeedInput input = new SyndFeedInput();
         SyndFeed feed = input.build(new XmlReader(in));
         return feed;

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=722562&r1=722561&r2=722562&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 Tue Dec  2 10:49:04 2008
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.rss;
 
+import java.util.Date;
+
 import com.sun.syndication.feed.synd.SyndEntry;
 import com.sun.syndication.feed.synd.SyndFeed;
 
@@ -23,75 +25,56 @@
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.component.atom.AtomEntryPollingConsumer;
+import org.apache.camel.component.atom.AtomPollingConsumer;
+import org.apache.camel.component.feed.FeedComponent;
+import org.apache.camel.component.feed.FeedConsumer;
+import org.apache.camel.component.feed.FeedEndpoint;
 import org.apache.camel.impl.DefaultPollingEndpoint;
 
 /**
  * An <a href="http://activemq.apache.org/camel/rss.html">RSS Endpoint</a>.
  * 
  */
-public class RssEndpoint extends DefaultPollingEndpoint {
+public class RssEndpoint extends FeedEndpoint {
     /**
      * Header key for the {@link com.sun.syndication.feed.synd.SyndFeed} object is stored on the in message on the exchange.
      */
-    public static final String HEADER_RSS_FEED = "org.apache.camel.component.rss.feed";
-    private String rssUri;   
-    private boolean splitEntries = true;    
-
-    public RssEndpoint(String uri, RssComponent component, String rssUri) {
-        super(uri, component);
-        this.setRssUri(rssUri);
+    public static final String HEADER_RSS_FEED = "org.apache.camel.component.rss.feed";   
+
+    public RssEndpoint(String endpointUri, FeedComponent component, String feedUri) {
+        super(endpointUri, component, feedUri);
     }
 
-    public Producer createProducer() throws Exception {
-        throw new UnsupportedOperationException("RssProducer is not implemented");
-    }  
-    
-    public Consumer createConsumer(Processor processor) throws Exception {
-        RssConsumerSupport answer;
-        if (isSplitEntries()) {
-            answer = new RssEntryPollingConsumer(this, processor);
-        } else {
-            answer = new RssPollingConsumer(this, processor);
-        }
-        // ScheduledPollConsumer default delay is 500 millis and that is too often for polling a feed,
-        // so we override with a new default value. End user can override this value by providing a consumer.delay parameter
-        answer.setDelay(RssConsumerSupport.DEFAULT_CONSUMER_DELAY);
-        configureConsumer(answer);
-        return answer;
+    public RssEndpoint(String endpointUri, String feedUri) {
+        super(endpointUri, feedUri);
     }
 
-    public Exchange createExchange(SyndFeed feed) {
-        Exchange exchange = createExchange();
-        exchange.getIn().setBody(feed.getEntries());
-        exchange.getIn().setHeader(HEADER_RSS_FEED, feed);
+    public RssEndpoint(String endpointUri) {
+        super(endpointUri);
+    }      
+    
+    @Override
+    public Exchange createExchange(Object feed) {
+        Exchange exchange = createExchangeWithFeedHeader(feed, HEADER_RSS_FEED);
+        exchange.getIn().setBody(((SyndFeed)feed).getEntries());
         return exchange;
-    }    
+    }
 
-    public Exchange createExchange(SyndFeed feed, SyndEntry entry) {
-        Exchange exchange = createExchange();
+    @Override
+    public Exchange createExchange(Object feed, Object entry) {
+        Exchange exchange = createExchangeWithFeedHeader(feed, HEADER_RSS_FEED);
         exchange.getIn().setBody(entry);
-        exchange.getIn().setHeader(HEADER_RSS_FEED, feed);
         return exchange;
     }
-    
-    public boolean isSingleton() {
-        return true;
-    }
 
-    public void setRssUri(String rssUri) {
-        this.rssUri = rssUri;
-    }
-
-    public String getRssUri() {
-        return rssUri;
-    }
-
-    public void setSplitEntries(boolean splitEntries) {
-        this.splitEntries = splitEntries;
-    }
-
-    public boolean isSplitEntries() {
-        return splitEntries;
-    }   
+    @Override
+    protected FeedConsumer createEntryPollingConsumer(FeedEndpoint feedEndpoint, Processor processor, boolean filter, Date lastUpdate) {
+        return new RssEntryPollingConsumer(this, processor, filter, lastUpdate);
+    }  
     
+    @Override
+    protected FeedConsumer createPollingConsumer(FeedEndpoint feedEndpoint, Processor processor) {
+        return new RssPollingConsumer(this, processor); 
+    }
 }

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=722562&r1=722561&r2=722562&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 Tue Dec  2 10:49:04 2008
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.rss;
 
+import java.util.Date;
 import java.util.List;
 
 import com.sun.syndication.feed.synd.SyndEntry;
@@ -36,6 +37,10 @@
         super(endpoint, processor);
     }
 
+    public RssEntryPollingConsumer(RssEndpoint endpoint, Processor processor, boolean filter, Date lastUpdate) {
+        this(endpoint, processor);
+    }
+
     public void poll() throws Exception {
         SyndFeed feed = createFeed();
         populateList(feed);