JAMES-1968 Separate Scripts operations and quota operation on Cassandra Sieve 
storage


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

Branch: refs/heads/master
Commit: 39d5747dd4c0d613d38780812f4965652edcdbf7
Parents: 027b0ca
Author: benwa <btell...@linagora.com>
Authored: Thu Mar 16 19:54:48 2017 +0700
Committer: benwa <btell...@linagora.com>
Committed: Wed Mar 22 07:10:55 2017 +0700

----------------------------------------------------------------------
 .../cassandra/host/CassandraHostSystem.java     |   5 +-
 .../sieve/cassandra/CassandraSieveDAO.java      | 108 -------------
 .../sieve/cassandra/CassandraSieveQuotaDAO.java | 157 +++++++++++++++++++
 .../cassandra/CassandraSieveRepository.java     |  30 ++--
 .../cassandra/CassandraSieveRepositoryTest.java |   4 +-
 5 files changed, 180 insertions(+), 124 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/39d5747d/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
----------------------------------------------------------------------
diff --git 
a/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
 
b/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
index 40cff3f..fae007c 100644
--- 
a/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
+++ 
b/mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
@@ -22,6 +22,7 @@ package org.apache.james.mpt.managesieve.cassandra.host;
 import org.apache.james.backends.cassandra.init.CassandraModuleComposite;
 import org.apache.james.mpt.host.JamesManageSieveHostSystem;
 import org.apache.james.sieve.cassandra.CassandraSieveDAO;
+import org.apache.james.sieve.cassandra.CassandraSieveQuotaDAO;
 import org.apache.james.sieve.cassandra.CassandraSieveRepository;
 import org.apache.james.sieve.cassandra.CassandraSieveRepositoryModule;
 import org.apache.james.sieverepository.api.SieveRepository;
@@ -40,7 +41,9 @@ public class CassandraHostSystem extends 
JamesManageSieveHostSystem {
     }
 
     protected static SieveRepository createSieveRepository() throws Exception {
-        return new CassandraSieveRepository(new 
CassandraSieveDAO(CASSANDRA_CLUSTER.getConf()));
+        return new CassandraSieveRepository(
+            new CassandraSieveDAO(CASSANDRA_CLUSTER.getConf()),
+            new CassandraSieveQuotaDAO(CASSANDRA_CLUSTER.getConf()));
     }
 
     protected static UsersRepository createUsersRepository() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/39d5747d/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveDAO.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveDAO.java
 
b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveDAO.java
index 3ba2810..31c3ee6 100644
--- 
a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveDAO.java
+++ 
b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveDAO.java
@@ -22,7 +22,6 @@ package org.apache.james.sieve.cassandra;
 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.incr;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.insertInto;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
 import static com.datastax.driver.core.querybuilder.QueryBuilder.set;
@@ -38,9 +37,6 @@ import javax.inject.Inject;
 
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.sieve.cassandra.model.ScriptContentAndActivation;
-import org.apache.james.sieve.cassandra.tables.CassandraSieveClusterQuotaTable;
-import org.apache.james.sieve.cassandra.tables.CassandraSieveQuotaTable;
-import org.apache.james.sieve.cassandra.tables.CassandraSieveSpaceTable;
 import org.apache.james.sieve.cassandra.tables.CassandraSieveTable;
 import org.apache.james.sieverepository.api.ScriptSummary;
 import org.joda.time.DateTime;
