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

rcordier pushed a commit to branch james-3926-mailbox-current-quotas
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit a76adbc9ba9a80dca91c98fb78be52f82e1c52a6
Author: Benoit TELLIER <btell...@linagora.com>
AuthorDate: Thu Aug 24 19:52:58 2023 +0700

    JAMES-3926 Configuration for quota compatibility mode
---
 .../james/CassandraJamesServerConfiguration.java   | 25 +++++++++++++++--
 .../james/CassandraRabbitMQJamesConfiguration.java | 30 +++++++++++++++++++--
 .../james/DistributedPOP3JamesConfiguration.java   | 31 ++++++++++++++++++++--
 3 files changed, 80 insertions(+), 6 deletions(-)

diff --git 
a/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerConfiguration.java
 
b/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerConfiguration.java
index 7d93448da5..ee8d86a699 100644
--- 
a/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerConfiguration.java
+++ 
b/server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerConfiguration.java
@@ -55,6 +55,7 @@ public class CassandraJamesServerConfiguration implements 
Configuration {
         private Optional<UsersRepositoryModuleChooser.Implementation> 
usersRepositoryImplementation;
         private Optional<VaultConfiguration> vaultConfiguration;
         private Optional<Boolean> jmapEnabled;
+        private Optional<Boolean> quotaCompatibilityMode;
 
         private Builder() {
             rootDirectory = Optional.empty();
@@ -64,6 +65,7 @@ public class CassandraJamesServerConfiguration implements 
Configuration {
             blobStoreConfiguration = Optional.empty();
             vaultConfiguration = Optional.empty();
             jmapEnabled = Optional.empty();
+            quotaCompatibilityMode = Optional.empty();
         }
 
         public Builder workingDirectory(String path) {
@@ -114,6 +116,11 @@ public class CassandraJamesServerConfiguration implements 
Configuration {
             return this;
         }
 
+        public Builder quotaCompatibilityModeEnabled(boolean value) {
+            this.quotaCompatibilityMode = Optional.of(value);
+            return this;
+        }
+
         public CassandraJamesServerConfiguration build() {
             ConfigurationPath configurationPath = 
this.configurationPath.orElse(new 
ConfigurationPath(FileSystem.FILE_PROTOCOL_AND_CONF));
             JamesServerResourceLoader directories = new 
JamesServerResourceLoader(rootDirectory
@@ -142,6 +149,14 @@ public class CassandraJamesServerConfiguration implements 
Configuration {
                 }
             });
 
+            boolean quotaCompatibilityMode = 
this.quotaCompatibilityMode.orElseGet(() -> {
+                try {
+                    return 
configurationProvider.getConfiguration("cassandra").getBoolean("quota.compatibility.mode",
 false);
+                } catch (ConfigurationException e) {
+                    return false;
+                }
+            });
+
             boolean jmapEnabled = this.jmapEnabled.orElseGet(() -> {
                 try {
                     return 
JMAPModule.parseConfiguration(propertiesProvider).isEnabled();
@@ -152,7 +167,7 @@ public class CassandraJamesServerConfiguration implements 
Configuration {
                 }
             });
 
-            return new CassandraJamesServerConfiguration(configurationPath, 
directories, searchConfiguration, blobStoreConfiguration, 
usersRepositoryChoice, vaultConfiguration, jmapEnabled);
+            return new CassandraJamesServerConfiguration(configurationPath, 
directories, searchConfiguration, blobStoreConfiguration, 
usersRepositoryChoice, vaultConfiguration, jmapEnabled, quotaCompatibilityMode);
         }
     }
 
@@ -167,11 +182,12 @@ public class CassandraJamesServerConfiguration implements 
Configuration {
     private final UsersRepositoryModuleChooser.Implementation 
usersRepositoryImplementation;
     private final VaultConfiguration vaultConfiguration;
     private final boolean jmapEnabled;
+    private final boolean quotaCompatibilityMode;
 
     private CassandraJamesServerConfiguration(ConfigurationPath 
configurationPath, JamesDirectoriesProvider directories,
                                               SearchConfiguration 
searchConfiguration, BlobStoreConfiguration blobStoreConfiguration,
                                               
UsersRepositoryModuleChooser.Implementation usersRepositoryImplementation,
-                                              VaultConfiguration 
vaultConfiguration, boolean jmapEnabled) {
+                                              VaultConfiguration 
vaultConfiguration, boolean jmapEnabled, boolean quotaCompatibilityMode) {
         this.configurationPath = configurationPath;
         this.directories = directories;
         this.searchConfiguration = searchConfiguration;
@@ -179,6 +195,7 @@ public class CassandraJamesServerConfiguration implements 
Configuration {
         this.usersRepositoryImplementation = usersRepositoryImplementation;
         this.vaultConfiguration = vaultConfiguration;
         this.jmapEnabled = jmapEnabled;
+        this.quotaCompatibilityMode = quotaCompatibilityMode;
     }
 
     @Override
@@ -210,4 +227,8 @@ public class CassandraJamesServerConfiguration implements 
Configuration {
     public boolean isJmapEnabled() {
         return jmapEnabled;
     }
+
+    public boolean isQuotaCompatibilityMode() {
+        return quotaCompatibilityMode;
+    }
 }
diff --git 
a/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesConfiguration.java
 
b/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesConfiguration.java
index 1f9913b770..ae230f2495 100644
--- 
a/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesConfiguration.java
+++ 
b/server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesConfiguration.java
@@ -50,6 +50,7 @@ public class CassandraRabbitMQJamesConfiguration implements 
Configuration {
         private Optional<UsersRepositoryModuleChooser.Implementation> 
usersRepositoryImplementation;
         private Optional<VaultConfiguration> vaultConfiguration;
         private Optional<Boolean> jmapEnabled;
+        private Optional<Boolean> quotaCompatibilityMode;
 
         private Builder() {
             searchConfiguration = Optional.empty();
@@ -60,6 +61,7 @@ public class CassandraRabbitMQJamesConfiguration implements 
Configuration {
             mailQueueViewChoice = Optional.empty();
             vaultConfiguration = Optional.empty();
             jmapEnabled = Optional.empty();
+            quotaCompatibilityMode = Optional.empty();
         }
 
         public Builder workingDirectory(String path) {
@@ -120,6 +122,11 @@ public class CassandraRabbitMQJamesConfiguration 
implements Configuration {
             return this;
         }
 
+        public Builder quotaCompatibilityModeEnabled(boolean value) {
+            this.quotaCompatibilityMode = Optional.of(value);
+            return this;
+        }
+
         public CassandraRabbitMQJamesConfiguration build() {
             ConfigurationPath configurationPath = 
this.configurationPath.orElse(new 
ConfigurationPath(FileSystem.FILE_PROTOCOL_AND_CONF));
             JamesServerResourceLoader directories = new 
JamesServerResourceLoader(rootDirectory
@@ -161,6 +168,14 @@ public class CassandraRabbitMQJamesConfiguration 
implements Configuration {
                 }
             });
 
+            boolean quotaCompatibilityMode = 
this.quotaCompatibilityMode.orElseGet(() -> {
+                try {
+                    return 
configurationProvider.getConfiguration("cassandra").getBoolean("quota.compatibility.mode",
 false);
+                } catch (ConfigurationException e) {
+                    return false;
+                }
+            });
+
             return new CassandraRabbitMQJamesConfiguration(
                 configurationPath,
                 directories,
@@ -168,7 +183,8 @@ public class CassandraRabbitMQJamesConfiguration implements 
Configuration {
                 searchConfiguration,
                 usersRepositoryChoice,
                 mailQueueViewChoice, vaultConfiguration,
-                jmapEnabled);
+                jmapEnabled,
+                quotaCompatibilityMode);
         }
     }
 
@@ -184,8 +200,13 @@ public class CassandraRabbitMQJamesConfiguration 
implements Configuration {
     private final MailQueueViewChoice mailQueueViewChoice;
     private final VaultConfiguration vaultConfiguration;
     private final boolean jmapEnabled;
+    private final boolean quotaCompatibilityMode;
 
-    public CassandraRabbitMQJamesConfiguration(ConfigurationPath 
configurationPath, JamesDirectoriesProvider directories, BlobStoreConfiguration 
blobStoreConfiguration, SearchConfiguration searchConfiguration, 
UsersRepositoryModuleChooser.Implementation usersRepositoryImplementation, 
MailQueueViewChoice mailQueueViewChoice, VaultConfiguration vaultConfiguration, 
boolean jmapEnabled) {
+    public CassandraRabbitMQJamesConfiguration(ConfigurationPath 
configurationPath, JamesDirectoriesProvider directories,
+                                               BlobStoreConfiguration 
blobStoreConfiguration, SearchConfiguration searchConfiguration,
+                                               
UsersRepositoryModuleChooser.Implementation usersRepositoryImplementation,
+                                               MailQueueViewChoice 
mailQueueViewChoice, VaultConfiguration vaultConfiguration,
+                                               boolean jmapEnabled, boolean 
quotaCompatibilityMode) {
         this.configurationPath = configurationPath;
         this.directories = directories;
         this.blobStoreConfiguration = blobStoreConfiguration;
@@ -194,6 +215,7 @@ public class CassandraRabbitMQJamesConfiguration implements 
Configuration {
         this.mailQueueViewChoice = mailQueueViewChoice;
         this.vaultConfiguration = vaultConfiguration;
         this.jmapEnabled = jmapEnabled;
+        this.quotaCompatibilityMode = quotaCompatibilityMode;
     }
 
     public MailQueueViewChoice getMailQueueViewChoice() {
@@ -229,4 +251,8 @@ public class CassandraRabbitMQJamesConfiguration implements 
Configuration {
     public boolean isJmapEnabled() {
         return jmapEnabled;
     }
+
+    public boolean isQuotaCompatibilityMode() {
+        return quotaCompatibilityMode;
+    }
 }
diff --git 
a/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesConfiguration.java
 
b/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesConfiguration.java
index 138aa4c135..6264d1bd61 100644
--- 
a/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesConfiguration.java
+++ 
b/server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesConfiguration.java
@@ -47,6 +47,7 @@ public class DistributedPOP3JamesConfiguration implements 
Configuration {
         private Optional<UsersRepositoryModuleChooser.Implementation> 
usersRepositoryImplementation;
         private Optional<MailQueueViewChoice> mailQueueViewChoice;
         private Optional<VaultConfiguration> vaultConfiguration;
+        private Optional<Boolean> quotaCompatibilityMode;
 
         private Builder() {
             searchConfiguration = Optional.empty();
@@ -56,6 +57,7 @@ public class DistributedPOP3JamesConfiguration implements 
Configuration {
             usersRepositoryImplementation = Optional.empty();
             mailQueueViewChoice = Optional.empty();
             vaultConfiguration = Optional.empty();
+            quotaCompatibilityMode = Optional.empty();
         }
 
         public Builder workingDirectory(String path) {
@@ -107,6 +109,11 @@ public class DistributedPOP3JamesConfiguration implements 
Configuration {
             return this;
         }
 
+        public Builder quotaCompatibilityMode(boolean value) {
+            this.quotaCompatibilityMode = Optional.of(value);
+            return this;
+        }
+
         public DistributedPOP3JamesConfiguration build() {
             ConfigurationPath configurationPath = 
this.configurationPath.orElse(new 
ConfigurationPath(FileSystem.FILE_PROTOCOL_AND_CONF));
             JamesServerResourceLoader directories = new 
JamesServerResourceLoader(rootDirectory
@@ -139,13 +146,23 @@ public class DistributedPOP3JamesConfiguration implements 
Configuration {
                 }
             });
 
+            boolean quotaCompatibilityMode = 
this.quotaCompatibilityMode.orElseGet(() -> {
+                try {
+                    return 
configurationProvider.getConfiguration("cassandra").getBoolean("quota.compatibility.mode",
 false);
+                } catch (ConfigurationException e) {
+                    return false;
+                }
+            });
+
             return new DistributedPOP3JamesConfiguration(
                 configurationPath,
                 directories,
                 blobStoreConfiguration,
                 searchConfiguration,
                 usersRepositoryChoice,
-                mailQueueViewChoice, vaultConfiguration);
+                mailQueueViewChoice,
+                vaultConfiguration,
+                quotaCompatibilityMode);
         }
     }
 
@@ -160,8 +177,13 @@ public class DistributedPOP3JamesConfiguration implements 
Configuration {
     private final UsersRepositoryModuleChooser.Implementation 
usersRepositoryImplementation;
     private final MailQueueViewChoice mailQueueViewChoice;
     private final VaultConfiguration vaultConfiguration;
+    private final boolean quotaCompatibilityMode;
 
-    public DistributedPOP3JamesConfiguration(ConfigurationPath 
configurationPath, JamesDirectoriesProvider directories, BlobStoreConfiguration 
blobStoreConfiguration, SearchConfiguration searchConfiguration, 
UsersRepositoryModuleChooser.Implementation usersRepositoryImplementation, 
MailQueueViewChoice mailQueueViewChoice, VaultConfiguration vaultConfiguration) 
{
+    public DistributedPOP3JamesConfiguration(ConfigurationPath 
configurationPath, JamesDirectoriesProvider directories,
+                                             BlobStoreConfiguration 
blobStoreConfiguration, SearchConfiguration searchConfiguration,
+                                             
UsersRepositoryModuleChooser.Implementation usersRepositoryImplementation,
+                                             MailQueueViewChoice 
mailQueueViewChoice, VaultConfiguration vaultConfiguration,
+                                             boolean quotaCompatibilityMode) {
         this.configurationPath = configurationPath;
         this.directories = directories;
         this.blobStoreConfiguration = blobStoreConfiguration;
@@ -169,6 +191,7 @@ public class DistributedPOP3JamesConfiguration implements 
Configuration {
         this.usersRepositoryImplementation = usersRepositoryImplementation;
         this.mailQueueViewChoice = mailQueueViewChoice;
         this.vaultConfiguration = vaultConfiguration;
+        this.quotaCompatibilityMode = quotaCompatibilityMode;
     }
 
     public MailQueueViewChoice getMailQueueViewChoice() {
@@ -200,4 +223,8 @@ public class DistributedPOP3JamesConfiguration implements 
Configuration {
     public VaultConfiguration getVaultConfiguration() {
         return vaultConfiguration;
     }
+
+    public boolean isQuotaCompatibilityMode() {
+        return quotaCompatibilityMode;
+    }
 }


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

Reply via email to