Author: davsclaus
Date: Sun Apr 27 08:51:25 2008
New Revision: 651966

URL: http://svn.apache.org/viewvc?rev=651966&view=rev
Log:
CAMEL-335
- added configuration for consuming only unseen messages

Note: Work in progress, needs unit test (TODO added)

Modified:
    activemq/camel/trunk/components/camel-mail/pom.xml
    
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
    
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
    
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailUtils.java

Modified: activemq/camel/trunk/components/camel-mail/pom.xml
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/pom.xml?rev=651966&r1=651965&r2=651966&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-mail/pom.xml (original)
+++ activemq/camel/trunk/components/camel-mail/pom.xml Sun Apr 27 08:51:25 2008
@@ -67,7 +67,6 @@
             <artifactId>mail</artifactId>
         </dependency>
 
-
         <!-- testing -->
         <dependency>
             <groupId>org.apache.camel</groupId>
@@ -92,6 +91,12 @@
             <artifactId>log4j</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>commons-logging</groupId>
+            <artifactId>commons-logging</artifactId>
+            <scope>test</scope>
+        </dependency>
+        
     </dependencies>
 
 </project>

Modified: 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java?rev=651966&r1=651965&r2=651966&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
 Sun Apr 27 08:51:25 2008
@@ -46,6 +46,7 @@
     private String folderName = DEFAULT_FOLDER_NAME;
     private boolean deleteProcessedMessages = true;
     private boolean ignoreUriScheme = false;
+    private boolean processOnlyUnseenMessages = false;
 
     public MailConfiguration() {
     }
@@ -231,5 +232,13 @@
 
     public void setIgnoreUriScheme(boolean ignoreUriScheme) {
         this.ignoreUriScheme = ignoreUriScheme;
+    }
+
+    public boolean isProcessOnlyUnseenMessages() {
+        return processOnlyUnseenMessages;
+    }
+
+    public void setProcessOnlyUnseenMessages(boolean 
processOnlyUnseenMessages) {
+        this.processOnlyUnseenMessages = processOnlyUnseenMessages;
     }
 }

Modified: 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java?rev=651966&r1=651965&r2=651966&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
 Sun Apr 27 08:51:25 2008
@@ -22,6 +22,7 @@
 import javax.mail.MessagingException;
 import javax.mail.event.MessageCountEvent;
 import javax.mail.event.MessageCountListener;
+import javax.mail.search.FlagTerm;
 
 import org.apache.camel.Processor;
 import org.apache.camel.impl.ScheduledPollConsumer;
@@ -31,7 +32,7 @@
 /**
  * A [EMAIL PROTECTED] org.apache.camel.Consumer Consumer} which consumes 
messages from JavaMail using a
  * [EMAIL PROTECTED] javax.mail.Transport Transport} and dispatches them to 
the [EMAIL PROTECTED] Processor}
- * 
+ *
  * @version $Revision$
  */
 public class MailConsumer extends ScheduledPollConsumer<MailExchange> 
implements MessageCountListener {
@@ -48,14 +49,15 @@
     @Override
     protected void doStart() throws Exception {
         super.doStart();
-        ensureFolderIsOpen();
         folder.addMessageCountListener(this);
     }
 
     @Override
     protected void doStop() throws Exception {
         folder.removeMessageCountListener(this);
-        folder.close(true);
+        if (folder.isOpen()) {
+            folder.close(true);
+        }
         super.doStop();
     }
 
@@ -65,8 +67,11 @@
             try {
                 if (!message.getFlags().contains(Flags.Flag.DELETED)) {
                     processMessage(message);
-
-                    flagMessageDeleted(message);
+                    flagMessageProcessed(message);
+                } else {
+                    if (LOG.isDebugEnabled()) {
+                        LOG.debug("Skipping message as it was flagged as 
DELETED: " + message);
+                    }
                 }
             } catch (MessagingException e) {
                 handleException(e);
@@ -78,11 +83,7 @@
         Message[] messages = event.getMessages();
         for (Message message : messages) {
             if (LOG.isDebugEnabled()) {
-                try {
-                    LOG.debug("Removing message: " + message.getSubject());
-                } catch (MessagingException e) {
-                    LOG.debug("Ignored: " + e);
-                }
+                LOG.debug("Removed message number " + 
message.getMessageNumber());
             }
         }
     }
@@ -90,21 +91,38 @@
     protected void poll() throws Exception {
         ensureFolderIsOpen();
 
-        int count = folder.getMessageCount();
-        if (count > 0) {
-            Message[] messages = folder.getMessages();
-            MessageCountEvent event = new MessageCountEvent(folder, 
MessageCountEvent.ADDED, true, messages);
-            messagesAdded(event);
-        } else if (count == -1) {
-            throw new MessagingException("Folder: " + folder.getFullName() + " 
is closed");
-        }
+        try {
+            int count = folder.getMessageCount();
+            if (count > 0) {
+                Message[] messages;
+
+                // TODO: add unit test for this new property and add it to 
wiki documentation
+                // should we process all messages or only unseen messages
+                if (endpoint.getConfiguration().isProcessOnlyUnseenMessages()) 
{
+                    messages = folder.search(new FlagTerm(new 
Flags(Flags.Flag.SEEN), false));
+                } else {
+                    messages = folder.getMessages();
+                }
 
-        folder.close(true);
+                MessageCountEvent event = new MessageCountEvent(folder, 
MessageCountEvent.ADDED, true, messages);
+                messagesAdded(event);
+            } else if (count == -1) {
+                throw new MessagingException("Folder: " + folder.getFullName() 
+ " is closed");
+            }
+        } finally {
+            // need to ensure we release resources
+            if (folder.isOpen()) {
+                folder.close(true);
+            }
+        }
     }
 
     protected void processMessage(Message message) {
         try {
             MailExchange exchange = endpoint.createExchange(message);
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Processing message " + message);
+            }
             getProcessor().process(exchange);
         } catch (Throwable e) {
             handleException(e);
@@ -117,7 +135,7 @@
         }
     }
 
-    protected void flagMessageDeleted(Message message) throws 
MessagingException {
+    protected void flagMessageProcessed(Message message) throws 
MessagingException {
         if (endpoint.getConfiguration().isDeleteProcessedMessages()) {
             message.setFlag(Flags.Flag.DELETED, true);
         } else {

Modified: 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailUtils.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailUtils.java?rev=651966&r1=651965&r2=651966&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailUtils.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailUtils.java
 Sun Apr 27 08:51:25 2008
@@ -77,5 +77,7 @@
 
         return port;
     }
+
+    // TODO: Add public method for aiding mail message logging
     
 }


Reply via email to