You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/09/25 17:01:22 UTC

svn commit: r1001230 [2/2] - in /james/server/trunk: ./ mailetcontainer-api/ mailetcontainer-api/src/ mailetcontainer-api/src/main/ mailetcontainer-api/src/main/java/ mailetcontainer-api/src/main/java/org/ mailetcontainer-api/src/main/java/org/apache/ ...

Copied: james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/MatcherConfigImpl.java (from r1000973, james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/MatcherConfigImpl.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/MatcherConfigImpl.java?p2=james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/MatcherConfigImpl.java&p1=james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/MatcherConfigImpl.java&r1=1000973&r2=1001230&rev=1001230&view=diff
==============================================================================
--- james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/MatcherConfigImpl.java (original)
+++ james/server/trunk/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/MatcherConfigImpl.java Sat Sep 25 15:01:19 2010
@@ -19,7 +19,7 @@
 
 
 
-package org.apache.james.transport;
+package org.apache.james.mailetcontainer;
 
 import org.apache.mailet.MailetContext;
 import org.apache.mailet.MatcherConfig;

Modified: james/server/trunk/mailets/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/mailets/pom.xml?rev=1001230&r1=1001229&r2=1001230&view=diff
==============================================================================
--- james/server/trunk/mailets/pom.xml (original)
+++ james/server/trunk/mailets/pom.xml Sat Sep 25 15:01:19 2010
@@ -86,6 +86,10 @@
     </dependency>
     <dependency>
       <groupId>org.apache.james</groupId>
+      <artifactId>james-server-queue-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.james</groupId>
       <artifactId>james-server-dnsservice-api</artifactId>
     </dependency>
     <dependency>
@@ -109,7 +113,10 @@
       <groupId>org.apache.james</groupId>
       <artifactId>james-server-core-library</artifactId>
     </dependency>
-
+    <dependency>
+      <groupId>org.apache.james</groupId>
+      <artifactId>apache-jsieve-mailet</artifactId>
+    </dependency>
     <dependency>
       <groupId>org.apache.james</groupId>
       <artifactId>apache-mailet</artifactId>

Copied: james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/LocalDelivery.java (from r1000973, james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/mailets/LocalDelivery.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/LocalDelivery.java?p2=james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/LocalDelivery.java&p1=james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/mailets/LocalDelivery.java&r1=1000973&r2=1001230&rev=1001230&view=diff
==============================================================================
--- james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/mailets/LocalDelivery.java (original)
+++ james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/LocalDelivery.java Sat Sep 25 15:01:19 2010
@@ -23,8 +23,8 @@ package org.apache.james.transport.maile
 
 import org.apache.james.api.user.UsersRepository;
 import org.apache.james.api.user.UsersStore;
+import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.services.MailServer;
-import org.apache.jsieve.mailet.Poster;
 import org.apache.mailet.base.GenericMailet;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailetConfig;
@@ -62,7 +62,7 @@ public class LocalDelivery extends Gener
 
     private MailServer mailServer;
 
-	private Poster poster;
+    private MailboxManager mailboxManager;
 
 
     
@@ -83,9 +83,9 @@ public class LocalDelivery extends Gener
     }
     
 
-    @Resource(name="org.apache.jsieve.mailet.Poster")
-    public void setPoster(Poster poster) {
-        this.poster = poster;
+    @Resource(name="mailboxmanager")
+    public void setMailboxManager(MailboxManager mailboxManager) {
+        this.mailboxManager = mailboxManager;
     }
     
     /**
@@ -156,7 +156,7 @@ public class LocalDelivery extends Gener
 
         };
         sieveMailet.setMailSerer(mailServer);
-        sieveMailet.setPoster(poster);
+        sieveMailet.setMailboxManager(mailboxManager);
         sieveMailet.init(m);
 
         sieveMailet.setQuiet(true);

Copied: james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/SieveMailet.java (from r1000973, james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/mailets/SieveMailet.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/SieveMailet.java?p2=james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/SieveMailet.java&p1=james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/mailets/SieveMailet.java&r1=1000973&r2=1001230&rev=1001230&view=diff
==============================================================================
--- james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/mailets/SieveMailet.java (original)
+++ james/server/trunk/mailets/src/main/java/org/apache/james/transport/mailets/SieveMailet.java Sat Sep 25 15:01:19 2010
@@ -19,9 +19,20 @@
 
 package org.apache.james.transport.mailets;
 
+import java.io.IOException;
+import java.util.Date;
+
 import javax.annotation.Resource;
 import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
 
+import org.apache.commons.logging.Log;
+import org.apache.james.core.MimeMessageInputStream;
+import org.apache.james.mailbox.MailboxConstants;
+import org.apache.james.mailbox.MailboxManager;
+import org.apache.james.mailbox.MailboxPath;
+import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageManager;
 import org.apache.james.services.MailServer;
 import org.apache.jsieve.mailet.Poster;
 import org.apache.jsieve.mailet.SieveMailboxMailet;
@@ -31,37 +42,34 @@ import org.apache.mailet.MailetConfig;
 /**
  * Contains resource bindings.
  */
-public class SieveMailet extends SieveMailboxMailet {
+public class SieveMailet extends SieveMailboxMailet implements Poster{
 
     private MailServer mailServer;
+    private MailboxManager mailboxManager;
 
     @Resource(name="James")
     public void setMailSerer(MailServer mailServer) {
         this.mailServer = mailServer;
     }
 
+    
+    @Resource(name="mailboxmanager")
+    public void setMailboxManager(MailboxManager mailboxManager) {
+        this.mailboxManager = mailboxManager;
+    }
 
     @Override
     public void init(MailetConfig config) throws MessagingException {
         // ATM Fixed implementation
         setLocator(new ResourceLocatorImpl(mailServer.supportVirtualHosting()));
-        
+        setPoster(this);
         super.init(config);
     }
 
-
-
-
     public SieveMailet() {
         super();
 
     }
-
-    @Resource(name="org.apache.jsieve.mailet.Poster")
-    @Override
-    public void setPoster(Poster poster) {
-        super.setPoster(poster);
-    }
    
     /**
      * Return the username to use for sieve processing for the given MailAddress. If virtualhosting
@@ -77,5 +85,175 @@ public class SieveMailet extends SieveMa
             return super.getUsername(m);
         }
     }
-    
+   
+
+        /**
+     * @see org.apache.jsieve.mailet.Poster#post(java.lang.String,
+     *      javax.mail.internet.MimeMessage)
+     */
+    public void post(String url, MimeMessage mail) throws MessagingException {
+        final int endOfScheme = url.indexOf(':');
+        if (endOfScheme < 0) {
+            throw new MessagingException("Malformed URI");
+        } else {
+            final String scheme = url.substring(0, endOfScheme);
+            if ("mailbox".equals(scheme)) {
+                final int startOfUser = endOfScheme + 3;
+                final int endOfUser = url.indexOf('@', startOfUser);
+                if (endOfUser < 0) {
+                    // TODO: when user missing, append to a default location
+                    throw new MessagingException("Shared mailbox is not supported");
+                } else {
+                    String user = url.substring(startOfUser, endOfUser);
+                    final int startOfHost = endOfUser + 1;
+                    final int endOfHost = url.indexOf('/', startOfHost);
+                    final String host = url.substring(startOfHost, endOfHost);
+                    // if (!"localhost".equals(host)) {
+                    if (mailServer.isLocalServer(host) == false) {
+                        // TODO: possible support for clustering?
+                        throw new MessagingException("Only local mailboxes are supported");
+                    } else {
+                        final String urlPath;
+                        final int length = url.length();
+                        if (endOfHost + 1 == length) {
+                            urlPath = "INBOX";
+                        } else {
+                            urlPath = url.substring(endOfHost, length);
+                        }
+
+                        // check if we should use the full emailaddress as
+                        // username
+                        if (mailServer.supportVirtualHosting()) {
+                            user = user + "@" + host;
+                        }
+
+                        final MailboxSession session = mailboxManager.createSystemSession(user, new MailetLog());
+
+                        // start processing request
+                        mailboxManager.startProcessingRequest(session);
+
+                        // This allows Sieve scripts to use a standard delimiter
+                        // regardless of mailbox implementation
+                        String destination = urlPath.replace('/', MailboxConstants.DEFAULT_DELIMITER);
+
+                        if (destination == null || "".equals(destination)) {
+                            destination = "INBOX";
+                        }
+                        if (destination.startsWith(MailboxConstants.DEFAULT_DELIMITER_STRING))
+                            destination = destination.substring(1);
+                        final MailboxPath path = new MailboxPath(MailboxConstants.USER_NAMESPACE, user, destination);
+                        try {
+                            if ("INBOX".equalsIgnoreCase(destination) && !(mailboxManager.mailboxExists(path, session))) {
+                                mailboxManager.createMailbox(path, session);
+                            }
+                            final MessageManager mailbox = mailboxManager.getMailbox(path, session);
+
+                            if (mailbox == null) {
+                                final String error = "Mailbox for user " + user + " was not found on this server.";
+                                throw new MessagingException(error);
+                            }
+
+                            mailbox.appendMessage(new MimeMessageInputStream(mail), new Date(), session, true, null);
+                        } catch (IOException e) {
+                            throw new MessagingException("Failed to write mail message", e);
+                        } finally {
+                            session.close();
+                            mailboxManager.logout(session, true);
+
+                            // stop processing request
+                            mailboxManager.endProcessingRequest(session);
+                        }
+                    }
+                }
+            } else {
+                // TODO: add support for more protocols
+                // TODO: for example mailto: for forwarding over SMTP
+                // TODO: for example xmpp: for forwarding over Jabber
+                throw new MessagingException("Unsupported protocol");
+            }
+        }
+    }
+
+    private final class MailetLog implements Log {
+
+        public void debug(Object arg0) {
+
+        }
+
+        public void debug(Object arg0, Throwable arg1) {
+        }
+
+        public void error(Object arg0) {
+            log(arg0.toString());
+        }
+
+        public void error(Object arg0, Throwable arg1) {
+            log(arg0.toString(), arg1);
+
+        }
+
+        public void fatal(Object arg0) {
+            log(arg0.toString());
+
+        }
+
+        public void fatal(Object arg0, Throwable arg1) {
+            log(arg0.toString(), arg1);
+
+        }
+
+        public void info(Object arg0) {
+            log(arg0.toString());
+
+        }
+
+        public void info(Object arg0, Throwable arg1) {
+            log(arg0.toString(), arg1);
+
+        }
+
+        public boolean isDebugEnabled() {
+            return false;
+        }
+
+        public boolean isErrorEnabled() {
+            return true;
+        }
+
+        public boolean isFatalEnabled() {
+            return true;
+        }
+
+        public boolean isInfoEnabled() {
+            return true;
+        }
+
+        public boolean isTraceEnabled() {
+            return false;
+        }
+
+        public boolean isWarnEnabled() {
+            return true;
+        }
+
+        public void trace(Object arg0) {
+
+        }
+
+        public void trace(Object arg0, Throwable arg1) {
+
+        }
+
+        public void warn(Object arg0) {
+            log(arg0.toString());
+
+        }
+
+        public void warn(Object arg0, Throwable arg1) {
+            log(arg0.toString(), arg1);
+
+        }
+
+    }
+
 }

Modified: james/server/trunk/mailets/src/test/java/org/apache/james/transport/remotedeliverytester/AbstractRemoteDeliveryTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/mailets/src/test/java/org/apache/james/transport/remotedeliverytester/AbstractRemoteDeliveryTest.java?rev=1001230&r1=1000973&r2=1001230&view=diff
==============================================================================
--- james/server/trunk/mailets/src/test/java/org/apache/james/transport/remotedeliverytester/AbstractRemoteDeliveryTest.java (original)
+++ james/server/trunk/mailets/src/test/java/org/apache/james/transport/remotedeliverytester/AbstractRemoteDeliveryTest.java Sat Sep 25 15:01:19 2010
@@ -34,8 +34,6 @@ import javax.mail.SendFailedException;
 import junit.framework.AssertionFailedError;
 import junit.framework.TestCase;
 
-import org.apache.camel.Exchange;
-import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.james.transport.remotedeliverytester.Tester.TestStatus;
 
 // TODO: FIX tests!

Modified: james/server/trunk/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/pom.xml?rev=1001230&r1=1001229&r2=1001230&view=diff
==============================================================================
--- james/server/trunk/pom.xml (original)
+++ james/server/trunk/pom.xml Sat Sep 25 15:01:19 2010
@@ -56,6 +56,9 @@
     <module>pop3server</module>
     <module>spool-api</module>
     <module>spoolmanager</module>
+    <module>mailetcontainer-api</module>
+    <module>mailetcontainer-impl</module>
+    <module>mailetcontainer-camel</module>
     <module>remotemanager</module>
     <module>mailets</module>
     <module>fetchmail</module>
@@ -333,9 +336,27 @@
       <artifactId>protocols-smtp</artifactId>
       <version>${protocols.version}</version>
     </dependency>
+
+    <dependency>
+      <groupId>org.apache.james</groupId>
+      <artifactId>james-server-mailetcontainer-api</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.james</groupId>
+      <artifactId>james-server-mailetcontainer-impl</artifactId>
+      <version>${project.version}</version>
+    </dependency>
     
     <dependency>
       <groupId>org.apache.james</groupId>
+      <artifactId>james-server-mailetcontainer-camel</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+       
+    <dependency>
+      <groupId>org.apache.james</groupId>
       <artifactId>james-server-mailbox-adapter</artifactId>
       <version>${project.version}</version>
     </dependency>

Modified: james/server/trunk/spoolmanager/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager/pom.xml?rev=1001230&r1=1001229&r2=1001230&view=diff
==============================================================================
--- james/server/trunk/spoolmanager/pom.xml (original)
+++ james/server/trunk/spoolmanager/pom.xml Sat Sep 25 15:01:19 2010
@@ -28,33 +28,29 @@
   <artifactId>james-server-spoolmanager</artifactId>
   <name>Apache James Server SpoolManager</name>
   <dependencies>
-    <dependency>
-      <groupId>org.apache.james</groupId>
-      <artifactId>james-server-user-library</artifactId>
-    </dependency>
-    <dependency>
+     <dependency>
       <groupId>org.apache.james</groupId>
-      <artifactId>james-server-core-api</artifactId>
+      <artifactId>james-server-mailetcontainer-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.james</groupId>
-      <artifactId>james-server-dnsservice-api</artifactId>
-    </dependency>
+      <artifactId>james-server-core-library</artifactId>
+    </dependency>  
     <dependency>
       <groupId>org.apache.james</groupId>
       <artifactId>james-server-user-api</artifactId>
-    </dependency>
+    </dependency>   
     <dependency>
       <groupId>org.apache.james</groupId>
-      <artifactId>james-server-domain-api</artifactId>
+      <artifactId>james-server-core-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.james</groupId>
-      <artifactId>james-server-common-util</artifactId>
+      <artifactId>james-server-dnsservice-api</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.james</groupId>
-      <artifactId>james-server-core-library</artifactId>
+      <artifactId>james-server-domain-api</artifactId>
     </dependency>
      <dependency>
       <groupId>org.apache.james</groupId>
@@ -62,18 +58,6 @@
     </dependency>
     <dependency>
       <groupId>org.apache.james</groupId>
-      <artifactId>apache-mailet-base</artifactId>
-    </dependency>   
-    <dependency>
-      <groupId>org.apache.james</groupId>
-      <artifactId>apache-jsieve-mailet</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.james</groupId>
-      <artifactId>apache-james-mailbox-api</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.james</groupId>
       <artifactId>james-server-queue-api</artifactId>
     </dependency>
     <dependency>
@@ -92,14 +76,6 @@
        <groupId>org.apache.geronimo.specs</groupId>
        <artifactId>geronimo-annotation_1.0_spec</artifactId>
     </dependency>
-   <dependency>
-     <groupId>org.apache.camel</groupId>
-     <artifactId>camel-core</artifactId>
-   </dependency>
-    <dependency>
-      <groupId>oro</groupId>
-      <artifactId>oro</artifactId>
-    </dependency>
     <!-- Test dependencies -->
     <dependency>
       <groupId>org.apache.james</groupId>

Copied: james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/JamesSpoolManager.java (from r1000973, james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/JamesSpoolManager.java)
URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/JamesSpoolManager.java?p2=james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/JamesSpoolManager.java&p1=james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/JamesSpoolManager.java&r1=1000973&r2=1001230&rev=1001230&view=diff
==============================================================================
--- james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/JamesSpoolManager.java (original)
+++ james/server/trunk/spoolmanager/src/main/java/org/apache/james/transport/JamesSpoolManager.java Sat Sep 25 15:01:19 2010
@@ -36,6 +36,9 @@ import org.apache.commons.logging.Log;
 import org.apache.james.lifecycle.Configurable;
 import org.apache.james.lifecycle.LifecycleUtil;
 import org.apache.james.lifecycle.LogEnabled;
+import org.apache.james.mailetcontainer.MailProcessor;
+import org.apache.james.mailetcontainer.MailProcessorList;
+import org.apache.james.mailetcontainer.MailetContainer;
 import org.apache.james.queue.MailQueue;
 import org.apache.james.queue.MailQueueFactory;
 import org.apache.james.queue.MailQueue.DequeueOperation;

Modified: james/server/trunk/spring-deployment/pom.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/spring-deployment/pom.xml?rev=1001230&r1=1001229&r2=1001230&view=diff
==============================================================================
--- james/server/trunk/spring-deployment/pom.xml (original)
+++ james/server/trunk/spring-deployment/pom.xml Sat Sep 25 15:01:19 2010
@@ -404,6 +404,17 @@
     </dependency>
     <dependency>
       <groupId>org.apache.james</groupId>
+      <artifactId>james-server-mailetcontainer-impl</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.james</groupId>
+      <artifactId>james-server-mailetcontainer-camel</artifactId>
+      <scope>runtime</scope>
+    </dependency>
+    
+    <dependency>
+      <groupId>org.apache.james</groupId>
       <artifactId>james-server-mailbox-adapter</artifactId>
       <scope>runtime</scope>
     </dependency>

Modified: james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml?rev=1001230&r1=1001229&r2=1001230&view=diff
==============================================================================
--- james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml (original)
+++ james/server/trunk/spring-deployment/src/main/config/james/spring-beans.xml Sat Sep 25 15:01:19 2010
@@ -155,7 +155,7 @@
     </bean>
         
     <!-- Build the camelroute from the spoolmanager.xml -->
-    <bean id="mailProcessor" name="processorRoute" class="org.apache.james.transport.camel.CamelMailProcessorList"/>
+    <bean id="mailProcessor" name="processorRoute" class="org.apache.james.mailetcontainer.camel.CamelMailProcessorList"/>
 
     <bean id="spoolmanager" class="org.apache.james.transport.JamesSpoolManager"/>
     
@@ -165,9 +165,9 @@
 
     <bean id="mailetcontext" class="org.apache.james.JamesMailetContext"/>
 
-    <bean id="matcherpackages" class="org.apache.james.transport.JamesMatcherLoader" />
+    <bean id="matcherpackages" class="org.apache.james.mailetcontainer.JamesMatcherLoader" />
 
-    <bean id="mailetpackages" class="org.apache.james.transport.JamesMailetLoader" />
+    <bean id="mailetpackages" class="org.apache.james.mailetcontainer.JamesMailetLoader" />
 
     <bean id="dnsserver" class="org.apache.james.dnsserver.DNSServer" />
 
@@ -284,9 +284,6 @@
     <bean id="domainlist" class="org.apache.james.domain.JDBCDomainList"/>
     -->
 
-    <!-- Poster -->
-    <bean id="poster" name="org.apache.jsieve.mailet.Poster" class="org.apache.james.MailboxManagerPoster"/>
-
     <!-- IMAP server Beans -->
     <bean id="imapserver" class="org.apache.james.imapserver.netty.NioImapServer">
         <property name="imapDecoder" ref="imapDecoder"/>



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org