JAMES-1823 quotaUpdater is not invoked more than one time for a message 
addition or deletion


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

Branch: refs/heads/master
Commit: e30634c9db343b8d333ae1e678ee07832341e7d1
Parents: 4f71913
Author: quynhn <qngu...@linagora.com>
Authored: Thu Apr 27 17:27:15 2017 +0700
Committer: benwa <btell...@linagora.com>
Committed: Thu May 4 09:25:52 2017 +0700

----------------------------------------------------------------------
 ...oxConfigurationBeanFactoryPostProcessor.java | 41 ++++++++++++++++----
 1 file changed, 34 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/e30634c9/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/MailboxConfigurationBeanFactoryPostProcessor.java
----------------------------------------------------------------------
diff --git 
a/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/MailboxConfigurationBeanFactoryPostProcessor.java
 
b/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/MailboxConfigurationBeanFactoryPostProcessor.java
index db2625c..516dec4 100644
--- 
a/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/MailboxConfigurationBeanFactoryPostProcessor.java
+++ 
b/server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/MailboxConfigurationBeanFactoryPostProcessor.java
@@ -22,6 +22,8 @@ package 
org.apache.james.container.spring.bean.factorypostprocessor;
 import org.apache.commons.configuration.ConfigurationException;
 import org.apache.commons.configuration.HierarchicalConfiguration;
 import org.apache.james.container.spring.lifecycle.ConfigurationProvider;
+
+import com.google.common.collect.ImmutableSet;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.FatalBeanException;
 import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
@@ -36,11 +38,21 @@ import 
org.springframework.beans.factory.support.BeanDefinitionRegistry;
  * It will register it with the alias mailboxmanager
  */
 public class MailboxConfigurationBeanFactoryPostProcessor implements 
BeanFactoryPostProcessor {
-
     /**
      * @see 
org.springframework.beans.factory.config.BeanFactoryPostProcessor#postProcessBeanFactory
      * 
(org.springframework.beans.factory.config.ConfigurableListableBeanFactory)
      */
+
+    private static final String JPA_MAILBOXMANAGER = "jpa-mailboxmanager";
+    private static final String MEMORY_MAILBOX_MANAGER = 
"memory-mailboxManager";
+    private static final String JCR_MAILBOXMANAGER = "jcr-mailboxmanager";
+    private static final String MAILDIR_MAILBOXMANAGER = 
"maildir-mailboxmanager";
+    private static final String HBASE_MAILBOXMANAGER = "hbase-mailboxmanager";
+    private static final String CASSANDRA_MAILBOXMANAGER = 
"cassandra-mailboxmanager";
+    private static final ImmutableSet<String> MAILBOX_MANAGER_IDS = 
ImmutableSet.of(JPA_MAILBOXMANAGER, MEMORY_MAILBOX_MANAGER,
+            JCR_MAILBOXMANAGER, MAILDIR_MAILBOXMANAGER,
+            HBASE_MAILBOXMANAGER, CASSANDRA_MAILBOXMANAGER);
+
     public void postProcessBeanFactory(ConfigurableListableBeanFactory 
beanFactory) throws BeansException {
         ConfigurationProvider confProvider = 
beanFactory.getBean(ConfigurationProvider.class);
         try {
@@ -54,34 +66,35 @@ public class MailboxConfigurationBeanFactoryPostProcessor 
implements BeanFactory
             String mailboxIdDeserializer = null;
             String mailboxIdFactory = null;
             if (provider.equalsIgnoreCase("jpa")) {
-                mailbox = "jpa-mailboxmanager";
+                mailbox = JPA_MAILBOXMANAGER;
                 subscription = "jpa-subscriptionManager";
                 messageMapperFactory = "jpa-sessionMapperFactory";
                 mailboxIdDeserializer = "jpa-mailbox-id-deserializer";
                 mailboxIdFactory = "jpa-mailboxIdFactory";
             } else if (provider.equalsIgnoreCase("memory")) {
-                mailbox = "memory-mailboxmanager";
+                mailbox = MEMORY_MAILBOX_MANAGER;
                 subscription = "memory-subscriptionManager";
                 messageMapperFactory = "memory-sessionMapperFactory";
                 mailboxIdDeserializer = "memory-mailbox-id-deserializer";
                 mailboxIdFactory = "memory-mailboxIdFactory";
             } else if (provider.equalsIgnoreCase("jcr")) {
-                mailbox = "jcr-mailboxmanager";
+                mailbox = JCR_MAILBOXMANAGER;
                 subscription = "jcr-subscriptionManager";
                 messageMapperFactory = "jcr-sessionMapperFactory";
                 mailboxIdDeserializer = "jcr-mailbox-id-deserializer";
             } else if (provider.equalsIgnoreCase("maildir")) {
-                mailbox = "maildir-mailboxmanager";
+                mailbox = MAILDIR_MAILBOXMANAGER;
                 subscription = "maildir-subscriptionManager";
                 messageMapperFactory = "maildir-sessionMapperFactory";
                 mailboxIdDeserializer = "maildir-mailbox-id-deserializer";
+                mailboxIdFactory = "maildir-mailboxIdFactory";
             } else if (provider.equalsIgnoreCase("hbase")) {
-                mailbox = "hbase-mailboxmanager";
+                mailbox = HBASE_MAILBOXMANAGER;
                 subscription = "hbase-subscriptionManager";
                 messageMapperFactory = "hbase-sessionMapperFactory";
                 mailboxIdDeserializer = "hbase-mailbox-id-deserializer";
             } else if (provider.equalsIgnoreCase("cassandra")) {
-                mailbox = "cassandra-mailboxmanager";
+                mailbox = CASSANDRA_MAILBOXMANAGER;
                 subscription = "cassandra-subscriptionManager";
                 messageMapperFactory = "cassandra-sessionMapperFactory";
                 mailboxIdDeserializer = "cassandra-mailbox-id-deserializer";
@@ -96,10 +109,24 @@ public class MailboxConfigurationBeanFactoryPostProcessor 
implements BeanFactory
             registry.registerAlias(mailboxIdDeserializer, 
"mailbox-id-deserializer");
             registry.registerAlias(mailboxIdFactory, "mailboxIdFactory");
 
+            removeMailboxManagersExceptRightSelectedOne(registry, mailbox);
+
         } catch (ConfigurationException e) {
             throw new FatalBeanException("Unable to config the 
mailboxmanager", e);
         }
 
     }
 
+    private void 
removeMailboxManagersExceptRightSelectedOne(BeanDefinitionRegistry registry, 
String selectedMailboxManager) {
+        for (String mailboxManagerId : MAILBOX_MANAGER_IDS) {
+            if (registeredAndNotSelected(registry, selectedMailboxManager, 
mailboxManagerId)) {
+                registry.removeBeanDefinition(mailboxManagerId);
+            }
+        }
+    }
+
+    private boolean registeredAndNotSelected(BeanDefinitionRegistry registry, 
String selectedMailboxManager, String otherMailboxManager) {
+        return !otherMailboxManager.equals(selectedMailboxManager) && 
registry.containsBeanDefinition(otherMailboxManager);
+    }
+
 }


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

Reply via email to