http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/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 9e3c7aa..429ca4b 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
@@ -40,7 +40,9 @@ import java.util.concurrent.CompletableFuture;
 import javax.inject.Inject;
 
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
+import org.apache.james.core.User;
 import org.apache.james.sieve.cassandra.model.Script;
+import org.apache.james.sieverepository.api.ScriptName;
 import org.apache.james.sieverepository.api.ScriptSummary;
 
 import com.datastax.driver.core.PreparedStatement;
@@ -96,37 +98,37 @@ public class CassandraSieveDAO {
             .where(eq(USER_NAME, bindMarker(USER_NAME)));
     }
 
-    public CompletableFuture<Void> insertScript(String user, Script script) {
+    public CompletableFuture<Void> insertScript(User user, Script script) {
         return cassandraAsyncExecutor.executeVoid(
             insertScriptStatement.bind()
-                .setString(USER_NAME, user)
-                .setString(SCRIPT_NAME, script.getName())
-                .setString(SCRIPT_CONTENT, script.getContent())
+                .setString(USER_NAME, user.asString())
+                .setString(SCRIPT_NAME, script.getName().getValue())
+                .setString(SCRIPT_CONTENT, script.getContent().getValue())
                 .setBool(IS_ACTIVE, script.isActive())
                 .setLong(SIZE, script.getSize()));
     }
 
-    public CompletableFuture<List<ScriptSummary>> listScripts(String user) {
+    public CompletableFuture<List<ScriptSummary>> listScripts(User user) {
         return cassandraAsyncExecutor.execute(
             selectScriptsStatement.bind()
-                .setString(USER_NAME, user))
+                .setString(USER_NAME, user.asString()))
             .thenApply(resultSet -> resultSet.all()
                 .stream()
                 .map(row -> new ScriptSummary(
-                    row.getString(SCRIPT_NAME),
+                    new ScriptName(row.getString(SCRIPT_NAME)),
                     row.getBool(IS_ACTIVE)))
                 .collect(Guavate.toImmutableList()));
     }
 
-    public CompletableFuture<Boolean> updateScriptActivation(String user, 
String scriptName, boolean active) {
+    public CompletableFuture<Boolean> updateScriptActivation(User user, 
ScriptName scriptName, boolean active) {
         return cassandraAsyncExecutor.executeReturnApplied(
             updateScriptActivationStatement.bind()
-                .setString(USER_NAME, user)
-                .setString(SCRIPT_NAME, scriptName)
+                .setString(USER_NAME, user.asString())
+                .setString(SCRIPT_NAME, scriptName.getValue())
                 .setBool(IS_ACTIVE, active));
     }
 
-    public CompletableFuture<Optional<Script>> getScript(String user, String 
name) {
+    public CompletableFuture<Optional<Script>> getScript(User user, ScriptName 
name) {
         return getScriptRow(user, name).thenApply(opt -> opt.map(row -> 
Script.builder()
                 .content(row.getString(SCRIPT_CONTENT))
                 .isActive(row.getBool(IS_ACTIVE))
@@ -135,18 +137,18 @@ public class CassandraSieveDAO {
                 .build()));
     }
 
-    public CompletableFuture<Boolean> deleteScriptInCassandra(String user, 
String name) {
+    public CompletableFuture<Boolean> deleteScriptInCassandra(User user, 
ScriptName name) {
         return cassandraAsyncExecutor.executeReturnApplied(
             deleteScriptStatement.bind()
-                .setString(USER_NAME, user)
-                .setString(SCRIPT_NAME, name));
+                .setString(USER_NAME, user.asString())
+                .setString(SCRIPT_NAME, name.getValue()));
     }
 
-    private CompletableFuture<Optional<Row>> getScriptRow(String user, String 
name) {
+    private CompletableFuture<Optional<Row>> getScriptRow(User user, 
ScriptName name) {
         return cassandraAsyncExecutor.executeSingleRow(
             selectScriptStatement.bind()
-                .setString(USER_NAME, user)
-                .setString(SCRIPT_NAME, name));
+                .setString(USER_NAME, user.asString())
+                .setString(SCRIPT_NAME, name.getValue()));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/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
index eaeb39e..b20ea30 100644
--- 
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
@@ -33,6 +33,8 @@ import java.util.concurrent.CompletableFuture;
 import javax.inject.Inject;
 
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
+import org.apache.james.core.User;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.sieve.cassandra.tables.CassandraSieveClusterQuotaTable;
 import org.apache.james.sieve.cassandra.tables.CassandraSieveQuotaTable;
 import org.apache.james.sieve.cassandra.tables.CassandraSieveSpaceTable;
@@ -97,32 +99,33 @@ public class CassandraSieveQuotaDAO {
                 .where(eq(CassandraSieveQuotaTable.USER_NAME, 
bindMarker(CassandraSieveQuotaTable.USER_NAME))));
     }
 
-    public CompletableFuture<Long> spaceUsedBy(String user) {
+    public CompletableFuture<Long> spaceUsedBy(User user) {
         return cassandraAsyncExecutor.executeSingleRow(
             selectSpaceUsedByUserStatement.bind()
-                .setString(CassandraSieveSpaceTable.USER_NAME, user))
+                .setString(CassandraSieveSpaceTable.USER_NAME, 
user.asString()))
             .thenApply(optional -> optional.map(row -> 
row.getLong(CassandraSieveSpaceTable.SPACE_USED))
                 .orElse(0L));
     }
 
-    public CompletableFuture<Void> updateSpaceUsed(String user, long 
spaceUsed) {
+    public CompletableFuture<Void> updateSpaceUsed(User user, long spaceUsed) {
         return cassandraAsyncExecutor.executeVoid(
             updateSpaceUsedStatement.bind()
                 .setLong(CassandraSieveSpaceTable.SPACE_USED, spaceUsed)
-                .setString(CassandraSieveSpaceTable.USER_NAME, user));
+                .setString(CassandraSieveSpaceTable.USER_NAME, 
user.asString()));
     }
 
-    public CompletableFuture<Optional<Long>> getQuota() {
+    public CompletableFuture<Optional<QuotaSize>> getQuota() {
         return cassandraAsyncExecutor.executeSingleRow(
             selectClusterQuotaStatement.bind()
                 .setString(CassandraSieveClusterQuotaTable.NAME, 
CassandraSieveClusterQuotaTable.DEFAULT_NAME))
-            .thenApply(optional -> optional.map(row -> 
row.getLong(CassandraSieveClusterQuotaTable.VALUE)));
+            .thenApply(optional -> optional.map(row ->
+                
QuotaSize.size(row.getLong(CassandraSieveClusterQuotaTable.VALUE))));
     }
 
-    public CompletableFuture<Void> setQuota(long quota) {
+    public CompletableFuture<Void> setQuota(QuotaSize quota) {
         return cassandraAsyncExecutor.executeVoid(
             updateClusterQuotaStatement.bind()
-                .setLong(CassandraSieveClusterQuotaTable.VALUE, quota)
+                .setLong(CassandraSieveClusterQuotaTable.VALUE, quota.asLong())
                 .setString(CassandraSieveClusterQuotaTable.NAME, 
CassandraSieveClusterQuotaTable.DEFAULT_NAME));
     }
 
@@ -132,24 +135,25 @@ public class CassandraSieveQuotaDAO {
                 .setString(CassandraSieveClusterQuotaTable.NAME, 
CassandraSieveClusterQuotaTable.DEFAULT_NAME));
     }
 
-    public CompletableFuture<Optional<Long>> getQuota(String user) {
+    public CompletableFuture<Optional<QuotaSize>> getQuota(User user) {
         return cassandraAsyncExecutor.executeSingleRow(
             selectUserQuotaStatement.bind()
-                .setString(CassandraSieveQuotaTable.USER_NAME, user))
-            .thenApply(optional -> optional.map(row -> 
row.getLong(CassandraSieveQuotaTable.QUOTA)));
+                .setString(CassandraSieveQuotaTable.USER_NAME, 
user.asString()))
+            .thenApply(optional -> optional.map(row ->
+                QuotaSize.size(row.getLong(CassandraSieveQuotaTable.QUOTA))));
     }
 
-    public CompletableFuture<Void> setQuota(String user, long quota) {
+    public CompletableFuture<Void> setQuota(User user, QuotaSize quota) {
         return cassandraAsyncExecutor.executeVoid(
             updateUserQuotaStatement.bind()
-                .setLong(CassandraSieveQuotaTable.QUOTA, quota)
-                .setString(CassandraSieveQuotaTable.USER_NAME, user));
+                .setLong(CassandraSieveQuotaTable.QUOTA, quota.asLong())
+                .setString(CassandraSieveQuotaTable.USER_NAME, 
user.asString()));
     }
 
-    public CompletableFuture<Void> removeQuota(String user)  {
+    public CompletableFuture<Void> removeQuota(User user)  {
         return cassandraAsyncExecutor.executeVoid(
             deleteUserQuotaStatement.bind()
-                .setString(CassandraSieveQuotaTable.USER_NAME, user));
+                .setString(CassandraSieveQuotaTable.USER_NAME, 
user.asString()));
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/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 d6e656e..73e4626 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
@@ -28,9 +28,13 @@ import java.util.concurrent.CompletableFuture;
 import javax.inject.Inject;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.james.core.User;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.sieve.cassandra.model.ActiveScriptInfo;
 import org.apache.james.sieve.cassandra.model.Script;
 import org.apache.james.sieve.cassandra.model.SieveQuota;
+import org.apache.james.sieverepository.api.ScriptContent;
+import org.apache.james.sieverepository.api.ScriptName;
 import org.apache.james.sieverepository.api.ScriptSummary;
 import org.apache.james.sieverepository.api.SieveRepository;
 import org.apache.james.sieverepository.api.exception.DuplicateException;
@@ -56,32 +60,33 @@ public class CassandraSieveRepository implements 
SieveRepository {
     }
 
     @Override
-    public DateTime getActivationDateForActiveScript(String user) throws 
StorageException, ScriptNotFoundException {
+    public DateTime getActivationDateForActiveScript(User user) throws 
StorageException, ScriptNotFoundException {
         return cassandraActiveScriptDAO.getActiveSctiptInfo(user).join()
             .orElseThrow(ScriptNotFoundException::new)
             .getActivationDate();
     }
 
     @Override
-    public void haveSpace(String user, String name, long newSize) throws 
QuotaExceededException, StorageException {
+    public void haveSpace(User user, ScriptName name, long newSize) throws 
QuotaExceededException, StorageException {
         throwOnOverQuota(user, spaceThatWillBeUsedByNewScript(user, name, 
newSize));
     }
 
-    private void throwOnOverQuota(String user, CompletableFuture<Long> 
sizeDifference) throws QuotaExceededException, StorageException {
-        CompletableFuture<Optional<Long>> userQuotaFuture = 
cassandraSieveQuotaDAO.getQuota(user);
-        CompletableFuture<Optional<Long>> globalQuotaFuture = 
cassandraSieveQuotaDAO.getQuota();
+    private void throwOnOverQuota(User user, CompletableFuture<Long> 
sizeDifference) throws QuotaExceededException, StorageException {
+        CompletableFuture<Optional<QuotaSize>> userQuotaFuture = 
cassandraSieveQuotaDAO.getQuota(user);
+        CompletableFuture<Optional<QuotaSize>> globalQuotaFuture = 
cassandraSieveQuotaDAO.getQuota();
         CompletableFuture<Long> spaceUsedFuture = 
cassandraSieveQuotaDAO.spaceUsedBy(user);
 
-        new SieveQuota(spaceUsedFuture.join(), limitToUse(userQuotaFuture, 
globalQuotaFuture)).checkOverQuotaUponModification(sizeDifference.join());
+        new SieveQuota(spaceUsedFuture.join(), limitToUse(userQuotaFuture, 
globalQuotaFuture))
+            .checkOverQuotaUponModification(sizeDifference.join());
     }
 
-    public CompletableFuture<Long> spaceThatWillBeUsedByNewScript(String user, 
String name, long scriptSize) {
+    public CompletableFuture<Long> spaceThatWillBeUsedByNewScript(User user, 
ScriptName name, long scriptSize) {
         return cassandraSieveDAO.getScript(user, name)
             .thenApply(optional -> optional.map(Script::getSize).orElse(0L))
             .thenApply(sizeOfStoredScript -> scriptSize - sizeOfStoredScript);
     }
 
-    private Optional<Long> limitToUse(CompletableFuture<Optional<Long>> 
userQuota, CompletableFuture<Optional<Long>> globalQuota) {
+    private Optional<QuotaSize> 
limitToUse(CompletableFuture<Optional<QuotaSize>> userQuota, 
CompletableFuture<Optional<QuotaSize>> globalQuota) {
         if (userQuota.join().isPresent()) {
             return userQuota.join();
         }
@@ -89,7 +94,7 @@ public class CassandraSieveRepository implements 
SieveRepository {
     }
 
     @Override
-    public void putScript(String user, String name, String content) throws 
QuotaExceededException, StorageException {
+    public void putScript(User user, ScriptName name, ScriptContent content) 
throws QuotaExceededException, StorageException {
         CompletableFuture<Long> spaceUsed = 
spaceThatWillBeUsedByNewScript(user, name, content.length());
         throwOnOverQuota(user, spaceUsed);
 
@@ -104,7 +109,7 @@ public class CassandraSieveRepository implements 
SieveRepository {
             .join();
     }
 
-    public CompletableFuture<Void> updateSpaceUsed(String user, long 
spaceUsed) {
+    public CompletableFuture<Void> updateSpaceUsed(User user, long spaceUsed) {
         if (spaceUsed == 0) {
             return CompletableFuture.completedFuture(null);
         }
@@ -112,12 +117,12 @@ public class CassandraSieveRepository implements 
SieveRepository {
     }
 
     @Override
-    public List<ScriptSummary> listScripts(String user) {
+    public List<ScriptSummary> listScripts(User user) {
         return cassandraSieveDAO.listScripts(user).join();
     }
 
     @Override
-    public InputStream getActive(String user) throws ScriptNotFoundException {
+    public InputStream getActive(User user) throws ScriptNotFoundException {
         return IOUtils.toInputStream(
             cassandraActiveScriptDAO.getActiveSctiptInfo(user)
                 .thenCompose(optionalActiveName -> optionalActiveName
@@ -125,11 +130,12 @@ public class CassandraSieveRepository implements 
SieveRepository {
                     
.orElse(CompletableFuture.completedFuture(Optional.empty())))
                 .join()
                 .orElseThrow(ScriptNotFoundException::new)
-                .getContent(), StandardCharsets.UTF_8);
+                .getContent()
+                .getValue(), StandardCharsets.UTF_8);
     }
 
     @Override
-    public void setActive(String user, String name) throws 
ScriptNotFoundException {
+    public void setActive(User user, ScriptName name) throws 
ScriptNotFoundException {
         CompletableFuture<Boolean> activateNewScript =
             unactivateOldScript(user)
                 .thenCompose(any -> updateScriptActivation(user, name, true)
@@ -141,7 +147,7 @@ public class CassandraSieveRepository implements 
SieveRepository {
         }
     }
 
-    private CompletableFuture<Void> unactivateOldScript(String user) {
+    private CompletableFuture<Void> unactivateOldScript(User user) {
         return cassandraActiveScriptDAO.getActiveSctiptInfo(user)
             .thenCompose(scriptNameOptional -> scriptNameOptional
                 .map(activeScriptInfo -> updateScriptActivation(user, 
activeScriptInfo.getName(), false)
@@ -149,7 +155,7 @@ public class CassandraSieveRepository implements 
SieveRepository {
                 .orElse(CompletableFuture.completedFuture(null)));
     }
 
-    private CompletableFuture<Boolean> updateScriptActivation(String user, 
String scriptName, boolean active) {
+    private CompletableFuture<Boolean> updateScriptActivation(User user, 
ScriptName scriptName, boolean active) {
         if (!scriptName.equals(SieveRepository.NO_SCRIPT_NAME)) {
             return cassandraSieveDAO.updateScriptActivation(user, scriptName, 
active);
         }
@@ -157,30 +163,30 @@ public class CassandraSieveRepository implements 
SieveRepository {
     }
 
     @Override
-    public InputStream getScript(String user, String name) throws 
ScriptNotFoundException {
+    public InputStream getScript(User user, ScriptName name) throws 
ScriptNotFoundException {
         return  cassandraSieveDAO.getScript(user, name)
             .join()
-            .map(script -> IOUtils.toInputStream(script.getContent(), 
StandardCharsets.UTF_8))
+            .map(script -> 
IOUtils.toInputStream(script.getContent().getValue(), StandardCharsets.UTF_8))
             .orElseThrow(ScriptNotFoundException::new);
     }
 
     @Override
-    public void deleteScript(String user, String name) throws 
ScriptNotFoundException, IsActiveException {
+    public void deleteScript(User user, ScriptName name) throws 
ScriptNotFoundException, IsActiveException {
         ensureIsNotActive(user, name);
         if (!cassandraSieveDAO.deleteScriptInCassandra(user, name).join()) {
             throw new ScriptNotFoundException();
         }
     }
 
-    private void ensureIsNotActive(String user, String name) throws 
IsActiveException {
-        Optional<String> activeName = 
cassandraActiveScriptDAO.getActiveSctiptInfo(user).join().map(ActiveScriptInfo::getName);
+    private void ensureIsNotActive(User user, ScriptName name) throws 
IsActiveException {
+        Optional<ScriptName> activeName = 
cassandraActiveScriptDAO.getActiveSctiptInfo(user).join().map(ActiveScriptInfo::getName);
         if (activeName.isPresent() && name.equals(activeName.get())) {
             throw new IsActiveException();
         }
     }
 
     @Override
-    public void renameScript(String user, String oldName, String newName) 
throws ScriptNotFoundException, DuplicateException {
+    public void renameScript(User user, ScriptName oldName, ScriptName 
newName) throws ScriptNotFoundException, DuplicateException {
         CompletableFuture<Boolean> scriptExistsFuture = 
cassandraSieveDAO.getScript(user, newName)
             .thenApply(Optional::isPresent);
         CompletableFuture<Optional<Script>> oldScriptFuture = 
cassandraSieveDAO.getScript(user, oldName);
@@ -195,7 +201,7 @@ public class CassandraSieveRepository implements 
SieveRepository {
             oldScriptFuture.join().orElseThrow(ScriptNotFoundException::new));
     }
 
-    private void performScriptRename(String user, String newName, Script 
oldScript) {
+    private void performScriptRename(User user, ScriptName newName, Script 
oldScript) {
         CompletableFuture.allOf(
             cassandraSieveDAO.insertScript(user,
                 Script.builder()
@@ -207,7 +213,7 @@ public class CassandraSieveRepository implements 
SieveRepository {
             .join();
     }
 
-    private CompletableFuture<Void> performActiveScriptRename(String user, 
String oldName, String newName) {
+    private CompletableFuture<Void> performActiveScriptRename(User user, 
ScriptName oldName, ScriptName newName) {
         return cassandraActiveScriptDAO.getActiveSctiptInfo(user)
             .thenCompose(optionalActivationInfo -> optionalActivationInfo
                 .filter(activeScriptInfo -> 
activeScriptInfo.getName().equals(oldName))
@@ -223,14 +229,14 @@ public class CassandraSieveRepository implements 
SieveRepository {
     }
 
     @Override
-    public long getQuota() throws QuotaNotFoundException {
+    public QuotaSize getQuota() throws QuotaNotFoundException {
         return cassandraSieveQuotaDAO.getQuota()
             .join()
             .orElseThrow(QuotaNotFoundException::new);
     }
 
     @Override
-    public void setQuota(long quota) {
+    public void setQuota(QuotaSize quota) {
         cassandraSieveQuotaDAO.setQuota(quota).join();
     }
 
@@ -240,7 +246,7 @@ public class CassandraSieveRepository implements 
SieveRepository {
     }
 
     @Override
-    public boolean hasQuota(String user) {
+    public boolean hasQuota(User user) {
         return CompletableFutureUtil.combine(
             
cassandraSieveQuotaDAO.getQuota(user).thenApply(Optional::isPresent),
             cassandraSieveQuotaDAO.getQuota().thenApply(Optional::isPresent),
@@ -249,19 +255,19 @@ public class CassandraSieveRepository implements 
SieveRepository {
     }
 
     @Override
-    public long getQuota(String user) throws QuotaNotFoundException {
+    public QuotaSize getQuota(User user) throws QuotaNotFoundException {
         return cassandraSieveQuotaDAO.getQuota(user)
             .join()
             .orElseThrow(QuotaNotFoundException::new);
     }
 
     @Override
-    public void setQuota(String user, long quota) {
+    public void setQuota(User user, QuotaSize quota) {
         cassandraSieveQuotaDAO.setQuota(user, quota).join();
     }
 
     @Override
-    public void removeQuota(String user) throws QuotaNotFoundException {
+    public void removeQuota(User user) throws QuotaNotFoundException {
         cassandraSieveQuotaDAO.removeQuota(user).join();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/ActiveScriptInfo.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/ActiveScriptInfo.java
 
b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/ActiveScriptInfo.java
index b3377be..051d7a4 100644
--- 
a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/ActiveScriptInfo.java
+++ 
b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/ActiveScriptInfo.java
@@ -21,19 +21,20 @@ package org.apache.james.sieve.cassandra.model;
 
 import java.util.Date;
 
+import org.apache.james.sieverepository.api.ScriptName;
 import org.joda.time.DateTime;
 
 public class ActiveScriptInfo {
 
-    private final String name;
+    private final ScriptName name;
     private final DateTime activationDate;
 
-    public ActiveScriptInfo(String content, Date date) {
-        this.name = content;
+    public ActiveScriptInfo(ScriptName name, Date date) {
+        this.name = name;
         this.activationDate = new DateTime(date);
     }
 
-    public String getName() {
+    public ScriptName getName() {
         return name;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/Script.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/Script.java
 
b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/Script.java
index 8424a41..de68ade 100644
--- 
a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/Script.java
+++ 
b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/Script.java
@@ -6,6 +6,8 @@ import java.nio.charset.StandardCharsets;
 import java.util.Objects;
 import java.util.Optional;
 
+import org.apache.james.sieverepository.api.ScriptContent;
+import org.apache.james.sieverepository.api.ScriptName;
 import org.apache.james.sieverepository.api.ScriptSummary;
 
 import com.google.common.base.Preconditions;
@@ -17,16 +19,20 @@ public class Script {
     }
 
     public static class Builder {
-        private String name;
-        private String content;
+        private ScriptName name;
+        private ScriptContent content;
         private Optional<Boolean> isActive = Optional.empty();
         private Optional<Long> size = Optional.empty();
 
-        public Builder name(String name) {
+        public Builder name(ScriptName name) {
             this.name = name;
             return this;
         }
 
+        public Builder name(String name) {
+            return this.name(new ScriptName(name));
+        }
+
         public Builder copyOf(Script script) {
             this.name = script.getName();
             this.content = script.getContent();
@@ -35,11 +41,15 @@ public class Script {
             return this;
         }
 
-        public Builder content(String content) {
+        public Builder content(ScriptContent content) {
             this.content = content;
             return this;
         }
 
+        public Builder content(String content) {
+            return this.content(new ScriptContent(content));
+        }
+
         public Builder size(long size) {
             this.size = Optional.of(size);
             return this;
@@ -58,28 +68,28 @@ public class Script {
             return new Script(name,
                 content,
                 isActive.get(),
-                size.orElse((long) 
content.getBytes(StandardCharsets.UTF_8).length));
+                size.orElse((long) 
content.getValue().getBytes(StandardCharsets.UTF_8).length));
         }
 
     }
 
-    private final String name;
-    private final String content;
+    private final ScriptName name;
+    private final ScriptContent content;
     private final boolean isActive;
     private final long size;
 
-    private Script(String name, String content, boolean isActive, long size) {
+    private Script(ScriptName name, ScriptContent content, boolean isActive, 
long size) {
         this.name = name;
         this.content = content;
         this.isActive = isActive;
         this.size = size;
     }
 
-    public String getName() {
+    public ScriptName getName() {
         return name;
     }
 
-    public String getContent() {
+    public ScriptContent getContent() {
         return content;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/SieveQuota.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/SieveQuota.java
 
b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/SieveQuota.java
index c1a44d6..b8a0154 100644
--- 
a/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/SieveQuota.java
+++ 
b/server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/SieveQuota.java
@@ -22,6 +22,7 @@ package org.apache.james.sieve.cassandra.model;
 
 import java.util.Optional;
 
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.sieverepository.api.exception.QuotaExceededException;
 
 import com.google.common.base.Preconditions;
@@ -29,11 +30,11 @@ import com.google.common.base.Preconditions;
 public class SieveQuota {
 
     private final long currentUsage;
-    private final Optional<Long> limit;
+    private final Optional<QuotaSize> limit;
 
-    public SieveQuota(long currentUsage, Optional<Long> limit) {
+    public SieveQuota(long currentUsage, Optional<QuotaSize> limit) {
         Preconditions.checkArgument(currentUsage >= 0, "Current usage should 
be positive or equal to zero");
-        limit.ifPresent(limitValue -> Preconditions.checkArgument(limitValue 
>= 0, "Limit value should be positive or equal to zero"));
+        limit.ifPresent(limitValue -> 
Preconditions.checkArgument(limitValue.asLong() >= 0, "Limit value should be 
positive or equal to zero"));
         this.currentUsage = currentUsage;
         this.limit = limit;
     }
@@ -45,7 +46,7 @@ public class SieveQuota {
     }
 
     public boolean isExceededUponModification(long sizeDifference) {
-        return limit.map(limitContent -> currentUsage + sizeDifference > 
limitContent)
+        return limit.map(limitContent -> 
!limitContent.isGreaterThan(QuotaSize.size(currentUsage + sizeDifference)))
                 .orElse(false);
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraActiveScriptDAOTest.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraActiveScriptDAOTest.java
 
b/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraActiveScriptDAOTest.java
index 93ac85b..8c7b6ae 100644
--- 
a/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraActiveScriptDAOTest.java
+++ 
b/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraActiveScriptDAOTest.java
@@ -25,7 +25,9 @@ import java.util.Optional;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.DockerCassandraRule;
+import org.apache.james.core.User;
 import org.apache.james.sieve.cassandra.model.ActiveScriptInfo;
+import org.apache.james.sieverepository.api.ScriptName;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.ClassRule;
@@ -33,9 +35,9 @@ import org.junit.Test;
 
 public class CassandraActiveScriptDAOTest {
 
-    public static final String USER = "user";
-    public static final String SCRIPT_NAME = "sciptName";
-    public static final String NEW_SCRIPT_NAME = "newScriptName";
+    public static final User USER = User.fromUsername("user");
+    public static final ScriptName SCRIPT_NAME = new ScriptName("sciptName");
+    public static final ScriptName NEW_SCRIPT_NAME = new 
ScriptName("newScriptName");
 
     @ClassRule public static DockerCassandraRule cassandraServer = new 
DockerCassandraRule();
     

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveDAOTest.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveDAOTest.java
 
b/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveDAOTest.java
index 95750b9..0c29873 100644
--- 
a/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveDAOTest.java
+++ 
b/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveDAOTest.java
@@ -26,7 +26,9 @@ import java.util.Optional;
 
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.DockerCassandraRule;
+import org.apache.james.core.User;
 import org.apache.james.sieve.cassandra.model.Script;
+import org.apache.james.sieverepository.api.ScriptName;
 import org.apache.james.sieverepository.api.ScriptSummary;
 import org.junit.After;
 import org.junit.Before;
@@ -35,9 +37,9 @@ import org.junit.Test;
 
 public class CassandraSieveDAOTest {
 
-    public static final String USER = "user";
-    public static final String SCRIPT_NAME = "scriptName";
-    public static final String SCRIPT_NAME2 = "scriptName2";
+    public static final User USER = User.fromUsername("user");
+    public static final ScriptName SCRIPT_NAME = new ScriptName("scriptName");
+    public static final ScriptName SCRIPT_NAME2 = new 
ScriptName("scriptName2");
     public static final Script SCRIPT = Script.builder()
         .name(SCRIPT_NAME)
         .content("content")

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAOTest.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAOTest.java
 
b/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAOTest.java
index 49de699..869a257 100644
--- 
a/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAOTest.java
+++ 
b/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAOTest.java
@@ -21,10 +21,10 @@ package org.apache.james.sieve.cassandra;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
-import java.util.Optional;
-
 import org.apache.james.backends.cassandra.CassandraCluster;
 import org.apache.james.backends.cassandra.DockerCassandraRule;
+import org.apache.james.core.User;
+import org.apache.james.core.quota.QuotaSize;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.ClassRule;
@@ -32,9 +32,9 @@ import org.junit.Test;
 
 public class CassandraSieveQuotaDAOTest {
 
-    public static final String USER = "user";
+    public static final User USER = User.fromUsername("user");
+    public static final QuotaSize QUOTA_SIZE = QuotaSize.size(15L);
 
-    
     @ClassRule public static DockerCassandraRule cassandraServer = new 
DockerCassandraRule();
     
     private CassandraCluster cassandra;
@@ -53,70 +53,66 @@ public class CassandraSieveQuotaDAOTest {
 
     @Test
     public void getQuotaShouldReturnEmptyByDefault() {
-        assertThat(sieveQuotaDAO.getQuota().join().isPresent())
-            .isFalse();
+        assertThat(sieveQuotaDAO.getQuota().join())
+            .isEmpty();
     }
 
     @Test
     public void getQuotaUserShouldReturnEmptyByDefault() {
-        assertThat(sieveQuotaDAO.getQuota(USER).join().isPresent())
-            .isFalse();
+        assertThat(sieveQuotaDAO.getQuota(USER).join())
+            .isEmpty();
     }
 
     @Test
     public void getQuotaShouldReturnStoredValue() {
-        long quota = 15L;
-        sieveQuotaDAO.setQuota(quota).join();
+        sieveQuotaDAO.setQuota(QUOTA_SIZE).join();
 
-        Optional<Long> actual = sieveQuotaDAO.getQuota().join();
-        assertThat(actual.isPresent()).isTrue();
-        assertThat(actual.get()).isEqualTo(quota);
+        assertThat(sieveQuotaDAO.getQuota().join())
+            .contains(QUOTA_SIZE);
     }
 
     @Test
     public void getQuotaUserShouldReturnStoredValue() {
-        long quota = 15L;
-        sieveQuotaDAO.setQuota(USER, quota).join();
+        sieveQuotaDAO.setQuota(USER, QUOTA_SIZE).join();
 
-        Optional<Long> actual = sieveQuotaDAO.getQuota(USER).join();
-        assertThat(actual.isPresent()).isTrue();
-        assertThat(actual.get()).isEqualTo(quota);
+        assertThat(sieveQuotaDAO.getQuota(USER).join())
+            .contains(QUOTA_SIZE);
     }
 
     @Test
     public void removeQuotaShouldDeleteQuota() {
-        sieveQuotaDAO.setQuota(15L).join();
+        sieveQuotaDAO.setQuota(QUOTA_SIZE).join();
 
         sieveQuotaDAO.removeQuota().join();
 
-        Optional<Long> actual = sieveQuotaDAO.getQuota().join();
-        assertThat(actual.isPresent()).isFalse();
+        assertThat(sieveQuotaDAO.getQuota().join())
+            .isEmpty();
     }
 
     @Test
     public void removeQuotaUserShouldDeleteQuotaUser() {
-        sieveQuotaDAO.setQuota(USER, 15L).join();
+        sieveQuotaDAO.setQuota(USER, QUOTA_SIZE).join();
 
         sieveQuotaDAO.removeQuota(USER).join();
 
-        Optional<Long> actual = sieveQuotaDAO.getQuota(USER).join();
-        assertThat(actual.isPresent()).isFalse();
+        assertThat(sieveQuotaDAO.getQuota(USER).join())
+            .isEmpty();
     }
 
     @Test
     public void removeQuotaShouldWorkWhenNoneStore() {
         sieveQuotaDAO.removeQuota().join();
 
-        Optional<Long> actual = sieveQuotaDAO.getQuota().join();
-        assertThat(actual.isPresent()).isFalse();
+        assertThat(sieveQuotaDAO.getQuota().join())
+            .isEmpty();
     }
 
     @Test
     public void removeQuotaUserShouldWorkWhenNoneStore() {
         sieveQuotaDAO.removeQuota(USER).join();
 
-        Optional<Long> actual = sieveQuotaDAO.getQuota(USER).join();
-        assertThat(actual.isPresent()).isFalse();
+        assertThat(sieveQuotaDAO.getQuota(USER).join())
+            .isEmpty();
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/model/ScriptTest.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/model/ScriptTest.java
 
b/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/model/ScriptTest.java
index 95af5ce..ca757d9 100644
--- 
a/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/model/ScriptTest.java
+++ 
b/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/model/ScriptTest.java
@@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 import java.nio.charset.StandardCharsets;
 
+import org.apache.james.sieverepository.api.ScriptName;
 import org.apache.james.sieverepository.api.ScriptSummary;
 import org.junit.Rule;
 import org.junit.Test;
@@ -159,7 +160,7 @@ public class ScriptTest {
                 .size(48L)
                 .build()
                 .toSummary())
-            .isEqualTo(new ScriptSummary(name, isActive));
+            .isEqualTo(new ScriptSummary(new ScriptName(name), isActive));
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/model/SieveQuotaTest.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/model/SieveQuotaTest.java
 
b/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/model/SieveQuotaTest.java
index fe93a82..3ec44ce 100644
--- 
a/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/model/SieveQuotaTest.java
+++ 
b/server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/model/SieveQuotaTest.java
@@ -21,16 +21,17 @@ package org.apache.james.sieve.cassandra.model;
 
 import java.util.Optional;
 
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.sieverepository.api.exception.QuotaExceededException;
 import org.junit.Test;
 
 public class SieveQuotaTest {
 
     public static final long INVALID_VALUE = -1L;
-    public static final long LIMIT_LOW_VALUE = 10L;
+    public static final QuotaSize LIMIT_LOW_VALUE = QuotaSize.size(10L);
     public static final long SIZE_DIFFERENCE = 20L;
     public static final int CURRENT_USAGE = 0;
-    public static final long LIMIT_HIGH_VALUE = 100L;
+    public static final QuotaSize LIMIT_HIGH_VALUE = QuotaSize.size(100L);
 
     @Test(expected = IllegalArgumentException.class)
     public void sieveQuotaShouldThrowOnNegativeCurrentValue() {
@@ -39,7 +40,7 @@ public class SieveQuotaTest {
 
     @Test(expected = IllegalArgumentException.class)
     public void sieveQuotaShouldThrowOnNegativeLimitValue() {
-        new SieveQuota(0, Optional.of(INVALID_VALUE));
+        new SieveQuota(0, Optional.of(QuotaSize.size(INVALID_VALUE)));
     }
 
     @Test(expected = QuotaExceededException.class)

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveDefaultRepository.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveDefaultRepository.java
 
b/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveDefaultRepository.java
index dd865e2..9dcaea3 100644
--- 
a/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveDefaultRepository.java
+++ 
b/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveDefaultRepository.java
@@ -28,7 +28,11 @@ import java.util.List;
 
 import javax.inject.Inject;
 
+import org.apache.james.core.User;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.sieverepository.api.ScriptContent;
+import org.apache.james.sieverepository.api.ScriptName;
 import org.apache.james.sieverepository.api.ScriptSummary;
 import org.apache.james.sieverepository.api.SieveRepository;
 import org.apache.james.sieverepository.api.exception.DuplicateException;
@@ -55,22 +59,22 @@ public class SieveDefaultRepository implements 
SieveRepository {
     }
 
     @Override
-    public void haveSpace(String user, String name, long size) throws 
QuotaExceededException, StorageException {
+    public void haveSpace(User user, ScriptName name, long size) throws 
QuotaExceededException, StorageException {
         throw apologizeForQuotas();
     }
 
     @Override
-    public void putScript(String user, String name, String content) throws 
StorageException, QuotaExceededException {
+    public void putScript(User user, ScriptName name, ScriptContent content) 
throws StorageException, QuotaExceededException {
         throw new StorageException("This implementation is deprecated and does 
not support script put operation. You must directly position your scripts in 
the .sieve folder. Please consider using a SieveFileRepository.");
     }
 
     @Override
-    public List<ScriptSummary> listScripts(String user) throws 
StorageException {
+    public List<ScriptSummary> listScripts(User user) throws StorageException {
         throw new StorageException("This implementation is deprecated and does 
not support listScripts operation. Please consider using a 
SieveFileRepository.");
     }
 
     @Override
-    public InputStream getActive(String user) throws ScriptNotFoundException, 
StorageException {
+    public InputStream getActive(User user) throws ScriptNotFoundException, 
StorageException {
         try {
             return new FileInputStream(retrieveUserFile(user));
         } catch (FileNotFoundException e) {
@@ -79,13 +83,13 @@ public class SieveDefaultRepository implements 
SieveRepository {
     }
 
     @Override
-    public DateTime getActivationDateForActiveScript(String user) throws 
StorageException, ScriptNotFoundException {
+    public DateTime getActivationDateForActiveScript(User user) throws 
StorageException, ScriptNotFoundException {
         return new DateTime(retrieveUserFile(user).lastModified());
     }
 
-    public File retrieveUserFile(String user) throws ScriptNotFoundException {
+    public File retrieveUserFile(User user) throws ScriptNotFoundException {
         // RFC 5228 permits extensions: .siv .sieve
-        String sieveFilePrefix = FileSystem.FILE_PROTOCOL + "sieve/" + user + 
".";
+        String sieveFilePrefix = FileSystem.FILE_PROTOCOL + "sieve/" + 
user.asString() + ".";
         try {
             return fileSystem.getFile(sieveFilePrefix + "sieve");
         } catch (FileNotFoundException e) {
@@ -98,22 +102,22 @@ public class SieveDefaultRepository implements 
SieveRepository {
     }
 
     @Override
-    public void setActive(String user, String name) throws 
ScriptNotFoundException, StorageException {
+    public void setActive(User user, ScriptName name) throws 
ScriptNotFoundException, StorageException {
         throw new StorageException("This implementation is deprecated and does 
not support script SetActive operation. Your uploaded script is by default the 
active script. Please consider using a SieveFileRepository.");
     }
 
     @Override
-    public InputStream getScript(String user, String name) throws 
ScriptNotFoundException, StorageException {
+    public InputStream getScript(User user, ScriptName name) throws 
ScriptNotFoundException, StorageException {
         return getActive(user);
     }
 
     @Override
-    public void deleteScript(String user, String name) throws 
ScriptNotFoundException, IsActiveException, StorageException {
+    public void deleteScript(User user, ScriptName name) throws 
ScriptNotFoundException, IsActiveException, StorageException {
         throw new StorageException("This implementation is deprecated and does 
not support delete script operation. Please consider using a 
SieveFileRepository.");
     }
 
     @Override
-    public void renameScript(String user, String oldName, String newName) 
throws ScriptNotFoundException, DuplicateException, StorageException {
+    public void renameScript(User user, ScriptName oldName, ScriptName 
newName) throws ScriptNotFoundException, DuplicateException, StorageException {
         throw new StorageException("This implementation is deprecated and does 
not support rename script operation. Please consider using a 
SieveFileRepository.");
     }
 
@@ -123,12 +127,12 @@ public class SieveDefaultRepository implements 
SieveRepository {
     }
 
     @Override
-    public long getQuota() throws QuotaNotFoundException, StorageException {
+    public QuotaSize getQuota() throws QuotaNotFoundException, 
StorageException {
         throw apologizeForQuotas();
     }
 
     @Override
-    public void setQuota(long quota) throws StorageException {
+    public void setQuota(QuotaSize quota) throws StorageException {
         throw apologizeForQuotas();
     }
 
@@ -138,22 +142,22 @@ public class SieveDefaultRepository implements 
SieveRepository {
     }
 
     @Override
-    public boolean hasQuota(String user) throws StorageException {
+    public boolean hasQuota(User user) throws StorageException {
         throw apologizeForQuotas();
     }
 
     @Override
-    public long getQuota(String user) throws QuotaNotFoundException, 
StorageException {
+    public QuotaSize getQuota(User user) throws QuotaNotFoundException, 
StorageException {
         throw apologizeForQuotas();
     }
 
     @Override
-    public void setQuota(String user, long quota) throws StorageException {
+    public void setQuota(User user, QuotaSize quota) throws StorageException {
         throw apologizeForQuotas();
     }
 
     @Override
-    public void removeQuota(String user) throws QuotaNotFoundException, 
StorageException {
+    public void removeQuota(User user) throws QuotaNotFoundException, 
StorageException {
         throw apologizeForQuotas();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java
 
b/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java
index 400cad5..9c6bbd6 100644
--- 
a/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java
+++ 
b/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java
@@ -39,7 +39,11 @@ import javax.inject.Inject;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
+import org.apache.james.core.User;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.filesystem.api.FileSystem;
+import org.apache.james.sieverepository.api.ScriptContent;
+import org.apache.james.sieverepository.api.ScriptName;
 import org.apache.james.sieverepository.api.ScriptSummary;
 import org.apache.james.sieverepository.api.SieveRepository;
 import org.apache.james.sieverepository.api.exception.DuplicateException;
@@ -143,11 +147,11 @@ public class SieveFileRepository implements 
SieveRepository {
     }
 
     @Override
-    public void deleteScript(String user, String name) throws 
ScriptNotFoundException, IsActiveException, StorageException {
+    public void deleteScript(User user, ScriptName name) throws 
ScriptNotFoundException, IsActiveException, StorageException {
         synchronized (lock) {
             File file = getScriptFile(user, name);
             if (isActiveFile(user, file)) {
-                throw new IsActiveException("User: " + user + "Script: " + 
name);
+                throw new IsActiveException("User: " + user.asString() + 
"Script: " + name);
             }
             try {
                 FileUtils.forceDelete(file);
@@ -158,7 +162,7 @@ public class SieveFileRepository implements SieveRepository 
{
     }
 
     @Override
-    public InputStream getScript(String user, String name) throws 
ScriptNotFoundException, StorageException {
+    public InputStream getScript(User user, ScriptName name) throws 
ScriptNotFoundException, StorageException {
         InputStream script;
         try {
             script = new FileInputStream(getScriptFile(user, name));
@@ -175,9 +179,9 @@ public class SieveFileRepository implements SieveRepository 
{
      * The '.quota' file contains a single positive integer value representing 
the quota in octets.
      */
     @Override
-    public void haveSpace(String user, String name, long size) throws 
QuotaExceededException, StorageException {
+    public void haveSpace(User user, ScriptName name, long size) throws 
QuotaExceededException, StorageException {
         long usedSpace = Arrays.stream(getUserDirectory(user).listFiles())
-            .filter(file -> !(file.getName().equals(name) || 
SYSTEM_FILES.contains(file.getName())))
+            .filter(file -> !(file.getName().equals(name.getValue()) || 
SYSTEM_FILES.contains(file.getName())))
             .mapToLong(File::length)
             .sum();
 
@@ -206,7 +210,7 @@ public class SieveFileRepository implements SieveRepository 
{
     }
 
     @Override
-    public List<ScriptSummary> listScripts(String user) throws 
StorageException {
+    public List<ScriptSummary> listScripts(User user) throws StorageException {
         File[] files = getUserDirectory(user).listFiles();
         List<ScriptSummary> summaries = new ArrayList<>(files.length);
         File activeFile = null;
@@ -217,7 +221,7 @@ public class SieveFileRepository implements SieveRepository 
{
         }
         for (File file : files) {
             if (!SYSTEM_FILES.contains(file.getName())) {
-                summaries.add(new ScriptSummary(file.getName(), isActive(file, 
activeFile)));
+                summaries.add(new ScriptSummary(new 
ScriptName(file.getName()), isActive(file, activeFile)));
             }
         }
         return summaries;
@@ -229,22 +233,22 @@ public class SieveFileRepository implements 
SieveRepository {
     }
 
     @Override
-    public void putScript(String user, String name, String content) throws 
StorageException, QuotaExceededException {
+    public void putScript(User user, ScriptName name, ScriptContent content) 
throws StorageException, QuotaExceededException {
         synchronized (lock) {
-            File file = new File(getUserDirectory(user), name);
+            File file = new File(getUserDirectory(user), name.getValue());
             haveSpace(user, name, content.length());
-            toFile(file, content);
+            toFile(file, content.getValue());
         }
     }
 
     @Override
-    public void renameScript(String user, String oldName, String newName)
+    public void renameScript(User user, ScriptName oldName, ScriptName newName)
             throws ScriptNotFoundException, DuplicateException, 
StorageException {
         synchronized (lock) {
             File oldFile = getScriptFile(user, oldName);
-            File newFile = new File(getUserDirectory(user), newName);
+            File newFile = new File(getUserDirectory(user), 
newName.getValue());
             if (newFile.exists()) {
-                throw new DuplicateException("User: " + user + "Script: " + 
newName);
+                throw new DuplicateException("User: " + user.asString() + 
"Script: " + newName);
             }
             try {
                 FileUtils.copyFile(oldFile, newFile);
@@ -259,7 +263,7 @@ public class SieveFileRepository implements SieveRepository 
{
     }
 
     @Override
-    public InputStream getActive(String user) throws ScriptNotFoundException, 
StorageException {
+    public InputStream getActive(User user) throws ScriptNotFoundException, 
StorageException {
         InputStream script;
         try {
             script = new FileInputStream(getActiveFile(user));
@@ -270,12 +274,12 @@ public class SieveFileRepository implements 
SieveRepository {
     }
 
     @Override
-    public DateTime getActivationDateForActiveScript(String user) throws 
StorageException, ScriptNotFoundException {
+    public DateTime getActivationDateForActiveScript(User user) throws 
StorageException, ScriptNotFoundException {
         return new DateTime(getActiveFile(user).lastModified());
     }
 
     @Override
-    public void setActive(String user, String name) throws 
ScriptNotFoundException, StorageException {
+    public void setActive(User user, ScriptName scriptName) throws 
ScriptNotFoundException, StorageException {
         synchronized (lock) {
             // Turn off currently active script, if any
             File oldActive = null;
@@ -286,9 +290,10 @@ public class SieveFileRepository implements 
SieveRepository {
                 // This is permissible
             }
             // Turn on the new active script if not an empty name
+            String name = scriptName.getValue();
             if ((null != name) && (!name.trim().isEmpty())) {
                 try {
-                    setActiveFile(getScriptFile(user, name), user, true);
+                    setActiveFile(getScriptFile(user, new ScriptName(name)), 
user, true);
                 } catch (ScriptNotFoundException ex) {
                     if (null != oldActive) {
                         setActiveFile(oldActive, user, true);
@@ -307,7 +312,7 @@ public class SieveFileRepository implements SieveRepository 
{
         }
     }
 
-    protected File getUserDirectory(String user) throws StorageException {
+    protected File getUserDirectory(User user) throws StorageException {
         File file = getUserDirectoryFile(user);
         if (!file.exists()) {
             ensureUser(user);
@@ -315,22 +320,22 @@ public class SieveFileRepository implements 
SieveRepository {
         return file;
     }
 
-    protected File getUserDirectoryFile(String user) throws StorageException {
-        return new File(getSieveRootDirectory(), user + '/');
+    protected File getUserDirectoryFile(User user) throws StorageException {
+        return new File(getSieveRootDirectory(), user.asString() + '/');
     }
 
-    protected File getActiveFile(String user) throws ScriptNotFoundException, 
StorageException {
+    protected File getActiveFile(User user) throws ScriptNotFoundException, 
StorageException {
         File dir = getUserDirectory(user);
         String content;
         try {
             content = toString(new File(dir, FILE_NAME_ACTIVE), UTF_8);
         } catch (FileNotFoundException ex) {
-            throw new ScriptNotFoundException("There is no active script for 
user " + user);
+            throw new ScriptNotFoundException("There is no active script for 
user " + user.asString());
         }
         return new File(dir, content);
     }
 
-    protected boolean isActiveFile(String user, File file) throws 
StorageException {
+    protected boolean isActiveFile(User user, File file) throws 
StorageException {
         try {
             return 0 == getActiveFile(user).compareTo(file);
         } catch (ScriptNotFoundException ex) {
@@ -338,11 +343,11 @@ public class SieveFileRepository implements 
SieveRepository {
         }
     }
 
-    protected void setActiveFile(File scriptToBeActivated, String userName, 
boolean isActive) throws StorageException {
+    protected void setActiveFile(File scriptToBeActivated, User userName, 
boolean isActive) throws StorageException {
         File personalScriptDirectory = scriptToBeActivated.getParentFile();
         File sieveBaseDirectory = personalScriptDirectory.getParentFile();
         File activeScriptPersistenceFile = new File(personalScriptDirectory, 
FILE_NAME_ACTIVE);
-        File activeScriptCopy = new File(sieveBaseDirectory, userName + 
SIEVE_EXTENSION);
+        File activeScriptCopy = new File(sieveBaseDirectory, 
userName.asString() + SIEVE_EXTENSION);
         if (isActive) {
             toFile(activeScriptPersistenceFile, scriptToBeActivated.getName());
             try {
@@ -360,15 +365,15 @@ public class SieveFileRepository implements 
SieveRepository {
         }
     }
 
-    protected File getScriptFile(String user, String name) throws 
ScriptNotFoundException, StorageException {
-        File file = new File(getUserDirectory(user), name);
+    protected File getScriptFile(User user, ScriptName name) throws 
ScriptNotFoundException, StorageException {
+        File file = new File(getUserDirectory(user), name.getValue());
         if (!file.exists()) {
             throw new ScriptNotFoundException("User: " + user + "Script: " + 
name);
         }
         return file;
     }
 
-    public void ensureUser(String user) throws StorageException {
+    public void ensureUser(User user) throws StorageException {
         synchronized (lock) {
             try {
                 FileUtils.forceMkdir(getUserDirectoryFile(user));
@@ -388,7 +393,7 @@ public class SieveFileRepository implements SieveRepository 
{
     }
 
     @Override
-    public long getQuota() throws QuotaNotFoundException, StorageException {
+    public QuotaSize getQuota() throws QuotaNotFoundException, 
StorageException {
         Long quota = null;
         File file = getQuotaFile();
         if (file.exists()) {
@@ -407,7 +412,7 @@ public class SieveFileRepository implements SieveRepository 
{
         if (null == quota) {
             throw new QuotaNotFoundException("No default quota");
         }
-        return quota;
+        return QuotaSize.size(quota);
     }
 
     @Override
@@ -424,23 +429,23 @@ public class SieveFileRepository implements 
SieveRepository {
     }
 
     @Override
-    public synchronized void setQuota(long quota) throws StorageException {
+    public synchronized void setQuota(QuotaSize quota) throws StorageException 
{
         File file = getQuotaFile();
-        String content = Long.toString(quota);
+        String content = Long.toString(quota.asLong());
         toFile(file, content);
     }
 
-    protected File getQuotaFile(String user) throws StorageException {
+    protected File getQuotaFile(User user) throws StorageException {
         return new File(getUserDirectory(user), FILE_NAME_QUOTA);
     }
 
     @Override
-    public boolean hasQuota(String user) throws StorageException {
+    public boolean hasQuota(User user) throws StorageException {
         return getQuotaFile(user).exists();
     }
 
     @Override
-    public long getQuota(String user) throws QuotaNotFoundException, 
StorageException {
+    public QuotaSize getQuota(User user) throws QuotaNotFoundException, 
StorageException {
         Long quota = null;
         File file = getQuotaFile(user);
         if (file.exists()) {
@@ -457,13 +462,13 @@ public class SieveFileRepository implements 
SieveRepository {
             }
         }
         if (null == quota) {
-            throw new QuotaNotFoundException("No quota for user: " + user);
+            throw new QuotaNotFoundException("No quota for user: " + 
user.asString());
         }
-        return quota;
+        return QuotaSize.size(quota);
     }
 
     @Override
-    public void removeQuota(String user) throws QuotaNotFoundException, 
StorageException {
+    public void removeQuota(User user) throws QuotaNotFoundException, 
StorageException {
         synchronized (lock) {
             File file = getQuotaFile(user);
             if (!file.exists()) {
@@ -478,10 +483,10 @@ public class SieveFileRepository implements 
SieveRepository {
     }
 
     @Override
-    public void setQuota(String user, long quota) throws StorageException {
+    public void setQuota(User user, QuotaSize quota) throws StorageException {
         synchronized (lock) {
             File file = getQuotaFile(user);
-            String content = Long.toString(quota);
+            String content = Long.toString(quota.asLong());
             toFile(file, content);
         }
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/server/data/data-library/src/main/java/org/apache/james/sieverepository/lib/SieveRepositoryManagement.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-library/src/main/java/org/apache/james/sieverepository/lib/SieveRepositoryManagement.java
 
b/server/data/data-library/src/main/java/org/apache/james/sieverepository/lib/SieveRepositoryManagement.java
index c5b2ca4..d60cf1a 100644
--- 
a/server/data/data-library/src/main/java/org/apache/james/sieverepository/lib/SieveRepositoryManagement.java
+++ 
b/server/data/data-library/src/main/java/org/apache/james/sieverepository/lib/SieveRepositoryManagement.java
@@ -24,6 +24,8 @@ import javax.inject.Inject;
 import javax.management.NotCompliantMBeanException;
 import javax.management.StandardMBean;
 
+import org.apache.james.core.User;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.sieverepository.api.SieveRepository;
 import org.apache.james.sieverepository.api.SieveRepositoryManagementMBean;
 import org.apache.james.sieverepository.api.exception.SieveRepositoryException;
@@ -43,12 +45,12 @@ public class SieveRepositoryManagement extends 
StandardMBean implements SieveRep
 
     @Override
     public long getQuota() throws SieveRepositoryException {
-        return sieveRepository.getQuota();
+        return sieveRepository.getQuota().asLong();
     }
 
     @Override
     public void setQuota(long quota) throws SieveRepositoryException {
-        sieveRepository.setQuota(quota);
+        sieveRepository.setQuota(QuotaSize.size(quota));
     }
 
     @Override
@@ -58,16 +60,16 @@ public class SieveRepositoryManagement extends 
StandardMBean implements SieveRep
 
     @Override
     public long getQuota(String user) throws SieveRepositoryException {
-        return sieveRepository.getQuota(user);
+        return sieveRepository.getQuota(User.fromUsername(user)).asLong();
     }
 
     @Override
     public void setQuota(String user, long quota) throws 
SieveRepositoryException {
-        sieveRepository.setQuota(user, quota);
+        sieveRepository.setQuota(User.fromUsername(user), 
QuotaSize.size(quota));
     }
 
     @Override
     public void removeQuota(String user) throws SieveRepositoryException {
-        sieveRepository.removeQuota(user);
+        sieveRepository.removeQuota(User.fromUsername(user));
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/server/data/data-library/src/test/java/org/apache/james/sieverepository/lib/AbstractSieveRepositoryTest.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-library/src/test/java/org/apache/james/sieverepository/lib/AbstractSieveRepositoryTest.java
 
b/server/data/data-library/src/test/java/org/apache/james/sieverepository/lib/AbstractSieveRepositoryTest.java
index 7f5eaa4..fe5b557 100644
--- 
a/server/data/data-library/src/test/java/org/apache/james/sieverepository/lib/AbstractSieveRepositoryTest.java
+++ 
b/server/data/data-library/src/test/java/org/apache/james/sieverepository/lib/AbstractSieveRepositoryTest.java
@@ -22,8 +22,13 @@ import static org.assertj.core.api.Assertions.assertThat;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
 
 import org.apache.commons.io.IOUtils;
+import org.apache.james.core.User;
+import org.apache.james.core.quota.QuotaSize;
+import org.apache.james.sieverepository.api.ScriptContent;
+import org.apache.james.sieverepository.api.ScriptName;
 import org.apache.james.sieverepository.api.ScriptSummary;
 import org.apache.james.sieverepository.api.SieveRepository;
 import org.apache.james.sieverepository.api.exception.DuplicateException;
@@ -36,15 +41,14 @@ import org.junit.Test;
 
 public abstract class AbstractSieveRepositoryTest {
 
-    protected static final String USER = "test";
-    protected static final String SCRIPT_NAME = "script";
-    protected static final String SCRIPT_CONTENT = "Hello World";
+    protected static final User USER = User.fromUsername("test");
+    protected static final ScriptName SCRIPT_NAME = new ScriptName("script");
+    protected static final ScriptContent SCRIPT_CONTENT = new 
ScriptContent("Hello World");
 
-    private static final String OTHER_SCRIPT_NAME = "other_script";
-    private static final String OTHER_SCRIPT_CONTENT = "Other script content";
-    private static final long DEFAULT_QUOTA = Long.MAX_VALUE - 1L;
-    private static final long USER_QUOTA = Long.MAX_VALUE / 2;
-    private static final String UTF8_ENCODING = "UTF-8";
+    private static final ScriptName OTHER_SCRIPT_NAME = new 
ScriptName("other_script");
+    private static final ScriptContent OTHER_SCRIPT_CONTENT = new 
ScriptContent("Other script content");
+    private static final QuotaSize DEFAULT_QUOTA = 
QuotaSize.size(Long.MAX_VALUE - 1L);
+    private static final QuotaSize USER_QUOTA = QuotaSize.size(Long.MAX_VALUE 
/ 2);
 
     protected SieveRepository sieveRepository;
 
@@ -79,40 +83,40 @@ public abstract class AbstractSieveRepositoryTest {
 
     @Test
     public void haveSpaceShouldNotThrowWhenUserDoesNotHaveQuota() throws 
Exception {
-        sieveRepository.haveSpace(USER, SCRIPT_NAME, DEFAULT_QUOTA + 1L);
+        sieveRepository.haveSpace(USER, SCRIPT_NAME, DEFAULT_QUOTA.asLong() + 
1L);
     }
 
     @Test
     public void haveSpaceShouldNotThrowWhenQuotaIsNotReached() throws 
Exception {
         sieveRepository.setQuota(DEFAULT_QUOTA);
-        sieveRepository.haveSpace(USER, SCRIPT_NAME, DEFAULT_QUOTA);
+        sieveRepository.haveSpace(USER, SCRIPT_NAME, DEFAULT_QUOTA.asLong());
     }
 
     @Test(expected = QuotaExceededException.class)
     public void haveSpaceShouldThrowWhenQuotaIsExceed() throws Exception {
         sieveRepository.setQuota(DEFAULT_QUOTA);
-        sieveRepository.haveSpace(USER, SCRIPT_NAME, DEFAULT_QUOTA + 1);
+        sieveRepository.haveSpace(USER, SCRIPT_NAME, DEFAULT_QUOTA.asLong() + 
1);
     }
 
     @Test
     public void haveSpaceShouldNotThrowWhenAttemptToReplaceOtherScript() 
throws Exception {
         sieveRepository.setQuota(USER, USER_QUOTA);
         sieveRepository.putScript(USER, SCRIPT_NAME, SCRIPT_CONTENT);
-        sieveRepository.haveSpace(USER, SCRIPT_NAME, USER_QUOTA);
+        sieveRepository.haveSpace(USER, SCRIPT_NAME, USER_QUOTA.asLong());
     }
 
     @Test(expected = QuotaExceededException.class)
     public void 
haveSpaceShouldThrowWhenAttemptToReplaceOtherScriptWithTooLargeScript() throws 
Exception {
         sieveRepository.setQuota(USER, USER_QUOTA);
         sieveRepository.putScript(USER, SCRIPT_NAME, SCRIPT_CONTENT);
-        sieveRepository.haveSpace(USER, SCRIPT_NAME, USER_QUOTA + 1);
+        sieveRepository.haveSpace(USER, SCRIPT_NAME, USER_QUOTA.asLong() + 1);
     }
 
     @Test(expected = QuotaExceededException.class)
     public void haveSpaceShouldTakeAlreadyExistingScriptsIntoAccount() throws 
Exception {
         sieveRepository.setQuota(USER, USER_QUOTA);
         sieveRepository.putScript(USER, SCRIPT_NAME, SCRIPT_CONTENT);
-        sieveRepository.haveSpace(USER, OTHER_SCRIPT_NAME, USER_QUOTA - 1);
+        sieveRepository.haveSpace(USER, OTHER_SCRIPT_NAME, USER_QUOTA.asLong() 
- 1);
     }
 
     @Test
@@ -120,7 +124,7 @@ public abstract class AbstractSieveRepositoryTest {
         sieveRepository.setQuota(USER, USER_QUOTA);
         sieveRepository.putScript(USER, SCRIPT_NAME, SCRIPT_CONTENT);
         sieveRepository.setActive(USER, SCRIPT_NAME);
-        sieveRepository.haveSpace(USER, SCRIPT_NAME, USER_QUOTA);
+        sieveRepository.haveSpace(USER, SCRIPT_NAME, USER_QUOTA.asLong());
     }
 
     @Test
@@ -156,15 +160,15 @@ public abstract class AbstractSieveRepositoryTest {
 
     @Test(expected = QuotaExceededException.class)
     public void putScriptShouldThrowWhenScriptTooBig() throws Exception {
-        sieveRepository.setQuota(SCRIPT_CONTENT.length() - 1);
+        sieveRepository.setQuota(QuotaSize.size(SCRIPT_CONTENT.length() - 1));
         sieveRepository.putScript(USER, SCRIPT_NAME, SCRIPT_CONTENT);
     }
 
     @Test(expected = QuotaExceededException.class)
     public void putScriptShouldThrowWhenQuotaChangedInBetween() throws 
Exception {
-        sieveRepository.setQuota(SCRIPT_CONTENT.length());
+        sieveRepository.setQuota(QuotaSize.size(SCRIPT_CONTENT.length()));
         sieveRepository.putScript(USER, SCRIPT_NAME, SCRIPT_CONTENT);
-        sieveRepository.setQuota(SCRIPT_CONTENT.length() - 1);
+        sieveRepository.setQuota(QuotaSize.size(SCRIPT_CONTENT.length() - 1));
         sieveRepository.putScript(USER, SCRIPT_NAME, SCRIPT_CONTENT);
     }
 
@@ -340,7 +344,7 @@ public abstract class AbstractSieveRepositoryTest {
     }
 
     protected String getScriptContent(InputStream inputStream) throws 
IOException {
-        return IOUtils.toString(inputStream, UTF8_ENCODING);
+        return IOUtils.toString(inputStream, StandardCharsets.UTF_8);
     }
 
     protected abstract SieveRepository createSieveRepository() throws 
Exception;

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/server/data/data-memory/src/main/java/org/apache/james/sieverepository/memory/InMemorySieveQuotaRepository.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-memory/src/main/java/org/apache/james/sieverepository/memory/InMemorySieveQuotaRepository.java
 
b/server/data/data-memory/src/main/java/org/apache/james/sieverepository/memory/InMemorySieveQuotaRepository.java
index 1e30b9c..8820ee9 100644
--- 
a/server/data/data-memory/src/main/java/org/apache/james/sieverepository/memory/InMemorySieveQuotaRepository.java
+++ 
b/server/data/data-memory/src/main/java/org/apache/james/sieverepository/memory/InMemorySieveQuotaRepository.java
@@ -23,14 +23,16 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 
+import org.apache.james.core.User;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.sieverepository.api.SieveQuotaRepository;
 import org.apache.james.sieverepository.api.exception.QuotaNotFoundException;
 
 public class InMemorySieveQuotaRepository implements SieveQuotaRepository {
 
-    private Optional<Long> globalQuota = Optional.empty();
+    private Optional<QuotaSize> globalQuota = Optional.empty();
 
-    private Map<String, Long> userQuota = new ConcurrentHashMap<>();
+    private Map<User, QuotaSize> userQuota = new ConcurrentHashMap<>();
 
     @Override
     public boolean hasQuota() {
@@ -38,12 +40,12 @@ public class InMemorySieveQuotaRepository implements 
SieveQuotaRepository {
     }
 
     @Override
-    public long getQuota() throws QuotaNotFoundException {
+    public QuotaSize getQuota() throws QuotaNotFoundException {
         return globalQuota.orElseThrow(QuotaNotFoundException::new);
     }
 
     @Override
-    public void setQuota(long quota) {
+    public void setQuota(QuotaSize quota) {
         this.globalQuota = Optional.of(quota);
     }
 
@@ -56,24 +58,24 @@ public class InMemorySieveQuotaRepository implements 
SieveQuotaRepository {
     }
 
     @Override
-    public boolean hasQuota(String user) {
+    public boolean hasQuota(User user) {
         return userQuota.containsKey(user);
     }
 
     @Override
-    public long getQuota(String user) throws QuotaNotFoundException {
+    public QuotaSize getQuota(User user) throws QuotaNotFoundException {
         return Optional.ofNullable(userQuota.get(user))
             .orElseThrow(QuotaNotFoundException::new);
     }
 
     @Override
-    public void setQuota(String user, long quota) {
+    public void setQuota(User user, QuotaSize quota) {
         userQuota.put(user, quota);
     }
 
     @Override
-    public void removeQuota(String user) throws QuotaNotFoundException {
-        Optional<Long> quotaValue = Optional.ofNullable(userQuota.get(user));
+    public void removeQuota(User user) throws QuotaNotFoundException {
+        Optional<QuotaSize> quotaValue = 
Optional.ofNullable(userQuota.get(user));
         if (!quotaValue.isPresent()) {
             throw new QuotaNotFoundException();
         }

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
index 26a3658..6b755fb 100644
--- 
a/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
+++ 
b/server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
@@ -29,8 +29,8 @@ import static 
org.apache.james.mailets.configuration.Constants.awaitAtMostOneMin
 import static org.assertj.core.api.Assertions.assertThat;
 
 import org.apache.james.MemoryJamesServerMain;
-import org.apache.james.mailbox.quota.QuotaCount;
-import org.apache.james.mailbox.quota.QuotaSize;
+import org.apache.james.core.quota.QuotaCount;
+import org.apache.james.core.quota.QuotaSize;
 import org.apache.james.mailets.TemporaryJamesServer;
 import org.apache.james.mailets.configuration.CommonProcessors;
 import org.apache.james.mailets.configuration.MailetConfiguration;

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ResourceLocator.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ResourceLocator.java
 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ResourceLocator.java
index 736687f..cdb310c 100644
--- 
a/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ResourceLocator.java
+++ 
b/server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ResourceLocator.java
@@ -21,6 +21,7 @@ package org.apache.james.transport.mailets.jsieve;
 import java.io.InputStream;
 
 import org.apache.james.core.MailAddress;
+import org.apache.james.core.User;
 import org.apache.james.sieverepository.api.SieveRepository;
 import org.apache.james.user.api.UsersRepository;
 import org.apache.james.user.api.UsersRepositoryException;
@@ -61,16 +62,15 @@ public class ResourceLocator {
     }
 
     public UserSieveInformation get(MailAddress mailAddress) throws Exception {
-        String username = retrieveUsername(mailAddress);
+        User username = retrieveUsername(mailAddress);
         return new 
UserSieveInformation(sieveRepository.getActivationDateForActiveScript(username),
 DateTime.now(), sieveRepository.getActive(username));
     }
 
-    private String retrieveUsername(MailAddress mailAddress) {
+    private User retrieveUsername(MailAddress mailAddress) {
         try {
-            return usersRepository.getUser(mailAddress);
+            return User.fromUsername(usersRepository.getUser(mailAddress));
         } catch (UsersRepositoryException e) {
-
-            return mailAddress.asString();
+            return User.fromMailAddress(mailAddress);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/3d0a5534/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ResourceLocatorTest.java
----------------------------------------------------------------------
diff --git 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ResourceLocatorTest.java
 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ResourceLocatorTest.java
index 30064ab..12ff8d3 100644
--- 
a/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ResourceLocatorTest.java
+++ 
b/server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ResourceLocatorTest.java
@@ -27,6 +27,7 @@ import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 
 import org.apache.james.core.MailAddress;
+import org.apache.james.core.User;
 import org.apache.james.sieverepository.api.SieveRepository;
 import org.apache.james.sieverepository.api.exception.ScriptNotFoundException;
 import org.apache.james.transport.mailets.jsieve.ResourceLocator;
@@ -37,6 +38,7 @@ import org.junit.Test;
 public class ResourceLocatorTest {
 
     public static final String RECEIVER_LOCALHOST = "receiver@localhost";
+    public static final User USER = User.fromUsername(RECEIVER_LOCALHOST);
     private SieveRepository sieveRepository;
     private ResourceLocator resourceLocator;
     private MailAddress mailAddress;
@@ -52,7 +54,7 @@ public class ResourceLocatorTest {
 
     @Test(expected = ScriptNotFoundException.class)
     public void resourceLocatorImplShouldPropagateScriptNotFound() throws 
Exception {
-        when(sieveRepository.getActive(RECEIVER_LOCALHOST)).thenThrow(new 
ScriptNotFoundException());
+        when(sieveRepository.getActive(USER)).thenThrow(new 
ScriptNotFoundException());
         
when(usersRepository.getUser(mailAddress)).thenReturn(RECEIVER_LOCALHOST);
 
         resourceLocator.get(mailAddress);
@@ -61,7 +63,7 @@ public class ResourceLocatorTest {
     @Test
     public void resourceLocatorImplShouldWork() throws Exception {
         InputStream inputStream = new ByteArrayInputStream(new byte[0]);
-        
when(sieveRepository.getActive(RECEIVER_LOCALHOST)).thenReturn(inputStream);
+        when(sieveRepository.getActive(USER)).thenReturn(inputStream);
         
when(usersRepository.getUser(mailAddress)).thenReturn(RECEIVER_LOCALHOST);
 
         
assertThat(resourceLocator.get(mailAddress).getScriptContent()).isEqualTo(inputStream);


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

Reply via email to