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&btellier@apache.org</quotaRoot>
+ <value>200000</value>
+ </maxMessage>
+ <maxStorage>
+ <quotaRoot>#private&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