Repository: james-project
Updated Branches:
  refs/heads/master 5c80ce22d -> 9e331f716


JAMES-2344 split CassandraPerUserMaxQuotaDao so that a single DAO manage a 
single table


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/9e331f71
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/9e331f71
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/9e331f71

Branch: refs/heads/master
Commit: 9e331f716c72e515e96b764d1c47297ff8d6fbea
Parents: 290b2a9
Author: Matthieu Baechler <matth...@apache.org>
Authored: Fri Mar 2 15:18:16 2018 +0100
Committer: Matthieu Baechler <matth...@apache.org>
Committed: Fri Mar 9 14:57:12 2018 +0100

----------------------------------------------------------------------
 .../quota/CassandraDefaultMaxQuotaDao.java      | 119 +++++++++++++++++++
 .../quota/CassandraPerUserMaxQuotaDao.java      | 104 +---------------
 .../quota/CassandraPerUserMaxQuotaManager.java  |  32 ++---
 .../mailbox/cassandra/quota/QuotaCodec.java     |  56 +++++++++
 .../cassandra/CassandraTestSystemFixture.java   |   5 +-
 .../CassandraPerUserMaxQuotaManagerTest.java    |   4 +-
 .../cassandra/host/CassandraHostSystem.java     |   5 +-
 .../modules/mailbox/CassandraQuotaModule.java   |   4 +
 8 files changed, 211 insertions(+), 118 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/9e331f71/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraDefaultMaxQuotaDao.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraDefaultMaxQuotaDao.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraDefaultMaxQuotaDao.java
