Skip to content

Commit

Permalink
JAMES-1818 Remove store usage in PostDequeueDecorator
Browse files Browse the repository at this point in the history
  • Loading branch information
Raphael Ouazana committed Aug 29, 2016
1 parent f1116e2 commit b9c1f44
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 57 deletions.
Expand Up @@ -19,48 +19,33 @@
package org.apache.james.jmap.send;

import java.io.Serializable;
import java.util.Iterator;

import org.apache.james.jmap.exceptions.MailboxRoleNotFoundException;
import org.apache.james.jmap.model.MessageId;
import org.apache.james.jmap.model.mailbox.Role;
import org.apache.james.jmap.send.exception.MailShouldBeInOutboxException;
import org.apache.james.jmap.send.exception.MessageIdNotFoundException;
import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.exception.MailboxException;
import org.apache.james.mailbox.model.MailboxMetaData;
import org.apache.james.mailbox.model.MailboxPath;
import org.apache.james.mailbox.model.MailboxQuery;
import org.apache.james.mailbox.model.MessageRange;
import org.apache.james.mailbox.store.mail.MailboxMapperFactory;
import org.apache.james.mailbox.store.mail.MessageMapper;
import org.apache.james.mailbox.store.mail.MessageMapperFactory;
import org.apache.james.mailbox.store.mail.model.Mailbox;
import org.apache.james.mailbox.store.mail.model.MailboxMessage;
import org.apache.james.queue.api.MailQueue.MailQueueException;
import org.apache.james.queue.api.MailQueue.MailQueueItem;
import org.apache.james.queue.api.MailQueueItemDecoratorFactory.MailQueueItemDecorator;
import org.apache.mailet.Mail;
import org.javatuples.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class PostDequeueDecorator extends MailQueueItemDecorator {
private static final Logger LOG = LoggerFactory.getLogger(PostDequeueDecorator.class);

private final MailboxManager mailboxManager;
private final MessageMapperFactory messageMapperFactory;
private final MailboxMapperFactory mailboxMapperFactory;

public PostDequeueDecorator(MailQueueItem mailQueueItem,
MailboxManager mailboxManager,
MessageMapperFactory messageMapperFactory,
MailboxMapperFactory mailboxMapperFactory) {
MailboxManager mailboxManager) {
super(mailQueueItem);
this.mailboxManager = mailboxManager;
this.messageMapperFactory = messageMapperFactory;
this.mailboxMapperFactory = mailboxMapperFactory;
}

@Override
Expand All @@ -76,8 +61,7 @@ public void done(boolean success) throws MailQueueException {
String username = (String) getMail().getAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE);
try {
MailboxSession mailboxSession = mailboxManager.createSystemSession(username, LOG);
Pair<MailboxMessage, MailboxPath> mailboxMessageAndMailboxPath = getMailboxMessageAndMailboxPath(messageId, mailboxSession);
moveFromOutboxToSent(mailboxMessageAndMailboxPath, mailboxSession);
moveFromOutboxToSent(messageId, mailboxSession);
} catch (MailboxException e) {
throw new MailQueueException(e.getMessage(), e);
}
Expand Down Expand Up @@ -108,25 +92,12 @@ private boolean checkUsernameAttribute() {
return (username != null && username instanceof String);
}

public Pair<MailboxMessage, MailboxPath> getMailboxMessageAndMailboxPath(MessageId messageId, MailboxSession mailboxSession) throws MailQueueException, MailboxException {
MailboxPath mailboxPath = messageId.getMailboxPath();
MessageMapper messageMapper = messageMapperFactory.getMessageMapper(mailboxSession);
Mailbox mailbox = mailboxMapperFactory.getMailboxMapper(mailboxSession).findMailboxByPath(mailboxPath);
Iterator<MailboxMessage> resultIterator = messageMapper.findInMailbox(mailbox, MessageRange.one(messageId.getUid()), MessageMapper.FetchType.Full, 1);
if (resultIterator.hasNext()) {
return Pair.with(resultIterator.next(), mailboxPath);
} else {
throw new MessageIdNotFoundException(messageId);
}
}

private void moveFromOutboxToSent(Pair<MailboxMessage, MailboxPath> mailboxMessageAndMailboxPath, MailboxSession mailboxSession) throws MailQueueException, MailboxException {
MailboxMessage mailboxMessage = mailboxMessageAndMailboxPath.getValue0();
MailboxPath outboxMailboxPath = mailboxMessageAndMailboxPath.getValue1();
private void moveFromOutboxToSent(MessageId messageId, MailboxSession mailboxSession) throws MailQueueException, MailboxException {
MailboxPath outboxMailboxPath = messageId.getMailboxPath();
ensureMailboxPathIsOutbox(outboxMailboxPath);
MailboxPath sentMailboxPath = getSentMailboxPath(mailboxSession);

mailboxManager.moveMessages(MessageRange.one(mailboxMessage.getUid()), outboxMailboxPath, sentMailboxPath, mailboxSession);
mailboxManager.moveMessages(messageId.getUidAsRange(), outboxMailboxPath, sentMailboxPath, mailboxSession);
}

private void ensureMailboxPathIsOutbox(MailboxPath outboxMailboxPath) throws MailShouldBeInOutboxException {
Expand Down
Expand Up @@ -22,28 +22,20 @@
import javax.inject.Inject;

import org.apache.james.mailbox.MailboxManager;
import org.apache.james.mailbox.store.mail.MailboxMapperFactory;
import org.apache.james.mailbox.store.mail.MessageMapperFactory;
import org.apache.james.queue.api.MailQueue.MailQueueItem;
import org.apache.james.queue.api.MailQueueItemDecoratorFactory;

public class PostDequeueDecoratorFactory implements MailQueueItemDecoratorFactory {
private final MailboxManager mailboxManager;
private final MessageMapperFactory messageMapperFactory;
private final MailboxMapperFactory mailboxMapperFactory;

@Inject
public PostDequeueDecoratorFactory(MailboxManager mailboxManager,
MessageMapperFactory messageMapperFactory,
MailboxMapperFactory mailboxMapperFactory) {
this.mailboxManager = mailboxManager;
this.messageMapperFactory = messageMapperFactory;
this.mailboxMapperFactory = mailboxMapperFactory;
public PostDequeueDecoratorFactory(MailboxManager mailboxManager) {
this.mailboxManager = mailboxManager;
}

@Override
public MailQueueItemDecorator decorate(MailQueueItem mailQueueItem) {
return new PostDequeueDecorator(mailQueueItem, mailboxManager, messageMapperFactory, mailboxMapperFactory);
return new PostDequeueDecorator(mailQueueItem, mailboxManager);
}

}
Expand Up @@ -32,7 +32,6 @@
import org.apache.james.jmap.exceptions.MailboxRoleNotFoundException;
import org.apache.james.jmap.model.MessageId;
import org.apache.james.jmap.send.exception.MailShouldBeInOutboxException;
import org.apache.james.jmap.send.exception.MessageIdNotFoundException;
import org.apache.james.mailbox.MailboxSession;
import org.apache.james.mailbox.MessageManager;
import org.apache.james.mailbox.acl.GroupMembershipResolver;
Expand Down Expand Up @@ -85,7 +84,7 @@ public void init() throws Exception {
mockedMailQueueItem = mock(MailQueueItem.class);
mail = new FakeMail();
when(mockedMailQueueItem.getMail()).thenReturn(mail);
testee = new PostDequeueDecorator(mockedMailQueueItem, mailboxManager, mailboxSessionMapperFactory, mailboxSessionMapperFactory);
testee = new PostDequeueDecorator(mockedMailQueueItem, mailboxManager);
}

@Test
Expand All @@ -99,16 +98,6 @@ public void doneShouldCallDecoratedDone() throws Exception {
verify(mockedMailQueueItem).done(true);
}

@Test(expected=MessageIdNotFoundException.class)
public void doneShouldThrowWhenMetadataHasNotAnExistingMessageId() throws Exception {
MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME, LOGGER);
mailboxManager.createMailbox(OUTBOX_MAILBOX_PATH, mailboxSession);
mail.setAttribute(MailMetadata.MAIL_METADATA_MESSAGE_ID_ATTRIBUTE, MESSAGE_ID);
mail.setAttribute(MailMetadata.MAIL_METADATA_USERNAME_ATTRIBUTE, USERNAME);

testee.done(true);
}

@Test(expected=MailShouldBeInOutboxException.class)
public void doneShouldThrowWhenMessageIsNotInOutbox() throws Exception {
MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME, LOGGER);
Expand Down

0 comments on commit b9c1f44

Please sign in to comment.