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]

Reply via email to