You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2019/11/14 02:09:32 UTC
[james-project] 15/32: MAILBOX-391 Simplify some quota related code
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 <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org