You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by rc...@apache.org on 2021/10/04 08:09:00 UTC
[james-project] 02/02: JAMES-3658 Interface for MailboxAppender
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 <bt...@linagora.com>
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: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org