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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to