@@ -57,19 +53,11 @@ public class CassandraSieveDAO {
     private final PreparedStatement selectActiveScriptStatement;
     private final PreparedStatement selectActiveScriptMetadataStatement;
     private final PreparedStatement selectActiveScriptNameStatement;
-    private final PreparedStatement selectClusterQuotaStatement;
     private final PreparedStatement selectScriptsStatement;
     private final PreparedStatement selectScriptStatement;
     private final PreparedStatement selectScriptMetadataStatement;
-    private final PreparedStatement selectSpaceUsedByUserStatement;
-    private final PreparedStatement selectUserQuotaStatement;
-    private final PreparedStatement updateClusterQuotaStatement;
-    private final PreparedStatement updateUserQuotaStatement;
     private final PreparedStatement updateScriptActivationStatement;
-    private final PreparedStatement updateSpaceUsedStatement;
-    private final PreparedStatement deleteClusterQuotaStatement;
     private final PreparedStatement deleteScriptStatement;
-    private final PreparedStatement deleteUserQuotaStatement;
 
     @Inject
     public CassandraSieveDAO(Session session) {
@@ -93,11 +81,6 @@ public class CassandraSieveDAO {
         selectActiveScriptNameStatement = 
session.prepare(getScriptQuery(CassandraSieveTable.SCRIPT_NAME)
             .and(eq(CassandraSieveTable.IS_ACTIVE, 
bindMarker(CassandraSieveTable.IS_ACTIVE))));
 
-        selectClusterQuotaStatement = session.prepare(
-            select(CassandraSieveClusterQuotaTable.VALUE)
-                .from(CassandraSieveClusterQuotaTable.TABLE_NAME)
-                .where(eq(CassandraSieveClusterQuotaTable.NAME, 
bindMarker(CassandraSieveClusterQuotaTable.NAME))));
-
         selectScriptsStatement = session.prepare(
             select()
                 .from(CassandraSieveTable.TABLE_NAME)
@@ -109,21 +92,6 @@ public class CassandraSieveDAO {
         selectScriptMetadataStatement = 
session.prepare(getScriptQuery(CassandraSieveTable.SIZE, 
CassandraSieveTable.IS_ACTIVE, CassandraSieveTable.DATE)
             .and(eq(CassandraSieveTable.SCRIPT_NAME, 
bindMarker(CassandraSieveTable.SCRIPT_NAME))));
 
-        selectSpaceUsedByUserStatement = session.prepare(
-            select(CassandraSieveSpaceTable.SPACE_USED)
-                .from(CassandraSieveSpaceTable.TABLE_NAME)
-                .where(eq(CassandraSieveSpaceTable.USER_NAME, 
bindMarker(CassandraSieveSpaceTable.USER_NAME))));
-
-        selectUserQuotaStatement = session.prepare(
-            select(CassandraSieveQuotaTable.QUOTA)
-                .from(CassandraSieveQuotaTable.TABLE_NAME)
-                .where(eq(CassandraSieveQuotaTable.USER_NAME, 
bindMarker(CassandraSieveQuotaTable.USER_NAME))));
-
-        updateClusterQuotaStatement = session.prepare(
-            update(CassandraSieveClusterQuotaTable.TABLE_NAME)
-                .with(set(CassandraSieveClusterQuotaTable.VALUE, 
bindMarker(CassandraSieveClusterQuotaTable.VALUE)))
-                .where(eq(CassandraSieveClusterQuotaTable.NAME, 
bindMarker(CassandraSieveClusterQuotaTable.NAME))));
-
         updateScriptActivationStatement = session.prepare(
             update(CassandraSieveTable.TABLE_NAME)
                 .with(set(CassandraSieveTable.IS_ACTIVE, 
bindMarker(CassandraSieveTable.IS_ACTIVE)))
@@ -131,34 +99,12 @@ public class CassandraSieveDAO {
                 .and(eq(CassandraSieveTable.SCRIPT_NAME, 
bindMarker(CassandraSieveTable.SCRIPT_NAME)))
                 .ifExists());
 
-        updateSpaceUsedStatement = session.prepare(
-            update(CassandraSieveSpaceTable.TABLE_NAME)
-                .with(incr(CassandraSieveSpaceTable.SPACE_USED, 
bindMarker(CassandraSieveSpaceTable.SPACE_USED)))
-                .where(eq(CassandraSieveSpaceTable.USER_NAME, 
bindMarker(CassandraSieveSpaceTable.USER_NAME))));
-
-        updateUserQuotaStatement = session.prepare(
-            update(CassandraSieveQuotaTable.TABLE_NAME)
-                .with(set(CassandraSieveQuotaTable.QUOTA, 
bindMarker(CassandraSieveQuotaTable.QUOTA)))
-                .where(eq(CassandraSieveQuotaTable.USER_NAME, 
bindMarker(CassandraSieveQuotaTable.USER_NAME))));
-
         deleteScriptStatement = session.prepare(
             delete()
                 .from(CassandraSieveTable.TABLE_NAME)
                 .where(eq(CassandraSieveTable.USER_NAME, 
bindMarker(CassandraSieveTable.USER_NAME)))
                 .and(eq(CassandraSieveTable.SCRIPT_NAME, 
bindMarker(CassandraSieveTable.SCRIPT_NAME)))
                 .ifExists());
-
-        deleteClusterQuotaStatement = session.prepare(
-            delete()
-                .from(CassandraSieveClusterQuotaTable.TABLE_NAME)
-                .where(eq(CassandraSieveClusterQuotaTable.NAME, 
bindMarker(CassandraSieveClusterQuotaTable.NAME)))
-                .ifExists());
-
-        deleteUserQuotaStatement = session.prepare(
-            delete()
-                .from(CassandraSieveQuotaTable.TABLE_NAME)
-                .where(eq(CassandraSieveQuotaTable.USER_NAME, 
bindMarker(CassandraSieveQuotaTable.USER_NAME)))
-                .ifExists());
     }
 
     private Select.Where getScriptQuery(String... selectedRows) {
@@ -167,14 +113,6 @@ public class CassandraSieveDAO {
             .where(eq(CassandraSieveTable.USER_NAME, 
bindMarker(CassandraSieveTable.USER_NAME)));
     }
 
-    public CompletableFuture<Long> spaceUsedBy(String user) {
-        return cassandraAsyncExecutor.executeSingleRow(
-            selectSpaceUsedByUserStatement.bind()
-                .setString(CassandraSieveSpaceTable.USER_NAME, user))
-            .thenApply(optional -> optional.map(row -> 
row.getLong(CassandraSieveSpaceTable.SPACE_USED))
-                .orElse(0L));
-    }
-
     public CompletableFuture<Void> insertScript(String user, String name, 
String content, boolean isActive) {
         return cassandraAsyncExecutor.executeVoid(
             insertScriptStatement.bind()
@@ -198,13 +136,6 @@ public class CassandraSieveDAO {
                 .collect(Collectors.toList()));
     }
 
-    public CompletableFuture<Void> updateSpaceUsed(String user, long 
spaceUsed) {
-        return cassandraAsyncExecutor.executeVoid(
-            updateSpaceUsedStatement.bind()
-                .setLong(CassandraSieveSpaceTable.SPACE_USED, spaceUsed)
-                .setString(CassandraSieveSpaceTable.USER_NAME, user));
-    }
-
     public CompletableFuture<Boolean> updateScriptActivation(String user, 
String scriptName, boolean active) {
         return cassandraAsyncExecutor.executeReturnApplied(
             updateScriptActivationStatement.bind()
@@ -250,32 +181,6 @@ public class CassandraSieveDAO {
         return getScriptSize(user, name).thenApply(Optional::isPresent);
     }
 
-    public CompletableFuture<Optional<Long>> getQuota() {
-        return cassandraAsyncExecutor.executeSingleRow(
-            selectClusterQuotaStatement.bind()
-                .setString(CassandraSieveClusterQuotaTable.NAME, 
CassandraSieveClusterQuotaTable.DEFAULT_NAME))
-            .thenApply(optional -> optional.map(row -> 
row.getLong(CassandraSieveClusterQuotaTable.VALUE)));
-    }
-
-    public CompletableFuture<Void> setQuota(long quota) {
-        return cassandraAsyncExecutor.executeVoid(
-            updateClusterQuotaStatement.bind()
-                .setLong(CassandraSieveClusterQuotaTable.VALUE, quota)
-                .setString(CassandraSieveClusterQuotaTable.NAME, 
CassandraSieveClusterQuotaTable.DEFAULT_NAME));
-    }
-
-    public CompletableFuture<Boolean> removeQuota() {
-        return cassandraAsyncExecutor.executeReturnApplied(
-            deleteClusterQuotaStatement.bind()
-                .setString(CassandraSieveClusterQuotaTable.NAME, 
CassandraSieveClusterQuotaTable.DEFAULT_NAME));
-    }
-
-    public CompletableFuture<Optional<Long>> getQuota(String user) {
-        return cassandraAsyncExecutor.executeSingleRow(
-            selectUserQuotaStatement.bind()
-                .setString(CassandraSieveQuotaTable.USER_NAME, user))
-            .thenApply(optional -> optional.map(row -> 
row.getLong(CassandraSieveQuotaTable.QUOTA)));
-    }
 
     public CompletableFuture<Optional<String>> getActiveName(String user) {
         return cassandraAsyncExecutor.executeSingleRow(
@@ -285,19 +190,6 @@ public class CassandraSieveDAO {
             .thenApply(optional -> optional.map(row -> 
row.getString(CassandraSieveTable.SCRIPT_NAME)));
     }
 
-    public CompletableFuture<Void> setQuota(String user, long quota) {
-        return cassandraAsyncExecutor.executeVoid(
-            updateUserQuotaStatement.bind()
-                .setLong(CassandraSieveQuotaTable.QUOTA, quota)
-                .setString(CassandraSieveQuotaTable.USER_NAME, user));
-    }
-
-    public CompletableFuture<Boolean> removeQuota(String user)  {
-        return cassandraAsyncExecutor.executeReturnApplied(
-            deleteUserQuotaStatement.bind()
-                .setString(CassandraSieveQuotaTable.USER_NAME, user));
-    }
-
     public CompletableFuture<Optional<String>> getActive(String user) {
         return cassandraAsyncExecutor.executeSingleRow(
             selectActiveScriptStatement.bind()

http://git-wip-us.apache.org/repos/asf/james-project/blob/39d5747d/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAO.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAO.java
 
b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAO.java
new file mode 100644
index 0000000..6dcbe6e
--- /dev/null
+++ 
b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAO.java
@@ -0,0 +1,157 @@
+/****************************************************************
+ * 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.sieve.cassandra;
+
+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.incr;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.select;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.set;
+import static com.datastax.driver.core.querybuilder.QueryBuilder.update;
+
+import java.util.Optional;
+import java.util.concurrent.CompletableFuture;
+
+import javax.inject.Inject;
+
+import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
+import org.apache.james.sieve.cassandra.tables.CassandraSieveClusterQuotaTable;
+import org.apache.james.sieve.cassandra.tables.CassandraSieveQuotaTable;
+import org.apache.james.sieve.cassandra.tables.CassandraSieveSpaceTable;
+
+import com.datastax.driver.core.PreparedStatement;
+import com.datastax.driver.core.Session;
+
+public class CassandraSieveQuotaDAO {
+
+    private final CassandraAsyncExecutor cassandraAsyncExecutor;
+    private final PreparedStatement selectClusterQuotaStatement;
+    private final PreparedStatement selectSpaceUsedByUserStatement;
+    private final PreparedStatement selectUserQuotaStatement;
+    private final PreparedStatement updateClusterQuotaStatement;
+    private final PreparedStatement updateUserQuotaStatement;
+    private final PreparedStatement updateSpaceUsedStatement;
+    private final PreparedStatement deleteClusterQuotaStatement;
+    private final PreparedStatement deleteUserQuotaStatement;
+
+    @Inject
+    public CassandraSieveQuotaDAO(Session session) {
+        this.cassandraAsyncExecutor = new CassandraAsyncExecutor(session);
+
+        selectClusterQuotaStatement = session.prepare(
+            select(CassandraSieveClusterQuotaTable.VALUE)
+                .from(CassandraSieveClusterQuotaTable.TABLE_NAME)
+                .where(eq(CassandraSieveClusterQuotaTable.NAME, 
bindMarker(CassandraSieveClusterQuotaTable.NAME))));
+
+        selectSpaceUsedByUserStatement = session.prepare(
+            select(CassandraSieveSpaceTable.SPACE_USED)
+                .from(CassandraSieveSpaceTable.TABLE_NAME)
+                .where(eq(CassandraSieveSpaceTable.USER_NAME, 
bindMarker(CassandraSieveSpaceTable.USER_NAME))));
+
+        selectUserQuotaStatement = session.prepare(
+            select(CassandraSieveQuotaTable.QUOTA)
+                .from(CassandraSieveQuotaTable.TABLE_NAME)
+                .where(eq(CassandraSieveQuotaTable.USER_NAME, 
bindMarker(CassandraSieveQuotaTable.USER_NAME))));
+
+        updateClusterQuotaStatement = session.prepare(
+            update(CassandraSieveClusterQuotaTable.TABLE_NAME)
+                .with(set(CassandraSieveClusterQuotaTable.VALUE, 
bindMarker(CassandraSieveClusterQuotaTable.VALUE)))
+                .where(eq(CassandraSieveClusterQuotaTable.NAME, 
bindMarker(CassandraSieveClusterQuotaTable.NAME))));
+
+        updateSpaceUsedStatement = session.prepare(
+            update(CassandraSieveSpaceTable.TABLE_NAME)
+                .with(incr(CassandraSieveSpaceTable.SPACE_USED, 
bindMarker(CassandraSieveSpaceTable.SPACE_USED)))
+                .where(eq(CassandraSieveSpaceTable.USER_NAME, 
bindMarker(CassandraSieveSpaceTable.USER_NAME))));
+
+        updateUserQuotaStatement = session.prepare(
+            update(CassandraSieveQuotaTable.TABLE_NAME)
+                .with(set(CassandraSieveQuotaTable.QUOTA, 
bindMarker(CassandraSieveQuotaTable.QUOTA)))
+                .where(eq(CassandraSieveQuotaTable.USER_NAME, 
bindMarker(CassandraSieveQuotaTable.USER_NAME))));
+
+        deleteClusterQuotaStatement = session.prepare(
+            delete()
+                .from(CassandraSieveClusterQuotaTable.TABLE_NAME)
+                .where(eq(CassandraSieveClusterQuotaTable.NAME, 
bindMarker(CassandraSieveClusterQuotaTable.NAME)))
+                .ifExists());
+
+        deleteUserQuotaStatement = session.prepare(
+            delete()
+                .from(CassandraSieveQuotaTable.TABLE_NAME)
+                .where(eq(CassandraSieveQuotaTable.USER_NAME, 
bindMarker(CassandraSieveQuotaTable.USER_NAME)))
+                .ifExists());
+    }
+
+    public CompletableFuture<Long> spaceUsedBy(String user) {
+        return cassandraAsyncExecutor.executeSingleRow(
+            selectSpaceUsedByUserStatement.bind()
+                .setString(CassandraSieveSpaceTable.USER_NAME, user))
+            .thenApply(optional -> optional.map(row -> 
row.getLong(CassandraSieveSpaceTable.SPACE_USED))
+                .orElse(0L));
+    }
+
+    public CompletableFuture<Void> updateSpaceUsed(String user, long 
spaceUsed) {
+        return cassandraAsyncExecutor.executeVoid(
+            updateSpaceUsedStatement.bind()
+                .setLong(CassandraSieveSpaceTable.SPACE_USED, spaceUsed)
+                .setString(CassandraSieveSpaceTable.USER_NAME, user));
+    }
+
+    public CompletableFuture<Optional<Long>> getQuota() {
+        return cassandraAsyncExecutor.executeSingleRow(
+            selectClusterQuotaStatement.bind()
+                .setString(CassandraSieveClusterQuotaTable.NAME, 
CassandraSieveClusterQuotaTable.DEFAULT_NAME))
+            .thenApply(optional -> optional.map(row -> 
row.getLong(CassandraSieveClusterQuotaTable.VALUE)));
+    }
+
+    public CompletableFuture<Void> setQuota(long quota) {
+        return cassandraAsyncExecutor.executeVoid(
+            updateClusterQuotaStatement.bind()
+                .setLong(CassandraSieveClusterQuotaTable.VALUE, quota)
+                .setString(CassandraSieveClusterQuotaTable.NAME, 
CassandraSieveClusterQuotaTable.DEFAULT_NAME));
+    }
+
+    public CompletableFuture<Boolean> removeQuota() {
+        return cassandraAsyncExecutor.executeReturnApplied(
+            deleteClusterQuotaStatement.bind()
+                .setString(CassandraSieveClusterQuotaTable.NAME, 
CassandraSieveClusterQuotaTable.DEFAULT_NAME));
+    }
+
+    public CompletableFuture<Optional<Long>> getQuota(String user) {
+        return cassandraAsyncExecutor.executeSingleRow(
+            selectUserQuotaStatement.bind()
+                .setString(CassandraSieveQuotaTable.USER_NAME, user))
+            .thenApply(optional -> optional.map(row -> 
row.getLong(CassandraSieveQuotaTable.QUOTA)));
+    }
+
+    public CompletableFuture<Void> setQuota(String user, long quota) {
+        return cassandraAsyncExecutor.executeVoid(
+            updateUserQuotaStatement.bind()
+                .setLong(CassandraSieveQuotaTable.QUOTA, quota)
+                .setString(CassandraSieveQuotaTable.USER_NAME, user));
+    }
+
+    public CompletableFuture<Boolean> removeQuota(String user)  {
+        return cassandraAsyncExecutor.executeReturnApplied(
+            deleteUserQuotaStatement.bind()
+                .setString(CassandraSieveQuotaTable.USER_NAME, user));
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/39d5747d/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepository.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepository.java
 
b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepository.java
index a597ae5..0dd3153 100644
--- 
a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepository.java
+++ 
b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepository.java
@@ -43,10 +43,12 @@ import org.joda.time.DateTime;
 public class CassandraSieveRepository implements SieveRepository {
 
     private final CassandraSieveDAO cassandraSieveDAO;
+    private final CassandraSieveQuotaDAO cassandraSieveQuotaDAO;
 
     @Inject
-    public CassandraSieveRepository(CassandraSieveDAO cassandraSieveDAO) {
+    public CassandraSieveRepository(CassandraSieveDAO cassandraSieveDAO, 
CassandraSieveQuotaDAO cassandraSieveQuotaDAO) {
         this.cassandraSieveDAO = cassandraSieveDAO;
+        this.cassandraSieveQuotaDAO = cassandraSieveQuotaDAO;
     }
 
     @Override
@@ -62,9 +64,9 @@ public class CassandraSieveRepository implements 
SieveRepository {
     }
 
     private void throwOnOverQuota(String user, CompletableFuture<Long> 
sizeDifference) throws QuotaExceededException, StorageException {
-        CompletableFuture<Optional<Long>> userQuotaFuture = 
cassandraSieveDAO.getQuota(user);
-        CompletableFuture<Optional<Long>> globalQuotaFuture = 
cassandraSieveDAO.getQuota();
-        CompletableFuture<Long> spaceUsedFuture = 
cassandraSieveDAO.spaceUsedBy(user);
+        CompletableFuture<Optional<Long>> userQuotaFuture = 
cassandraSieveQuotaDAO.getQuota(user);
+        CompletableFuture<Optional<Long>> globalQuotaFuture = 
cassandraSieveQuotaDAO.getQuota();
+        CompletableFuture<Long> spaceUsedFuture = 
cassandraSieveQuotaDAO.spaceUsedBy(user);
 
         new SieveQuota(spaceUsedFuture.join(), limitToUse(userQuotaFuture, 
globalQuotaFuture)).checkOverQuotaUponModification(sizeDifference.join());
     }
@@ -96,7 +98,7 @@ public class CassandraSieveRepository implements 
SieveRepository {
         if (spaceUsed == 0) {
             return CompletableFuture.completedFuture(null);
         }
-        return cassandraSieveDAO.updateSpaceUsed(user, spaceUsed);
+        return cassandraSieveQuotaDAO.updateSpaceUsed(user, spaceUsed);
     }
 
     @Override
@@ -186,34 +188,34 @@ public class CassandraSieveRepository implements 
SieveRepository {
 
     @Override
     public boolean hasQuota() {
-        return cassandraSieveDAO.getQuota()
+        return cassandraSieveQuotaDAO.getQuota()
             .join()
             .isPresent();
     }
 
     @Override
     public long getQuota() throws QuotaNotFoundException {
-        return cassandraSieveDAO.getQuota()
+        return cassandraSieveQuotaDAO.getQuota()
             .join()
             .orElseThrow(QuotaNotFoundException::new);
     }
 
     @Override
     public void setQuota(long quota) {
-        cassandraSieveDAO.setQuota(quota).join();
+        cassandraSieveQuotaDAO.setQuota(quota).join();
     }
 
     @Override
     public void removeQuota() throws QuotaNotFoundException {
-        if (!cassandraSieveDAO.removeQuota().join()) {
+        if (!cassandraSieveQuotaDAO.removeQuota().join()) {
             throw new QuotaNotFoundException();
         }
     }
 
     @Override
     public boolean hasQuota(String user) {
-        CompletableFuture<Boolean> userQuotaIsPresent = 
cassandraSieveDAO.getQuota(user).thenApply(Optional::isPresent);
-        CompletableFuture<Boolean> globalQuotaIsPresent = 
cassandraSieveDAO.getQuota().thenApply(Optional::isPresent);
+        CompletableFuture<Boolean> userQuotaIsPresent = 
cassandraSieveQuotaDAO.getQuota(user).thenApply(Optional::isPresent);
+        CompletableFuture<Boolean> globalQuotaIsPresent = 
cassandraSieveQuotaDAO.getQuota().thenApply(Optional::isPresent);
         CompletableFuture.allOf(userQuotaIsPresent, 
globalQuotaIsPresent).join();
 
         return userQuotaIsPresent.join() || globalQuotaIsPresent.join();
@@ -221,19 +223,19 @@ public class CassandraSieveRepository implements 
SieveRepository {
 
     @Override
     public long getQuota(String user) throws QuotaNotFoundException {
-        return cassandraSieveDAO.getQuota(user)
+        return cassandraSieveQuotaDAO.getQuota(user)
             .join()
             .orElseThrow(QuotaNotFoundException::new);
     }
 
     @Override
     public void setQuota(String user, long quota) {
-        cassandraSieveDAO.setQuota(user, quota).join();
+        cassandraSieveQuotaDAO.setQuota(user, quota).join();
     }
 
     @Override
     public void removeQuota(String user) throws QuotaNotFoundException {
-        if (!cassandraSieveDAO.removeQuota(user).join()) {
+        if (!cassandraSieveQuotaDAO.removeQuota(user).join()) {
             throw new QuotaNotFoundException();
         }
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/39d5747d/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryTest.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryTest.java
 
b/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryTest.java
index b40b513..bf1fd34 100644
--- 
a/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryTest.java
+++ 
b/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryTest.java
@@ -42,7 +42,9 @@ public class CassandraSieveRepositoryTest extends 
AbstractSieveRepositoryTest {
 
     @Override
     protected SieveRepository createSieveRepository() throws Exception {
-        return new CassandraSieveRepository(new 
CassandraSieveDAO(cassandra.getConf()));
+        return new CassandraSieveRepository(
+            new CassandraSieveDAO(cassandra.getConf()),
+            new CassandraSieveQuotaDAO(cassandra.getConf()));
     }
 
     @Override


---------------------------------------------------------------------
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