Repository: james-project
Updated Branches:
  refs/heads/master 3dbfd86b8 -> 1ed1e4634


JAMES-2344 Extract part of CassandraPerUserMaxQuotaManager to a Dao


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

Branch: refs/heads/master
Commit: 7eaed642616ebbf12f055334aa15401a3b1760a4
Parents: 3dbfd86
Author: Matthieu Baechler <[email protected]>
Authored: Wed Feb 28 15:53:37 2018 +0100
Committer: Matthieu Baechler <[email protected]>
Committed: Wed Mar 7 11:27:21 2018 +0100

----------------------------------------------------------------------
 .../quota/CassandraPerUserMaxQuotaDao.java      | 125 +++++++++++++++++++
 .../quota/CassandraPerUserMaxQuotaManager.java  |  79 ++----------
 .../cassandra/CassandraTestSystemFixture.java   |   3 +-
 .../CassandraPerUserMaxQuotaManagerTest.java    |   2 +-
 .../cassandra/host/CassandraHostSystem.java     |   3 +-
 5 files changed, 142 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/7eaed642/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
new file mode 100644
index 0000000..8b7a868
--- /dev/null
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaDao.java
@@ -0,0 +1,125 @@
+/****************************************************************
+ * 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.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.cassandra.table.CassandraMaxQuota;
+import org.apache.james.mailbox.model.QuotaRoot;
+
+import com.datastax.driver.core.PreparedStatement;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.Session;
+
+public class CassandraPerUserMaxQuotaDao {
+
+    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;
+
+    @Inject
+    public CassandraPerUserMaxQuotaDao(Session session) {
+        this.session = session;
+        this.setMaxStorageStatement = 
session.prepare(insertInto(CassandraMaxQuota.TABLE_NAME)
+            .value(CassandraMaxQuota.QUOTA_ROOT, bindMarker())
+            .value(CassandraMaxQuota.STORAGE, bindMarker()));
+        this.setMaxMessageStatement = 
session.prepare(insertInto(CassandraMaxQuota.TABLE_NAME)
+            .value(CassandraMaxQuota.QUOTA_ROOT, bindMarker())
+            .value(CassandraMaxQuota.MESSAGE_COUNT, bindMarker()));
+        this.getMaxStorageStatement = 
session.prepare(select(CassandraMaxQuota.STORAGE)
+            .from(CassandraMaxQuota.TABLE_NAME)
+            .where(eq(CassandraMaxQuota.QUOTA_ROOT, bindMarker())));
+        this.getMaxMessageStatement = 
session.prepare(select(CassandraMaxQuota.MESSAGE_COUNT)
+            .from(CassandraMaxQuota.TABLE_NAME)
+            .where(eq(CassandraMaxQuota.QUOTA_ROOT, bindMarker())));
+        this.getDefaultMaxStatement = 
session.prepare(select(CassandraDefaultMaxQuota.VALUE)
+            .from(CassandraDefaultMaxQuota.TABLE_NAME)
+            .where(eq(CassandraDefaultMaxQuota.TYPE, 
bindMarker(CassandraDefaultMaxQuota.TYPE))));
+        this.setDefaultMaxMessageStatement = 
session.prepare(insertInto(CassandraDefaultMaxQuota.TABLE_NAME)
+            .value(CassandraDefaultMaxQuota.TYPE, 
CassandraDefaultMaxQuota.MESSAGE)
+            .value(CassandraDefaultMaxQuota.VALUE, bindMarker()));
+        this.setDefaultMaxStorageStatement = 
session.prepare(insertInto(CassandraDefaultMaxQuota.TABLE_NAME)
+            .value(CassandraDefaultMaxQuota.TYPE, 
CassandraDefaultMaxQuota.STORAGE)
+            .value(CassandraDefaultMaxQuota.VALUE, bindMarker()));
+    }
+
+    public void setMaxStorage(QuotaRoot quotaRoot, long maxStorageQuota) {
+        session.execute(setMaxStorageStatement.bind(quotaRoot.getValue(), 
maxStorageQuota));
+    }
+
+    public void setMaxMessage(QuotaRoot quotaRoot, long maxMessageCount) {
+        session.execute(setMaxMessageStatement.bind(quotaRoot.getValue(), 
maxMessageCount));
+    }
+
+    public void setDefaultMaxStorage(long defaultMaxStorage) {
+        session.execute(setDefaultMaxStorageStatement.bind(defaultMaxStorage));
+    }
+
+    public void setDefaultMaxMessage(long defaultMaxMessageCount) {
+        
session.execute(setDefaultMaxMessageStatement.bind(defaultMaxMessageCount));
+    }
+
+    public Optional<Long> getDefaultMaxStorage() {
+        ResultSet resultSet = session.execute(getDefaultMaxStatement.bind()
+            .setString(CassandraDefaultMaxQuota.TYPE, 
CassandraDefaultMaxQuota.STORAGE));
+        if (resultSet.isExhausted()) {
+            return Optional.empty();
+        }
+        return 
Optional.of(resultSet.one().getLong(CassandraDefaultMaxQuota.VALUE));
+    }
+
+    public Optional<Long> getDefaultMaxMessage() {
+        ResultSet resultSet = session.execute(getDefaultMaxStatement.bind()
+            .setString(CassandraDefaultMaxQuota.TYPE, 
CassandraDefaultMaxQuota.MESSAGE));
+        if (resultSet.isExhausted()) {
+            return Optional.empty();
+        }
+        return 
Optional.of(resultSet.one().getLong(CassandraDefaultMaxQuota.VALUE));
+    }
+
+    public Optional<Long> getMaxStorage(QuotaRoot quotaRoot) {
+        ResultSet resultSet = 
session.execute(getMaxStorageStatement.bind(quotaRoot.getValue()));
+        if (resultSet.isExhausted()) {
+            return Optional.empty();
+        }
+        return Optional.of(resultSet.one().getLong(CassandraMaxQuota.STORAGE));
+    }
+
+    public Optional<Long> getMaxMessage(QuotaRoot quotaRoot) {
+        ResultSet resultSet = 
session.execute(getMaxMessageStatement.bind(quotaRoot.getValue()));
+        if (resultSet.isExhausted()) {
+            return Optional.empty();
+        }
+        return 
Optional.of(resultSet.one().getLong(CassandraMaxQuota.MESSAGE_COUNT));
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/7eaed642/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 5a6a1b3..7f41fda 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
@@ -19,116 +19,61 @@
 
 package org.apache.james.mailbox.cassandra.quota;
 
-import static com.datastax.driver.core.querybuilder.QueryBuilder.bindMarker;
-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 javax.inject.Inject;
 
-import org.apache.james.mailbox.cassandra.table.CassandraDefaultMaxQuota;
-import org.apache.james.mailbox.cassandra.table.CassandraMaxQuota;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.Quota;
 import org.apache.james.mailbox.model.QuotaRoot;
 import org.apache.james.mailbox.quota.MaxQuotaManager;
 
-import com.datastax.driver.core.PreparedStatement;
-import com.datastax.driver.core.ResultSet;
-import com.datastax.driver.core.Session;
+import com.github.fge.lambdas.Throwing;
 
 public class CassandraPerUserMaxQuotaManager implements MaxQuotaManager {
 
-    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 CassandraPerUserMaxQuotaDao dao;
 
     @Inject
-    public CassandraPerUserMaxQuotaManager(Session session) {
-        this.session = session;
-        this.setMaxStorageStatement = 
session.prepare(insertInto(CassandraMaxQuota.TABLE_NAME)
-            .value(CassandraMaxQuota.QUOTA_ROOT, bindMarker())
-            .value(CassandraMaxQuota.STORAGE, bindMarker()));
-        this.setMaxMessageStatement = 
session.prepare(insertInto(CassandraMaxQuota.TABLE_NAME)
-            .value(CassandraMaxQuota.QUOTA_ROOT, bindMarker())
-            .value(CassandraMaxQuota.MESSAGE_COUNT, bindMarker()));
-        this.getMaxStorageStatement = 
session.prepare(select(CassandraMaxQuota.STORAGE)
-            .from(CassandraMaxQuota.TABLE_NAME)
-            .where(eq(CassandraMaxQuota.QUOTA_ROOT, bindMarker())));
-        this.getMaxMessageStatement = 
session.prepare(select(CassandraMaxQuota.MESSAGE_COUNT)
-            .from(CassandraMaxQuota.TABLE_NAME)
-            .where(eq(CassandraMaxQuota.QUOTA_ROOT, bindMarker())));
-        this.getDefaultMaxStatement = 
session.prepare(select(CassandraDefaultMaxQuota.VALUE)
-            .from(CassandraDefaultMaxQuota.TABLE_NAME)
-            .where(eq(CassandraDefaultMaxQuota.TYPE, 
bindMarker(CassandraDefaultMaxQuota.TYPE))));
-        this.setDefaultMaxMessageStatement = 
session.prepare(insertInto(CassandraDefaultMaxQuota.TABLE_NAME)
-            .value(CassandraDefaultMaxQuota.TYPE, 
CassandraDefaultMaxQuota.MESSAGE)
-            .value(CassandraDefaultMaxQuota.VALUE, bindMarker()));
-        this.setDefaultMaxStorageStatement = 
session.prepare(insertInto(CassandraDefaultMaxQuota.TABLE_NAME)
-            .value(CassandraDefaultMaxQuota.TYPE, 
CassandraDefaultMaxQuota.STORAGE)
-            .value(CassandraDefaultMaxQuota.VALUE, bindMarker()));
+    public CassandraPerUserMaxQuotaManager(CassandraPerUserMaxQuotaDao dao) {
+        this.dao = dao;
     }
 
     @Override
     public void setMaxStorage(QuotaRoot quotaRoot, long maxStorageQuota) 
throws MailboxException {
-        session.execute(setMaxStorageStatement.bind(quotaRoot.getValue(), 
maxStorageQuota));
+        dao.setMaxStorage(quotaRoot, maxStorageQuota);
     }
 
     @Override
     public void setMaxMessage(QuotaRoot quotaRoot, long maxMessageCount) 
throws MailboxException {
-        session.execute(setMaxMessageStatement.bind(quotaRoot.getValue(), 
maxMessageCount));
+        dao.setMaxMessage(quotaRoot, maxMessageCount);
     }
 
     @Override
     public void setDefaultMaxStorage(long defaultMaxStorage) throws 
MailboxException {
-        session.execute(setDefaultMaxStorageStatement.bind(defaultMaxStorage));
+        dao.setDefaultMaxStorage(defaultMaxStorage);
     }
 
     @Override
     public void setDefaultMaxMessage(long defaultMaxMessageCount) throws 
MailboxException {
-        
session.execute(setDefaultMaxMessageStatement.bind(defaultMaxMessageCount));
+        dao.setDefaultMaxMessage(defaultMaxMessageCount);
     }
 
     @Override
     public long getDefaultMaxStorage() throws MailboxException {
-        ResultSet resultSet = session.execute(getDefaultMaxStatement.bind()
-            .setString(CassandraDefaultMaxQuota.TYPE, 
CassandraDefaultMaxQuota.STORAGE));
-        if (resultSet.isExhausted()) {
-            return Quota.UNLIMITED;
-        }
-        return resultSet.one().getLong(CassandraDefaultMaxQuota.VALUE);
+        return dao.getDefaultMaxStorage().orElse(Quota.UNLIMITED);
     }
 
     @Override
     public long getDefaultMaxMessage() throws MailboxException {
-        ResultSet resultSet = session.execute(getDefaultMaxStatement.bind()
-            .setString(CassandraDefaultMaxQuota.TYPE, 
CassandraDefaultMaxQuota.MESSAGE));
-        if (resultSet.isExhausted()) {
-            return Quota.UNLIMITED;
-        }
-        return resultSet.one().getLong(CassandraDefaultMaxQuota.VALUE);
+        return dao.getDefaultMaxMessage().orElse(Quota.UNLIMITED);
     }
 
     @Override
     public long getMaxStorage(QuotaRoot quotaRoot) throws MailboxException {
-        ResultSet resultSet = 
session.execute(getMaxStorageStatement.bind(quotaRoot.getValue()));
-        if (resultSet.isExhausted()) {
-            return getDefaultMaxStorage();
-        }
-        return resultSet.one().getLong(CassandraMaxQuota.STORAGE);
+        return 
dao.getMaxStorage(quotaRoot).orElseGet(Throwing.supplier(this::getDefaultMaxStorage).sneakyThrow());
     }
 
     @Override
     public long getMaxMessage(QuotaRoot quotaRoot) throws MailboxException {
-        ResultSet resultSet = 
session.execute(getMaxMessageStatement.bind(quotaRoot.getValue()));
-        if (resultSet.isExhausted()) {
-            return getDefaultMaxMessage();
-        }
-        return resultSet.one().getLong(CassandraMaxQuota.MESSAGE_COUNT);
+        return 
dao.getMaxMessage(quotaRoot).orElseGet(Throwing.supplier(this::getDefaultMaxMessage).sneakyThrow());
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7eaed642/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 5662941..4d502f9 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.CassandraPerUserMaxQuotaDao;
 import 
org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager;
 import org.apache.james.mailbox.quota.CurrentQuotaManager;
 import org.apache.james.mailbox.quota.MaxQuotaManager;
@@ -80,7 +81,7 @@ public class CassandraTestSystemFixture {
     }
 
     public static MaxQuotaManager createMaxQuotaManager(CassandraCluster 
cassandra) {
-        return new CassandraPerUserMaxQuotaManager(cassandra.getConf());
+        return new CassandraPerUserMaxQuotaManager(new 
CassandraPerUserMaxQuotaDao(cassandra.getConf()));
     }
 
     public static CurrentQuotaManager 
createCurrentQuotaManager(CassandraCluster cassandra) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/7eaed642/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 150203e..09cab4f 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,7 @@ public class CassandraPerUserMaxQuotaManagerTest extends 
GenericMaxQuotaManagerT
     @Override
     protected MaxQuotaManager provideMaxQuotaManager() {
         cassandra = CassandraCluster.create(new CassandraQuotaModule(), 
cassandraServer.getIp(), cassandraServer.getBindingPort());
-        return new CassandraPerUserMaxQuotaManager(cassandra.getConf());
+        return new CassandraPerUserMaxQuotaManager(new 
CassandraPerUserMaxQuotaDao(cassandra.getConf()));
     }
 
     @After

http://git-wip-us.apache.org/repos/asf/james-project/blob/7eaed642/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 ff42a5a..2676c35 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.CassandraPerUserMaxQuotaDao;
 import 
org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
@@ -123,7 +124,7 @@ public class CassandraHostSystem extends 
JamesImapHostSystem {
             mailboxEventDispatcher, delegatingMailboxListener, 
annotationManager, storeRightManager);
         QuotaRootResolver quotaRootResolver = new 
DefaultQuotaRootResolver(mapperFactory);
 
-        perUserMaxQuotaManager = new CassandraPerUserMaxQuotaManager(session);
+        perUserMaxQuotaManager = new CassandraPerUserMaxQuotaManager(new 
CassandraPerUserMaxQuotaDao(session));
 
         CassandraCurrentQuotaManager currentQuotaManager = new 
CassandraCurrentQuotaManager(session);
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to