This is an automated email from the ASF dual-hosted git repository. btellier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit c01dabc5a9ebf799f7d535c361243741c006eeeb Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Mon Nov 11 15:56:19 2019 +0700 MAILBOX-391 Simplify some quota related code We can avoid some Mailbox -> MailboxPath -> Mailbox roundtrips --- .../apache/james/mailbox/quota/QuotaRootResolver.java | 3 ++- .../mailbox/store/quota/CurrentQuotaCalculator.java | 18 +----------------- .../store/quota/DefaultUserQuotaRootResolver.java | 8 +++----- .../store/quota/DefaultUserQuotaRootResolverTest.java | 2 +- .../apache/james/imap/processor/GetQuotaProcessor.java | 8 ++++---- .../james/imap/processor/GetQuotaProcessorTest.java | 10 +++++++--- 6 files changed, 18 insertions(+), 31 deletions(-) diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/quota/QuotaRootResolver.java b/mailbox/api/src/main/java/org/apache/james/mailbox/quota/QuotaRootResolver.java index 2ba6cf9..258a870 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/quota/QuotaRootResolver.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/quota/QuotaRootResolver.java @@ -23,6 +23,7 @@ import java.util.List; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.exception.MailboxException; +import org.apache.james.mailbox.model.Mailbox; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.QuotaRoot; @@ -39,5 +40,5 @@ public interface QuotaRootResolver extends QuotaRootDeserializer { QuotaRoot getQuotaRoot(MailboxId mailboxId) throws MailboxException; - List<MailboxPath> retrieveAssociatedMailboxes(QuotaRoot quotaRoot, MailboxSession mailboxSession) throws MailboxException; + List<Mailbox> retrieveAssociatedMailboxes(QuotaRoot quotaRoot, MailboxSession mailboxSession) throws MailboxException; } diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/CurrentQuotaCalculator.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/CurrentQuotaCalculator.java index a97f717..a46b2dd 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/CurrentQuotaCalculator.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/CurrentQuotaCalculator.java @@ -29,17 +29,13 @@ import javax.inject.Inject; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.Mailbox; -import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.MessageRange; import org.apache.james.mailbox.model.QuotaRoot; import org.apache.james.mailbox.quota.QuotaRootResolver; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; -import org.apache.james.mailbox.store.mail.MailboxMapper; import org.apache.james.mailbox.store.mail.MessageMapper; import org.apache.james.mailbox.store.mail.model.MailboxMessage; -import com.google.common.collect.Lists; - public class CurrentQuotaCalculator { private final MailboxSessionMapperFactory factory; @@ -53,7 +49,7 @@ public class CurrentQuotaCalculator { } public CurrentQuotas recalculateCurrentQuotas(QuotaRoot quotaRoot, MailboxSession session) throws MailboxException { - List<Mailbox> mailboxes = retrieveMailboxes(quotaRoot, session); + List<Mailbox> mailboxes = quotaRootResolver.retrieveAssociatedMailboxes(quotaRoot, session); MessageMapper mapper = factory.getMessageMapper(session); long messagesSizes = 0; long messageCount = 0; @@ -67,18 +63,6 @@ public class CurrentQuotaCalculator { return new CurrentQuotas(messageCount, messagesSizes); } - private List<Mailbox> retrieveMailboxes(QuotaRoot quotaRoot, MailboxSession session) throws MailboxException { - List<MailboxPath> paths = quotaRootResolver.retrieveAssociatedMailboxes(quotaRoot, session); - final MailboxMapper mapper = factory.getMailboxMapper(session); - return Lists.transform(paths, mailboxPath -> { - try { - return mapper.findMailboxByPath(mailboxPath); - } catch (MailboxException e) { - throw new RuntimeException(e); - } - }); - } - public static class CurrentQuotas { private final long count; private final long size; diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolver.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolver.java index 0b420c4..d7f54d9 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolver.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolver.java @@ -39,7 +39,6 @@ import org.apache.james.mailbox.store.SessionProvider; import com.google.common.base.Preconditions; import com.google.common.base.Splitter; -import com.google.common.collect.Lists; public class DefaultUserQuotaRootResolver implements UserQuotaRootResolver { @@ -109,12 +108,11 @@ public class DefaultUserQuotaRootResolver implements UserQuotaRootResolver { } @Override - public List<MailboxPath> retrieveAssociatedMailboxes(QuotaRoot quotaRoot, MailboxSession mailboxSession) throws MailboxException { + public List<Mailbox> retrieveAssociatedMailboxes(QuotaRoot quotaRoot, MailboxSession mailboxSession) throws MailboxException { List<String> parts = QUOTA_ROOT_DESERIALIZER.toParts(quotaRoot.getValue()); String namespace = parts.get(0); String user = parts.get(1); - return Lists.transform(factory.getMailboxMapper(mailboxSession) - .findMailboxWithPathLike(new MailboxPath(namespace, user, "%")), - Mailbox::generateAssociatedPath); + return factory.getMailboxMapper(mailboxSession) + .findMailboxWithPathLike(new MailboxPath(namespace, user, "%")); } } diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolverTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolverTest.java index ec9b637..e8cb58d 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolverTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolverTest.java @@ -89,7 +89,7 @@ public class DefaultUserQuotaRootResolverTest { when(mockedFactory.getMailboxMapper(MAILBOX_SESSION)).thenReturn(mockedMapper); when(mockedMapper.findMailboxWithPathLike(PATH_LIKE)).thenReturn(Lists.newArrayList(MAILBOX, MAILBOX_2)); - assertThat(testee.retrieveAssociatedMailboxes(QUOTA_ROOT, MAILBOX_SESSION)).containsOnly(MAILBOX_PATH, MAILBOX_PATH_2); + assertThat(testee.retrieveAssociatedMailboxes(QUOTA_ROOT, MAILBOX_SESSION)).containsOnly(MAILBOX, MAILBOX_2); } @Test(expected = MailboxException.class) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaProcessor.java index 2213deb..7ee3113 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaProcessor.java @@ -37,8 +37,8 @@ import org.apache.james.imap.message.response.QuotaResponse; 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.Mailbox; import org.apache.james.mailbox.model.MailboxACL; -import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.Quota; import org.apache.james.mailbox.model.QuotaRoot; import org.apache.james.mailbox.quota.QuotaManager; @@ -101,9 +101,9 @@ public class GetQuotaProcessor extends AbstractMailboxProcessor<GetQuotaRequest> private boolean hasRight(QuotaRoot quotaRoot, ImapSession session) throws MailboxException { // If any of the mailboxes owned by quotaRoot user can be read by the current user, then we should respond to him. final MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session); - List<MailboxPath> mailboxList = quotaRootResolver.retrieveAssociatedMailboxes(quotaRoot, mailboxSession); - for (MailboxPath mailboxPath : mailboxList) { - if (getMailboxManager().hasRight(mailboxPath, MailboxACL.Right.Read, mailboxSession)) { + List<Mailbox> mailboxList = quotaRootResolver.retrieveAssociatedMailboxes(quotaRoot, mailboxSession); + for (Mailbox mailbox : mailboxList) { + if (getMailboxManager().hasRight(mailbox.generateAssociatedPath(), MailboxACL.Right.Read, mailboxSession)) { return true; } } diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/GetQuotaProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/GetQuotaProcessorTest.java index 3df2da8..5c76ef7 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/GetQuotaProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/GetQuotaProcessorTest.java @@ -45,6 +45,7 @@ import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MailboxSessionUtil; import org.apache.james.mailbox.exception.MailboxException; +import org.apache.james.mailbox.model.Mailbox; import org.apache.james.mailbox.model.MailboxACL; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.Quota; @@ -74,6 +75,7 @@ public class GetQuotaProcessorTest { private QuotaRootResolver mockedQuotaRootResolver; private MailboxManager mockedMailboxManager; private MailboxSession mailboxSession; + private Mailbox mailbox; @Before public void setUp() throws Exception { @@ -87,6 +89,8 @@ public class GetQuotaProcessorTest { mockedMailboxManager = mock(MailboxManager.class); testee = new GetQuotaProcessor(mock(ImapProcessor.class), mockedMailboxManager, statusResponseFactory, mockedQuotaManager, mockedQuotaRootResolver, new NoopMetricFactory()); + mailbox = mock(Mailbox.class); + when(mailbox.generateAssociatedPath()).thenReturn(MAILBOX_PATH); } @Test @@ -97,7 +101,7 @@ public class GetQuotaProcessorTest { when(mockedImapSession.getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY)) .thenReturn(mailboxSession); when(mockedQuotaRootResolver.retrieveAssociatedMailboxes(QUOTA_ROOT, mailboxSession)) - .thenReturn(ImmutableList.of(MAILBOX_PATH)); + .thenReturn(ImmutableList.of(mailbox)); when(mockedMailboxManager.hasRight(MAILBOX_PATH, MailboxACL.Right.Read, mailboxSession)) .thenReturn(true); when(mockedQuotaManager.getMessageQuota(QUOTA_ROOT)).thenReturn(MESSAGE_QUOTA); @@ -127,7 +131,7 @@ public class GetQuotaProcessorTest { when(mockedImapSession.getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY)) .thenReturn(mailboxSession); when(mockedQuotaRootResolver.retrieveAssociatedMailboxes(QUOTA_ROOT, mailboxSession)) - .thenReturn(ImmutableList.of(MAILBOX_PATH)); + .thenReturn(ImmutableList.of(mailbox)); when(mockedMailboxManager.hasRight(MAILBOX_PATH, MailboxACL.Right.Read, mailboxSession)) .thenReturn(true); when(mockedQuotaManager.getMessageQuota(QUOTA_ROOT)).thenThrow(new MailboxException()); @@ -152,7 +156,7 @@ public class GetQuotaProcessorTest { when(mockedImapSession.getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY)) .thenReturn(mailboxSession); when(mockedQuotaRootResolver.retrieveAssociatedMailboxes(QUOTA_ROOT, mailboxSession)) - .thenReturn(ImmutableList.of(MAILBOX_PATH)); + .thenReturn(ImmutableList.of(mailbox)); when(mockedMailboxManager.hasRight(MAILBOX_PATH, MailboxACL.Right.Read, mailboxSession)) .thenReturn(false); --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org