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 2019/03/20 11:54:09 UTC

[james-project] 01/33: JAMES-2687 Propose a factory for InMemoryIntegrationResources

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

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit d6c0609d339b2993298ae148f5e86ff60c08da9e
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Mar 15 10:14:49 2019 +0700

    JAMES-2687 Propose a factory for InMemoryIntegrationResources
---
 .../manager/InMemoryIntegrationResources.java      | 116 +++++++++++++++++++++
 1 file changed, 116 insertions(+)

diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
index 054ad97..7afb9d3 100644
--- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
+++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
@@ -19,7 +19,10 @@
 
 package org.apache.james.mailbox.inmemory.manager;
 
+import java.util.Collection;
+import java.util.Optional;
 import java.util.Set;
+import java.util.function.BiFunction;
 
 import org.apache.james.mailbox.MessageIdManager;
 import org.apache.james.mailbox.acl.GroupMembershipResolver;
@@ -63,6 +66,9 @@ import org.apache.james.mailbox.store.search.MessageSearchIndex;
 import org.apache.james.mailbox.store.search.SimpleMessageSearchIndex;
 import org.apache.james.metrics.api.NoopMetricFactory;
 
+import com.github.steveash.guavate.Guavate;
+import com.google.common.collect.ImmutableSet;
+
 public class InMemoryIntegrationResources implements IntegrationResources<StoreMailboxManager> {
 
     public static class Resources {
@@ -107,6 +113,116 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM
         }
     }
 
+    public static class Factory {
+        private Optional<GroupMembershipResolver> groupMembershipResolver;
+        private Optional<Authenticator> authenticator;
+        private Optional<Authorizator> authorizator;
+        private Optional<EventBus> eventBus;
+        private Optional<Integer> limitAnnotationCount;
+        private Optional<Integer> limitAnnotationSize;
+        private ImmutableSet.Builder<BiFunction<SessionProvider, InMemoryMailboxSessionMapperFactory, PreDeletionHook>> preDeletionHooksInstanciators;
+
+        public Factory() {
+            this.groupMembershipResolver = Optional.empty();
+            this.authenticator = Optional.empty();
+            this.authorizator = Optional.empty();
+            this.eventBus = Optional.empty();
+            this.limitAnnotationCount = Optional.empty();
+            this.limitAnnotationSize = Optional.empty();
+            this.preDeletionHooksInstanciators = ImmutableSet.builder();
+        }
+
+        public Factory withAuthenticator(Authenticator authenticator) {
+            this.authenticator = Optional.of(authenticator);
+            return this;
+        }
+
+        public Factory withAuthorizator(Authorizator authorizator) {
+            this.authorizator = Optional.of(authorizator);
+            return this;
+        }
+
+        public Factory withEventBus(EventBus eventBus) {
+            this.eventBus = Optional.of(eventBus);
+            return this;
+        }
+
+        public Factory withGroupmembershipResolver(GroupMembershipResolver groupmembershipResolver) {
+            this.groupMembershipResolver = Optional.of(groupmembershipResolver);
+            return this;
+        }
+
+        public Factory withAnnotationLimits(int limitAnnotationCount, int limitAnnotationSize) {
+            this.limitAnnotationCount = Optional.of(limitAnnotationCount);
+            this.limitAnnotationSize = Optional.of(limitAnnotationSize);
+            return this;
+        }
+
+        public Factory withPreDeletionHooks(Collection<PreDeletionHook> preDeletionHooks) {
+            this.preDeletionHooksInstanciators.addAll(preDeletionHooks.stream()
+                .map(this::toInstanciator)
+                .collect(Guavate.toImmutableList()));
+            return this;
+        }
+
+        public Factory withPreDeletionHook(BiFunction<SessionProvider, InMemoryMailboxSessionMapperFactory, PreDeletionHook> preDeletionHook) {
+            this.preDeletionHooksInstanciators.add(preDeletionHook);
+            return this;
+        }
+
+        private BiFunction<SessionProvider, InMemoryMailboxSessionMapperFactory, PreDeletionHook> toInstanciator(PreDeletionHook preDeletionHook) {
+            return (a, b) -> preDeletionHook;
+        }
+
+        public Resources create() {
+            InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new InMemoryMailboxSessionMapperFactory();
+            EventBus eventBus = this.eventBus.orElseGet(() -> new InVMEventBus(new InVmEventDelivery(new NoopMetricFactory())));
+            GroupMembershipResolver groupMembershipResolver = this.groupMembershipResolver.orElse(new SimpleGroupMembershipResolver());
+            StoreRightManager storeRightManager = new StoreRightManager(mailboxSessionMapperFactory, new UnionMailboxACLResolver(), groupMembershipResolver, eventBus);
+            StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory,
+                storeRightManager, limitAnnotationCount.orElse(MailboxConstants.DEFAULT_LIMIT_ANNOTATIONS_ON_MAILBOX),
+                limitAnnotationSize.orElse(MailboxConstants.DEFAULT_LIMIT_ANNOTATION_SIZE));
+
+            SessionProvider sessionProvider = new SessionProvider(
+                authenticator.orElse(new FakeAuthenticator()),
+                authorizator.orElse(FakeAuthorizator.defaultReject()));
+
+            InMemoryPerUserMaxQuotaManager maxQuotaManager = new InMemoryPerUserMaxQuotaManager();
+            DefaultUserQuotaRootResolver quotaRootResolver = new DefaultUserQuotaRootResolver(sessionProvider, mailboxSessionMapperFactory);
+            InMemoryCurrentQuotaManager currentQuotaManager = new InMemoryCurrentQuotaManager(new CurrentQuotaCalculator(mailboxSessionMapperFactory, quotaRootResolver), sessionProvider);
+            StoreQuotaManager quotaManager = new StoreQuotaManager(currentQuotaManager, maxQuotaManager);
+            ListeningCurrentQuotaUpdater listeningCurrentQuotaUpdater = new ListeningCurrentQuotaUpdater(currentQuotaManager, quotaRootResolver, eventBus, quotaManager);
+            QuotaComponents quotaComponents = new QuotaComponents(maxQuotaManager, quotaManager, quotaRootResolver, listeningCurrentQuotaUpdater);
+
+            MessageSearchIndex index = new SimpleMessageSearchIndex(mailboxSessionMapperFactory, mailboxSessionMapperFactory, new DefaultTextExtractor());
+
+            InMemoryMailboxManager manager = new InMemoryMailboxManager(
+                mailboxSessionMapperFactory,
+                sessionProvider,
+                new JVMMailboxPathLocker(),
+                new MessageParser(),
+                new InMemoryMessageId.Factory(),
+                eventBus,
+                annotationManager,
+                storeRightManager,
+                quotaComponents,
+                index,
+                createHooks(sessionProvider, mailboxSessionMapperFactory));
+
+            eventBus.register(listeningCurrentQuotaUpdater);
+            eventBus.register(new MailboxAnnotationListener(mailboxSessionMapperFactory, sessionProvider));
+
+            return new Resources(manager, storeRightManager, new InMemoryMessageId.Factory(), currentQuotaManager, quotaRootResolver, maxQuotaManager);
+        }
+
+        PreDeletionHooks createHooks(SessionProvider sessionProvider, InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory) {
+            return new PreDeletionHooks(preDeletionHooksInstanciators.build()
+                .stream()
+                .map(biFunction -> biFunction.apply(sessionProvider, mailboxSessionMapperFactory))
+                .collect(Guavate.toImmutableSet()));
+        }
+    }
+
     private SimpleGroupMembershipResolver groupMembershipResolver;
 
     @Override


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