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 ro...@apache.org on 2019/05/02 12:43:00 UTC

[james-project] 02/06: JAMES-2746 extract QuotaLoader from MailboxFactory

This is an automated email from the ASF dual-hosted git repository.

rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 3897673e44bf72a334947d7099bb7631ddbcbea3
Author: RĂ©mi Kowalski <rk...@linagora.com>
AuthorDate: Tue Apr 30 16:31:56 2019 +0200

    JAMES-2746 extract QuotaLoader from MailboxFactory
---
 .../james/jmap/methods/GetMailboxesMethod.java     | 31 +++++----
 .../apache/james/jmap/model/MailboxFactory.java    | 79 +++++----------------
 .../jmap/utils/quotas/DefaultQuotaLoader.java      | 52 ++++++++++++++
 .../james/jmap/utils/quotas/QuotaLoader.java       | 50 ++++++++++++++
 .../quotas/QuotaLoaderWithDefaultPreloaded.java    | 80 ++++++++++++++++++++++
 .../james/jmap/methods/GetMailboxesMethodTest.java | 31 +++++----
 .../james/jmap/model/MailboxFactoryTest.java       |  2 +
 7 files changed, 237 insertions(+), 88 deletions(-)

diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
index ab22edc..485d364 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/methods/GetMailboxesMethod.java
@@ -33,13 +33,16 @@ import org.apache.james.jmap.model.GetMailboxesResponse;
 import org.apache.james.jmap.model.MailboxFactory;
 import org.apache.james.jmap.model.MailboxProperty;
 import org.apache.james.jmap.model.mailbox.Mailbox;
-import org.apache.james.jmap.model.mailbox.Quotas;
+import org.apache.james.jmap.utils.quotas.QuotaLoader;
+import org.apache.james.jmap.utils.quotas.QuotaLoaderWithDefaultPreloaded;
 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.MailboxId;
 import org.apache.james.mailbox.model.MailboxMetaData;
 import org.apache.james.mailbox.model.search.MailboxQuery;
+import org.apache.james.mailbox.quota.QuotaManager;
+import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.metrics.api.MetricFactory;
 import org.apache.james.util.MDCBuilder;
 import org.apache.james.util.OptionalUtils;
