You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2008/11/16 15:52:14 UTC

svn commit: r718043 - in /activemq/camel/trunk/components/camel-mail/src: main/java/org/apache/camel/component/mail/ test/java/org/apache/camel/component/mail/

Author: davsclaus
Date: Sun Nov 16 06:52:14 2008
New Revision: 718043

URL: http://svn.apache.org/viewvc?rev=718043&view=rev
Log:
CAMEL-1096: camel-mail now supports setting additional java mail properties if URI options starts with mail.

Added:
    activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/AdditionalMailPropertiesTest.java   (contents, props changed)
      - copied, changed from r717985, activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/InvalidConfigurationTest.java
Modified:
    activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java
    activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java

Modified: activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java
URL: http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java?rev=718043&r1=718042&r2=718043&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java (original)
+++ activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailComponent.java Sun Nov 16 06:52:14 2008
@@ -17,7 +17,9 @@
 package org.apache.camel.component.mail;
 
 import java.net.URI;
+import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
@@ -57,6 +59,7 @@
         
         MailConfiguration config = new MailConfiguration();
         config.configure(url);
+        configureAdditionalJavaMailProperties(config, parameters);
 
         // lets make sure we copy the configuration as each endpoint can customize its own version
         MailEndpoint endpoint = new MailEndpoint(uri, this, config);
@@ -65,6 +68,22 @@
         return endpoint;
     }
 
+    private void configureAdditionalJavaMailProperties(MailConfiguration config, Map parameters) {
+        // we can not remove while iterating, as we will get a modification exception
+        Set toRemove = new HashSet();
+
+        for (Object key : parameters.keySet()) {
+            if (key.toString().startsWith("mail.")) {
+                config.getAdditionalJavaMailProperties().put(key, parameters.get(key));
+                toRemove.add(key);
+            }
+        }
+
+        for (Object key : toRemove) {
+            parameters.remove(key);
+        }
+    }
+
     public MailConfiguration getConfiguration() {
         return configuration;
     }

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=718043&r1=718042&r2=718043&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 Nov 16 06:52:14 2008
@@ -41,6 +41,7 @@
     public static final long DEFAULT_CONNECTION_TIMEOUT = 30000L;
 
     private Properties javaMailProperties;
+    private Properties additionalJavaMailProperties;
     private String protocol;
     private String host;
     private int port = -1;
@@ -101,6 +102,10 @@
         } else {
             // set default properties if none provided
             answer.setJavaMailProperties(createJavaMailProperties());
+            // add additional properties if provided
+            if (additionalJavaMailProperties != null) {
+                answer.getJavaMailProperties().putAll(additionalJavaMailProperties);
+            }
         }
 
         if (defaultEncoding != null) {
@@ -217,10 +222,30 @@
         return javaMailProperties;
     }
 
+    /**
+     * Sets the java mail options. Will clear any default properties and only use the properties
+     * provided for this method.
+     */
     public void setJavaMailProperties(Properties javaMailProperties) {
         this.javaMailProperties = javaMailProperties;
     }
 
+    public Properties getAdditionalJavaMailProperties() {
+        if (additionalJavaMailProperties == null) {
+            additionalJavaMailProperties = new Properties();
+        }
+        return additionalJavaMailProperties;
+    }
+
+    /**
+     * Sets additional java mail properties, that will append/override any default properties
+     * that is set based on all the other options. This is useful if you need to add some
+     * special options but want to keep the others as is.
+     */
+    public void setAdditionalJavaMailProperties(Properties additionalJavaMailProperties) {
+        this.additionalJavaMailProperties = additionalJavaMailProperties;
+    }
+
     public String getPassword() {
         return password;
     }

Copied: activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/AdditionalMailPropertiesTest.java (from r717985, 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/AdditionalMailPropertiesTest.java?p2=activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/AdditionalMailPropertiesTest.java&p1=activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/InvalidConfigurationTest.java&r1=717985&r2=718043&rev=718043&view=diff
==============================================================================
--- activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/InvalidConfigurationTest.java (original)
+++ activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/AdditionalMailPropertiesTest.java Sun Nov 16 06:52:14 2008
@@ -16,46 +16,42 @@
  */
 package org.apache.camel.component.mail;
 
+import java.util.Properties;
+
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Endpoint;
-import org.apache.camel.PollingConsumer;
-import org.apache.camel.ResolveEndpointFailedException;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
 
 /**
- * Unit test for various invalid configurations etc.
+ * Unit test allowing end users to set additional mail.xxx properties.
  */
-public class InvalidConfigurationTest extends ContextTestSupport {
+public class AdditionalMailPropertiesTest 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 (IllegalArgumentException e) {
-            // expected
-        }
+    public void testAdditionalMailProperties() throws Exception {
+        MailEndpoint endpoint = (MailEndpoint) context.getEndpoint("pop3://localhost?username=james&mail.pop3.forgettopheaders=true");
+        Properties prop = endpoint.getConfiguration().getAdditionalJavaMailProperties();
+        assertEquals("true", prop.get("mail.pop3.forgettopheaders"));
     }
 
-    public void testSMTPSCanNotBeUsedForConsumingMails() throws Exception {
-        Endpoint endpoint = this.context.getEndpoint("smtps://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 (IllegalArgumentException e) {
-            // expected
-        }
-    }
+    public void testConsumeWithAdditionalProperties() throws Exception {
+        MockEndpoint mock = getMockEndpoint("mock:result");
+
+        template.sendBodyAndHeader("smtp://james@localhost", "Hello james how are you?", "subject", "Hello");
 
-    public void testNNTPNotSupported() throws Exception {
-        try {
-            this.context.getEndpoint("nntp://localhost?username=james");
-            fail("Should have thrown UnsupportedOperationException");
-        } catch (ResolveEndpointFailedException e) {
-            // expected
-            assertTrue(e.getCause() instanceof UnsupportedOperationException);
-        }
+        mock.expectedBodiesReceived("Hello james how are you?");
+        mock.expectedHeaderReceived("subject", "Hello");
+        
+        assertMockEndpointsSatisfied();
     }
 
-}
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() throws Exception {
+                from("pop3://james@localhost?mail.pop3.forgettopheaders=true").to("mock:result");
+            }
+        };
+
+    }
+}
\ No newline at end of file

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

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

Propchange: activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/AdditionalMailPropertiesTest.java
------------------------------------------------------------------------------
    svn:mergeinfo =