JAMES-2344 define a UserQuotaRootResolver to manage user based quota
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/95c2367e Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/95c2367e Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/95c2367e Branch: refs/heads/master Commit: 95c2367e177ba81f4e58b72a9b787472ad5332c5 Parents: 63b010d Author: Matthieu Baechler <[email protected]> Authored: Wed Mar 7 11:24:09 2018 +0100 Committer: Raphael Ouazana <[email protected]> Committed: Thu Mar 8 09:29:51 2018 +0100 ---------------------------------------------------------------------- mailbox/api/pom.xml | 4 + .../apache/james/mailbox/model/QuotaRoot.java | 6 - .../james/mailbox/quota/QuotaRootResolver.java | 2 - .../mailbox/quota/UserQuotaRootResolver.java | 29 +++++ .../cassandra/CassandraTestSystemFixture.java | 4 +- .../manager/InMemoryIntegrationResources.java | 8 +- .../main/resources/META-INF/spring/quota.xml | 2 +- .../mailbox/store/StoreMailboxManager.java | 4 +- .../store/quota/DefaultQuotaRootResolver.java | 73 ------------ .../quota/DefaultUserQuotaRootResolver.java | 75 +++++++++++++ .../StoreMessageIdManagerSideEffectTest.java | 4 +- .../quota/DefaultQuotaRootResolverTest.java | 4 +- .../cassandra/host/CassandraHostSystem.java | 4 +- .../host/ElasticSearchHostSystem.java | 4 +- .../imapmailbox/hbase/host/HBaseHostSystem.java | 4 +- .../inmemory/host/InMemoryHostSystem.java | 4 +- .../mpt/imapmailbox/jcr/host/JCRHostSystem.java | 4 +- .../mpt/imapmailbox/jpa/host/JPAHostSystem.java | 4 +- .../host/LuceneSearchHostSystem.java | 4 +- .../maildir/host/MaildirHostSystem.java | 4 +- .../response/ImmutableStatusResponse.java | 13 +++ .../james/imap/processor/GetQuotaProcessor.java | 4 +- .../imap/processor/GetQuotaProcessorTest.java | 12 +- .../modules/mailbox/CassandraQuotaModule.java | 8 +- .../james/modules/mailbox/JpaQuotaModule.java | 8 +- .../apache/james/modules/QuotaProbesImpl.java | 13 ++- .../modules/mailbox/DefaultQuotaModule.java | 8 +- .../modules/mailbox/MemoryQuotaModule.java | 8 +- .../james/adapter/mailbox/QuotaManagement.java | 13 ++- .../mailbox/MaxQuotaConfigurationReader.java | 10 +- .../META-INF/org/apache/james/spring-server.xml | 1 - .../transport/matchers/IsOverQuotaTest.java | 6 +- .../integration/GetMailboxesMethodTest.java | 2 +- .../james/webadmin/routes/UserQuotaRoutes.java | 21 ++-- .../webadmin/service/UserQuotaService.java | 38 ++++--- .../webadmin/routes/UserQuotaRoutesTest.java | 111 ++++++++++--------- 36 files changed, 287 insertions(+), 236 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mailbox/api/pom.xml ---------------------------------------------------------------------- diff --git a/mailbox/api/pom.xml b/mailbox/api/pom.xml index 7e825f9..c7008e1 100644 --- a/mailbox/api/pom.xml +++ b/mailbox/api/pom.xml @@ -34,6 +34,10 @@ <dependencies> <dependency> <groupId>${project.groupId}</groupId> + <artifactId>james-core</artifactId> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> <artifactId>james-server-util-java8</artifactId> </dependency> <dependency> http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mailbox/api/src/main/java/org/apache/james/mailbox/model/QuotaRoot.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/model/QuotaRoot.java b/mailbox/api/src/main/java/org/apache/james/mailbox/model/QuotaRoot.java index debb37a..885540b 100644 --- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/QuotaRoot.java +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/QuotaRoot.java @@ -26,12 +26,6 @@ import com.google.common.base.Objects; */ public class QuotaRoot { - private static final String USER = "user-"; - - public static QuotaRoot forUser(String value) { - return new QuotaRoot(USER + value); - } - public static QuotaRoot quotaRoot(String value) { return new QuotaRoot(value); } http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mailbox/api/src/main/java/org/apache/james/mailbox/quota/QuotaRootResolver.java ---------------------------------------------------------------------- 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 0a8ad75..80bf8c9 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 @@ -28,8 +28,6 @@ import org.apache.james.mailbox.model.QuotaRoot; public interface QuotaRootResolver { - QuotaRoot createQuotaRoot(String quotaRootString); - /** * Return the quotaRoot associated with the given mailbox name. * http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mailbox/api/src/main/java/org/apache/james/mailbox/quota/UserQuotaRootResolver.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/quota/UserQuotaRootResolver.java b/mailbox/api/src/main/java/org/apache/james/mailbox/quota/UserQuotaRootResolver.java new file mode 100644 index 0000000..c643f4b --- /dev/null +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/quota/UserQuotaRootResolver.java @@ -0,0 +1,29 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ +package org.apache.james.mailbox.quota; + +import org.apache.james.core.User; +import org.apache.james.mailbox.model.QuotaRoot; +import org.apache.james.mailbox.quota.QuotaRootResolver; + +public interface UserQuotaRootResolver extends QuotaRootResolver { + + QuotaRoot forUser(User user); + +} http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java ---------------------------------------------------------------------- diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java index 4d502f9..6f6de00 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java @@ -40,7 +40,7 @@ import org.apache.james.mailbox.store.StoreRightManager; import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener; import org.apache.james.mailbox.store.event.MailboxEventDispatcher; import org.apache.james.mailbox.store.mail.model.impl.MessageParser; -import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.StoreQuotaManager; public class CassandraTestSystemFixture { @@ -77,7 +77,7 @@ public class CassandraTestSystemFixture { dispatcher, new CassandraMessageId.Factory(), quotaManager, - new DefaultQuotaRootResolver(mapperFactory)); + new DefaultUserQuotaRootResolver(mapperFactory)); } public static MaxQuotaManager createMaxQuotaManager(CassandraCluster cassandra) { http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java ---------------------------------------------------------------------- diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java index b96947d..72654e3 100644 --- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java +++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java @@ -50,14 +50,14 @@ import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener; import org.apache.james.mailbox.store.event.MailboxEventDispatcher; import org.apache.james.mailbox.store.mail.model.impl.MessageParser; import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator; -import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater; import org.apache.james.mailbox.store.quota.StoreQuotaManager; public class InMemoryIntegrationResources implements IntegrationResources<StoreMailboxManager> { private SimpleGroupMembershipResolver groupMembershipResolver; - private DefaultQuotaRootResolver quotaRootResolver; + private DefaultUserQuotaRootResolver quotaRootResolver; @Override public InMemoryMailboxManager createMailboxManager(GroupMembershipResolver groupMembershipResolver) throws MailboxException { @@ -171,9 +171,9 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM } @Override - public DefaultQuotaRootResolver createQuotaRootResolver(StoreMailboxManager mailboxManager) throws Exception { + public DefaultUserQuotaRootResolver createQuotaRootResolver(StoreMailboxManager mailboxManager) throws Exception { if (quotaRootResolver == null) { - quotaRootResolver = new DefaultQuotaRootResolver(mailboxManager.getMapperFactory()); + quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager.getMapperFactory()); } return quotaRootResolver; } http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mailbox/spring/src/main/resources/META-INF/spring/quota.xml ---------------------------------------------------------------------- diff --git a/mailbox/spring/src/main/resources/META-INF/spring/quota.xml b/mailbox/spring/src/main/resources/META-INF/spring/quota.xml index 45361d2..2a564aa 100644 --- a/mailbox/spring/src/main/resources/META-INF/spring/quota.xml +++ b/mailbox/spring/src/main/resources/META-INF/spring/quota.xml @@ -25,7 +25,7 @@ <bean id="currentQuotaManager" class="org.apache.james.mailbox.jpa.quota.JpaCurrentQuotaManager"> <constructor-arg index="0" ref="entityManagerFactory" /> </bean> - <bean id="defaultQuotaRootResolver" class="org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver" lazy-init="true"> + <bean id="defaultQuotaRootResolver" class="org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver" lazy-init="true"> <constructor-arg index="0" ref="messageMapperFactory"/> </bean> http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java index a48e18f..2e633d6 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java @@ -72,7 +72,7 @@ import org.apache.james.mailbox.store.mail.MailboxMapper; import org.apache.james.mailbox.store.mail.model.Mailbox; import org.apache.james.mailbox.store.mail.model.impl.MessageParser; import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox; -import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.NoQuotaManager; import org.apache.james.mailbox.store.quota.QuotaUpdater; import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex; @@ -220,7 +220,7 @@ public class StoreMailboxManager implements MailboxManager { quotaManager = new NoQuotaManager(); } if (quotaRootResolver == null) { - quotaRootResolver = new DefaultQuotaRootResolver(mailboxSessionMapperFactory); + quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxSessionMapperFactory); } if (quotaUpdater != null && quotaUpdater instanceof MailboxListener) { this.addGlobalListener((MailboxListener) quotaUpdater, session); http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultQuotaRootResolver.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultQuotaRootResolver.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultQuotaRootResolver.java deleted file mode 100644 index 3125b6f..0000000 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultQuotaRootResolver.java +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.mailbox.store.quota; - -import java.util.List; - -import javax.inject.Inject; - -import org.apache.james.mailbox.MailboxSession; -import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.model.MailboxPath; -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.model.Mailbox; - -import com.google.common.base.Preconditions; -import com.google.common.base.Splitter; -import com.google.common.collect.Lists; - -public class DefaultQuotaRootResolver implements QuotaRootResolver { - - public static final String SEPARATOR = "&"; // Character illegal for mailbox naming in regard of RFC 3501 section 5.1 - - private final MailboxSessionMapperFactory factory; - - @Inject - public DefaultQuotaRootResolver(MailboxSessionMapperFactory factory) { - this.factory = factory; - } - - @Override - public QuotaRoot createQuotaRoot(String quotaRootValue) { - return QuotaRoot.quotaRoot(quotaRootValue); - } - - @Override - public QuotaRoot getQuotaRoot(MailboxPath mailboxPath) throws MailboxException { - Preconditions.checkArgument(!mailboxPath.getNamespace().contains(SEPARATOR), "Namespace should not contain " + SEPARATOR); - Preconditions.checkArgument(!mailboxPath.getUser().contains(SEPARATOR), "Username should not contain " + SEPARATOR); - return QuotaRoot.quotaRoot(mailboxPath.getNamespace() + SEPARATOR + mailboxPath.getUser()); - } - - @Override - public List<MailboxPath> retrieveAssociatedMailboxes(QuotaRoot quotaRoot, MailboxSession mailboxSession) throws MailboxException { - List<String> parts = Lists.newArrayList(Splitter.on(SEPARATOR).split(quotaRoot.getValue())); - if (parts.size() != 2) { - throw new MailboxException(quotaRoot + " used as QuotaRoot should not contain 2 \"" + SEPARATOR + "\""); - } - String namespace = parts.get(0); - String user = parts.get(1); - return Lists.transform(factory.getMailboxMapper(mailboxSession) - .findMailboxWithPathLike(new MailboxPath(namespace, user, "%")), - Mailbox::generateAssociatedPath); - } -} http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolver.java ---------------------------------------------------------------------- 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 new file mode 100644 index 0000000..a95c8a5 --- /dev/null +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolver.java @@ -0,0 +1,75 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.mailbox.store.quota; + +import java.util.List; + +import javax.inject.Inject; + +import org.apache.james.core.User; +import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.exception.MailboxException; +import org.apache.james.mailbox.model.MailboxConstants; +import org.apache.james.mailbox.model.MailboxPath; +import org.apache.james.mailbox.model.QuotaRoot; +import org.apache.james.mailbox.quota.UserQuotaRootResolver; +import org.apache.james.mailbox.store.MailboxSessionMapperFactory; +import org.apache.james.mailbox.store.mail.model.Mailbox; + +import com.google.common.base.Preconditions; +import com.google.common.base.Splitter; +import com.google.common.collect.Lists; + +public class DefaultUserQuotaRootResolver implements UserQuotaRootResolver { + + public static final String SEPARATOR = "&"; // Character illegal for mailbox naming in regard of RFC 3501 section 5.1 + + private final MailboxSessionMapperFactory factory; + + @Inject + public DefaultUserQuotaRootResolver(MailboxSessionMapperFactory factory) { + this.factory = factory; + } + + @Override + public QuotaRoot forUser(User user) { + return QuotaRoot.quotaRoot(MailboxConstants.USER_NAMESPACE + SEPARATOR + user.asString()); + } + + @Override + public QuotaRoot getQuotaRoot(MailboxPath mailboxPath) throws MailboxException { + Preconditions.checkArgument(!mailboxPath.getNamespace().contains(SEPARATOR), "Namespace should not contain " + SEPARATOR); + Preconditions.checkArgument(!mailboxPath.getUser().contains(SEPARATOR), "Username should not contain " + SEPARATOR); + return QuotaRoot.quotaRoot(mailboxPath.getNamespace() + SEPARATOR + mailboxPath.getUser()); + } + + @Override + public List<MailboxPath> retrieveAssociatedMailboxes(QuotaRoot quotaRoot, MailboxSession mailboxSession) throws MailboxException { + List<String> parts = Lists.newArrayList(Splitter.on(SEPARATOR).split(quotaRoot.getValue())); + if (parts.size() != 2) { + throw new MailboxException(quotaRoot + " used as QuotaRoot should not contain 2 \"" + SEPARATOR + "\""); + } + String namespace = parts.get(0); + String user = parts.get(1); + return Lists.transform(factory.getMailboxMapper(mailboxSession) + .findMailboxWithPathLike(new MailboxPath(namespace, user, "%")), + Mailbox::generateAssociatedPath); + } +} http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java index 4349dce..c4d3b9a 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMessageIdManagerSideEffectTest.java @@ -32,7 +32,7 @@ import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.model.TestMessageId; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.store.event.MailboxEventDispatcher; -import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.junit.Before; public class StoreMessageIdManagerSideEffectTest extends AbstractMessageIdManagerSideEffectTest { @@ -53,7 +53,7 @@ public class StoreMessageIdManagerSideEffectTest extends AbstractMessageIdManage MessageIdManager messageIdManager = new StoreMessageIdManager(mailboxManager, testMailboxSessionMapperFactory, dispatcher, messageIdFactory, - quotaManager, new DefaultQuotaRootResolver(testMailboxSessionMapperFactory)); + quotaManager, new DefaultUserQuotaRootResolver(testMailboxSessionMapperFactory)); return new StoreMessageIdManagerTestSystem(messageIdManager, messageIdFactory, http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultQuotaRootResolverTest.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultQuotaRootResolverTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultQuotaRootResolverTest.java index 89c46da..0ca9839 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultQuotaRootResolverTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultQuotaRootResolverTest.java @@ -43,13 +43,13 @@ public class DefaultQuotaRootResolverTest { public static final SimpleMailbox MAILBOX_2 = new SimpleMailbox(MAILBOX_PATH_2, 10); public static final QuotaRoot QUOTA_ROOT = QuotaRoot.quotaRoot("#private&benwa"); - private DefaultQuotaRootResolver testee; + private DefaultUserQuotaRootResolver testee; private MailboxSessionMapperFactory mockedFactory; @Before public void setUp() { mockedFactory = mock(MailboxSessionMapperFactory.class); - testee = new DefaultQuotaRootResolver(mockedFactory); + testee = new DefaultUserQuotaRootResolver(mockedFactory); } @Test http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java ---------------------------------------------------------------------- diff --git a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java index 89fea73..efe3d1a 100644 --- a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java +++ b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java @@ -61,7 +61,7 @@ import org.apache.james.mailbox.store.StoreSubscriptionManager; import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener; import org.apache.james.mailbox.store.event.MailboxEventDispatcher; import org.apache.james.mailbox.store.mail.model.impl.MessageParser; -import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater; import org.apache.james.mailbox.store.quota.StoreQuotaManager; import org.apache.james.metrics.logger.DefaultMetricFactory; @@ -124,7 +124,7 @@ public class CassandraHostSystem extends JamesImapHostSystem { mailboxManager = new CassandraMailboxManager(mapperFactory, authenticator, authorizator, new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory, mailboxEventDispatcher, delegatingMailboxListener, annotationManager, storeRightManager); - QuotaRootResolver quotaRootResolver = new DefaultQuotaRootResolver(mapperFactory); + QuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(mapperFactory); perUserMaxQuotaManager = new CassandraPerUserMaxQuotaManager(new CassandraPerUserMaxQuotaDao(session)); http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java ---------------------------------------------------------------------- diff --git a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java index 4d19b58..ea9b789 100644 --- a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java +++ b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java @@ -57,7 +57,7 @@ import org.apache.james.mailbox.quota.QuotaSize; import org.apache.james.mailbox.store.StoreMailboxManager; import org.apache.james.mailbox.store.StoreSubscriptionManager; import org.apache.james.mailbox.store.extractor.DefaultTextExtractor; -import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.NoQuotaManager; import org.apache.james.metrics.logger.DefaultMetricFactory; import org.apache.james.mpt.api.ImapFeatures; @@ -125,7 +125,7 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem { DefaultImapProcessorFactory.createDefaultProcessor(this.mailboxManager, new StoreSubscriptionManager(factory), new NoQuotaManager(), - new DefaultQuotaRootResolver(factory), + new DefaultUserQuotaRootResolver(factory), new DefaultMetricFactory()); configure(new DefaultImapDecoderFactory().buildImapDecoder(), new DefaultImapEncoderFactory().buildImapEncoder(), http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java ---------------------------------------------------------------------- diff --git a/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java b/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java index a9ac883..f09749f 100644 --- a/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java +++ b/mpt/impl/imap-mailbox/hbase/src/test/java/org/apache/james/mpt/imapmailbox/hbase/host/HBaseHostSystem.java @@ -51,7 +51,7 @@ import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener; import org.apache.james.mailbox.store.event.MailboxEventDispatcher; import org.apache.james.mailbox.store.mail.model.DefaultMessageId; import org.apache.james.mailbox.store.mail.model.impl.MessageParser; -import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.NoQuotaManager; import org.apache.james.metrics.api.NoopMetricFactory; import org.apache.james.mpt.api.ImapFeatures; @@ -126,7 +126,7 @@ public class HBaseHostSystem extends JamesImapHostSystem { mailboxManager, subscriptionManager, new NoQuotaManager(), - new DefaultQuotaRootResolver(mapperFactory), + new DefaultUserQuotaRootResolver(mapperFactory), new NoopMetricFactory()); resetUserMetaData(); http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java ---------------------------------------------------------------------- diff --git a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java index feb3163..b9113d9 100644 --- a/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java +++ b/mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java @@ -36,7 +36,7 @@ import org.apache.james.mailbox.quota.QuotaSize; import org.apache.james.mailbox.store.StoreMailboxManager; import org.apache.james.mailbox.store.StoreSubscriptionManager; import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator; -import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater; import org.apache.james.mailbox.store.quota.StoreQuotaManager; import org.apache.james.metrics.logger.DefaultMetricFactory; @@ -64,7 +64,7 @@ public class InMemoryHostSystem extends JamesImapHostSystem { super.beforeTest(); this.mailboxManager = new InMemoryIntegrationResources() .createMailboxManager(new SimpleGroupMembershipResolver(), authenticator, authorizator); - QuotaRootResolver quotaRootResolver = new DefaultQuotaRootResolver(mailboxManager.getMapperFactory()); + QuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager.getMapperFactory()); perUserMaxQuotaManager = new InMemoryPerUserMaxQuotaManager(); http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java ---------------------------------------------------------------------- diff --git a/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java b/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java index 985f774..16395e6 100644 --- a/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java +++ b/mpt/impl/imap-mailbox/jcr/src/test/java/org/apache/james/mpt/imapmailbox/jcr/host/JCRHostSystem.java @@ -50,7 +50,7 @@ import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener; import org.apache.james.mailbox.store.event.MailboxEventDispatcher; import org.apache.james.mailbox.store.mail.model.DefaultMessageId; import org.apache.james.mailbox.store.mail.model.impl.MessageParser; -import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.NoQuotaManager; import org.apache.james.metrics.logger.DefaultMetricFactory; import org.apache.james.mpt.api.ImapFeatures; @@ -110,7 +110,7 @@ public class JCRHostSystem extends JamesImapHostSystem { DefaultImapProcessorFactory.createDefaultProcessor(mailboxManager, new JCRSubscriptionManager(mf), new NoQuotaManager(), - new DefaultQuotaRootResolver(mf), + new DefaultUserQuotaRootResolver(mf), new DefaultMetricFactory()); resetUserMetaData(); MailboxSession session = mailboxManager.createSystemSession("test"); http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java ---------------------------------------------------------------------- diff --git a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java index 4b5d320..b884b28 100644 --- a/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java +++ b/mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java @@ -54,7 +54,7 @@ import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener; import org.apache.james.mailbox.store.event.MailboxEventDispatcher; import org.apache.james.mailbox.store.mail.model.DefaultMessageId; import org.apache.james.mailbox.store.mail.model.impl.MessageParser; -import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater; import org.apache.james.mailbox.store.quota.StoreQuotaManager; import org.apache.james.metrics.logger.DefaultMetricFactory; @@ -106,7 +106,7 @@ public class JPAHostSystem extends JamesImapHostSystem { messageParser, new DefaultMessageId.Factory(), delegatingListener, mailboxEventDispatcher, annotationManager, storeRightManager); - DefaultQuotaRootResolver quotaRootResolver = new DefaultQuotaRootResolver(mapperFactory); + DefaultUserQuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(mapperFactory); JpaCurrentQuotaManager currentQuotaManager = new JpaCurrentQuotaManager(entityManagerFactory); maxQuotaManager = new JPAPerUserMaxQuotaManager(new JPAPerUserMaxQuotaDAO(entityManagerFactory)); StoreQuotaManager storeQuotaManager = new StoreQuotaManager(currentQuotaManager, maxQuotaManager); http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java ---------------------------------------------------------------------- diff --git a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java index 740594e..5650706 100644 --- a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java +++ b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java @@ -58,7 +58,7 @@ import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener; import org.apache.james.mailbox.store.event.MailboxEventDispatcher; import org.apache.james.mailbox.store.mail.model.DefaultMessageId; import org.apache.james.mailbox.store.mail.model.impl.MessageParser; -import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.NoQuotaManager; import org.apache.james.metrics.logger.DefaultMetricFactory; import org.apache.james.mpt.api.ImapFeatures; @@ -143,7 +143,7 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem { mailboxManager, subscriptionManager, new NoQuotaManager(), - new DefaultQuotaRootResolver(factory), + new DefaultUserQuotaRootResolver(factory), new DefaultMetricFactory()); configure(new DefaultImapDecoderFactory().buildImapDecoder(), http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java ---------------------------------------------------------------------- diff --git a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java index 7861d4d..0243bf0 100644 --- a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java +++ b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java @@ -44,7 +44,7 @@ import org.apache.james.mailbox.store.event.DefaultDelegatingMailboxListener; import org.apache.james.mailbox.store.event.MailboxEventDispatcher; import org.apache.james.mailbox.store.mail.model.DefaultMessageId; import org.apache.james.mailbox.store.mail.model.impl.MessageParser; -import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.NoQuotaManager; import org.apache.james.metrics.logger.DefaultMetricFactory; import org.apache.james.mpt.api.ImapFeatures; @@ -89,7 +89,7 @@ public class MaildirHostSystem extends JamesImapHostSystem { mailboxManager, sm, new NoQuotaManager(), - new DefaultQuotaRootResolver(mailboxSessionMapperFactory), + new DefaultUserQuotaRootResolver(mailboxSessionMapperFactory), new DefaultMetricFactory()); configure(new DefaultImapDecoderFactory().buildImapDecoder(), new DefaultImapEncoderFactory().buildImapEncoder(), http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/protocols/imap/src/main/java/org/apache/james/imap/message/response/ImmutableStatusResponse.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/main/java/org/apache/james/imap/message/response/ImmutableStatusResponse.java b/protocols/imap/src/main/java/org/apache/james/imap/message/response/ImmutableStatusResponse.java index 4bd9767..8adba0a 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/message/response/ImmutableStatusResponse.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/message/response/ImmutableStatusResponse.java @@ -23,6 +23,8 @@ import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.message.response.StatusResponse; +import com.google.common.base.MoreObjects; + /** * Immutable status response. Suitable for unpooled usage. * @@ -83,4 +85,15 @@ public class ImmutableStatusResponse implements StatusResponse { public ImapCommand getCommand() { return command; } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("responseCode", responseCode) + .add("serverResponseType", serverResponseType) + .add("tag", tag) + .add("textKey", textKey) + .add("command", command) + .toString(); + } } http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaProcessor.java ---------------------------------------------------------------------- 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 bed1740..f7cbfbb 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 @@ -78,7 +78,7 @@ public class GetQuotaProcessor extends AbstractMailboxProcessor<GetQuotaRequest> protected void doProcess(GetQuotaRequest message, ImapSession session, String tag, ImapCommand command, Responder responder) { try { if (hasRight(message.getQuotaRoot(), session)) { - QuotaRoot quotaRoot = quotaRootResolver.createQuotaRoot(message.getQuotaRoot()); + QuotaRoot quotaRoot = QuotaRoot.quotaRoot(message.getQuotaRoot()); Quota<QuotaCount> messageQuota = quotaManager.getMessageQuota(quotaRoot); Quota<QuotaSize> storageQuota = quotaManager.getStorageQuota(quotaRoot); if (messageQuota.getMax().isLimited() && messageQuota.getUsed().isPresent()) { @@ -105,7 +105,7 @@ public class GetQuotaProcessor extends AbstractMailboxProcessor<GetQuotaRequest> private boolean hasRight(String 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(quotaRootResolver.createQuotaRoot(quotaRoot), mailboxSession); + List<MailboxPath> mailboxList = quotaRootResolver.retrieveAssociatedMailboxes(QuotaRoot.quotaRoot(quotaRoot), mailboxSession); for (MailboxPath mailboxPath : mailboxList) { if (getMailboxManager().hasRight(mailboxPath, MailboxACL.Right.Read, mailboxSession)) { return true; http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/protocols/imap/src/test/java/org/apache/james/imap/processor/GetQuotaProcessorTest.java ---------------------------------------------------------------------- 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 9f52053..abe0703 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 @@ -84,13 +84,11 @@ public class GetQuotaProcessorTest { @Test public void processorShouldWorkOnValidRights() throws Exception { - GetQuotaRequest getQuotaRequest = new GetQuotaRequest("A004", ImapCommand.anyStateCommand("Name"), "quotaRoot"); + GetQuotaRequest getQuotaRequest = new GetQuotaRequest("A004", ImapCommand.anyStateCommand("Name"), QUOTA_ROOT.getValue()); when(mockedImapSession.getState()).thenReturn(ImapSessionState.AUTHENTICATED); when(mockedImapSession.getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY)) .thenReturn(mailboxSession); - when(mockedQuotaRootResolver.createQuotaRoot("quotaRoot")) - .thenReturn(QUOTA_ROOT); when(mockedQuotaRootResolver.retrieveAssociatedMailboxes(QUOTA_ROOT, mailboxSession)) .thenReturn(ImmutableList.of(MAILBOX_PATH)); when(mockedMailboxManager.hasRight(MAILBOX_PATH, MailboxACL.Right.Read, mailboxSession)) @@ -116,13 +114,11 @@ public class GetQuotaProcessorTest { @Test public void processorShouldWorkOnExceptionThrown() throws Exception { - GetQuotaRequest getQuotaRequest = new GetQuotaRequest("A004", ImapCommand.anyStateCommand("Name"), "quotaRoot"); + GetQuotaRequest getQuotaRequest = new GetQuotaRequest("A004", ImapCommand.anyStateCommand("Name"), QUOTA_ROOT.getValue()); when(mockedImapSession.getState()).thenReturn(ImapSessionState.AUTHENTICATED); when(mockedImapSession.getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY)) .thenReturn(mailboxSession); - when(mockedQuotaRootResolver.createQuotaRoot("quotaRoot")) - .thenReturn(QUOTA_ROOT); when(mockedQuotaRootResolver.retrieveAssociatedMailboxes(QUOTA_ROOT, mailboxSession)) .thenReturn(ImmutableList.of(MAILBOX_PATH)); when(mockedMailboxManager.hasRight(MAILBOX_PATH, MailboxACL.Right.Read, mailboxSession)) @@ -143,13 +139,11 @@ public class GetQuotaProcessorTest { @Test public void processorShouldWorkOnNoRights() throws Exception { - GetQuotaRequest getQuotaRequest = new GetQuotaRequest("A004", ImapCommand.anyStateCommand("Name"), "quotaRoot"); + GetQuotaRequest getQuotaRequest = new GetQuotaRequest("A004", ImapCommand.anyStateCommand("Name"), QUOTA_ROOT.getValue()); when(mockedImapSession.getState()).thenReturn(ImapSessionState.AUTHENTICATED); when(mockedImapSession.getAttribute(ImapSessionUtils.MAILBOX_SESSION_ATTRIBUTE_SESSION_KEY)) .thenReturn(mailboxSession); - when(mockedQuotaRootResolver.createQuotaRoot("quotaRoot")) - .thenReturn(QUOTA_ROOT); when(mockedQuotaRootResolver.retrieveAssociatedMailboxes(QUOTA_ROOT, mailboxSession)) .thenReturn(ImmutableList.of(MAILBOX_PATH)); when(mockedMailboxManager.hasRight(MAILBOX_PATH, MailboxACL.Right.Read, mailboxSession)) http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java index 75d49a3..23aa2ec 100644 --- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java +++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java @@ -26,7 +26,8 @@ import org.apache.james.mailbox.quota.CurrentQuotaManager; import org.apache.james.mailbox.quota.MaxQuotaManager; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; -import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver; +import org.apache.james.mailbox.quota.UserQuotaRootResolver; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; import org.apache.james.mailbox.store.quota.StoreQuotaManager; @@ -38,12 +39,13 @@ public class CassandraQuotaModule extends AbstractModule { @Override protected void configure() { - bind(DefaultQuotaRootResolver.class).in(Scopes.SINGLETON); + bind(DefaultUserQuotaRootResolver.class).in(Scopes.SINGLETON); bind(CassandraPerUserMaxQuotaManager.class).in(Scopes.SINGLETON); bind(StoreQuotaManager.class).in(Scopes.SINGLETON); bind(CassandraCurrentQuotaManager.class).in(Scopes.SINGLETON); - bind(QuotaRootResolver.class).to(DefaultQuotaRootResolver.class); + bind(QuotaRootResolver.class).to(DefaultUserQuotaRootResolver.class); + bind(UserQuotaRootResolver.class).to(DefaultUserQuotaRootResolver.class); bind(MaxQuotaManager.class).to(CassandraPerUserMaxQuotaManager.class); bind(QuotaManager.class).to(StoreQuotaManager.class); bind(CurrentQuotaManager.class).to(CassandraCurrentQuotaManager.class); http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java index f85cec7..6cd825c 100644 --- a/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java +++ b/server/container/guice/jpa-guice/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java @@ -25,7 +25,8 @@ import org.apache.james.mailbox.quota.CurrentQuotaManager; import org.apache.james.mailbox.quota.MaxQuotaManager; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; -import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver; +import org.apache.james.mailbox.quota.UserQuotaRootResolver; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; import org.apache.james.mailbox.store.quota.StoreQuotaManager; @@ -36,12 +37,13 @@ public class JpaQuotaModule extends AbstractModule { @Override protected void configure() { - bind(DefaultQuotaRootResolver.class).in(Scopes.SINGLETON); + bind(DefaultUserQuotaRootResolver.class).in(Scopes.SINGLETON); bind(JPAPerUserMaxQuotaManager.class).in(Scopes.SINGLETON); bind(StoreQuotaManager.class).in(Scopes.SINGLETON); bind(JpaCurrentQuotaManager.class).in(Scopes.SINGLETON); - bind(QuotaRootResolver.class).to(DefaultQuotaRootResolver.class); + bind(UserQuotaRootResolver.class).to(DefaultUserQuotaRootResolver.class); + bind(QuotaRootResolver.class).to(DefaultUserQuotaRootResolver.class); bind(MaxQuotaManager.class).to(JPAPerUserMaxQuotaManager.class); bind(QuotaManager.class).to(StoreQuotaManager.class); bind(CurrentQuotaManager.class).to(JpaCurrentQuotaManager.class); http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java ---------------------------------------------------------------------- diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java index 4f7dad5..b384573 100644 --- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java +++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java @@ -23,6 +23,7 @@ import javax.inject.Inject; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MailboxPath; +import org.apache.james.mailbox.model.QuotaRoot; import org.apache.james.mailbox.quota.MaxQuotaManager; import org.apache.james.mailbox.quota.QuotaCount; import org.apache.james.mailbox.quota.QuotaManager; @@ -55,22 +56,22 @@ public class QuotaProbesImpl implements QuotaProbe, GuiceProbe { @Override public SerializableQuota<QuotaCount> getMessageCountQuota(String quotaRoot) throws MailboxException { - return SerializableQuota.newInstance(quotaManager.getMessageQuota(quotaRootResolver.createQuotaRoot(quotaRoot))); + return SerializableQuota.newInstance(quotaManager.getMessageQuota(QuotaRoot.quotaRoot(quotaRoot))); } @Override public SerializableQuota<QuotaSize> getStorageQuota(String quotaRoot) throws MailboxException { - return SerializableQuota.newInstance(quotaManager.getStorageQuota(quotaRootResolver.createQuotaRoot(quotaRoot))); + return SerializableQuota.newInstance(quotaManager.getStorageQuota(QuotaRoot.quotaRoot(quotaRoot))); } @Override public SerializableQuotaValue<QuotaCount> getMaxMessageCount(String quotaRoot) throws MailboxException { - return SerializableQuotaValue.valueOf(maxQuotaManager.getMaxMessage(quotaRootResolver.createQuotaRoot(quotaRoot))); + return SerializableQuotaValue.valueOf(maxQuotaManager.getMaxMessage(QuotaRoot.quotaRoot(quotaRoot))); } @Override public SerializableQuotaValue<QuotaSize> getMaxStorage(String quotaRoot) throws MailboxException { - return SerializableQuotaValue.valueOf(maxQuotaManager.getMaxStorage(quotaRootResolver.createQuotaRoot(quotaRoot))); + return SerializableQuotaValue.valueOf(maxQuotaManager.getMaxStorage(QuotaRoot.quotaRoot(quotaRoot))); } @Override @@ -88,7 +89,7 @@ public class QuotaProbesImpl implements QuotaProbe, GuiceProbe { maxMessageCount.toValue(QuotaCount::count, QuotaCount.unlimited()) .ifPresent( Throwing.consumer( - (QuotaCount value) -> maxQuotaManager.setMaxMessage(quotaRootResolver.createQuotaRoot(quotaRoot), value)) + (QuotaCount value) -> maxQuotaManager.setMaxMessage(QuotaRoot.quotaRoot(quotaRoot), value)) .sneakyThrow()); } @@ -97,7 +98,7 @@ public class QuotaProbesImpl implements QuotaProbe, GuiceProbe { maxSize.toValue(QuotaSize::size, QuotaSize.unlimited()) .ifPresent( Throwing.consumer( - (QuotaSize value) -> maxQuotaManager.setMaxStorage(quotaRootResolver.createQuotaRoot(quotaRoot), value)) + (QuotaSize value) -> maxQuotaManager.setMaxStorage(QuotaRoot.quotaRoot(quotaRoot), value)) .sneakyThrow()); } http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultQuotaModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultQuotaModule.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultQuotaModule.java index 41be7ea..f746791 100644 --- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultQuotaModule.java +++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultQuotaModule.java @@ -22,7 +22,8 @@ package org.apache.james.modules.mailbox; import org.apache.james.mailbox.quota.MaxQuotaManager; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; -import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver; +import org.apache.james.mailbox.quota.UserQuotaRootResolver; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.NoMaxQuotaManager; import org.apache.james.mailbox.store.quota.NoQuotaManager; @@ -34,12 +35,13 @@ public class DefaultQuotaModule extends AbstractModule { @Override protected void configure() { bind(NoQuotaManager.class).in(Scopes.SINGLETON); - bind(DefaultQuotaRootResolver.class).in(Scopes.SINGLETON); + bind(DefaultUserQuotaRootResolver.class).in(Scopes.SINGLETON); bind(NoMaxQuotaManager.class).in(Scopes.SINGLETON); bind(MaxQuotaManager.class).to(NoMaxQuotaManager.class); bind(QuotaManager.class).to(NoQuotaManager.class); - bind(QuotaRootResolver.class).to(DefaultQuotaRootResolver.class); + bind(QuotaRootResolver.class).to(DefaultUserQuotaRootResolver.class); + bind(UserQuotaRootResolver.class).to(DefaultUserQuotaRootResolver.class); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java ---------------------------------------------------------------------- diff --git a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java index b180b27..bf2e1f0 100644 --- a/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java +++ b/server/container/guice/memory-guice/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java @@ -25,7 +25,8 @@ import org.apache.james.mailbox.quota.CurrentQuotaManager; import org.apache.james.mailbox.quota.MaxQuotaManager; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; -import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver; +import org.apache.james.mailbox.quota.UserQuotaRootResolver; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; import org.apache.james.mailbox.store.quota.StoreQuotaManager; @@ -36,12 +37,13 @@ public class MemoryQuotaModule extends AbstractModule { @Override protected void configure() { - bind(DefaultQuotaRootResolver.class).in(Scopes.SINGLETON); + bind(DefaultUserQuotaRootResolver.class).in(Scopes.SINGLETON); bind(InMemoryPerUserMaxQuotaManager.class).in(Scopes.SINGLETON); bind(StoreQuotaManager.class).in(Scopes.SINGLETON); bind(InMemoryCurrentQuotaManager.class).in(Scopes.SINGLETON); - bind(QuotaRootResolver.class).to(DefaultQuotaRootResolver.class); + bind(UserQuotaRootResolver.class).to(DefaultUserQuotaRootResolver.class); + bind(QuotaRootResolver.class).to(DefaultUserQuotaRootResolver.class); bind(MaxQuotaManager.class).to(InMemoryPerUserMaxQuotaManager.class); bind(QuotaManager.class).to(StoreQuotaManager.class); bind(CurrentQuotaManager.class).to(InMemoryCurrentQuotaManager.class); http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/QuotaManagement.java ---------------------------------------------------------------------- diff --git a/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/QuotaManagement.java b/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/QuotaManagement.java index 562b4b2..ebf28d3 100644 --- a/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/QuotaManagement.java +++ b/server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/QuotaManagement.java @@ -26,6 +26,7 @@ import javax.inject.Inject; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MailboxPath; +import org.apache.james.mailbox.model.QuotaRoot; import org.apache.james.mailbox.quota.MaxQuotaManager; import org.apache.james.mailbox.quota.QuotaCount; import org.apache.james.mailbox.quota.QuotaManager; @@ -71,7 +72,7 @@ public class QuotaManagement implements QuotaManagementMBean { .addContext(MDCBuilder.PROTOCOL, "CLI") .addContext(MDCBuilder.ACTION, "getMaxMessageCount") .build()) { - return SerializableQuotaValue.valueOf(maxQuotaManager.getMaxMessage(quotaRootResolver.createQuotaRoot(quotaRoot))); + return SerializableQuotaValue.valueOf(maxQuotaManager.getMaxMessage(QuotaRoot.quotaRoot(quotaRoot))); } catch (IOException e) { throw Throwables.propagate(e); } @@ -84,7 +85,7 @@ public class QuotaManagement implements QuotaManagementMBean { .addContext(MDCBuilder.PROTOCOL, "CLI") .addContext(MDCBuilder.ACTION, "getMaxStorage") .build()) { - return SerializableQuotaValue.valueOf(maxQuotaManager.getMaxStorage(quotaRootResolver.createQuotaRoot(quotaRoot))); + return SerializableQuotaValue.valueOf(maxQuotaManager.getMaxStorage(QuotaRoot.quotaRoot(quotaRoot))); } catch (IOException e) { throw Throwables.propagate(e); } @@ -126,7 +127,7 @@ public class QuotaManagement implements QuotaManagementMBean { maxMessageCount.toValue(QuotaCount::count, QuotaCount.unlimited()) .ifPresent( Throwing.consumer((QuotaCount value) -> - maxQuotaManager.setMaxMessage(quotaRootResolver.createQuotaRoot(quotaRoot), value)) + maxQuotaManager.setMaxMessage(QuotaRoot.quotaRoot(quotaRoot), value)) .sneakyThrow()); } catch (IOException e) { throw Throwables.propagate(e); @@ -143,7 +144,7 @@ public class QuotaManagement implements QuotaManagementMBean { maxSize.toValue(QuotaSize::size, QuotaSize.unlimited()) .ifPresent( Throwing.consumer((QuotaSize value) -> - maxQuotaManager.setMaxStorage(quotaRootResolver.createQuotaRoot(quotaRoot), value)) + maxQuotaManager.setMaxStorage(QuotaRoot.quotaRoot(quotaRoot), value)) .sneakyThrow()); } catch (IOException e) { throw Throwables.propagate(e); @@ -187,7 +188,7 @@ public class QuotaManagement implements QuotaManagementMBean { .addContext(MDCBuilder.PROTOCOL, "CLI") .addContext(MDCBuilder.ACTION, "getMessageCountQuota") .build()) { - return SerializableQuota.newInstance(quotaManager.getMessageQuota(quotaRootResolver.createQuotaRoot(quotaRoot))); + return SerializableQuota.newInstance(quotaManager.getMessageQuota(QuotaRoot.quotaRoot(quotaRoot))); } catch (IOException e) { throw Throwables.propagate(e); } @@ -200,7 +201,7 @@ public class QuotaManagement implements QuotaManagementMBean { .addContext(MDCBuilder.PROTOCOL, "CLI") .addContext(MDCBuilder.ACTION, "getStorageQuota") .build()) { - return SerializableQuota.newInstance(quotaManager.getStorageQuota(quotaRootResolver.createQuotaRoot(quotaRoot))); + return SerializableQuota.newInstance(quotaManager.getStorageQuota(QuotaRoot.quotaRoot(quotaRoot))); } catch (IOException e) { throw Throwables.propagate(e); } http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/server/container/spring/src/main/java/org/apache/james/container/spring/mailbox/MaxQuotaConfigurationReader.java ---------------------------------------------------------------------- diff --git a/server/container/spring/src/main/java/org/apache/james/container/spring/mailbox/MaxQuotaConfigurationReader.java b/server/container/spring/src/main/java/org/apache/james/container/spring/mailbox/MaxQuotaConfigurationReader.java index b5ab1d6..229d65a 100644 --- a/server/container/spring/src/main/java/org/apache/james/container/spring/mailbox/MaxQuotaConfigurationReader.java +++ b/server/container/spring/src/main/java/org/apache/james/container/spring/mailbox/MaxQuotaConfigurationReader.java @@ -27,19 +27,17 @@ import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.james.lifecycle.api.Configurable; import org.apache.james.mailbox.exception.MailboxException; +import org.apache.james.mailbox.model.QuotaRoot; import org.apache.james.mailbox.quota.MaxQuotaManager; import org.apache.james.mailbox.quota.QuotaCount; -import org.apache.james.mailbox.quota.QuotaRootResolver; import org.apache.james.mailbox.quota.QuotaSize; public class MaxQuotaConfigurationReader implements Configurable { private final MaxQuotaManager maxQuotaManager; - private final QuotaRootResolver quotaRootResolver; - public MaxQuotaConfigurationReader(MaxQuotaManager maxQuotaManager, QuotaRootResolver quotaRootResolver) { + public MaxQuotaConfigurationReader(MaxQuotaManager maxQuotaManager) { this.maxQuotaManager = maxQuotaManager; - this.quotaRootResolver = quotaRootResolver; } @Override @@ -76,10 +74,10 @@ public class MaxQuotaConfigurationReader implements Configurable { private void configureQuotaRootSpecificValues(Map<String, Long> maxMessage, Map<String, Long> maxStorage) throws MailboxException { for (Map.Entry<String, Long> entry : maxMessage.entrySet()) { - maxQuotaManager.setMaxMessage(quotaRootResolver.createQuotaRoot(entry.getKey()), QuotaCount.count(entry.getValue())); + maxQuotaManager.setMaxMessage(QuotaRoot.quotaRoot(entry.getKey()), QuotaCount.count(entry.getValue())); } for (Map.Entry<String, Long> entry : maxStorage.entrySet()) { - maxQuotaManager.setMaxStorage(quotaRootResolver.createQuotaRoot(entry.getKey()), QuotaSize.size(entry.getValue())); + maxQuotaManager.setMaxStorage(QuotaRoot.quotaRoot(entry.getKey()), QuotaSize.size(entry.getValue())); } } } http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml ---------------------------------------------------------------------- diff --git a/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml b/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml index f98eae7..6e66c29 100644 --- a/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml +++ b/server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml @@ -145,7 +145,6 @@ <bean id="quota" class="org.apache.james.container.spring.mailbox.MaxQuotaConfigurationReader"> <constructor-arg index="0" ref="maxQuotaManager"/> - <constructor-arg index="1" ref="quotaRootResolver"/> </bean> <!-- Event system --> http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsOverQuotaTest.java ---------------------------------------------------------------------- diff --git a/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsOverQuotaTest.java b/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsOverQuotaTest.java index bc64c64..ae80229 100644 --- a/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsOverQuotaTest.java +++ b/server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsOverQuotaTest.java @@ -36,7 +36,7 @@ import org.apache.james.mailbox.quota.QuotaCount; import org.apache.james.mailbox.quota.QuotaSize; import org.apache.james.mailbox.store.StoreMailboxManager; import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator; -import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver; +import org.apache.james.mailbox.store.quota.DefaultUserQuotaRootResolver; import org.apache.james.mailbox.store.quota.StoreQuotaManager; import org.apache.james.user.api.UsersRepository; import org.apache.mailet.base.MailAddressFixture; @@ -48,7 +48,7 @@ import org.junit.Test; public class IsOverQuotaTest { private IsOverQuota testee; private InMemoryPerUserMaxQuotaManager maxQuotaManager; - private DefaultQuotaRootResolver quotaRootResolver; + private DefaultUserQuotaRootResolver quotaRootResolver; private StoreMailboxManager mailboxManager; private UsersRepository usersRepository; @@ -56,7 +56,7 @@ public class IsOverQuotaTest { public void setUp() throws Exception { mailboxManager = new InMemoryIntegrationResources().createMailboxManager(new SimpleGroupMembershipResolver()); - quotaRootResolver = new DefaultQuotaRootResolver(mailboxManager.getMapperFactory()); + quotaRootResolver = new DefaultUserQuotaRootResolver(mailboxManager.getMapperFactory()); maxQuotaManager = new InMemoryPerUserMaxQuotaManager(); CurrentQuotaCalculator quotaCalculator = new CurrentQuotaCalculator(mailboxManager.getMapperFactory(), quotaRootResolver); InMemoryCurrentQuotaManager currentQuotaManager = new InMemoryCurrentQuotaManager(quotaCalculator, mailboxManager); http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java index f0cfda7..54cc98b 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/GetMailboxesMethodTest.java @@ -48,9 +48,9 @@ import org.apache.james.GuiceJamesServer; import org.apache.james.jmap.HttpJmapAuthentication; import org.apache.james.jmap.api.access.AccessToken; import org.apache.james.jmap.model.mailbox.MailboxNamespace; +import org.apache.james.mailbox.DefaultMailboxes; import org.apache.james.mailbox.model.MailboxACL.Rfc4314Rights; import org.apache.james.mailbox.model.MailboxACL.Right; -import org.apache.james.mailbox.DefaultMailboxes; import org.apache.james.mailbox.model.MailboxConstants; import org.apache.james.mailbox.model.MailboxId; import org.apache.james.mailbox.model.MailboxPath; http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java index 2196fc4..a5fff50 100644 --- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java +++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java @@ -30,6 +30,7 @@ import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.Produces; +import org.apache.james.core.User; import org.apache.james.mailbox.quota.QuotaCount; import org.apache.james.mailbox.quota.QuotaSize; import org.apache.james.user.api.UsersRepository; @@ -108,7 +109,7 @@ public class UserQuotaRoutes implements Routes { }) public void defineUpdateQuota() { service.put(QUOTA_ENDPOINT, ((request, response) -> { - String user = checkUserExist(request); + User user = checkUserExist(request); QuotaDTO quotaDTO = parseQuotaDTO(request); userQuotaService.defineQuota(user, quotaDTO); response.status(HttpStatus.NO_CONTENT_204); @@ -127,7 +128,7 @@ public class UserQuotaRoutes implements Routes { }) public void defineGetQuota() { service.get(QUOTA_ENDPOINT, (request, response) -> { - String user = checkUserExist(request); + User user = checkUserExist(request); return userQuotaService.getQuota(user); }, jsonTransformer); } @@ -141,7 +142,7 @@ public class UserQuotaRoutes implements Routes { }) public void defineDeleteQuotaSize() { service.delete(SIZE_ENDPOINT, (request, response) -> { - String user = checkUserExist(request); + User user = checkUserExist(request); userQuotaService.deleteMaxSizeQuota(user); response.status(HttpStatus.NO_CONTENT_204); return response; @@ -162,7 +163,7 @@ public class UserQuotaRoutes implements Routes { }) public void defineUpdateQuotaSize() { service.put(SIZE_ENDPOINT, (request, response) -> { - String user = checkUserExist(request); + User user = checkUserExist(request); QuotaSize quotaSize = Quotas.quotaSize(request.body()); userQuotaService.defineMaxSizeQuota(user, quotaSize); response.status(HttpStatus.NO_CONTENT_204); @@ -180,7 +181,7 @@ public class UserQuotaRoutes implements Routes { }) public void defineGetQuotaSize() { service.get(SIZE_ENDPOINT, (request, response) -> { - String user = checkUserExist(request); + User user = checkUserExist(request); Optional<QuotaSize> maxSizeQuota = userQuotaService.getMaxSizeQuota(user); if (maxSizeQuota.isPresent()) { return maxSizeQuota; @@ -199,7 +200,7 @@ public class UserQuotaRoutes implements Routes { }) public void defineDeleteQuotaCount() { service.delete(COUNT_ENDPOINT, (request, response) -> { - String user = checkUserExist(request); + User user = checkUserExist(request); userQuotaService.deleteMaxCountQuota(user); response.status(HttpStatus.NO_CONTENT_204); return response; @@ -220,7 +221,7 @@ public class UserQuotaRoutes implements Routes { }) public void defineUpdateQuotaCount() { service.put(COUNT_ENDPOINT, (request, response) -> { - String user = checkUserExist(request); + User user = checkUserExist(request); QuotaCount quotaCount = Quotas.quotaCount(request.body()); userQuotaService.defineMaxCountQuota(user, quotaCount); response.status(HttpStatus.NO_CONTENT_204); @@ -237,7 +238,7 @@ public class UserQuotaRoutes implements Routes { }) public void defineGetQuotaCount() { service.get(COUNT_ENDPOINT, (request, response) -> { - String user = checkUserExist(request); + User user = checkUserExist(request); Optional<QuotaCount> maxCountQuota = userQuotaService.getMaxCountQuota(user); if (maxCountQuota.isPresent()) { return maxCountQuota; @@ -247,7 +248,7 @@ public class UserQuotaRoutes implements Routes { }, jsonTransformer); } - private String checkUserExist(Request request) throws UsersRepositoryException { + private User checkUserExist(Request request) throws UsersRepositoryException { String user = request.params(USER); if (!usersRepository.contains(user)) { throw ErrorResponder.builder() @@ -256,7 +257,7 @@ public class UserQuotaRoutes implements Routes { .message("User not found") .haltError(); } - return user; + return User.fromUsername(user); } private QuotaDTO parseQuotaDTO(Request request) { http://git-wip-us.apache.org/repos/asf/james-project/blob/95c2367e/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserQuotaService.java ---------------------------------------------------------------------- diff --git a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserQuotaService.java b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserQuotaService.java index 3b50cc4..1b79e42 100644 --- a/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserQuotaService.java +++ b/server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserQuotaService.java @@ -22,11 +22,13 @@ import java.util.Optional; import javax.inject.Inject; +import org.apache.james.core.User; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.QuotaRoot; import org.apache.james.mailbox.quota.MaxQuotaManager; import org.apache.james.mailbox.quota.QuotaCount; import org.apache.james.mailbox.quota.QuotaSize; +import org.apache.james.mailbox.quota.UserQuotaRootResolver; import org.apache.james.webadmin.dto.QuotaDTO; import com.github.fge.lambdas.Throwing; @@ -34,22 +36,24 @@ import com.github.fge.lambdas.Throwing; public class UserQuotaService { private final MaxQuotaManager maxQuotaManager; + private final UserQuotaRootResolver userQuotaRootResolver; @Inject - public UserQuotaService(MaxQuotaManager maxQuotaManager) { + public UserQuotaService(MaxQuotaManager maxQuotaManager, UserQuotaRootResolver userQuotaRootResolver) { this.maxQuotaManager = maxQuotaManager; + this.userQuotaRootResolver = userQuotaRootResolver; } - public void defineQuota(String user, QuotaDTO quota) { - QuotaRoot quotaRoot = QuotaRoot.forUser(user); + public void defineQuota(User user, QuotaDTO quota) { + QuotaRoot quotaRoot = userQuotaRootResolver.forUser(user); quota.getCount() .ifPresent(Throwing.consumer(count -> maxQuotaManager.setMaxMessage(quotaRoot, count))); quota.getSize() .ifPresent(Throwing.consumer(size -> maxQuotaManager.setMaxStorage(quotaRoot, size))); } - public QuotaDTO getQuota(String user) throws MailboxException { - QuotaRoot quotaRoot = QuotaRoot.forUser(user); + public QuotaDTO getQuota(User user) throws MailboxException { + QuotaRoot quotaRoot = userQuotaRootResolver.forUser(user); return QuotaDTO .builder() .count(maxQuotaManager.getMaxMessage(quotaRoot)) @@ -57,27 +61,27 @@ public class UserQuotaService { .build(); } - public Optional<QuotaSize> getMaxSizeQuota(String user) throws MailboxException { - return maxQuotaManager.getMaxStorage(QuotaRoot.forUser(user)); + public Optional<QuotaSize> getMaxSizeQuota(User user) throws MailboxException { + return maxQuotaManager.getMaxStorage(userQuotaRootResolver.forUser(user)); } - public void defineMaxSizeQuota(String user, QuotaSize quotaSize) throws MailboxException { - maxQuotaManager.setMaxStorage(QuotaRoot.forUser(user), quotaSize); + public void defineMaxSizeQuota(User user, QuotaSize quotaSize) throws MailboxException { + maxQuotaManager.setMaxStorage(userQuotaRootResolver.forUser(user), quotaSize); } - public void deleteMaxSizeQuota(String user) throws MailboxException { - maxQuotaManager.removeMaxStorage(QuotaRoot.forUser(user)); + public void deleteMaxSizeQuota(User user) throws MailboxException { + maxQuotaManager.removeMaxStorage(userQuotaRootResolver.forUser(user)); } - public Optional<QuotaCount> getMaxCountQuota(String user) throws MailboxException { - return maxQuotaManager.getMaxMessage(QuotaRoot.forUser(user)); + public Optional<QuotaCount> getMaxCountQuota(User user) throws MailboxException { + return maxQuotaManager.getMaxMessage(userQuotaRootResolver.forUser(user)); } - public void defineMaxCountQuota(String user, QuotaCount quotaCount) throws MailboxException { - maxQuotaManager.setMaxMessage(QuotaRoot.forUser(user), quotaCount); + public void defineMaxCountQuota(User user, QuotaCount quotaCount) throws MailboxException { + maxQuotaManager.setMaxMessage(userQuotaRootResolver.forUser(user), quotaCount); } - public void deleteMaxCountQuota(String user) throws MailboxException { - maxQuotaManager.removeMaxMessage(QuotaRoot.forUser(user)); + public void deleteMaxCountQuota(User user) throws MailboxException { + maxQuotaManager.removeMaxMessage(userQuotaRootResolver.forUser(user)); } } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
