Author: rdonkin Date: Wed Sep 3 14:23:03 2008 New Revision: 691782 URL: http://svn.apache.org/viewvc?rev=691782&view=rev Log: Experimental decoupling of Sieve mailet from IMAP. Note that this probably doesn't work but may be useful for illustrative purposes. JAMES-858.
Modified: james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/SieveToMultiMailbox.java Modified: james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java?rev=691782&r1=691781&r2=691782&view=diff ============================================================================== --- james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java (original) +++ james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/Actions.java Wed Sep 3 14:23:03 2008 @@ -23,7 +23,6 @@ import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Collection; -import java.util.Date; import javax.mail.Address; import javax.mail.MessagingException; @@ -31,13 +30,9 @@ import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; -import org.apache.avalon.framework.service.ServiceException; import org.apache.avalon.framework.service.ServiceManager; import org.apache.james.Constants; -import org.apache.james.mailboxmanager.MailboxSession; -import org.apache.james.mailboxmanager.mailbox.Mailbox; -import org.apache.james.mailboxmanager.manager.MailboxManager; -import org.apache.james.mailboxmanager.manager.MailboxManagerProvider; +import org.apache.james.core.MailImpl; import org.apache.james.util.mail.mdn.ActionModeAutomatic; import org.apache.james.util.mail.mdn.Disposition; import org.apache.james.util.mail.mdn.DispositionModifier; @@ -60,6 +55,7 @@ public class Actions { private static final String INBOX = "INBOX"; + private static final char HIERARCHY_DELIMITER = '.'; static private String fieldAttributePrefix; /** @@ -93,43 +89,39 @@ * @param anAction * @param aMail * @param aMailetContext + * @param poster TODO * @throws MessagingException */ static public void execute(ActionFileInto anAction, Mail aMail, - MailetContext aMailetContext) throws MessagingException + MailetContext aMailetContext, Poster poster) throws MessagingException { ServiceManager compMgr = (ServiceManager)aMailetContext .getAttribute(Constants.AVALON_COMPONENT_MANAGER); String destinationMailbox = anAction.getDestination(); MailAddress recipient; - MailboxManagerProvider mailboxManagerProvider; boolean delivered = false; try { - mailboxManagerProvider = (MailboxManagerProvider) compMgr - .lookup(MailboxManagerProvider.class.getName()); recipient = getSoleRecipient(aMail); MimeMessage localMessage = createMimeMessage(aMail, recipient); if (!(destinationMailbox.length() > 0 - && destinationMailbox.charAt(0) == MailboxManager.HIERARCHY_DELIMITER)) { - destinationMailbox = MailboxManager.HIERARCHY_DELIMITER + destinationMailbox; + && destinationMailbox.charAt(0) == HIERARCHY_DELIMITER)) { + destinationMailbox = HIERARCHY_DELIMITER + destinationMailbox; } - final String mailboxName = - mailboxManagerProvider.getMailboxManager().resolve(recipient.getUser(), destinationMailbox); - final MailboxManager mailboxManager = mailboxManagerProvider.getMailboxManager(); - Mailbox mailbox=mailboxManager.getMailbox(mailboxName, true); - final MailboxSession session = mailboxManager.createSession(); - mailbox.appendMessage(localMessage, new Date(), null, session); - session.close(); + + final String url = "mailbox://" + recipient.getUser() + "@localhost/" + + destinationMailbox.replace(HIERARCHY_DELIMITER, '/'); + //TODO: copying this message so many times seems a waste + Mail mail = new MailImpl(); + mail.setMessage(localMessage); + poster.post(url, mail); delivered = true; } catch (MessagingException ex) { aMailetContext.log("Error while storing mail into. "+destinationMailbox, ex); throw ex; - } catch (ServiceException e) { - aMailetContext.log("Error while storing mail into. "+destinationMailbox, e); } finally { @@ -180,10 +172,10 @@ * @throws MessagingException */ public static void execute(ActionKeep anAction, Mail aMail, - MailetContext aMailetContext) throws MessagingException + MailetContext aMailetContext, Poster poster) throws MessagingException { final ActionFileInto action = new ActionFileInto(INBOX); - execute(action, aMail, aMailetContext); + execute(action, aMail, aMailetContext, poster); } /** Modified: james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/SieveToMultiMailbox.java URL: http://svn.apache.org/viewvc/james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/SieveToMultiMailbox.java?rev=691782&r1=691781&r2=691782&view=diff ============================================================================== --- james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/SieveToMultiMailbox.java (original) +++ james/server/trunk/spoolmanager-function/src/main/java/org/apache/james/transport/mailets/sieve/SieveToMultiMailbox.java Wed Sep 3 14:23:03 2008 @@ -22,7 +22,6 @@ import java.io.File; import java.io.FileInputStream; import java.util.Collection; -import java.util.Date; import java.util.Enumeration; import java.util.Iterator; import java.util.Vector; @@ -32,19 +31,12 @@ import javax.mail.internet.InternetHeaders; import javax.mail.internet.MimeMessage; -import org.apache.avalon.framework.service.ServiceException; -import org.apache.avalon.framework.service.ServiceManager; -import org.apache.james.Constants; -import org.apache.james.impl.user.DefaultUser; -import org.apache.james.mailboxmanager.MailboxSession; -import org.apache.james.mailboxmanager.mailbox.Mailbox; -import org.apache.james.mailboxmanager.manager.MailboxManager; -import org.apache.james.mailboxmanager.manager.MailboxManagerProvider; import org.apache.jsieve.SieveFactory; import org.apache.jsieve.mail.MailAdapter; import org.apache.mailet.GenericMailet; import org.apache.mailet.Mail; import org.apache.mailet.MailAddress; +import org.apache.mailet.MailetException; import org.apache.mailet.RFC2822Headers; /** @@ -78,8 +70,34 @@ * resetReturnPath */ private boolean resetReturnPath; + /** Experimental */ + private Poster poster; - private MailboxManagerProvider mailboxManagerProvider; + /** + * For SDI + */ + public SieveToMultiMailbox() {} + + /** + * CDI + * @param poster not null + */ + public SieveToMultiMailbox(Poster poster) { + super(); + this.poster = poster; + } + + public final Poster getPoster() { + return poster; + } + + /** + * For SDI + * @param poster not null + */ + public final void setPoster(Poster poster) { + this.poster = poster; + } /** * Delivers a mail to a local mailbox. @@ -206,7 +224,7 @@ storeMessageSieve(sieveFileName, username, mail); } else { getMailetContext().log(new File(sieveFileName).getAbsolutePath()+ " does not exists"); - storeMessageInbox(username, mail.getMessage()); + storeMessageInbox(username, mail); } } @@ -230,25 +248,13 @@ // So just log and store in INBOX. // log("Cannot evaluate Sieve script. Storing mail in user INBOX.", ex); - storeMessageInbox(username, aMail.getMessage()); + storeMessageInbox(username, aMail); } } - void storeMessageInbox(String username, MimeMessage message) throws MessagingException { - final MailboxManagerProvider mailboxManagerProvider = getMailboxManagerProvider(); - final String inboxName = mailboxManagerProvider.getMailboxManager().resolve(username, "INBOX"); - - final MailboxManager mailboxManager = mailboxManagerProvider.getMailboxManager(); - final MailboxSession session = mailboxManager.createSession(); - Mailbox inbox = mailboxManager.getMailbox(inboxName, true); - - if (inbox == null) { - String error = "Mailbox for user " + username - + " was not found on this server."; - throw new MessagingException(error); - } - inbox.appendMessage(message, new Date(), null, session); - session.close(); + void storeMessageInbox(String username, Mail mail) throws MessagingException { + String url = "mailbox://" + username + "@localhost/"; + poster.post(url, mail); } /** @@ -256,30 +262,13 @@ */ public void init() throws MessagingException { super.init(); - ServiceManager compMgr = (ServiceManager) getMailetContext() - .getAttribute(Constants.AVALON_COMPONENT_MANAGER); - - try { - setMailboxManagerProvider((MailboxManagerProvider) compMgr - .lookup(MailboxManagerProvider.class.getName())); - } catch (ServiceException cnfe) { - log("Failed to retrieve Store component:" + cnfe.getMessage()); - } catch (Exception e) { - log("Failed to retrieve Store component:" + e.getMessage()); + if (poster == null) { + throw new MailetException("Not initialised. Please ensure that the mailet container supports either" + + " setter or constructor injection"); } - + deliveryHeader = getInitParameter("addDeliveryHeader"); String resetReturnPathString = getInitParameter("resetReturnPath"); resetReturnPath = "true".equalsIgnoreCase(resetReturnPathString); } - - public void setMailboxManagerProvider( - MailboxManagerProvider mailboxManagerProvider) { - this.mailboxManagerProvider = mailboxManagerProvider; - } - - MailboxManagerProvider getMailboxManagerProvider() { - return mailboxManagerProvider; - } - } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]