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
}