You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2015/09/22 12:35:33 UTC

svn commit: r1704559 - in /james/server/trunk: app/src/main/resources/ container/spring/src/main/java/org/apache/james/container/spring/mailbox/ container/spring/src/main/resources/META-INF/org/apache/james/

Author: btellier
Date: Tue Sep 22 10:35:31 2015
New Revision: 1704559

URL: http://svn.apache.org/viewvc?rev=1704559&view=rev
Log:
JAMES-511 Add support for Max quota manager policy configuration

Added:
    james/server/trunk/container/spring/src/main/java/org/apache/james/container/spring/mailbox/MaxQuotaConfigurationReader.java
Modified:
    james/server/trunk/app/src/main/resources/quota-template.xml
    james/server/trunk/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml

Modified: james/server/trunk/app/src/main/resources/quota-template.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/app/src/main/resources/quota-template.xml?rev=1704559&r1=1704558&r2=1704559&view=diff
==============================================================================
--- james/server/trunk/app/src/main/resources/quota-template.xml (original)
+++ james/server/trunk/app/src/main/resources/quota-template.xml Tue Sep 22 10:35:31 2015
@@ -85,6 +85,26 @@
          CLI values.
         -->
         <provider>fake</provider>
+        <!--
+        Configuration option for setting max policies for MaxQuotaManager ( message count and byte )
+        -->
+        <!--
+        <defaultMaxMessage>100000</defaultMaxMessage>
+        <defaultMaxStorage>5368709120</defaultMaxStorage>
+        -->
+        <!--
+        Configuration option for setting max values per quota root ( message count and byte )
+        -->
+        <!--
+        <maxMessage>
+            <quotaRoot>#private&amp;btellier@apache.org</quotaRoot>
+            <value>200000</value>
+        </maxMessage>
+        <maxStorage>
+            <quotaRoot>#private&amp;btellier@apache.org</quotaRoot>
+            <value>10737418240</value>
+        </maxStorage>
+        -->
     </maxQuotaManager>
     <quotaManager>
         <!--

Added: james/server/trunk/container/spring/src/main/java/org/apache/james/container/spring/mailbox/MaxQuotaConfigurationReader.java
URL: http://svn.apache.org/viewvc/james/server/trunk/container/spring/src/main/java/org/apache/james/container/spring/mailbox/MaxQuotaConfigurationReader.java?rev=1704559&view=auto
==============================================================================
--- james/server/trunk/container/spring/src/main/java/org/apache/james/container/spring/mailbox/MaxQuotaConfigurationReader.java (added)
+++ james/server/trunk/container/spring/src/main/java/org/apache/james/container/spring/mailbox/MaxQuotaConfigurationReader.java Tue Sep 22 10:35:31 2015
@@ -0,0 +1,83 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.container.spring.mailbox;
+
+import org.apache.commons.configuration.ConfigurationException;
+import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.james.lifecycle.api.Configurable;
+import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.quota.MaxQuotaManager;
+import org.apache.james.mailbox.quota.QuotaRootResolver;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class MaxQuotaConfigurationReader implements Configurable {
+
+    private final MaxQuotaManager maxQuotaManager;
+    private final QuotaRootResolver quotaRootResolver;
+
+    public MaxQuotaConfigurationReader(MaxQuotaManager maxQuotaManager, QuotaRootResolver quotaRootResolver) {
+        this.maxQuotaManager = maxQuotaManager;
+        this.quotaRootResolver = quotaRootResolver;
+    }
+
+    @Override
+    public void configure(HierarchicalConfiguration config) throws ConfigurationException {
+        Long defaultMaxMessage = config.configurationAt("maxQuotaManager").getLong("defaultMaxMessage", null);
+        Long defaultMaxStorage = config.configurationAt("maxQuotaManager").getLong("defaultMaxStorage", null);
+        Map<String, Long> maxMessage = parseMaxMessageConfiguration(config, "maxMessage");
+        Map<String, Long> maxStorage = parseMaxMessageConfiguration(config, "maxMessage");
+        try {
+            configureDefaultValues(defaultMaxMessage, defaultMaxStorage);
+            configureQuotaRootSpecificValues(maxMessage, maxStorage);
+        } catch(MailboxException e) {
+            throw new ConfigurationException("Exception caught while configuring max quota manager", e);
+        }
+    }
+
+    private  Map<String, Long> parseMaxMessageConfiguration(HierarchicalConfiguration config, String entry) {
+        List<HierarchicalConfiguration> maxMessageConfiguration = config.configurationAt("maxQuotaManager").configurationsAt(entry);
+        Map<String, Long> result = new HashMap<String, Long>();
+        for (HierarchicalConfiguration conf : maxMessageConfiguration) {
+            result.put(conf.getString("quotaRoot"), conf.getLong("value"));
+        }
+        return result;
+    }
+
+    private void configureDefaultValues(Long defaultMaxMessage, Long defaultMaxStorage) throws MailboxException {
+        if (defaultMaxMessage != null) {
+            maxQuotaManager.setDefaultMaxMessage(defaultMaxMessage);
+        }
+        if (defaultMaxStorage != null) {
+            maxQuotaManager.setDefaultMaxStorage(defaultMaxStorage);
+        }
+    }
+
+    private void configureQuotaRootSpecificValues(Map<String, Long> maxMessage, Map<String, Long> maxStorage) throws MailboxException {
+        for (Map.Entry<String, Long> entry : maxMessage.entrySet()) {
+            maxQuotaManager.setMaxMessage(quotaRootResolver.createQuotaRoot(entry.getKey()), entry.getValue());
+        }
+        for (Map.Entry<String, Long> entry : maxStorage.entrySet()) {
+            maxQuotaManager.setMaxStorage(quotaRootResolver.createQuotaRoot(entry.getKey()), entry.getValue());
+        }
+    }
+}

Modified: james/server/trunk/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
URL: http://svn.apache.org/viewvc/james/server/trunk/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml?rev=1704559&r1=1704558&r2=1704559&view=diff
==============================================================================
--- james/server/trunk/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml (original)
+++ james/server/trunk/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml Tue Sep 22 10:35:31 2015
@@ -122,6 +122,11 @@
 
     <import resource="classpath:META-INF/spring/quota.xml"/>
 
+    <bean id="quota" class="org.apache.james.container.spring.mailbox.MaxQuotaConfigurationReader">
+        <constructor-arg index="0" ref="maxQuotaManager"/>
+        <constructor-arg index="1" ref="quotaRootResolver"/>
+    </bean>
+
     <!-- Mailbox Copier -->
     <bean id="mailboxcopier" class="org.apache.james.mailbox.copier.MailboxCopierImpl"/>
 



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