@@ -57,17 +60,21 @@ public class GetMailboxesMethod implements Method {
     private static final Method.Request.Name METHOD_NAME = Method.Request.name("getMailboxes");
     private static final Method.Response.Name RESPONSE_NAME = Method.Response.name("mailboxes");
     private static final Optional<List<MailboxMetaData>> NO_PRELOADED_METADATA = Optional.empty();
-    private static final Optional<Quotas> NO_PRELOADED_QUOTAS = Optional.empty();
 
-    private final MailboxManager mailboxManager; 
+    private final MailboxManager mailboxManager;
     private final MailboxFactory mailboxFactory;
     private final MetricFactory metricFactory;
+    private final QuotaRootResolver quotaRootResolver;
+    private final QuotaManager quotaManager;
 
     @Inject
-    @VisibleForTesting public GetMailboxesMethod(MailboxManager mailboxManager, MailboxFactory mailboxFactory, MetricFactory metricFactory) {
+    @VisibleForTesting
+    public GetMailboxesMethod(MailboxManager mailboxManager, QuotaRootResolver quotaRootResolver, QuotaManager quotaManager, MailboxFactory mailboxFactory, MetricFactory metricFactory) {
         this.mailboxManager = mailboxManager;
         this.mailboxFactory = mailboxFactory;
         this.metricFactory = metricFactory;
+        this.quotaRootResolver = quotaRootResolver;
+        this.quotaManager = quotaManager;
     }
 
     @Override
@@ -126,15 +133,13 @@ public class GetMailboxesMethod implements Method {
     }
 
 
-
     private Stream<Mailbox> retrieveSpecificMailboxes(MailboxSession mailboxSession, ImmutableList<MailboxId> mailboxIds) {
         return mailboxIds
             .stream()
-            .map(mailboxId ->  mailboxFactory.builder()
+            .map(mailboxId -> mailboxFactory.builder()
                 .id(mailboxId)
                 .session(mailboxSession)
                 .usingPreloadedMailboxesMetadata(NO_PRELOADED_METADATA)
-                .usingPreloadedUserDefaultQuotas(NO_PRELOADED_QUOTAS)
                 .build()
             )
             .flatMap(OptionalUtils::toStream);
@@ -142,7 +147,7 @@ public class GetMailboxesMethod implements Method {
 
     private Stream<Mailbox> retrieveAllMailboxes(MailboxSession mailboxSession) throws MailboxException {
         List<MailboxMetaData> userMailboxes = getAllMailboxesMetaData(mailboxSession);
-        Quotas mailboxQuotas =  mailboxFactory.getUserDefaultQuotas(mailboxSession);
+        QuotaLoader quotaLoader = new QuotaLoaderWithDefaultPreloaded(quotaRootResolver, quotaManager, mailboxSession);
 
         return userMailboxes
             .stream()
@@ -151,17 +156,17 @@ public class GetMailboxesMethod implements Method {
                 .id(mailboxId)
                 .session(mailboxSession)
                 .usingPreloadedMailboxesMetadata(Optional.of(userMailboxes))
-                .usingPreloadedUserDefaultQuotas(Optional.of(mailboxQuotas))
+                .quotaLoader(quotaLoader)
                 .build())
             .flatMap(OptionalUtils::toStream);
     }
 
     private List<MailboxMetaData> getAllMailboxesMetaData(MailboxSession mailboxSession) throws MailboxException {
         return mailboxManager.search(
-                MailboxQuery.builder()
-                    .matchesAllMailboxNames()
-                    .build(),
-                mailboxSession);
+            MailboxQuery.builder()
+                .matchesAllMailboxNames()
+                .build(),
+            mailboxSession);
     }
 
 }
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java
index d2506fb..2e88972 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/model/MailboxFactory.java
@@ -23,14 +23,14 @@ import java.util.Optional;
 
 import javax.inject.Inject;
 
-import org.apache.james.core.quota.QuotaValue;
 import org.apache.james.jmap.model.mailbox.Mailbox;
 import org.apache.james.jmap.model.mailbox.MailboxNamespace;
 import org.apache.james.jmap.model.mailbox.Quotas;
-import org.apache.james.jmap.model.mailbox.Quotas.QuotaId;
 import org.apache.james.jmap.model.mailbox.Rights;
 import org.apache.james.jmap.model.mailbox.Rights.Username;
 import org.apache.james.jmap.model.mailbox.SortOrder;
+import org.apache.james.jmap.utils.quotas.DefaultQuotaLoader;
+import org.apache.james.jmap.utils.quotas.QuotaLoader;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
@@ -41,8 +41,6 @@ import org.apache.james.mailbox.model.MailboxCounters;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxMetaData;
 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;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 
@@ -57,13 +55,14 @@ public class MailboxFactory {
 
     public static class MailboxBuilder {
         private final MailboxFactory mailboxFactory;
+        private QuotaLoader quotaLoader;
         private MailboxSession session;
         private MailboxId id;
         private Optional<List<MailboxMetaData>> userMailboxesMetadata = Optional.empty();
-        private Optional<Quotas> preloadedUserDefaultQuotas = Optional.empty();
 
-        private MailboxBuilder(MailboxFactory mailboxFactory) {
+        private MailboxBuilder(MailboxFactory mailboxFactory, QuotaLoader quotaLoader) {
             this.mailboxFactory = mailboxFactory;
+            this.quotaLoader = quotaLoader;
         }
 
         public MailboxBuilder id(MailboxId id) {
@@ -76,13 +75,13 @@ public class MailboxFactory {
             return this;
         }
 
-        public MailboxBuilder usingPreloadedMailboxesMetadata(Optional<List<MailboxMetaData>> userMailboxesMetadata) {
-            this.userMailboxesMetadata = userMailboxesMetadata;
+        public MailboxBuilder quotaLoader(QuotaLoader quotaLoader) {
+            this.quotaLoader = quotaLoader;
             return this;
         }
 
-        public MailboxBuilder usingPreloadedUserDefaultQuotas(Optional<Quotas> preloadedUserDefaultQuotas) {
-            this.preloadedUserDefaultQuotas = preloadedUserDefaultQuotas;
+        public MailboxBuilder usingPreloadedMailboxesMetadata(Optional<List<MailboxMetaData>> userMailboxesMetadata) {
+            this.userMailboxesMetadata = userMailboxesMetadata;
             return this;
         }
 
@@ -92,7 +91,7 @@ public class MailboxFactory {
 
             try {
                 MessageManager mailbox = mailboxFactory.mailboxManager.getMailbox(id, session);
-                return Optional.of(mailboxFactory.fromMessageManager(mailbox, userMailboxesMetadata, preloadedUserDefaultQuotas, session));
+                return Optional.of(mailboxFactory.fromMessageManager(mailbox, userMailboxesMetadata, quotaLoader, session));
             } catch (MailboxNotFoundException e) {
                 return Optional.empty();
             } catch (MailboxException e) {
@@ -109,12 +108,13 @@ public class MailboxFactory {
     }
 
     public MailboxBuilder builder() {
-        return new MailboxBuilder(this);
+        QuotaLoader defaultQuotaLoader = new DefaultQuotaLoader(quotaRootResolver, quotaManager);
+        return new MailboxBuilder(this, defaultQuotaLoader);
     }
 
     private Mailbox fromMessageManager(MessageManager messageManager,
                                        Optional<List<MailboxMetaData>> userMailboxesMetadata,
-                                       Optional<Quotas> preloadedDefaultUserQuotas,
+                                       QuotaLoader quotaLoader,
                                        MailboxSession mailboxSession) throws MailboxException {
         MailboxPath mailboxPath = messageManager.getMailboxPath();
         boolean isOwner = mailboxPath.belongsTo(mailboxSession);
@@ -125,7 +125,7 @@ public class MailboxFactory {
             .removeEntriesFor(Username.forMailboxPath(mailboxPath));
         Username username = Username.fromSession(mailboxSession);
 
-        Quotas quotas = getQuotas(mailboxPath, preloadedDefaultUserQuotas);
+        Quotas quotas = quotaLoader.getQuotas(mailboxPath);
 
         return Mailbox.builder()
             .id(messageManager.getId())
@@ -147,49 +147,6 @@ public class MailboxFactory {
             .build();
     }
 
-    private Quotas getQuotas(MailboxPath mailboxPath, Optional<Quotas> preloadedUserDefaultQuotas) throws MailboxException {
-        QuotaRoot quotaRoot = quotaRootResolver.getQuotaRoot(mailboxPath);
-        QuotaId quotaId = QuotaId.fromQuotaRoot(quotaRoot);
-
-        if (containsQuotaId(preloadedUserDefaultQuotas, quotaId)) {
-            return preloadedUserDefaultQuotas.get();
-        }
-        return Quotas.from(
-            quotaId,
-            Quotas.Quota.from(
-                quotaToValue(quotaManager.getStorageQuota(quotaRoot)),
-                quotaToValue(quotaManager.getMessageQuota(quotaRoot))));
-    }
-
-    private boolean containsQuotaId(Optional<Quotas> preloadedUserDefaultQuotas, QuotaId quotaId) {
-        return preloadedUserDefaultQuotas
-                .map(Quotas::getQuotas)
-                .map(quotaIdQuotaMap -> quotaIdQuotaMap.containsKey(quotaId))
-                .orElse(false);
-    }
-
-    public Quotas getUserDefaultQuotas(MailboxSession mailboxSession) throws MailboxException {
-        MailboxPath inboxPath = MailboxPath.inbox(mailboxSession);
-        return getQuotas(inboxPath, Optional.empty());
-    }
-
-    private <T extends QuotaValue<T>> Quotas.Value<T> quotaToValue(Quota<T> quota) {
-        return new Quotas.Value<>(
-                quotaValueToNumber(quota.getUsed()),
-                quotaValueToOptionalNumber(quota.getLimit()));
-    }
-
-    private Number quotaValueToNumber(QuotaValue<?> value) {
-        return Number.BOUND_SANITIZING_FACTORY.from(value.asLong());
-    }
-
-    private Optional<Number> quotaValueToOptionalNumber(QuotaValue<?> value) {
-        if (value.isUnlimited()) {
-            return Optional.empty();
-        }
-        return Optional.of(quotaValueToNumber(value));
-    }
-
     private MailboxNamespace getNamespace(MailboxPath mailboxPath, boolean isOwner) {
         if (isOwner) {
             return MailboxNamespace.personal();
@@ -197,7 +154,8 @@ public class MailboxFactory {
         return MailboxNamespace.delegated(mailboxPath.getUser());
     }
 
-    @VisibleForTesting String getName(MailboxPath mailboxPath, MailboxSession mailboxSession) {
+    @VisibleForTesting
+    String getName(MailboxPath mailboxPath, MailboxSession mailboxSession) {
         String name = mailboxPath.getName();
         if (name.contains(String.valueOf(mailboxSession.getPathDelimiter()))) {
             List<String> levels = Splitter.on(mailboxSession.getPathDelimiter()).splitToList(name);
@@ -206,8 +164,9 @@ public class MailboxFactory {
         return name;
     }
 
-    @VisibleForTesting Optional<MailboxId> getParentIdFromMailboxPath(MailboxPath mailboxPath, Optional<List<MailboxMetaData>> userMailboxesMetadata,
-                                                                      MailboxSession mailboxSession) throws MailboxException {
+    @VisibleForTesting
+    Optional<MailboxId> getParentIdFromMailboxPath(MailboxPath mailboxPath, Optional<List<MailboxMetaData>> userMailboxesMetadata,
+                                                   MailboxSession mailboxSession) throws MailboxException {
         List<MailboxPath> levels = mailboxPath.getHierarchyLevels(mailboxSession.getPathDelimiter());
         if (levels.size() <= 1) {
             return Optional.empty();
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/quotas/DefaultQuotaLoader.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/quotas/DefaultQuotaLoader.java
new file mode 100644
index 0000000..816d7cb
--- /dev/null
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/quotas/DefaultQuotaLoader.java
@@ -0,0 +1,52 @@
+/****************************************************************
+ * 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.jmap.utils.quotas;
+
+import javax.inject.Inject;
+
+import org.apache.james.jmap.model.mailbox.Quotas;
+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.QuotaManager;
+import org.apache.james.mailbox.quota.QuotaRootResolver;
+
+public class DefaultQuotaLoader extends QuotaLoader {
+
+    private final QuotaRootResolver quotaRootResolver;
+    private final QuotaManager quotaManager;
+
+    @Inject
+    public DefaultQuotaLoader(QuotaRootResolver quotaRootResolver, QuotaManager quotaManager) {
+        this.quotaRootResolver = quotaRootResolver;
+        this.quotaManager = quotaManager;
+    }
+
+    public Quotas getQuotas(MailboxPath mailboxPath) throws MailboxException {
+        QuotaRoot quotaRoot = quotaRootResolver.getQuotaRoot(mailboxPath);
+        Quotas.QuotaId quotaId = Quotas.QuotaId.fromQuotaRoot(quotaRoot);
+
+        return Quotas.from(
+            quotaId,
+            Quotas.Quota.from(
+                quotaToValue(quotaManager.getStorageQuota(quotaRoot)),
+                quotaToValue(quotaManager.getMessageQuota(quotaRoot))));
+    }
+
+}
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/quotas/QuotaLoader.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/quotas/QuotaLoader.java
new file mode 100644
index 0000000..2d16844
--- /dev/null
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/quotas/QuotaLoader.java
@@ -0,0 +1,50 @@
+/****************************************************************
+ * 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.jmap.utils.quotas;
+
+import java.util.Optional;
+
+import org.apache.james.core.quota.QuotaValue;
+import org.apache.james.jmap.model.Number;
+import org.apache.james.jmap.model.mailbox.Quotas;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.Quota;
+
+public abstract class QuotaLoader {
+
+    public abstract Quotas getQuotas(MailboxPath mailboxPath) throws MailboxException;
+
+    protected <T extends QuotaValue<T>> Quotas.Value<T> quotaToValue(Quota<T> quota) {
+        return new Quotas.Value<>(
+            quotaValueToNumber(quota.getUsed()),
+            quotaValueToOptionalNumber(quota.getLimit()));
+    }
+
+    protected Number quotaValueToNumber(QuotaValue<?> value) {
+        return Number.BOUND_SANITIZING_FACTORY.from(value.asLong());
+    }
+
+    protected Optional<Number> quotaValueToOptionalNumber(QuotaValue<?> value) {
+        if (value.isUnlimited()) {
+            return Optional.empty();
+        }
+        return Optional.of(quotaValueToNumber(value));
+    }
+}
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/quotas/QuotaLoaderWithDefaultPreloaded.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/quotas/QuotaLoaderWithDefaultPreloaded.java
new file mode 100644
index 0000000..abbda4f
--- /dev/null
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/utils/quotas/QuotaLoaderWithDefaultPreloaded.java
@@ -0,0 +1,80 @@
+/****************************************************************
+ * 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.jmap.utils.quotas;
+
+import java.util.Optional;
+
+import org.apache.james.jmap.model.mailbox.Quotas;
+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.QuotaManager;
+import org.apache.james.mailbox.quota.QuotaRootResolver;
+
+public class QuotaLoaderWithDefaultPreloaded extends QuotaLoader {
+
+    private final QuotaRootResolver quotaRootResolver;
+    private final QuotaManager quotaManager;
+    private final Optional<Quotas> preloadedUserDefaultQuotas;
+    private final MailboxSession session;
+
+    public QuotaLoaderWithDefaultPreloaded(QuotaRootResolver quotaRootResolver,
+                                           QuotaManager quotaManager,
+                                           MailboxSession session) throws MailboxException {
+        this.quotaRootResolver = quotaRootResolver;
+        this.quotaManager = quotaManager;
+        this.session = session;
+        preloadedUserDefaultQuotas = Optional.of(getUserDefaultQuotas());
+
+    }
+
+    public Quotas getQuotas(MailboxPath mailboxPath) throws MailboxException {
+        QuotaRoot quotaRoot = quotaRootResolver.getQuotaRoot(mailboxPath);
+        Quotas.QuotaId quotaId = Quotas.QuotaId.fromQuotaRoot(quotaRoot);
+
+        if (containsQuotaId(preloadedUserDefaultQuotas, quotaId)) {
+            return preloadedUserDefaultQuotas.get();
+        }
+        return Quotas.from(
+            quotaId,
+            Quotas.Quota.from(
+                quotaToValue(quotaManager.getStorageQuota(quotaRoot)),
+                quotaToValue(quotaManager.getMessageQuota(quotaRoot))));
+    }
+
+    private boolean containsQuotaId(Optional<Quotas> preloadedUserDefaultQuotas, Quotas.QuotaId quotaId) {
+        return preloadedUserDefaultQuotas
+            .map(Quotas::getQuotas)
+            .map(quotaIdQuotaMap -> quotaIdQuotaMap.containsKey(quotaId))
+            .orElse(false);
+    }
+
+    private Quotas getUserDefaultQuotas() throws MailboxException {
+        QuotaRoot quotaRoot = quotaRootResolver.getQuotaRoot(MailboxPath.inbox(session));
+        Quotas.QuotaId quotaId = Quotas.QuotaId.fromQuotaRoot(quotaRoot);
+        return Quotas.from(
+            quotaId,
+            Quotas.Quota.from(
+                quotaToValue(quotaManager.getStorageQuota(quotaRoot)),
+                quotaToValue(quotaManager.getMessageQuota(quotaRoot))));
+
+    }
+
+}
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
index 3f53967..8a20c6c 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/methods/GetMailboxesMethodTest.java
@@ -37,7 +37,6 @@ import org.apache.james.jmap.model.MailboxFactory;
 import org.apache.james.jmap.model.Number;
 import org.apache.james.jmap.model.mailbox.Mailbox;
 import org.apache.james.jmap.model.mailbox.SortOrder;
-import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MailboxSessionUtil;
 import org.apache.james.mailbox.MessageManager;
@@ -67,15 +66,17 @@ public class GetMailboxesMethodTest {
     private ClientId clientId;
     private MailboxFactory mailboxFactory;
 
+    private QuotaRootResolver quotaRootResolver;
+    private QuotaManager quotaManager;
     @Before
     public void setup() throws Exception {
         clientId = ClientId.of("#0");
         mailboxManager = InMemoryIntegrationResources.defaultResources().getMailboxManager();
-        QuotaRootResolver quotaRootResolver = mailboxManager.getQuotaComponents().getQuotaRootResolver();
-        QuotaManager quotaManager = mailboxManager.getQuotaComponents().getQuotaManager();
+        quotaRootResolver = mailboxManager.getQuotaComponents().getQuotaRootResolver();
+        quotaManager = mailboxManager.getQuotaComponents().getQuotaManager();
         mailboxFactory = new MailboxFactory(mailboxManager, quotaManager, quotaRootResolver);
 
-        getMailboxesMethod = new GetMailboxesMethod(mailboxManager, mailboxFactory, new DefaultMetricFactory());
+        getMailboxesMethod = new GetMailboxesMethod(mailboxManager, quotaRootResolver, quotaManager,  mailboxFactory, new DefaultMetricFactory());
     }
 
     @Test
@@ -84,9 +85,9 @@ public class GetMailboxesMethodTest {
                 .build();
 
         MailboxSession mailboxSession = mailboxManager.createSystemSession(USERNAME);
-        
+
         List<JmapResponse> getMailboxesResponse = getMailboxesMethod.process(getMailboxesRequest, clientId, mailboxSession).collect(Collectors.toList());
-        
+
         assertThat(getMailboxesResponse)
                 .hasSize(1)
                 .extracting(JmapResponse::getResponse)
@@ -95,22 +96,22 @@ public class GetMailboxesMethodTest {
                 .flatExtracting(GetMailboxesResponse::getList)
                 .isEmpty();
     }
-    
+
     @Test
     public void getMailboxesShouldNotFailWhenMailboxManagerErrors() throws Exception {
-        MailboxManager mockedMailboxManager = mock(MailboxManager.class);
+        StoreMailboxManager mockedMailboxManager = mock(StoreMailboxManager.class);
         when(mockedMailboxManager.list(any()))
             .thenReturn(ImmutableList.of(new MailboxPath("namespace", "user", "name")));
         when(mockedMailboxManager.getMailbox(any(MailboxPath.class), any()))
             .thenThrow(new MailboxException());
-        GetMailboxesMethod testee = new GetMailboxesMethod(mockedMailboxManager, mailboxFactory, new DefaultMetricFactory());
-        
+        GetMailboxesMethod testee = new GetMailboxesMethod(mockedMailboxManager, quotaRootResolver, quotaManager, mailboxFactory, new DefaultMetricFactory());
+
         GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder()
                 .build();
         MailboxSession session = MailboxSessionUtil.create(USERNAME);
-        
+
         List<JmapResponse> getMailboxesResponse = testee.process(getMailboxesRequest, clientId, session).collect(Collectors.toList());
-        
+
         assertThat(getMailboxesResponse)
                 .hasSize(1)
                 .extracting(JmapResponse::getResponse)
@@ -140,7 +141,7 @@ public class GetMailboxesMethodTest {
                 .build();
 
         List<JmapResponse> getMailboxesResponse = getMailboxesMethod.process(getMailboxesRequest, clientId, mailboxSession).collect(Collectors.toList());
-        
+
         assertThat(getMailboxesResponse)
                 .hasSize(1)
                 .extracting(JmapResponse::getResponse)
@@ -165,7 +166,7 @@ public class GetMailboxesMethodTest {
                 .build();
 
         List<JmapResponse> getMailboxesResponse = getMailboxesMethod.process(getMailboxesRequest, clientId, userSession).collect(Collectors.toList());
-        
+
         assertThat(getMailboxesResponse)
                 .hasSize(1)
                 .extracting(JmapResponse::getResponse)
@@ -379,7 +380,7 @@ public class GetMailboxesMethodTest {
         mailboxManager.createMailbox(MailboxPath.forUser(USERNAME, "Spam"), mailboxSession);
         mailboxManager.createMailbox(MailboxPath.forUser(USERNAME, "Templates"), mailboxSession);
         mailboxManager.createMailbox(MailboxPath.forUser(USERNAME, "WITHOUT ROLE"), mailboxSession);
-        
+
         GetMailboxesRequest getMailboxesRequest = GetMailboxesRequest.builder()
                 .build();
 
diff --git a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
index 34e8e34..cdbaa54 100644
--- a/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
+++ b/server/protocols/jmap/src/test/java/org/apache/james/jmap/model/MailboxFactoryTest.java
@@ -24,6 +24,8 @@ import java.util.Optional;
 
 import org.apache.james.jmap.model.mailbox.Mailbox;
 import org.apache.james.jmap.model.mailbox.MailboxNamespace;
+import org.apache.james.jmap.utils.quotas.DefaultQuotaLoader;
+import org.apache.james.jmap.utils.quotas.QuotaLoader;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources;


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org