Author: davsclaus
Date: Sat May  3 04:32:42 2008
New Revision: 653053

URL: http://svn.apache.org/viewvc?rev=653053&view=rev
Log:
CAMEL-335
- refactored camel-mail
- mail consumers will not under the covers change from smtp to pop3 protocol. 
End-users need to change their URI to state correct protocol
- added better debug logging of minemessages

Added:
    
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/InvalidConfigurationTest.java
   (with props)
Modified:
    
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/JavaMailConnection.java
    
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
    
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/MailEndpoint.java
    
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java
    
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailProducer.java
    
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailUtils.java
    
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MessageHeaderAccessException.java
    
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MessageHeaderNamesAccessException.java
    
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/RuntimeMailException.java
    
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailProcessOnlyUnseenMessagesTest.java
    
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailRouteTest.java
    
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSubjectTest.java
    
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMessageConsumeTest.java
    
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MultipleDestinationConsumeTest.java

Modified: 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/JavaMailConnection.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/JavaMailConnection.java?rev=653053&r1=653052&r2=653053&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/JavaMailConnection.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/JavaMailConnection.java
 Sat May  3 04:32:42 2008
@@ -26,7 +26,8 @@
 /**
  * An extension of Spring's [EMAIL PROTECTED] JavaMailSenderImpl} to provide 
helper methods
  * for listening for new mail
- * 
+ *
+ * @deprecated use Spring [EMAIL PROTECTED] JavaMailSenderImpl} directly
  * @version $Revision$
  */
 public class JavaMailConnection extends JavaMailSenderImpl {

Modified: 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java?rev=653053&r1=653052&r2=653053&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
 Sat May  3 04:32:42 2008
@@ -123,6 +123,8 @@
                                               org.apache.camel.Message 
camelMessage)
         throws MessagingException {
 
+        // TODO: Use spring mail support to add the attachment
+
         // Create a Multipart
         MimeMultipart multipart = new MimeMultipart();
 

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=653053&r1=653052&r2=653053&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
 Sat May  3 04:32:42 2008
@@ -22,6 +22,7 @@
 import javax.mail.Session;
 
 import org.apache.camel.RuntimeCamelException;
+import org.springframework.mail.javamail.JavaMailSenderImpl;
 
 /**
  * Represents the configuration data for communicating over email
@@ -93,8 +94,8 @@
         }
     }
 
-    public JavaMailConnection createJavaMailConnection(MailEndpoint 
mailEndpoint) {
-        JavaMailConnection answer = new JavaMailConnection();
+    protected JavaMailSenderImpl createJavaMailSender() {
+        JavaMailSenderImpl answer = new JavaMailSenderImpl();
         if (defaultEncoding != null) {
             answer.setDefaultEncoding(defaultEncoding);
         }

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=653053&r1=653052&r2=653053&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
 Sat May  3 04:32:42 2008
@@ -20,14 +20,15 @@
 import javax.mail.Folder;
 import javax.mail.Message;
 import javax.mail.MessagingException;
-import javax.mail.event.MessageCountEvent;
-import javax.mail.event.MessageCountListener;
+import javax.mail.Store;
+import javax.mail.FolderNotFoundException;
 import javax.mail.search.FlagTerm;
 
 import org.apache.camel.Processor;
 import org.apache.camel.impl.ScheduledPollConsumer;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.springframework.mail.javamail.JavaMailSenderImpl;
 
 /**
  * A [EMAIL PROTECTED] org.apache.camel.Consumer Consumer} which consumes 
messages from JavaMail using a
@@ -35,61 +36,53 @@
  *
  * @version $Revision$
  */
-public class MailConsumer extends ScheduledPollConsumer<MailExchange> 
implements MessageCountListener {
+public class MailConsumer extends ScheduledPollConsumer<MailExchange> {
     private static final transient Log LOG = 
LogFactory.getLog(MailConsumer.class);
     private final MailEndpoint endpoint;
-    private final Folder folder;
+    private final JavaMailSenderImpl sender;
+    private Folder folder;
+    private Store store;
 
-    public MailConsumer(MailEndpoint endpoint, Processor processor, Folder 
folder) {
+    public MailConsumer(MailEndpoint endpoint, Processor processor, 
JavaMailSenderImpl sender) {
         super(endpoint, processor);
         this.endpoint = endpoint;
-        this.folder = folder;
+        this.sender = sender;
     }
 
     @Override
     protected void doStart() throws Exception {
         super.doStart();
-        folder.addMessageCountListener(this);
+
+        MailConfiguration config = endpoint.getConfiguration();
+        store = sender.getSession().getStore(config.getProtocol());
+        store.connect(config.getHost(), config.getPort(), 
config.getUsername(), config.getPassword());
+
+        folder = store.getFolder(config.getFolderName());
+        if (folder == null || !folder.exists()) {
+            throw new FolderNotFoundException(folder, "Folder not found or 
invalid: " + config.getFolderName());
+        }
     }
 
     @Override
     protected void doStop() throws Exception {
-        folder.removeMessageCountListener(this);
         if (folder.isOpen()) {
             folder.close(true);
         }
-        super.doStop();
-    }
-
-    public void messagesAdded(MessageCountEvent event) {
-        Message[] messages = event.getMessages();
-        for (Message message : messages) {
-            try {
-                if (!message.getFlags().contains(Flags.Flag.DELETED)) {
-                    processMessage(message);
-                    flagMessageProcessed(message);
-                } else {
-                    if (LOG.isDebugEnabled()) {
-                        LOG.debug("Skipping message as it was flagged as 
DELETED: " + message);
-                    }
-                }
-            } catch (MessagingException e) {
-                handleException(e);
-            }
+        if (store.isConnected()) {
+            store.close();
         }
-    }
 
-    public void messagesRemoved(MessageCountEvent event) {
-        Message[] messages = event.getMessages();
-        for (Message message : messages) {
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("Removed message number " + 
message.getMessageNumber());
-            }
-        }
+        super.doStop();
     }
 
     protected void poll() throws Exception {
-        ensureFolderIsOpen();
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Polling mailfolder " + folder.getFullName() + " at host 
" + endpoint.getConfiguration().getHost());
+        }
+        // ensure folder is open
+        if (!folder.isOpen()) {
+            folder.open(Folder.READ_WRITE);
+        }
 
         try {
             int count = folder.getMessageCount();
@@ -103,8 +96,8 @@
                     messages = folder.getMessages();
                 }
 
-                MessageCountEvent event = new MessageCountEvent(folder, 
MessageCountEvent.ADDED, true, messages);
-                messagesAdded(event);
+                processMessages(messages);
+
             } else if (count == -1) {
                 throw new MessagingException("Folder: " + folder.getFullName() 
+ " is closed");
             }
@@ -116,24 +109,36 @@
         }
     }
 
-    protected void processMessage(Message message) {
-        try {
-            MailExchange exchange = endpoint.createExchange(message);
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("Processing message " + message);
+    /**
+     * Process all the messages
+     */
+    protected void processMessages(Message[] messages) throws Exception {
+        for (Message message : messages) {
+            if (!message.getFlags().contains(Flags.Flag.DELETED)) {
+                processMessage(message);
+                flagMessageProcessed(message);
+            } else {
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("Skipping message as it was flagged as DELETED: 
" + MailUtils.dumpMessage(message));
+                }
             }
-            getProcessor().process(exchange);
-        } catch (Throwable e) {
-            handleException(e);
         }
     }
 
-    protected void ensureFolderIsOpen() throws MessagingException {
-        if (!folder.isOpen()) {
-            folder.open(Folder.READ_WRITE);
-        }
+    /**
+     * Strategy to process the mail message.
+     */
+    protected void processMessage(Message message) throws Exception {
+        MailExchange exchange = endpoint.createExchange(message);
+        if (LOG.isDebugEnabled()) {
+            LOG.debug("Processing message: " + MailUtils.dumpMessage(message));
+        }
+        getProcessor().process(exchange);
     }
 
+    /**
+     * Strategy to flag the message after being processed.
+     */
     protected void flagMessageProcessed(Message message) throws 
MessagingException {
         if (endpoint.getConfiguration().isDeleteProcessedMessages()) {
             message.setFlag(Flags.Flag.DELETED, true);

Modified: 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java?rev=653053&r1=653052&r2=653053&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java
 Sat May  3 04:32:42 2008
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.component.mail;
 
-import javax.mail.Folder;
 import javax.mail.Message;
 
 import org.apache.camel.Consumer;
@@ -25,6 +24,7 @@
 import org.apache.camel.Producer;
 import org.apache.camel.impl.ScheduledPollEndpoint;
 import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.mail.javamail.JavaMailSenderImpl;
 
 /**
  * @version $Revision:520964 $
@@ -39,7 +39,7 @@
     }
 
     public Producer<MailExchange> createProducer() throws Exception {
-        JavaMailSender sender = configuration.createJavaMailConnection(this);
+        JavaMailSender sender = configuration.createJavaMailSender();
         return createProducer(sender);
     }
 
@@ -51,37 +51,20 @@
     }
 
     public Consumer<MailExchange> createConsumer(Processor processor) throws 
Exception {
-        JavaMailConnection connection = 
configuration.createJavaMailConnection(this);
-
-        String protocol = getConfiguration().getProtocol();
-        // replace smtp with pop3 since we are creating a consumer and thus we 
need to use pop3 as protocol
-        // as stmp is only for sending
-        if (protocol.equals("smtp")) {
-            protocol = "pop3";
-        }
-        String folderName = getConfiguration().getFolderName();
-        Folder folder = connection.getFolder(protocol, folderName);
-        if (folder == null) {
-            throw new IllegalArgumentException("No folder for protocol: " + 
protocol + " and name: " + folderName);
-        }
-
-        return createConsumer(processor, folder);
+        JavaMailSenderImpl sender = configuration.createJavaMailSender();
+        return createConsumer(processor, sender);
     }
 
     /**
-     * Creates a consumer using the given processor and transport
-     *
-     * @param processor the processor to use to process the messages
-     * @param folder the JavaMail Folder to use for inbound messages
-     * @return a newly created consumer
-     * @throws Exception if the consumer cannot be created
+     * Creates a consumer using the given processor and sender
      */
-    public Consumer<MailExchange> createConsumer(Processor processor, Folder 
folder) throws Exception {
-        MailConsumer answer = new MailConsumer(this, processor, folder);
+    public Consumer<MailExchange> createConsumer(Processor processor, 
JavaMailSenderImpl sender) throws Exception {
+        MailConsumer answer = new MailConsumer(this, processor, sender);
         configureConsumer(answer);
         return answer;
     }
 
+
     @Override
     public MailExchange createExchange(ExchangePattern pattern) {
         return new MailExchange(getContext(), pattern, getBinding());

Modified: 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java?rev=653053&r1=653052&r2=653053&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailMessage.java
 Sat May  3 04:32:42 2008
@@ -123,15 +123,12 @@
                     String name = header.getName();
                     CollectionHelper.appendValue(map, name, value);
                 }
-            } catch (Throwable e) {
+            } catch (Exception e) {
                 throw new MessageHeaderNamesAccessException(e);
             }
         }
     }
 
-    /* (non-Javadoc)
-     * @see 
org.apache.camel.impl.DefaultMessage#populateInitialAttachments(java.util.Map)
-     */
     @Override
     protected void populateInitialAttachments(Map<String, DataHandler> map) {
         if (mailMessage != null) {
@@ -152,12 +149,13 @@
     }
 
     /**
-     * parses the attachments of the mail message and puts them to the message
+     * Parses the attachments of the mail message and puts them to the message
      *
      * @param map       the attachments map
      * @throws javax.mail.MessagingException
      */
     protected void extractAttachments(Map<String, DataHandler> map) throws 
javax.mail.MessagingException {
+        // TODO: Reuse spring mail support to handle the attachment
         // now convert the mail attachments and put it to the msg
         Multipart mp;
         Object content;

Modified: 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailProducer.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailProducer.java?rev=653053&r1=653052&r2=653053&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailProducer.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailProducer.java
 Sat May  3 04:32:42 2008
@@ -45,7 +45,7 @@
             public void prepare(MimeMessage mimeMessage) throws Exception {
                 endpoint.getBinding().populateMailMessage(endpoint, 
mimeMessage, exchange);
                 if (LOG.isDebugEnabled()) {
-                    LOG.debug("Sending MineMessage: MessageID=" + 
mimeMessage.getMessageID());
+                    LOG.debug("Sending MineMessage: " + 
MailUtils.dumpMessage(mimeMessage));
                 }
             }
         });

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=653053&r1=653052&r2=653053&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
 Sat May  3 04:32:42 2008
@@ -16,6 +16,12 @@
  */
 package org.apache.camel.component.mail;
 
+import java.text.DateFormat;
+import java.util.Date;
+import javax.mail.Address;
+import javax.mail.MessagingException;
+import javax.mail.Message;
+
 /**
  * Mail utility class.
  * <p>
@@ -78,6 +84,50 @@
         return port;
     }
 
-    // TODO: Add public method for aiding mail message logging
+    /**
+     * Gets a log dump of the given message that can be used for tracing etc.
+     *
+     * @param message the Mail message
+     * @return a log string with important fields dumped
+     * @throws MessagingException can be thrown by the Mail API
+     */
+    public static String dumpMessage(Message message) throws 
MessagingException {
+        StringBuilder sb = new StringBuilder();
+
+        int number = message.getMessageNumber();
+        sb.append("messageNumber=[").append(number).append("]");
+
+        Address[] from = message.getFrom();
+        if (from != null) {
+            for (Address adr : from) {
+                sb.append(", from=[").append(adr).append("]");
+            }
+        }
+
+        Address[] to = message.getRecipients(Message.RecipientType.TO);
+        if (to != null) {
+            for (Address adr : to) {
+                sb.append(", to=[").append(adr).append("]");
+            }
+        }
+
+        // TODO: Maybe we need to get the subject from the header properties
+        String subject = message.getSubject();
+        if (subject != null) {
+            sb.append(", subject=[").append(subject).append("]");
+        }
+
+        Date sentDate = message.getSentDate();
+        if (sentDate != null) {
+            sb.append(", 
sentDate=[").append(DateFormat.getDateTimeInstance().format(sentDate)).append("]");
+        }
+
+        Date receivedDate = message.getReceivedDate();
+        if (receivedDate != null) {
+            sb.append(", 
receivedDate=[").append(DateFormat.getDateTimeInstance().format(receivedDate)).append("]");
+        }
+
+        return sb.toString();
+    }
 
 }

Modified: 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MessageHeaderAccessException.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MessageHeaderAccessException.java?rev=653053&r1=653052&r2=653053&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MessageHeaderAccessException.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MessageHeaderAccessException.java
 Sat May  3 04:32:42 2008
@@ -19,6 +19,7 @@
 import javax.mail.MessagingException;
 
 /**
+ * @deprecated we should not use runtime exception for the attachment binding
  * @version $Revision:520964 $
  */
 public class MessageHeaderAccessException extends RuntimeMailException {

Modified: 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MessageHeaderNamesAccessException.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MessageHeaderNamesAccessException.java?rev=653053&r1=653052&r2=653053&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MessageHeaderNamesAccessException.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MessageHeaderNamesAccessException.java
 Sat May  3 04:32:42 2008
@@ -18,12 +18,13 @@
 
 
 /**
+ * @deprecated we should not use runtime exception for the attachment binding
  * @version $Revision:520964 $
  */
 public class MessageHeaderNamesAccessException extends RuntimeMailException {
     private static final long serialVersionUID = -6744171518099741324L;
 
     public MessageHeaderNamesAccessException(Throwable e) {
-        super("Failed to acess the Mail message property names", e);
+        super("Failed to access the Mail message property names", e);
     }
 }

Modified: 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/RuntimeMailException.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/RuntimeMailException.java?rev=653053&r1=653052&r2=653053&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/RuntimeMailException.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/RuntimeMailException.java
 Sat May  3 04:32:42 2008
@@ -17,6 +17,8 @@
 package org.apache.camel.component.mail;
 
 /**
+ *
+ * @deprecated we should not use runtime exception for the attachment binding
  * @version $Revision:520964 $
  */
 public class RuntimeMailException extends RuntimeException {

Added: 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/InvalidConfigurationTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/InvalidConfigurationTest.java?rev=653053&view=auto
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/InvalidConfigurationTest.java
 (added)
+++ 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/InvalidConfigurationTest.java
 Sat May  3 04:32:42 2008
@@ -0,0 +1,41 @@
+/**
+ * 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.mail;
+
+import javax.mail.NoSuchProviderException;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Endpoint;
+import org.apache.camel.PollingConsumer;
+
+/**
+ * Unit test for various invalid configurations etc.
+ */
+public class InvalidConfigurationTest extends ContextTestSupport {
+
+    public void testSMTPCanNotBeUsedForConsumingMails() throws Exception {
+        Endpoint endpoint = 
this.context.getEndpoint("smtp://localhost?username=james");
+        PollingConsumer consumer = endpoint.createPollingConsumer();
+        try {
+            consumer.start();
+            fail("Should have thrown NoSuchProviderException as stmp protocol 
can not be used for consuming mails");
+        } catch (NoSuchProviderException e) {
+            // expected
+        }
+    }
+
+}

Propchange: 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/InvalidConfigurationTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/InvalidConfigurationTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailProcessOnlyUnseenMessagesTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailProcessOnlyUnseenMessagesTest.java?rev=653053&r1=653052&r2=653053&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailProcessOnlyUnseenMessagesTest.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailProcessOnlyUnseenMessagesTest.java
 Sat May  3 04:32:42 2008
@@ -19,11 +19,13 @@
 import javax.mail.Flags;
 import javax.mail.Folder;
 import javax.mail.Message;
+import javax.mail.Store;
 import javax.mail.internet.MimeMessage;
 
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.springframework.mail.javamail.JavaMailSenderImpl;
 
 /**
  * Unit test for processOnlyUnseenMessages option.
@@ -39,23 +41,31 @@
         mock.expectedMessageCount(1);
         mock.expectedBodiesReceived("Message 3");
         mock.assertIsSatisfied();
+
+        // reset mock so we can make new assertions
+        mock.reset();
+
+        // send a new message, now we should only receive this new massages as 
all the others has been SEEN
+        sendBody("direct:a", "Message 4");
+        mock.expectedMessageCount(1);
+        mock.expectedBodiesReceived("Message 4");
+        mock.assertIsSatisfied();
     }
 
     private void prepareMailbox() throws Exception {
-        JavaMailConnection connection = new JavaMailConnection();
-        connection.setProtocol("pop3");
-        connection.setHost("localhost");
-        connection.setPort(25);
-        connection.setUsername("claus");
+        // connect to mailbox
+        JavaMailSenderImpl sender = new JavaMailSenderImpl();
+        Store store = sender.getSession().getStore("imap");
+        store.connect("localhost", 25, "claus", "secret");
+        Folder folder = store.getFolder("INBOX");
+        folder.open(Folder.READ_WRITE);
 
         // inserts two messages with the SEEN flag
-        Folder folder = connection.getFolder("pop3", "INBOX");
-        folder.open(Folder.READ_WRITE);
         Message[] msg = new Message[2];
-        msg[0] = new MimeMessage(connection.getSession());
+        msg[0] = new MimeMessage(sender.getSession());
         msg[0].setText("Message 1");
         msg[0].setFlag(Flags.Flag.SEEN, true);
-        msg[1] = new MimeMessage(connection.getSession());
+        msg[1] = new MimeMessage(sender.getSession());
         msg[1].setText("Message 2");
         msg[1].setFlag(Flags.Flag.SEEN, true);
         folder.appendMessages(msg);
@@ -67,12 +77,7 @@
             public void configure() throws Exception {
                 from("direct:a").to("smtp://[EMAIL PROTECTED]");
 
-                // START SNIPPET: e1
-                // consume only new unseen massages from the mailbox and poll 
the mailbox with 60 seconds interval
-                long delay = 60 * 1000L;
-                
from("pop3://localhost?username=claus&password=secret&processOnlyUnseenMessages=true&consumer.delay="
 + delay).
-                        to("mock:result");
-                // END SNIPPET: e1
+                
from("imap://localhost?username=claus&password=secret&processOnlyUnseenMessages=true").to(
 "mock:result");
             }
         };
     }

Modified: 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailRouteTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailRouteTest.java?rev=653053&r1=653052&r2=653053&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailRouteTest.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailRouteTest.java
 Sat May  3 04:32:42 2008
@@ -73,9 +73,9 @@
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
-                from("smtp://[EMAIL PROTECTED]").to("direct:a");
+                from("pop3://[EMAIL PROTECTED]").to("direct:a");
                 from("direct:a").to("smtp://[EMAIL PROTECTED]", "smtp://[EMAIL 
PROTECTED]");
-                from("smtp://[EMAIL 
PROTECTED]").convertBodyTo(String.class).to("mock:result");
+                from("pop3://[EMAIL 
PROTECTED]").convertBodyTo(String.class).to("mock:result");
             }
         };
     }

Modified: 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSubjectTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSubjectTest.java?rev=653053&r1=653052&r2=653053&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSubjectTest.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailSubjectTest.java
 Sat May  3 04:32:42 2008
@@ -17,8 +17,6 @@
 package org.apache.camel.component.mail;
 
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Exchange;
-import org.apache.camel.Message;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 
@@ -29,21 +27,13 @@
     private String subject = "Camel rocks";
 
     public void testMailSubject() throws Exception {
-        MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedMessageCount(1);
-
         String body = "Hello Claus.\nYes it does.\n\nRegards James.";
-
         template.sendBody("direct:a", body);
 
-        // need some time for camel to consume mail
-        Thread.sleep(1000);
-
-        Exchange exchange = mock.assertExchangeReceived(0);
-        Message in = exchange.getIn();
-        assertEquals("body", body, in.getBody(String.class));
-        assertEquals("subject", subject, in.getHeader("subject", 
String.class));
-
+        MockEndpoint mock = getMockEndpoint("mock:result");
+        mock.expectedMessageCount(1);
+        mock.expectedHeaderReceived("subject", subject);
+        mock.expectedBodiesReceived(body);
         mock.assertIsSatisfied();
     }
 

Modified: 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMessageConsumeTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMessageConsumeTest.java?rev=653053&r1=653052&r2=653053&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMessageConsumeTest.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MimeMessageConsumeTest.java
 Sat May  3 04:32:42 2008
@@ -130,7 +130,7 @@
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
-                from("smtp://[EMAIL 
PROTECTED]").convertBodyTo(String.class).to("mock:result");
+                from("pop3://[EMAIL 
PROTECTED]").convertBodyTo(String.class).to("mock:result");
             }
         };
     }

Modified: 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MultipleDestinationConsumeTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MultipleDestinationConsumeTest.java?rev=653053&r1=653052&r2=653053&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MultipleDestinationConsumeTest.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MultipleDestinationConsumeTest.java
 Sat May  3 04:32:42 2008
@@ -93,7 +93,7 @@
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
-                from("smtp://[EMAIL 
PROTECTED]").convertBodyTo(String.class).to("mock:result");
+                from("pop3://[EMAIL 
PROTECTED]").convertBodyTo(String.class).to("mock:result");
             }
         };
     }


Reply via email to