new file mode 100644
index 0000000..8205863
--- /dev/null
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraDefaultMaxQuotaDao.java
@@ -0,0 +1,119 @@
+/****************************************************************
+ * 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.cassandra.quota;
+
+import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.delete;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.eq;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
+
+import java.util.Optional;
+
+import javax.inject.Inject;
+
+import org.apache.james.mailbox.cassandra.table.CassandraDefaultMaxQuota;
+import org.apache.james.mailbox.quota.QuotaCount;
+import org.apache.james.mailbox.quota.QuotaSize;
+
+import com.datastax.driver.core.PreparedStatement;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.Session;
+import com.datastax.driver.core.querybuilder.Delete;
+import com.datastax.driver.core.querybuilder.Insert;
+import com.datastax.driver.core.querybuilder.Select;
+
+public class CassandraDefaultMaxQuotaDao {
+
+    private final Session session;
+    private final PreparedStatement setDefaultMaxStorageStatement;
+    private final PreparedStatement setDefaultMaxMessageStatement;
+    private final PreparedStatement getDefaultMaxStatement;
+    private final PreparedStatement removeDefaultMaxQuotaStatement;
+
+    @Inject
+    public CassandraDefaultMaxQuotaDao(Session session) {
+        this.session = session;
+        this.getDefaultMaxStatement = 
session.prepare(getDefaultMaxStatement());
+        this.setDefaultMaxMessageStatement = 
session.prepare(setDefaultMaxMessageStatement());
+        this.setDefaultMaxStorageStatement = 
session.prepare(setDefaultMaxStorageStatement());
+        this.removeDefaultMaxQuotaStatement = 
session.prepare(removeDefaultMaxQuotaStatement());
+    }
+
+    private Delete.Where removeDefaultMaxQuotaStatement() {
+        return delete().all()
+            .from(CassandraDefaultMaxQuota.TABLE_NAME)
+            .where(eq(CassandraDefaultMaxQuota.TYPE, 
bindMarker(CassandraDefaultMaxQuota.TYPE)));
+    }
+
+    private Insert setDefaultMaxStorageStatement() {
+        return insertInto(CassandraDefaultMaxQuota.TABLE_NAME)
+            .value(CassandraDefaultMaxQuota.TYPE, 
CassandraDefaultMaxQuota.STORAGE)
+            .value(CassandraDefaultMaxQuota.VALUE, bindMarker());
+    }
+
+    private Insert setDefaultMaxMessageStatement() {
+        return insertInto(CassandraDefaultMaxQuota.TABLE_NAME)
+            .value(CassandraDefaultMaxQuota.TYPE, 
CassandraDefaultMaxQuota.MESSAGE)
+            .value(CassandraDefaultMaxQuota.VALUE, bindMarker());
+    }
+
+    private Select.Where getDefaultMaxStatement() {
+        return select(CassandraDefaultMaxQuota.VALUE)
+            .from(CassandraDefaultMaxQuota.TABLE_NAME)
+            .where(eq(CassandraDefaultMaxQuota.TYPE, 
bindMarker(CassandraDefaultMaxQuota.TYPE)));
+    }
+
+    public void setDefaultMaxStorage(QuotaSize defaultMaxStorage) {
+        
session.execute(setDefaultMaxStorageStatement.bind(QuotaCodec.quotaValueToLong(defaultMaxStorage)));
+    }
+
+    public void setDefaultMaxMessage(QuotaCount defaultMaxMessageCount) {
+        
session.execute(setDefaultMaxMessageStatement.bind(QuotaCodec.quotaValueToLong(defaultMaxMessageCount)));
+    }
+
+    public Optional<QuotaSize> getDefaultMaxStorage() {
+        ResultSet resultSet = session.execute(getDefaultMaxStatement.bind()
+            .setString(CassandraDefaultMaxQuota.TYPE, 
CassandraDefaultMaxQuota.STORAGE));
+        if (resultSet.isExhausted()) {
+            return Optional.empty();
+        }
+        Long maxStorage = resultSet.one().get(CassandraDefaultMaxQuota.VALUE, 
Long.class);
+        return QuotaCodec.longToQuotaSize(maxStorage);
+    }
+
+    public Optional<QuotaCount> getDefaultMaxMessage() {
+        ResultSet resultSet = session.execute(getDefaultMaxStatement.bind()
+            .setString(CassandraDefaultMaxQuota.TYPE, 
CassandraDefaultMaxQuota.MESSAGE));
+        if (resultSet.isExhausted()) {
+            return Optional.empty();
+        }
+        Long maxMessages = resultSet.one().get(CassandraDefaultMaxQuota.VALUE, 
Long.class);
+        return QuotaCodec.longToQuotaCount(maxMessages);
+    }
+
+    public void removeDefaultMaxStorage() {
+        
session.execute(removeDefaultMaxQuotaStatement.bind(CassandraDefaultMaxQuota.STORAGE));
+    }
+
+    public void removeDefaultMaxMessage() {
+        
session.execute(removeDefaultMaxQuotaStatement.bind(CassandraDefaultMaxQuota.MESSAGE));
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/9e331f71/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaDao.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaDao.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaDao.java
index 46ede92..1a861c7 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaDao.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaDao.java
@@ -26,16 +26,13 @@ import static 
com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
 
 import java.util.Optional;
-import java.util.function.Function;
 
 import javax.inject.Inject;
 
-import org.apache.james.mailbox.cassandra.table.CassandraDefaultMaxQuota;
 import org.apache.james.mailbox.cassandra.table.CassandraMaxQuota;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.quota.QuotaCount;
 import org.apache.james.mailbox.quota.QuotaSize;
-import org.apache.james.mailbox.quota.QuotaValue;
 
 import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.ResultSet;
@@ -46,18 +43,13 @@ import com.datastax.driver.core.querybuilder.Select;
 
 public class CassandraPerUserMaxQuotaDao {
 
-    private static final long INFINITE = -1;
     private final Session session;
     private final PreparedStatement setMaxStorageStatement;
     private final PreparedStatement setMaxMessageStatement;
     private final PreparedStatement getMaxStorageStatement;
     private final PreparedStatement getMaxMessageStatement;
-    private final PreparedStatement setDefaultMaxStorageStatement;
-    private final PreparedStatement setDefaultMaxMessageStatement;
-    private final PreparedStatement getDefaultMaxStatement;
     private final PreparedStatement removeMaxStorageStatement;
     private final PreparedStatement removeMaxMessageStatement;
-    private final PreparedStatement removeDefaultMaxQuotaStatement;
 
     @Inject
     public CassandraPerUserMaxQuotaDao(Session session) {
@@ -66,10 +58,6 @@ public class CassandraPerUserMaxQuotaDao {
         this.setMaxMessageStatement = 
session.prepare(setMaxMessageStatement());
         this.getMaxStorageStatement = 
session.prepare(getMaxStorageStatement());
         this.getMaxMessageStatement = 
session.prepare(getMaxMessageStatement());
-        this.getDefaultMaxStatement = 
session.prepare(getDefaultMaxStatement());
-        this.setDefaultMaxMessageStatement = 
session.prepare(setDefaultMaxMessageStatement());
-        this.setDefaultMaxStorageStatement = 
session.prepare(setDefaultMaxStorageStatement());
-        this.removeDefaultMaxQuotaStatement = 
session.prepare(removeDefaultMaxQuotaStatement());
         this.removeMaxStorageStatement = 
session.prepare(removeMaxStorageStatement());
         this.removeMaxMessageStatement = 
session.prepare(removeMaxMessageStatement());
     }
@@ -86,30 +74,6 @@ public class CassandraPerUserMaxQuotaDao {
             .where(eq(CassandraMaxQuota.QUOTA_ROOT, bindMarker()));
     }
 
-    private Delete.Where removeDefaultMaxQuotaStatement() {
-        return delete().all()
-            .from(CassandraDefaultMaxQuota.TABLE_NAME)
-            .where(eq(CassandraDefaultMaxQuota.TYPE, 
bindMarker(CassandraDefaultMaxQuota.TYPE)));
-    }
-
-    private Insert setDefaultMaxStorageStatement() {
-        return insertInto(CassandraDefaultMaxQuota.TABLE_NAME)
-            .value(CassandraDefaultMaxQuota.TYPE, 
CassandraDefaultMaxQuota.STORAGE)
-            .value(CassandraDefaultMaxQuota.VALUE, bindMarker());
-    }
-
-    private Insert setDefaultMaxMessageStatement() {
-        return insertInto(CassandraDefaultMaxQuota.TABLE_NAME)
-            .value(CassandraDefaultMaxQuota.TYPE, 
CassandraDefaultMaxQuota.MESSAGE)
-            .value(CassandraDefaultMaxQuota.VALUE, bindMarker());
-    }
-
-    private Select.Where getDefaultMaxStatement() {
-        return select(CassandraDefaultMaxQuota.VALUE)
-            .from(CassandraDefaultMaxQuota.TABLE_NAME)
-            .where(eq(CassandraDefaultMaxQuota.TYPE, 
bindMarker(CassandraDefaultMaxQuota.TYPE)));
-    }
-
     private Select.Where getMaxMessageStatement() {
         return select(CassandraMaxQuota.MESSAGE_COUNT)
             .from(CassandraMaxQuota.TABLE_NAME)
@@ -135,39 +99,11 @@ public class CassandraPerUserMaxQuotaDao {
     }
 
     public void setMaxStorage(QuotaRoot quotaRoot, QuotaSize maxStorageQuota) {
-        session.execute(setMaxStorageStatement.bind(quotaRoot.getValue(), 
quotaValueToLong(maxStorageQuota)));
+        session.execute(setMaxStorageStatement.bind(quotaRoot.getValue(), 
QuotaCodec.quotaValueToLong(maxStorageQuota)));
     }
 
     public void setMaxMessage(QuotaRoot quotaRoot, QuotaCount maxMessageCount) 
{
-        session.execute(setMaxMessageStatement.bind(quotaRoot.getValue(), 
quotaValueToLong(maxMessageCount)));
-    }
-
-    public void setDefaultMaxStorage(QuotaSize defaultMaxStorage) {
-        
session.execute(setDefaultMaxStorageStatement.bind(quotaValueToLong(defaultMaxStorage)));
-    }
-
-    public void setDefaultMaxMessage(QuotaCount defaultMaxMessageCount) {
-        
session.execute(setDefaultMaxMessageStatement.bind(quotaValueToLong(defaultMaxMessageCount)));
-    }
-
-    public Optional<QuotaSize> getDefaultMaxStorage() {
-        ResultSet resultSet = session.execute(getDefaultMaxStatement.bind()
-            .setString(CassandraDefaultMaxQuota.TYPE, 
CassandraDefaultMaxQuota.STORAGE));
-        if (resultSet.isExhausted()) {
-            return Optional.empty();
-        }
-        Long maxStorage = resultSet.one().get(CassandraDefaultMaxQuota.VALUE, 
Long.class);
-        return longToQuotaSize(maxStorage);
-    }
-
-    public Optional<QuotaCount> getDefaultMaxMessage() {
-        ResultSet resultSet = session.execute(getDefaultMaxStatement.bind()
-            .setString(CassandraDefaultMaxQuota.TYPE, 
CassandraDefaultMaxQuota.MESSAGE));
-        if (resultSet.isExhausted()) {
-            return Optional.empty();
-        }
-        Long maxMessages = resultSet.one().get(CassandraDefaultMaxQuota.VALUE, 
Long.class);
-        return longToQuotaCount(maxMessages);
+        session.execute(setMaxMessageStatement.bind(quotaRoot.getValue(), 
QuotaCodec.quotaValueToLong(maxMessageCount)));
     }
 
     public Optional<QuotaSize> getMaxStorage(QuotaRoot quotaRoot) {
@@ -176,7 +112,7 @@ public class CassandraPerUserMaxQuotaDao {
             return Optional.empty();
         }
         Long maxStorage = resultSet.one().get(CassandraMaxQuota.STORAGE, 
Long.class);
-        return longToQuotaSize(maxStorage);
+        return QuotaCodec.longToQuotaSize(maxStorage);
     }
 
     public Optional<QuotaCount> getMaxMessage(QuotaRoot quotaRoot) {
@@ -185,32 +121,7 @@ public class CassandraPerUserMaxQuotaDao {
             return Optional.empty();
         }
         Long maxMessages = 
resultSet.one().get(CassandraMaxQuota.MESSAGE_COUNT, Long.class);
-        return longToQuotaCount(maxMessages);
-    }
-
-    private Long quotaValueToLong(QuotaValue<?> value) {
-        if (value.isUnlimited()) {
-            return INFINITE;
-        }
-        return value.asLong();
-    }
-
-    private Optional<QuotaSize> longToQuotaSize(Long value) {
-        return longToQuotaValue(value, QuotaSize.unlimited(), QuotaSize::size);
-    }
-
-    private Optional<QuotaCount> longToQuotaCount(Long value) {
-        return longToQuotaValue(value, QuotaCount.unlimited(), 
QuotaCount::count);
-    }
-
-    private <T extends QuotaValue<T>> Optional<T> longToQuotaValue(Long value, 
T infiniteValue, Function<Long, T> quotaFactory) {
-        if (value == null) {
-            return Optional.empty();
-        }
-        if (value == INFINITE) {
-            return Optional.of(infiniteValue);
-        }
-        return Optional.of(quotaFactory.apply(value));
+        return QuotaCodec.longToQuotaCount(maxMessages);
     }
 
     public void removeMaxMessage(QuotaRoot quotaRoot) {
@@ -221,11 +132,4 @@ public class CassandraPerUserMaxQuotaDao {
         session.execute(removeMaxStorageStatement.bind(quotaRoot.getValue()));
     }
 
-    public void removeDefaultMaxStorage() {
-        
session.execute(removeDefaultMaxQuotaStatement.bind(CassandraDefaultMaxQuota.STORAGE));
-    }
-
-    public void removeDefaultMaxMessage() {
-        
session.execute(removeDefaultMaxQuotaStatement.bind(CassandraDefaultMaxQuota.MESSAGE));
-    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/9e331f71/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManager.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManager.java
index 46fe5e3..d73db1f 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManager.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManager.java
@@ -32,73 +32,75 @@ import com.github.fge.lambdas.Throwing;
 
 public class CassandraPerUserMaxQuotaManager implements MaxQuotaManager {
 
-    private final CassandraPerUserMaxQuotaDao dao;
+    private final CassandraPerUserMaxQuotaDao perUserQuota;
+    private final CassandraDefaultMaxQuotaDao defaultQuota;
 
     @Inject
-    public CassandraPerUserMaxQuotaManager(CassandraPerUserMaxQuotaDao dao) {
-        this.dao = dao;
+    public CassandraPerUserMaxQuotaManager(CassandraPerUserMaxQuotaDao 
perUserQuota, CassandraDefaultMaxQuotaDao defaultQuota) {
+        this.perUserQuota = perUserQuota;
+        this.defaultQuota = defaultQuota;
     }
 
     @Override
     public void setMaxStorage(QuotaRoot quotaRoot, QuotaSize maxStorageQuota) {
-        dao.setMaxStorage(quotaRoot, maxStorageQuota);
+        perUserQuota.setMaxStorage(quotaRoot, maxStorageQuota);
     }
 
     @Override
     public void setMaxMessage(QuotaRoot quotaRoot, QuotaCount maxMessageCount) 
{
-        dao.setMaxMessage(quotaRoot, maxMessageCount);
+        perUserQuota.setMaxMessage(quotaRoot, maxMessageCount);
     }
 
     @Override
     public void removeMaxMessage(QuotaRoot quotaRoot) {
-        dao.removeMaxMessage(quotaRoot);
+        perUserQuota.removeMaxMessage(quotaRoot);
     }
 
     @Override
     public void removeMaxStorage(QuotaRoot quotaRoot) {
-        dao.removeMaxStorage(quotaRoot);
+        perUserQuota.removeMaxStorage(quotaRoot);
     }
 
     @Override
     public void setDefaultMaxStorage(QuotaSize defaultMaxStorage) {
-        dao.setDefaultMaxStorage(defaultMaxStorage);
+        defaultQuota.setDefaultMaxStorage(defaultMaxStorage);
     }
 
     @Override
     public void removeDefaultMaxStorage() {
-        dao.removeDefaultMaxStorage();
+        defaultQuota.removeDefaultMaxStorage();
     }
 
     @Override
     public void setDefaultMaxMessage(QuotaCount defaultMaxMessageCount) {
-        dao.setDefaultMaxMessage(defaultMaxMessageCount);
+        defaultQuota.setDefaultMaxMessage(defaultMaxMessageCount);
     }
 
     @Override
     public void removeDefaultMaxMessage() {
-        dao.removeDefaultMaxMessage();
+        defaultQuota.removeDefaultMaxMessage();
     }
 
     @Override
     public Optional<QuotaSize> getDefaultMaxStorage() {
-        return dao.getDefaultMaxStorage();
+        return defaultQuota.getDefaultMaxStorage();
     }
 
     @Override
     public Optional<QuotaCount> getDefaultMaxMessage() {
-        return dao.getDefaultMaxMessage();
+        return defaultQuota.getDefaultMaxMessage();
     }
 
     @Override
     public Optional<QuotaSize> getMaxStorage(QuotaRoot quotaRoot) {
-        return dao.getMaxStorage(quotaRoot)
+        return perUserQuota.getMaxStorage(quotaRoot)
             .map(Optional::of)
             
.orElseGet(Throwing.supplier(this::getDefaultMaxStorage).sneakyThrow());
     }
 
     @Override
     public Optional<QuotaCount> getMaxMessage(QuotaRoot quotaRoot) {
-        return dao.getMaxMessage(quotaRoot)
+        return perUserQuota.getMaxMessage(quotaRoot)
             .map(Optional::of)
             
.orElseGet(Throwing.supplier(this::getDefaultMaxMessage).sneakyThrow());
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/9e331f71/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/QuotaCodec.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/QuotaCodec.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/QuotaCodec.java
new file mode 100644
index 0000000..3ab6eaa
--- /dev/null
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/QuotaCodec.java
@@ -0,0 +1,56 @@
+/****************************************************************
+ * 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.cassandra.quota;
+
+import java.util.Optional;
+import java.util.function.Function;
+
+import org.apache.james.mailbox.quota.QuotaCount;
+import org.apache.james.mailbox.quota.QuotaSize;
+import org.apache.james.mailbox.quota.QuotaValue;
+
+public class QuotaCodec {
+
+    private static final long INFINITE = -1;
+
+    static Long quotaValueToLong(QuotaValue<?> value) {
+        if (value.isUnlimited()) {
+            return INFINITE;
+        }
+        return value.asLong();
+    }
+
+    static Optional<QuotaSize> longToQuotaSize(Long value) {
+        return longToQuotaValue(value, QuotaSize.unlimited(), QuotaSize::size);
+    }
+
+    static Optional<QuotaCount> longToQuotaCount(Long value) {
+        return longToQuotaValue(value, QuotaCount.unlimited(), 
QuotaCount::count);
+    }
+
+    private static <T extends QuotaValue<T>> Optional<T> longToQuotaValue(Long 
value, T infiniteValue, Function<Long, T> quotaFactory) {
+        if (value == null) {
+            return Optional.empty();
+        }
+        if (value == INFINITE) {
+            return Optional.of(infiniteValue);
+        }
+        return Optional.of(quotaFactory.apply(value));
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/9e331f71/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 6f6de00..8fffb69 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
@@ -26,6 +26,7 @@ import 
org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
 import org.apache.james.mailbox.cassandra.quota.CassandraCurrentQuotaManager;
+import org.apache.james.mailbox.cassandra.quota.CassandraDefaultMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaDao;
 import 
org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager;
 import org.apache.james.mailbox.quota.CurrentQuotaManager;
@@ -81,7 +82,9 @@ public class CassandraTestSystemFixture {
     }
 
     public static MaxQuotaManager createMaxQuotaManager(CassandraCluster 
cassandra) {
-        return new CassandraPerUserMaxQuotaManager(new 
CassandraPerUserMaxQuotaDao(cassandra.getConf()));
+        return new CassandraPerUserMaxQuotaManager(
+            new CassandraPerUserMaxQuotaDao(cassandra.getConf()),
+            new CassandraDefaultMaxQuotaDao(cassandra.getConf()));
     }
 
     public static CurrentQuotaManager 
createCurrentQuotaManager(CassandraCluster cassandra) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/9e331f71/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerTest.java
index 09cab4f..35e495c 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerTest.java
@@ -36,7 +36,9 @@ public class CassandraPerUserMaxQuotaManagerTest extends 
GenericMaxQuotaManagerT
     @Override
     protected MaxQuotaManager provideMaxQuotaManager() {
         cassandra = CassandraCluster.create(new CassandraQuotaModule(), 
cassandraServer.getIp(), cassandraServer.getBindingPort());
-        return new CassandraPerUserMaxQuotaManager(new 
CassandraPerUserMaxQuotaDao(cassandra.getConf()));
+        return new CassandraPerUserMaxQuotaManager(
+            new CassandraPerUserMaxQuotaDao(cassandra.getConf()),
+            new CassandraDefaultMaxQuotaDao(cassandra.getConf()));
     }
 
     @After

http://git-wip-us.apache.org/repos/asf/james-project/blob/9e331f71/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 efe3d1a..c27c9ca 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
@@ -48,6 +48,7 @@ import 
org.apache.james.mailbox.cassandra.modules.CassandraQuotaModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraSubscriptionModule;
 import org.apache.james.mailbox.cassandra.modules.CassandraUidModule;
 import org.apache.james.mailbox.cassandra.quota.CassandraCurrentQuotaManager;
+import org.apache.james.mailbox.cassandra.quota.CassandraDefaultMaxQuotaDao;
 import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaDao;
 import 
org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager;
 import org.apache.james.mailbox.exception.MailboxException;
@@ -126,7 +127,9 @@ public class CassandraHostSystem extends 
JamesImapHostSystem {
             mailboxEventDispatcher, delegatingMailboxListener, 
annotationManager, storeRightManager);
         QuotaRootResolver quotaRootResolver = new 
DefaultUserQuotaRootResolver(mapperFactory);
 
-        perUserMaxQuotaManager = new CassandraPerUserMaxQuotaManager(new 
CassandraPerUserMaxQuotaDao(session));
+        perUserMaxQuotaManager = new CassandraPerUserMaxQuotaManager(
+            new CassandraPerUserMaxQuotaDao(session),
+            new CassandraDefaultMaxQuotaDao(session));
 
         CassandraCurrentQuotaManager currentQuotaManager = new 
CassandraCurrentQuotaManager(session);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/9e331f71/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 27da710..6d3a04b 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
@@ -21,6 +21,8 @@ package org.apache.james.modules.mailbox;
 
 import org.apache.james.backends.cassandra.components.CassandraModule;
 import org.apache.james.mailbox.cassandra.quota.CassandraCurrentQuotaManager;
+import org.apache.james.mailbox.cassandra.quota.CassandraDefaultMaxQuotaDao;
+import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaDao;
 import 
org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager;
 import org.apache.james.mailbox.quota.CurrentQuotaManager;
 import org.apache.james.mailbox.quota.MaxQuotaManager;
@@ -40,6 +42,8 @@ public class CassandraQuotaModule extends AbstractModule {
     @Override
     protected void configure() {
         bind(CassandraCurrentQuotaManager.class).in(Scopes.SINGLETON);
+        bind(CassandraDefaultMaxQuotaDao.class).in(Scopes.SINGLETON);
+        bind(CassandraPerUserMaxQuotaDao.class).in(Scopes.SINGLETON);
         bind(CassandraPerUserMaxQuotaManager.class).in(Scopes.SINGLETON);
         bind(DefaultUserQuotaRootResolver.class).in(Scopes.SINGLETON);
         bind(StoreQuotaManager.class).in(Scopes.SINGLETON);


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

Reply via email to