This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 5d178d34080ee9725cb77bc6e000ce81b97f282b Author: Benoit Tellier <[email protected]> AuthorDate: Fri Oct 1 14:32:03 2021 +0700 JAMES-3658 Interface for MailboxAppender --- .../james/transport/mailets/LocalDelivery.java | 4 +- .../james/transport/mailets/ToSenderFolder.java | 6 +- .../mailets/delivery/MailboxAppender.java | 116 +-------------------- ...ilboxAppender.java => MailboxAppenderImpl.java} | 6 +- ...enderTest.java => MailboxAppenderImplTest.java} | 6 +- .../mailets/delivery/SimpleMailStoreTest.java | 4 +- 6 files changed, 15 insertions(+), 127 deletions(-) diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/LocalDelivery.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/LocalDelivery.java index 168f918..b6ac485 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/LocalDelivery.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/LocalDelivery.java @@ -27,7 +27,7 @@ import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.model.MailboxConstants; import org.apache.james.metrics.api.MetricFactory; import org.apache.james.transport.mailets.delivery.MailDispatcher; -import org.apache.james.transport.mailets.delivery.MailboxAppender; +import org.apache.james.transport.mailets.delivery.MailboxAppenderImpl; import org.apache.james.transport.mailets.delivery.SimpleMailStore; import org.apache.james.user.api.UsersRepository; import org.apache.mailet.Mail; @@ -71,7 +71,7 @@ public class LocalDelivery extends GenericMailet { public void init() throws MessagingException { mailDispatcher = MailDispatcher.builder() .mailStore(SimpleMailStore.builder() - .mailboxAppender(new MailboxAppender(mailboxManager)) + .mailboxAppender(new MailboxAppenderImpl(mailboxManager)) .usersRepository(usersRepository) .folder(MailboxConstants.INBOX) .metric(metricFactory.generate(LOCAL_DELIVERED_MAILS_METRIC_NAME)) diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java index 0c3423b..bdd55a8 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java @@ -25,7 +25,7 @@ import javax.mail.MessagingException; import org.apache.james.core.MailAddress; import org.apache.james.core.Username; import org.apache.james.mailbox.MailboxManager; -import org.apache.james.transport.mailets.delivery.MailboxAppender; +import org.apache.james.transport.mailets.delivery.MailboxAppenderImpl; import org.apache.james.user.api.UsersRepository; import org.apache.james.user.api.UsersRepositoryException; import org.apache.mailet.Experimental; @@ -58,7 +58,7 @@ public class ToSenderFolder extends GenericMailet { private final MailboxManager mailboxManager; private String folder; private boolean consume; - private MailboxAppender mailboxAppender; + private MailboxAppenderImpl mailboxAppender; @Inject public ToSenderFolder(UsersRepository usersRepository, @Named("mailboxmanager") MailboxManager mailboxManager) { @@ -102,7 +102,7 @@ public class ToSenderFolder extends GenericMailet { public void init() throws MessagingException { folder = getInitParameter("folder", "Sent"); consume = getInitParameter("consume", false); - mailboxAppender = new MailboxAppender(mailboxManager); + mailboxAppender = new MailboxAppenderImpl(mailboxManager); } @Override diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java index 4ee113f..2641dc7 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java @@ -19,124 +19,12 @@ package org.apache.james.transport.mailets.delivery; -import java.io.IOException; -import java.io.InputStream; - import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.apache.james.core.Username; -import org.apache.james.mailbox.MailboxManager; -import org.apache.james.mailbox.MailboxSession; -import org.apache.james.mailbox.MessageManager; -import org.apache.james.mailbox.MessageManager.AppendResult; -import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.exception.MailboxExistsException; -import org.apache.james.mailbox.exception.MailboxNotFoundException; import org.apache.james.mailbox.model.ComposedMessageId; -import org.apache.james.mailbox.model.Content; -import org.apache.james.mailbox.model.MailboxPath; -import org.apache.james.server.core.MimeMessageInputStream; -import org.apache.james.server.core.MimeMessageUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.google.common.base.Strings; - -public class MailboxAppender { - private static final Logger LOGGER = LoggerFactory.getLogger(MailboxAppender.class); - - private final MailboxManager mailboxManager; - - public MailboxAppender(MailboxManager mailboxManager) { - this.mailboxManager = mailboxManager; - } - - public ComposedMessageId append(MimeMessage mail, Username user, String folder) throws MessagingException { - MailboxSession session = createMailboxSession(user); - return append(mail, user, useSlashAsSeparator(folder, session), session) - .getId(); - } - - private String useSlashAsSeparator(String urlPath, MailboxSession session) throws MessagingException { - String destination = urlPath.replace('/', session.getPathDelimiter()); - if (Strings.isNullOrEmpty(destination)) { - throw new MessagingException("Mail can not be delivered to empty folder"); - } - if (destination.charAt(0) == session.getPathDelimiter()) { - destination = destination.substring(1); - } - return destination; - } - - private AppendResult append(MimeMessage mail, Username user, String folder, MailboxSession session) throws MessagingException { - mailboxManager.startProcessingRequest(session); - try { - MailboxPath mailboxPath = MailboxPath.forUser(user, folder); - return appendMessageToMailbox(mail, session, mailboxPath); - } catch (MailboxException e) { - throw new MessagingException("Unable to access mailbox.", e); - } finally { - closeProcessing(session); - } - } - - private AppendResult appendMessageToMailbox(MimeMessage mail, MailboxSession session, MailboxPath path) throws MailboxException, MessagingException { - MessageManager mailbox = createMailboxIfNotExist(session, path); - if (mailbox == null) { - throw new MessagingException("Mailbox " + path + " for user " + session.getUser().asString() + " was not found on this server."); - } - Content content = new Content() { - @Override - public InputStream getInputStream() throws IOException { - try { - return new MimeMessageInputStream(mail); - } catch (MessagingException e) { - throw new IOException(e); - } - } - - @Override - public long size() throws MailboxException { - try { - return MimeMessageUtil.getMessageSize(mail); - } catch (MessagingException e) { - throw new MailboxException("Cannot compute message size", e); - } - } - }; - return mailbox.appendMessage( - MessageManager.AppendCommand.builder() - .recent() - .build(content), - session); - } - - private MessageManager createMailboxIfNotExist(MailboxSession session, MailboxPath path) throws MailboxException { - try { - return mailboxManager.getMailbox(path, session); - } catch (MailboxNotFoundException e) { - try { - mailboxManager.createMailbox(path, session); - return mailboxManager.getMailbox(path, session); - } catch (MailboxExistsException exist) { - LOGGER.info("Mailbox {} have been created concurrently", path); - return mailboxManager.getMailbox(path, session); - } - } - } - - public MailboxSession createMailboxSession(Username user) { - return mailboxManager.createSystemSession(user); - } - - private void closeProcessing(MailboxSession session) throws MessagingException { - session.close(); - try { - mailboxManager.logout(session); - } finally { - mailboxManager.endProcessingRequest(session); - } - } +public interface MailboxAppender { + ComposedMessageId append(MimeMessage mail, Username user, String folder) throws MessagingException; } diff --git a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppenderImpl.java similarity index 97% copy from server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java copy to server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppenderImpl.java index 4ee113f..a2d4979 100644 --- a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java +++ b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppenderImpl.java @@ -43,12 +43,12 @@ import org.slf4j.LoggerFactory; import com.google.common.base.Strings; -public class MailboxAppender { - private static final Logger LOGGER = LoggerFactory.getLogger(MailboxAppender.class); +public class MailboxAppenderImpl implements MailboxAppender { + private static final Logger LOGGER = LoggerFactory.getLogger(MailboxAppenderImpl.class); private final MailboxManager mailboxManager; - public MailboxAppender(MailboxManager mailboxManager) { + public MailboxAppenderImpl(MailboxManager mailboxManager) { this.mailboxManager = mailboxManager; } diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailboxAppenderTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailboxAppenderImplTest.java similarity index 97% rename from server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailboxAppenderTest.java rename to server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailboxAppenderImplTest.java index 72461e2..f489215 100644 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailboxAppenderTest.java +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailboxAppenderImplTest.java @@ -41,13 +41,13 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.RepeatedTest; import org.junit.jupiter.api.Test; -public class MailboxAppenderTest { +public class MailboxAppenderImplTest { public static final Username USER = Username.of("user"); public static final String FOLDER = "folder"; public static final String EMPTY_FOLDER = ""; - private MailboxAppender testee; + private MailboxAppenderImpl testee; private MailboxManager mailboxManager; private MimeMessage mimeMessage; private MailboxSession session; @@ -61,7 +61,7 @@ public class MailboxAppenderTest { .build(); mailboxManager = InMemoryIntegrationResources.defaultResources().getMailboxManager(); - testee = new MailboxAppender(mailboxManager); + testee = new MailboxAppenderImpl(mailboxManager); session = mailboxManager.createSystemSession(USER); } diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStoreTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStoreTest.java index d6d707c..7f35c2c 100644 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStoreTest.java +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStoreTest.java @@ -41,13 +41,13 @@ import org.junit.jupiter.api.Test; class SimpleMailStoreTest { public static final String FOLDER = "FOLDER"; private SimpleMailStore testee; - private MailboxAppender mailboxAppender; + private MailboxAppenderImpl mailboxAppender; private UsersRepository usersRepository; private MimeMessage mimeMessage; @BeforeEach void setUp() throws Exception { - mailboxAppender = mock(MailboxAppender.class); + mailboxAppender = mock(MailboxAppenderImpl.class); usersRepository = mock(UsersRepository.class); testee = SimpleMailStore.builder() .usersRepository(usersRepository) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
