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 950616869972fbb9ac86e9fd5a924dd510c01e43 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Thu Mar 7 11:18:38 2019 +0700 MAILBOX-379 Factorize PreDeletionHook execution Not only does it reduce code duplication but also does it ease MDC context setting and metric recording. --- .../mailbox/cassandra/CassandraMailboxManager.java | 5 +- .../mailbox/cassandra/CassandraMessageManager.java | 5 +- .../CassandraCombinationManagerTestSystem.java | 6 +- .../cassandra/CassandraMailboxManagerProvider.java | 6 +- .../CassandraMailboxManagerStressTest.java | 3 +- .../cassandra/CassandraMailboxManagerTest.java | 3 +- .../CassandraMessageIdManagerTestSystem.java | 5 +- .../cassandra/CassandraTestSystemFixture.java | 5 +- .../CassandraMailboxManagerAttachmentTest.java | 6 +- .../ElasticSearchIntegrationTest.java | 6 +- .../james/mailbox/jpa/JPAMailboxManager.java | 4 +- .../james/mailbox/jpa/JPAMessageManager.java | 4 +- .../search/LuceneMessageSearchIndexTest.java | 6 +- .../resources/META-INF/spring/mailbox-maildir.xml | 2 +- .../maildir/MaildirMailboxManagerProvider.java | 3 +- .../mailbox/inmemory/InMemoryMailboxManager.java | 5 +- .../mailbox/inmemory/InMemoryMessageManager.java | 5 +- .../resources/META-INF/spring/mailbox-memory.xml | 2 +- .../mail/InMemoryMailboxManagerAttachmentTest.java | 6 +- .../manager/InMemoryIntegrationResources.java | 5 +- .../InMemoryMessageIdManagerSideEffectTest.java | 5 +- .../store/search/SimpleMessageSearchIndexTest.java | 4 +- .../resources/META-INF/spring/spring-mailbox.xml | 4 + .../james/mailbox/store/PreDeletionHooks.java} | 50 ++++--- .../james/mailbox/store/StoreMailboxManager.java | 16 +-- .../james/mailbox/store/StoreMessageIdManager.java | 8 +- .../james/mailbox/store/StoreMessageManager.java | 11 +- .../james/mailbox/store/PreDeletionHooksTest.java | 156 +++++++++++++++++++++ .../mailbox/store/StoreMailboxManagerTest.java | 3 +- .../tools/indexer/CassandraReIndexerImplTest.java | 4 +- .../cassandra/host/CassandraHostSystem.java | 4 +- .../host/ElasticSearchHostSystem.java | 4 +- .../lucenesearch/host/LuceneSearchHostSystem.java | 3 +- .../maildir/host/MaildirHostSystem.java | 3 +- 34 files changed, 262 insertions(+), 105 deletions(-) diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java index e1b4442..9cda458 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java @@ -20,7 +20,6 @@ package org.apache.james.mailbox.cassandra; import java.util.EnumSet; -import java.util.Set; import javax.inject.Inject; @@ -28,11 +27,11 @@ import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxPathLocker; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.events.EventBus; -import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.model.MailboxACL; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.store.MailboxManagerConfiguration; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreMailboxManager; @@ -67,7 +66,7 @@ public class CassandraMailboxManager extends StoreMailboxManager { StoreMailboxAnnotationManager annotationManager, StoreRightManager storeRightManager, QuotaComponents quotaComponents, MessageSearchIndex index, MailboxManagerConfiguration configuration, - Set<PreDeletionHook> preDeletionHooks) { + PreDeletionHooks preDeletionHooks) { super(mapperFactory, sessionProvider, locker, diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java index 29114a4..45c620a 100644 --- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java +++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java @@ -20,7 +20,6 @@ package org.apache.james.mailbox.cassandra; import java.util.List; -import java.util.Set; import javax.mail.Flags; @@ -28,12 +27,12 @@ import org.apache.james.mailbox.MailboxPathLocker; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.events.EventBus; import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.model.MessageAttachment; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; import org.apache.james.mailbox.store.BatchSizes; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.StoreMessageManager; import org.apache.james.mailbox.store.StoreRightManager; import org.apache.james.mailbox.store.mail.model.Mailbox; @@ -56,7 +55,7 @@ public class CassandraMessageManager extends StoreMessageManager { QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes, StoreRightManager storeRightManager, - Set<PreDeletionHook> preDeletionHooks) { + PreDeletionHooks preDeletionHooks) { super(CassandraMailboxManager.MESSAGE_CAPABILITIES, mapperFactory, index, eventBus, locker, mailbox, quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes, storeRightManager, preDeletionHooks); diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java index 31e3c87..d2cf147 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java @@ -26,10 +26,10 @@ import org.apache.james.mailbox.MessageIdManager; import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.events.EventBus; import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.store.CombinationManagerTestSystem; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.mail.model.Mailbox; public class CassandraCombinationManagerTestSystem extends CombinationManagerTestSystem { @@ -40,7 +40,7 @@ public class CassandraCombinationManagerTestSystem extends CombinationManagerTes public static CombinationManagerTestSystem createTestingData(CassandraCluster cassandra, QuotaManager quotaManager, EventBus eventBus) { CassandraMailboxSessionMapperFactory mapperFactory = CassandraTestSystemFixture.createMapperFactory(cassandra); - return new CassandraCombinationManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, eventBus, PreDeletionHook.NO_PRE_DELETION_HOOK), + return new CassandraCombinationManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, eventBus, PreDeletionHooks.NO_PRE_DELETION_HOOK), mapperFactory, CassandraTestSystemFixture.createMailboxManager(mapperFactory)); } @@ -48,7 +48,7 @@ public class CassandraCombinationManagerTestSystem extends CombinationManagerTes private CassandraCombinationManagerTestSystem(MessageIdManager messageIdManager, CassandraMailboxSessionMapperFactory mapperFactory, MailboxManager cassandraMailboxManager) { super(cassandraMailboxManager, messageIdManager); this.mapperFactory = mapperFactory; - this.cassandraMailboxManager = (CassandraMailboxManager)cassandraMailboxManager; + this.cassandraMailboxManager = (CassandraMailboxManager) cassandraMailboxManager; } @Override diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java index cdfe721..79b703d 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java @@ -19,8 +19,6 @@ package org.apache.james.mailbox.cassandra; -import java.util.Set; - import org.apache.james.backends.cassandra.init.CassandraTypesProvider; import org.apache.james.mailbox.acl.GroupMembershipResolver; import org.apache.james.mailbox.acl.MailboxACLResolver; @@ -34,12 +32,12 @@ import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaDao; import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager; import org.apache.james.mailbox.events.InVMEventBus; import org.apache.james.mailbox.events.delivery.InVmEventDelivery; -import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.quota.QuotaRootResolver; import org.apache.james.mailbox.store.Authenticator; import org.apache.james.mailbox.store.Authorizator; import org.apache.james.mailbox.store.MailboxManagerConfiguration; import org.apache.james.mailbox.store.NoMailboxPathLocker; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreRightManager; @@ -61,7 +59,7 @@ public class CassandraMailboxManagerProvider { private static final int LIMIT_ANNOTATION_SIZE = 30; public static CassandraMailboxManager provideMailboxManager(Session session, CassandraTypesProvider cassandraTypesProvider, - Set<PreDeletionHook> preDeletionHooks) { + PreDeletionHooks preDeletionHooks) { CassandraMessageId.Factory messageIdFactory = new CassandraMessageId.Factory(); CassandraMailboxSessionMapperFactory mapperFactory = TestCassandraMailboxSessionMapperFactory.forTests( diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java index 4569fbd..fefc07a 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java @@ -25,6 +25,7 @@ import org.apache.james.mailbox.MailboxManagerStressTest; import org.apache.james.mailbox.cassandra.mail.MailboxAggregateModule; import org.apache.james.mailbox.events.EventBus; import org.apache.james.mailbox.extension.PreDeletionHook; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -49,7 +50,7 @@ public class CassandraMailboxManagerStressTest extends MailboxManagerStressTest< @Override protected CassandraMailboxManager provideManager() { - return CassandraMailboxManagerProvider.provideMailboxManager(cassandra.getConf(), cassandra.getTypesProvider(), PreDeletionHook.NO_PRE_DELETION_HOOK); + return CassandraMailboxManagerProvider.provideMailboxManager(cassandra.getConf(), cassandra.getTypesProvider(), PreDeletionHooks.NO_PRE_DELETION_HOOK); } @Override diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java index cb24d0e..bb9e6c9 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java @@ -22,6 +22,7 @@ import org.apache.james.backends.cassandra.CassandraClusterExtension; import org.apache.james.mailbox.MailboxManagerTest; import org.apache.james.mailbox.cassandra.mail.MailboxAggregateModule; import org.apache.james.mailbox.events.EventBus; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.junit.jupiter.api.extension.RegisterExtension; public class CassandraMailboxManagerTest extends MailboxManagerTest<CassandraMailboxManager> { @@ -33,7 +34,7 @@ public class CassandraMailboxManagerTest extends MailboxManagerTest<CassandraMai return CassandraMailboxManagerProvider.provideMailboxManager( cassandra.getCassandraCluster().getConf(), cassandra.getCassandraCluster().getTypesProvider(), - preDeletionHooks()); + new PreDeletionHooks(preDeletionHooks())); } @Override diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java index c0dd20d..9a34f8c 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java @@ -28,6 +28,7 @@ import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.quota.CurrentQuotaManager; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.store.MessageIdManagerTestSystem; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.quota.ListeningCurrentQuotaUpdater; import org.apache.james.mailbox.store.quota.StoreCurrentQuotaManager; @@ -37,7 +38,7 @@ class CassandraMessageIdManagerTestSystem { Set<PreDeletionHook> preDeletionHooks) { CassandraMailboxSessionMapperFactory mapperFactory = CassandraTestSystemFixture.createMapperFactory(cassandra); - return new MessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, eventBus, preDeletionHooks), + return new MessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, eventBus, new PreDeletionHooks(preDeletionHooks)), new CassandraMessageId.Factory(), mapperFactory, CassandraTestSystemFixture.createMailboxManager(mapperFactory)) { @@ -53,7 +54,7 @@ class CassandraMessageIdManagerTestSystem { mailboxManager.getQuotaComponents().getQuotaRootResolver(), mailboxManager.getEventBus(), quotaManager); mailboxManager.getEventBus().register(listeningCurrentQuotaUpdater); return new MessageIdManagerTestSystem(CassandraTestSystemFixture.createMessageIdManager(mapperFactory, quotaManager, mailboxManager.getEventBus(), - PreDeletionHook.NO_PRE_DELETION_HOOK), + PreDeletionHooks.NO_PRE_DELETION_HOOK), new CassandraMessageId.Factory(), mapperFactory, mailboxManager); diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java index aafe425..403d780 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java @@ -43,6 +43,7 @@ import org.apache.james.mailbox.store.Authenticator; import org.apache.james.mailbox.store.Authorizator; import org.apache.james.mailbox.store.MailboxManagerConfiguration; import org.apache.james.mailbox.store.NoMailboxPathLocker; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreMessageIdManager; @@ -78,7 +79,7 @@ class CassandraTestSystemFixture { MessageSearchIndex index = new SimpleMessageSearchIndex(mapperFactory, mapperFactory, new DefaultTextExtractor()); CassandraMailboxManager cassandraMailboxManager = new CassandraMailboxManager(mapperFactory, sessionProvider, new NoMailboxPathLocker(), new MessageParser(), new CassandraMessageId.Factory(), - eventBus, annotationManager, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT, PreDeletionHook.NO_PRE_DELETION_HOOK); + eventBus, annotationManager, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT, PreDeletionHooks.NO_PRE_DELETION_HOOK); eventBus.register(new MailboxAnnotationListener(mapperFactory, sessionProvider)); @@ -86,7 +87,7 @@ class CassandraTestSystemFixture { } static StoreMessageIdManager createMessageIdManager(CassandraMailboxSessionMapperFactory mapperFactory, QuotaManager quotaManager, EventBus eventBus, - Set<PreDeletionHook> preDeletionHooks) { + PreDeletionHooks preDeletionHooks) { CassandraMailboxManager mailboxManager = createMailboxManager(mapperFactory); return new StoreMessageIdManager( mailboxManager, diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java index 23c9bb0..8055312 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java +++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java @@ -33,13 +33,13 @@ import org.apache.james.mailbox.cassandra.TestCassandraMailboxSessionMapperFacto import org.apache.james.mailbox.cassandra.ids.CassandraMessageId; import org.apache.james.mailbox.events.InVMEventBus; import org.apache.james.mailbox.events.delivery.InVmEventDelivery; -import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.store.AbstractMailboxManagerAttachmentTest; import org.apache.james.mailbox.store.Authenticator; import org.apache.james.mailbox.store.Authorizator; import org.apache.james.mailbox.store.MailboxManagerConfiguration; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; import org.apache.james.mailbox.store.NoMailboxPathLocker; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreRightManager; @@ -105,13 +105,13 @@ public class CassandraMailboxManagerAttachmentTest extends AbstractMailboxManage mailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(), new MessageParser(), messageIdFactory, eventBus, annotationManager, storeRightManager, quotaComponents, - index, MailboxManagerConfiguration.DEFAULT, PreDeletionHook.NO_PRE_DELETION_HOOK); + index, MailboxManagerConfiguration.DEFAULT, PreDeletionHooks.NO_PRE_DELETION_HOOK); MessageParser failingMessageParser = mock(MessageParser.class); when(failingMessageParser.retrieveAttachments(any())) .thenThrow(new RuntimeException("Message parser set to fail")); parseFailingMailboxManager = new CassandraMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(), failingMessageParser, messageIdFactory, - eventBus, annotationManager, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT, PreDeletionHook.NO_PRE_DELETION_HOOK); + eventBus, annotationManager, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT, PreDeletionHooks.NO_PRE_DELETION_HOOK); } @Override diff --git a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java index 0d1037a..ac1b448 100644 --- a/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java +++ b/mailbox/elasticsearch/src/test/java/org/apache/james/mailbox/elasticsearch/ElasticSearchIntegrationTest.java @@ -42,7 +42,6 @@ import org.apache.james.mailbox.elasticsearch.query.QueryConverter; import org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher; import org.apache.james.mailbox.events.InVMEventBus; import org.apache.james.mailbox.events.delivery.InVmEventDelivery; -import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.inmemory.InMemoryId; import org.apache.james.mailbox.inmemory.InMemoryMailboxManager; import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory; @@ -54,6 +53,7 @@ import org.apache.james.mailbox.model.SearchQuery; import org.apache.james.mailbox.store.FakeAuthenticator; import org.apache.james.mailbox.store.FakeAuthorizator; import org.apache.james.mailbox.store.JVMMailboxPathLocker; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreMessageIdManager; @@ -153,7 +153,7 @@ public class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest storeRightManager, quotaComponents, elasticSearchListeningMessageSearchIndex, - PreDeletionHook.NO_PRE_DELETION_HOOK); + PreDeletionHooks.NO_PRE_DELETION_HOOK); messageIdManager = new StoreMessageIdManager( storeMailboxManager, @@ -162,7 +162,7 @@ public class ElasticSearchIntegrationTest extends AbstractMessageSearchIndexTest storeMailboxManager.getMessageIdFactory(), quotaComponents.getQuotaManager(), quotaComponents.getQuotaRootResolver(), - PreDeletionHook.NO_PRE_DELETION_HOOK); + PreDeletionHooks.NO_PRE_DELETION_HOOK); eventBus.register(elasticSearchListeningMessageSearchIndex); this.messageSearchIndex = elasticSearchListeningMessageSearchIndex; diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java index b0240d5..68c7f33 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java @@ -24,12 +24,12 @@ import org.apache.james.mailbox.MailboxPathLocker; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.events.EventBus; import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.jpa.mail.JPAMailboxMapper; import org.apache.james.mailbox.jpa.mail.model.JPAMailbox; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.store.MailboxManagerConfiguration; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreMailboxManager; @@ -63,7 +63,7 @@ public abstract class JPAMailboxManager extends StoreMailboxManager { super(mailboxSessionMapperFactory, sessionProvider, locker, messageParser, messageIdFactory, annotationManager, eventBus, storeRightManager, quotaComponents, - index, MailboxManagerConfiguration.DEFAULT, PreDeletionHook.NO_PRE_DELETION_HOOK); + index, MailboxManagerConfiguration.DEFAULT, PreDeletionHooks.NO_PRE_DELETION_HOOK); } @Override diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java index 2ee3e8a..741920f 100644 --- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java +++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java @@ -28,7 +28,6 @@ import org.apache.james.mailbox.MailboxPathLocker; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.events.EventBus; import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.jpa.mail.model.JPAMailbox; import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMailboxMessage; import org.apache.james.mailbox.model.MessageAttachment; @@ -37,6 +36,7 @@ import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; import org.apache.james.mailbox.store.BatchSizes; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.StoreMessageManager; import org.apache.james.mailbox.store.StoreRightManager; import org.apache.james.mailbox.store.mail.model.Mailbox; @@ -63,7 +63,7 @@ public class JPAMessageManager extends StoreMessageManager { StoreRightManager storeRightManager) { super(JPAMailboxManager.DEFAULT_NO_MESSAGE_CAPABILITIES, mapperFactory, index, eventBus, locker, mailbox, - quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes, storeRightManager, PreDeletionHook.NO_PRE_DELETION_HOOK); + quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes, storeRightManager, PreDeletionHooks.NO_PRE_DELETION_HOOK); } @Override diff --git a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java index 955257f..e21b91a 100644 --- a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java +++ b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java @@ -24,7 +24,6 @@ import org.apache.james.mailbox.acl.UnionMailboxACLResolver; import org.apache.james.mailbox.events.InVMEventBus; import org.apache.james.mailbox.events.delivery.InVmEventDelivery; import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.inmemory.InMemoryId; import org.apache.james.mailbox.inmemory.InMemoryMailboxManager; import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory; @@ -33,6 +32,7 @@ import org.apache.james.mailbox.manager.ManagerTestResources; import org.apache.james.mailbox.store.FakeAuthenticator; import org.apache.james.mailbox.store.FakeAuthorizator; import org.apache.james.mailbox.store.JVMMailboxPathLocker; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreMessageIdManager; @@ -79,7 +79,7 @@ public class LuceneMessageSearchIndexTest extends AbstractMessageSearchIndexTest storeRightManager, quotaComponents, luceneMessageSearchIndex, - PreDeletionHook.NO_PRE_DELETION_HOOK); + PreDeletionHooks.NO_PRE_DELETION_HOOK); messageIdManager = new StoreMessageIdManager( storeMailboxManager, @@ -88,7 +88,7 @@ public class LuceneMessageSearchIndexTest extends AbstractMessageSearchIndexTest storeMailboxManager.getMessageIdFactory(), quotaComponents.getQuotaManager(), quotaComponents.getQuotaRootResolver(), - PreDeletionHook.NO_PRE_DELETION_HOOK); + PreDeletionHooks.NO_PRE_DELETION_HOOK); eventBus.register(luceneMessageSearchIndex); this.messageSearchIndex = luceneMessageSearchIndex; diff --git a/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml b/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml index 3c7f7e9..6ebdc31 100644 --- a/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml +++ b/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml @@ -46,7 +46,7 @@ <constructor-arg index="8" ref="quotaComponents" /> <constructor-arg index="9" ref="indexer" /> <constructor-arg index="10" ref="no-mailbox-configuration" /> - <constructor-arg index="11"><set/></constructor-arg> + <constructor-arg index="11" ref="preDeletionHooks" /> </bean> <bean id ="no-mailbox-configuration" class="org.apache.james.mailbox.store.MailboxManagerConfiguration.NoMailboxConfiguration"/> diff --git a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java index 4604f53..c63ae42 100644 --- a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java +++ b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerProvider.java @@ -34,6 +34,7 @@ import org.apache.james.mailbox.store.Authenticator; import org.apache.james.mailbox.store.Authorizator; import org.apache.james.mailbox.store.JVMMailboxPathLocker; import org.apache.james.mailbox.store.MailboxManagerConfiguration; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreMailboxManager; @@ -73,7 +74,7 @@ public class MaildirMailboxManagerProvider { StoreMailboxManager manager = new StoreMailboxManager(mf, sessionProvider, new JVMMailboxPathLocker(), messageParser, new DefaultMessageId.Factory(), annotationManager, eventBus, storeRightManager, - quotaComponents, index, MailboxManagerConfiguration.DEFAULT, PreDeletionHook.NO_PRE_DELETION_HOOK); + quotaComponents, index, MailboxManagerConfiguration.DEFAULT, PreDeletionHooks.NO_PRE_DELETION_HOOK); return manager; } diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java index 66c261e..59d8228 100644 --- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java +++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java @@ -20,17 +20,16 @@ package org.apache.james.mailbox.inmemory; import java.util.EnumSet; -import java.util.Set; import javax.inject.Inject; import org.apache.james.mailbox.MailboxPathLocker; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.events.EventBus; -import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.store.MailboxManagerConfiguration; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreMailboxManager; @@ -59,7 +58,7 @@ public class InMemoryMailboxManager extends StoreMailboxManager { StoreRightManager storeRightManager, QuotaComponents quotaComponents, MessageSearchIndex searchIndex, - Set<PreDeletionHook> preDeletionHooks) { + PreDeletionHooks preDeletionHooks) { super(mailboxSessionMapperFactory, sessionProvider, locker, messageParser, messageIdFactory, annotationManager, eventBus, storeRightManager, quotaComponents, searchIndex, MailboxManagerConfiguration.DEFAULT, preDeletionHooks); diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java index 9dcb5ca..8a71fb0 100644 --- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java +++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java @@ -1,7 +1,6 @@ package org.apache.james.mailbox.inmemory; import java.util.List; -import java.util.Set; import javax.mail.Flags; @@ -9,13 +8,13 @@ import org.apache.james.mailbox.MailboxPathLocker; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.events.EventBus; import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.model.MessageAttachment; import org.apache.james.mailbox.model.MessageId; import org.apache.james.mailbox.quota.QuotaManager; import org.apache.james.mailbox.quota.QuotaRootResolver; import org.apache.james.mailbox.store.BatchSizes; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.StoreMessageManager; import org.apache.james.mailbox.store.StoreRightManager; import org.apache.james.mailbox.store.mail.model.Mailbox; @@ -40,7 +39,7 @@ public class InMemoryMessageManager extends StoreMessageManager { MessageId.Factory messageIdFactory, BatchSizes batchSizes, StoreRightManager storeRightManager, - Set<PreDeletionHook> preDeletionHooks) { + PreDeletionHooks preDeletionHooks) { super(InMemoryMailboxManager.MESSAGE_CAPABILITIES, mapperFactory, index, eventBus, locker, mailbox, quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes, storeRightManager, preDeletionHooks); diff --git a/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml b/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml index 39aeaa6..2d31f25 100644 --- a/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml +++ b/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml @@ -42,7 +42,7 @@ <constructor-arg index="7" ref="storeRightManager" /> <constructor-arg index="8" ref="quotaComponents" /> <constructor-arg index="9" ref="indexer" /> - <constructor-arg index="10"><set/></constructor-arg> + <constructor-arg index="10" ref="preDeletionHooks" /> </bean> <bean id ="memory-subscriptionManager" class="org.apache.james.mailbox.store.StoreSubscriptionManager"> diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java index ebf76fa..9be0b03 100644 --- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java +++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java @@ -30,7 +30,6 @@ import org.apache.james.mailbox.acl.GroupMembershipResolver; import org.apache.james.mailbox.acl.UnionMailboxACLResolver; import org.apache.james.mailbox.events.InVMEventBus; import org.apache.james.mailbox.events.delivery.InVmEventDelivery; -import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.inmemory.InMemoryMailboxManager; import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory; import org.apache.james.mailbox.inmemory.InMemoryMessageId; @@ -40,6 +39,7 @@ import org.apache.james.mailbox.store.Authenticator; import org.apache.james.mailbox.store.Authorizator; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; import org.apache.james.mailbox.store.NoMailboxPathLocker; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreRightManager; @@ -77,12 +77,12 @@ public class InMemoryMailboxManagerAttachmentTest extends AbstractMailboxManager StoreMailboxAnnotationManager annotationManager = new StoreMailboxAnnotationManager(mailboxSessionMapperFactory, storeRightManager); mailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(), - new MessageParser(), messageIdFactory, eventBus, annotationManager, storeRightManager, quotaComponents, index, PreDeletionHook.NO_PRE_DELETION_HOOK); + new MessageParser(), messageIdFactory, eventBus, annotationManager, storeRightManager, quotaComponents, index, PreDeletionHooks.NO_PRE_DELETION_HOOK); MessageParser failingMessageParser = mock(MessageParser.class); when(failingMessageParser.retrieveAttachments(any(InputStream.class))) .thenThrow(new RuntimeException("Message parser set to fail")); parseFailingMailboxManager = new InMemoryMailboxManager(mailboxSessionMapperFactory, sessionProvider, new NoMailboxPathLocker(), - failingMessageParser, messageIdFactory, eventBus, annotationManager, storeRightManager, quotaComponents, index, PreDeletionHook.NO_PRE_DELETION_HOOK); + failingMessageParser, messageIdFactory, eventBus, annotationManager, storeRightManager, quotaComponents, index, PreDeletionHooks.NO_PRE_DELETION_HOOK); super.setUp(); } 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 369fe09..054ad97 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 @@ -45,6 +45,7 @@ import org.apache.james.mailbox.store.Authorizator; import org.apache.james.mailbox.store.FakeAuthenticator; import org.apache.james.mailbox.store.FakeAuthorizator; import org.apache.james.mailbox.store.JVMMailboxPathLocker; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreMailboxManager; @@ -192,7 +193,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM storeRightManager, quotaComponents, index, - preDeletionHooks); + new PreDeletionHooks(preDeletionHooks)); eventBus.register(listeningCurrentQuotaUpdater); eventBus.register(new MailboxAnnotationListener(mailboxSessionMapperFactory, sessionProvider)); @@ -227,7 +228,7 @@ public class InMemoryIntegrationResources implements IntegrationResources<StoreM storeRightManager, quotaComponents, index, - preDeletionHooks); + new PreDeletionHooks(preDeletionHooks)); eventBus.register(listeningCurrentQuotaUpdater); eventBus.register(new MailboxAnnotationListener(mailboxSessionMapperFactory, sessionProvider)); diff --git a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java index 0f84e06..2b32d9d 100644 --- a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java +++ b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java @@ -35,6 +35,7 @@ import org.apache.james.mailbox.store.FakeAuthenticator; import org.apache.james.mailbox.store.FakeAuthorizator; import org.apache.james.mailbox.store.JVMMailboxPathLocker; import org.apache.james.mailbox.store.MessageIdManagerTestSystem; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreMessageIdManager; @@ -84,7 +85,7 @@ public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdMan rightManager, quotaComponents, index, - preDeletionHooks); + new PreDeletionHooks(preDeletionHooks)); StoreMessageIdManager messageIdManager = new StoreMessageIdManager( mailboxManager, mapperFactory, @@ -92,7 +93,7 @@ public class InMemoryMessageIdManagerSideEffectTest extends AbstractMessageIdMan messageIdFactory, quotaManager, quotaComponents.getQuotaRootResolver(), - preDeletionHooks); + new PreDeletionHooks(preDeletionHooks)); return new MessageIdManagerTestSystem(messageIdManager, messageIdFactory, mapperFactory, mailboxManager); } } diff --git a/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java b/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java index 8b423d6..021cf82 100644 --- a/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java +++ b/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java @@ -21,8 +21,8 @@ package org.apache.james.mailbox.store.search; import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver; import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.inmemory.manager.InMemoryIntegrationResources; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.StoreMessageIdManager; import org.junit.Ignore; @@ -49,7 +49,7 @@ public class SimpleMessageSearchIndexTest extends AbstractMessageSearchIndexTest storeMailboxManager.getMessageIdFactory(), storeMailboxManager.getQuotaComponents().getQuotaManager(), storeMailboxManager.getQuotaComponents().getQuotaRootResolver(), - PreDeletionHook.NO_PRE_DELETION_HOOK); + PreDeletionHooks.NO_PRE_DELETION_HOOK); } /** diff --git a/mailbox/spring/src/main/resources/META-INF/spring/spring-mailbox.xml b/mailbox/spring/src/main/resources/META-INF/spring/spring-mailbox.xml index e9c5cf7..227edee 100644 --- a/mailbox/spring/src/main/resources/META-INF/spring/spring-mailbox.xml +++ b/mailbox/spring/src/main/resources/META-INF/spring/spring-mailbox.xml @@ -80,4 +80,8 @@ <constructor-arg index="5" ref="messageMapperFactory" /> </bean> + + <bean id ="preDeletionHooks" class="org.apache.james.mailbox.store.PreDeletionHooks"> + <constructor-arg index="0"><set/></constructor-arg> + </bean> </beans> diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/PreDeletionHooks.java similarity index 54% copy from mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java copy to mailbox/store/src/main/java/org/apache/james/mailbox/store/PreDeletionHooks.java index cb24d0e..849079d 100644 --- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/PreDeletionHooks.java @@ -16,28 +16,36 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ -package org.apache.james.mailbox.cassandra; - -import org.apache.james.backends.cassandra.CassandraClusterExtension; -import org.apache.james.mailbox.MailboxManagerTest; -import org.apache.james.mailbox.cassandra.mail.MailboxAggregateModule; -import org.apache.james.mailbox.events.EventBus; -import org.junit.jupiter.api.extension.RegisterExtension; - -public class CassandraMailboxManagerTest extends MailboxManagerTest<CassandraMailboxManager> { - @RegisterExtension - static CassandraClusterExtension cassandra = new CassandraClusterExtension(MailboxAggregateModule.MODULE_WITH_QUOTA); - - @Override - protected CassandraMailboxManager provideMailboxManager() { - return CassandraMailboxManagerProvider.provideMailboxManager( - cassandra.getCassandraCluster().getConf(), - cassandra.getCassandraCluster().getTypesProvider(), - preDeletionHooks()); + +package org.apache.james.mailbox.store; + +import java.util.Set; + +import javax.inject.Inject; + +import org.apache.james.mailbox.extension.PreDeletionHook; + +import com.google.common.collect.ImmutableSet; + +import reactor.core.publisher.Flux; +import reactor.core.publisher.Mono; +import reactor.core.scheduler.Schedulers; + +public class PreDeletionHooks { + public static final PreDeletionHooks NO_PRE_DELETION_HOOK = new PreDeletionHooks(ImmutableSet.of()); + + private final Set<PreDeletionHook> hooks; + + @Inject + public PreDeletionHooks(Set<PreDeletionHook> hooks) { + this.hooks = hooks; } - @Override - protected EventBus retrieveEventBus(CassandraMailboxManager mailboxManager) { - return mailboxManager.getEventBus(); + public Mono<Void> runHooks(PreDeletionHook.DeleteOperation deleteOperation) { + return Flux.fromIterable(hooks) + .publishOn(Schedulers.elastic()) + .limitRate(1) + .flatMap(hook -> hook.notifyDelete(deleteOperation)) + .then(); } } diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java index a0d795d..16153eb 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java @@ -88,9 +88,6 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; -import reactor.core.publisher.Flux; -import reactor.core.scheduler.Schedulers; - /** * This base class of an {@link MailboxManager} implementation provides a high-level api for writing your own * {@link MailboxManager} implementation. If you plan to write your own {@link MailboxManager} its most times so easiest @@ -117,7 +114,7 @@ public class StoreMailboxManager implements MailboxManager { private final QuotaRootResolver quotaRootResolver; private final QuotaComponents quotaComponents; private final MessageSearchIndex index; - private final Set<PreDeletionHook> preDeletionHooks; + private final PreDeletionHooks preDeletionHooks; protected final MailboxManagerConfiguration configuration; @Inject @@ -126,7 +123,7 @@ public class StoreMailboxManager implements MailboxManager { MessageId.Factory messageIdFactory, MailboxAnnotationManager annotationManager, EventBus eventBus, StoreRightManager storeRightManager, QuotaComponents quotaComponents, MessageSearchIndex searchIndex, MailboxManagerConfiguration configuration, - Set<PreDeletionHook> preDeletionHooks) { + PreDeletionHooks preDeletionHooks) { Preconditions.checkNotNull(eventBus); Preconditions.checkNotNull(mailboxSessionMapperFactory); @@ -212,7 +209,7 @@ public class StoreMailboxManager implements MailboxManager { return messageParser; } - public Set<PreDeletionHook> getPreDeletionHooks() { + public PreDeletionHooks getPreDeletionHooks() { return preDeletionHooks; } @@ -409,12 +406,7 @@ public class StoreMailboxManager implements MailboxManager { .mapToLong(MessageMetaData::getSize) .sum(); - PreDeletionHook.DeleteOperation deleteOperation = PreDeletionHook.DeleteOperation.from(metadata); - - Flux.fromIterable(preDeletionHooks) - .publishOn(Schedulers.elastic()) - .flatMap(hook -> hook.notifyDelete(deleteOperation)) - .blockLast(); + preDeletionHooks.runHooks(PreDeletionHook.DeleteOperation.from(metadata)).block(); // We need to create a copy of the mailbox as maybe we can not refer to the real // mailbox once we remove it diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java index 808f8aa..0a07e77 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java @@ -97,12 +97,12 @@ public class StoreMessageIdManager implements MessageIdManager { private final MessageId.Factory messageIdFactory; private final QuotaManager quotaManager; private final QuotaRootResolver quotaRootResolver; - private final Set<PreDeletionHook> preDeletionHooks; + private final PreDeletionHooks preDeletionHooks; @Inject public StoreMessageIdManager(MailboxManager mailboxManager, MailboxSessionMapperFactory mailboxSessionMapperFactory, EventBus eventBus, MessageId.Factory messageIdFactory, - QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, Set<PreDeletionHook> preDeletionHooks) { + QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, PreDeletionHooks preDeletionHooks) { this.mailboxManager = mailboxManager; this.mailboxSessionMapperFactory = mailboxSessionMapperFactory; this.eventBus = eventBus; @@ -204,9 +204,7 @@ public class StoreMessageIdManager implements MessageIdManager { .map(mailboxMessage -> MetadataWithMailboxId.from(mailboxMessage.metaData(), mailboxMessage.getMailboxId())) .collect(Guavate.toImmutableList()); - PreDeletionHook.DeleteOperation deleteOperation = PreDeletionHook.DeleteOperation.from(metadataWithMailbox); - Flux.fromIterable(preDeletionHooks) - .flatMap(preDeletionHook -> preDeletionHook.notifyDelete(deleteOperation)) + preDeletionHooks.runHooks(PreDeletionHook.DeleteOperation.from(metadataWithMailbox)) .then(Mono.fromRunnable(Throwing.runnable( () -> delete(messageIdMapper, messageList, mailboxSession, metadataWithMailbox)))) .block(); diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java index f0d6ddd..794ac5f 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java @@ -32,7 +32,6 @@ import java.util.EnumSet; import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; @@ -56,7 +55,6 @@ import org.apache.james.mailbox.events.MailboxListener; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.exception.ReadOnlyException; import org.apache.james.mailbox.exception.UnsupportedRightException; -import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.model.ComposedMessageId; import org.apache.james.mailbox.model.MailboxACL; import org.apache.james.mailbox.model.MailboxCounters; @@ -156,13 +154,13 @@ public class StoreMessageManager implements MessageManager { private final MessageParser messageParser; private final Factory messageIdFactory; private final BatchSizes batchSizes; - private final Set<PreDeletionHook> preDeletionHooks; + private final PreDeletionHooks preDeletionHooks; public StoreMessageManager(EnumSet<MailboxManager.MessageCapabilities> messageCapabilities, MailboxSessionMapperFactory mapperFactory, MessageSearchIndex index, EventBus eventBus, MailboxPathLocker locker, Mailbox mailbox, QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes, - StoreRightManager storeRightManager, Set<PreDeletionHook> preDeletionHooks) { + StoreRightManager storeRightManager, PreDeletionHooks preDeletionHooks) { this.messageCapabilities = messageCapabilities; this.eventBus = eventBus; this.mailbox = mailbox; @@ -743,10 +741,7 @@ public class StoreMessageManager implements MessageManager { .map(DeleteOperation::from) .block(); - Flux.fromIterable(preDeletionHooks) - .publishOn(Schedulers.elastic()) - .flatMap(hook -> hook.notifyDelete(deleteOperation)) - .blockLast(); + preDeletionHooks.runHooks(deleteOperation).block(); } @Override diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/PreDeletionHooksTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/PreDeletionHooksTest.java new file mode 100644 index 0000000..79ab6ca --- /dev/null +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/PreDeletionHooksTest.java @@ -0,0 +1,156 @@ +/**************************************************************** + * 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.mailbox.store; + +import static org.assertj.core.api.Assertions.assertThatCode; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.when; + +import java.time.Duration; +import java.util.Date; +import java.util.concurrent.locks.ReentrantLock; + +import javax.mail.Flags; + +import org.apache.james.mailbox.MessageUid; +import org.apache.james.mailbox.MetadataWithMailboxId; +import org.apache.james.mailbox.extension.PreDeletionHook; +import org.apache.james.mailbox.model.MessageMetaData; +import org.apache.james.mailbox.model.TestId; +import org.apache.james.mailbox.model.TestMessageId; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.reactivestreams.Publisher; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; + +import reactor.core.publisher.Mono; + +class PreDeletionHooksTest { + + private static final TestId MAILBOX_ID = TestId.of(45); + private static final int MOD_SEQ = 18; + private static final int SIZE = 12; + private static final MessageMetaData MESSAGE_META_DATA = new MessageMetaData(MessageUid.of(1), MOD_SEQ, new Flags(), SIZE, new Date(), TestMessageId.of(42)); + private static final PreDeletionHook.DeleteOperation DELETE_OPERATION = PreDeletionHook.DeleteOperation.from(ImmutableList.of(MetadataWithMailboxId.from( + MESSAGE_META_DATA, + MAILBOX_ID))); + private PreDeletionHook hook1; + private PreDeletionHook hook2; + private PreDeletionHooks testee; + + @BeforeEach + void setUp() { + hook1 = mock(PreDeletionHook.class); + hook2 = mock(PreDeletionHook.class); + + testee = new PreDeletionHooks(ImmutableSet.of(hook1, hook2)); + } + + @Test + void runHooksShouldCallAllHooks() { + when(hook1.notifyDelete(any())).thenReturn(Mono.empty()); + when(hook2.notifyDelete(any())).thenReturn(Mono.empty()); + + testee.runHooks(DELETE_OPERATION).block(); + + verify(hook1).notifyDelete(DELETE_OPERATION); + verify(hook2).notifyDelete(DELETE_OPERATION); + verifyNoMoreInteractions(hook1); + verifyNoMoreInteractions(hook2); + } + + @Test + void runHooksShouldThrowWhenOneHookThrows() { + when(hook1.notifyDelete(any())).thenThrow(new RuntimeException()); + when(hook2.notifyDelete(any())).thenReturn(Mono.empty()); + + assertThatThrownBy(() -> testee.runHooks(DELETE_OPERATION).block()).isInstanceOf(RuntimeException.class); + } + + @Test + void runHooksShouldNotRunHooksAfterAHookThrows() { + when(hook1.notifyDelete(any())).thenThrow(new RuntimeException()); + when(hook2.notifyDelete(any())).thenReturn(Mono.empty()); + + try { + testee.runHooks(DELETE_OPERATION).block(); + } catch (Exception e) { + // ignored + } + + verifyZeroInteractions(hook2); + } + + @Test + void runHooksShouldThrowWhenOneHookReturnsErrorMono() { + when(hook1.notifyDelete(any())).thenReturn(Mono.error(new RuntimeException())); + when(hook2.notifyDelete(any())).thenReturn(Mono.empty()); + + assertThatThrownBy(() -> testee.runHooks(DELETE_OPERATION).block()).isInstanceOf(RuntimeException.class); + } + + @Test + void runHooksShouldNotRunHooksAfterAHookReturnsErrorMono() { + when(hook1.notifyDelete(any())).thenReturn(Mono.error(new RuntimeException())); + when(hook2.notifyDelete(any())).thenReturn(Mono.empty()); + + try { + testee.runHooks(DELETE_OPERATION).block(); + } catch (Exception e) { + // ignored + } + + verifyZeroInteractions(hook2); + } + + @Test + void runHooksShouldExecuteHooksSequentially() { + ReentrantLock reentrantLock = new ReentrantLock(); + + Answer<Publisher<Void>> lockAndSleepAnswer = invocationOnMock -> { + reentrantLock.lock(); + Thread.sleep(Duration.ofMillis(100).toMillis()); + reentrantLock.unlock(); + return Mono.empty(); + }; + Answer<Publisher<Void>> throwIfLockedAnswer = invocationOnMock -> { + if (reentrantLock.isLocked()) { + throw new RuntimeException("This task is running while the previous one is waiting"); + } + return Mono.empty(); + }; + + when(hook1.notifyDelete(any())).thenAnswer(lockAndSleepAnswer); + when(hook2.notifyDelete(any())).thenAnswer(throwIfLockedAnswer); + + assertThatCode(() -> testee.runHooks(DELETE_OPERATION).block()) + .describedAs("RunHook does not throw if hooks are executed in a sequential manner") + .doesNotThrowAnyException(); + } +} \ No newline at end of file diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java index b32ffa9..a90ba4d 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java @@ -94,7 +94,8 @@ public class StoreMailboxManagerTest { storeMailboxManager = new StoreMailboxManager(mockedMapperFactory, sessionProvider, new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory, - annotationManager, eventBus, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT, PreDeletionHook.NO_PRE_DELETION_HOOK); + annotationManager, eventBus, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT, + PreDeletionHooks.NO_PRE_DELETION_HOOK); } @Test(expected = MailboxNotFoundException.class) diff --git a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java index ca278ee..ecb8c26 100644 --- a/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java +++ b/mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java @@ -35,10 +35,10 @@ import org.apache.james.mailbox.MessageManager; import org.apache.james.mailbox.cassandra.CassandraMailboxManager; import org.apache.james.mailbox.cassandra.CassandraMailboxManagerProvider; import org.apache.james.mailbox.cassandra.mail.MailboxAggregateModule; -import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.indexer.ReIndexer; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.store.MailboxSessionMapperFactory; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.mail.model.Mailbox; import org.apache.james.mailbox.store.mail.model.MailboxMessage; import org.apache.james.mailbox.store.search.ListeningMessageSearchIndex; @@ -63,7 +63,7 @@ public class CassandraReIndexerImplTest { @BeforeEach void setUp(CassandraCluster cassandra) { mailboxManager = CassandraMailboxManagerProvider.provideMailboxManager(cassandra.getConf(), cassandra.getTypesProvider(), - PreDeletionHook.NO_PRE_DELETION_HOOK); + PreDeletionHooks.NO_PRE_DELETION_HOOK); MailboxSessionMapperFactory mailboxSessionMapperFactory = mailboxManager.getMapperFactory(); messageSearchIndex = mock(ListeningMessageSearchIndex.class); reIndexer = new ReIndexerImpl(new ReIndexerPerformer(mailboxManager, messageSearchIndex, mailboxSessionMapperFactory), diff --git a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java index 62a64a8..993f7ed 100644 --- a/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java +++ b/mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java @@ -40,10 +40,10 @@ import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaDao; import org.apache.james.mailbox.cassandra.quota.CassandraPerUserMaxQuotaManager; import org.apache.james.mailbox.events.InVMEventBus; import org.apache.james.mailbox.events.delivery.InVmEventDelivery; -import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.quota.QuotaRootResolver; import org.apache.james.mailbox.store.JVMMailboxPathLocker; import org.apache.james.mailbox.store.MailboxManagerConfiguration; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreRightManager; @@ -113,7 +113,7 @@ public class CassandraHostSystem extends JamesImapHostSystem { mailboxManager = new CassandraMailboxManager(mapperFactory, sessionProvider, new JVMMailboxPathLocker(), new MessageParser(), messageIdFactory, - eventBus, annotationManager, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT, PreDeletionHook.NO_PRE_DELETION_HOOK); + eventBus, annotationManager, storeRightManager, quotaComponents, index, MailboxManagerConfiguration.DEFAULT, PreDeletionHooks.NO_PRE_DELETION_HOOK); eventBus.register(quotaUpdater); diff --git a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java index e0c85b5..7dd9141 100644 --- a/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java +++ b/mpt/impl/imap-mailbox/elasticsearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/ElasticSearchHostSystem.java @@ -51,12 +51,12 @@ import org.apache.james.mailbox.elasticsearch.search.ElasticSearchSearcher; import org.apache.james.mailbox.events.InVMEventBus; import org.apache.james.mailbox.events.delivery.InVmEventDelivery; import org.apache.james.mailbox.exception.MailboxException; -import org.apache.james.mailbox.extension.PreDeletionHook; import org.apache.james.mailbox.inmemory.InMemoryId; import org.apache.james.mailbox.inmemory.InMemoryMailboxManager; import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory; import org.apache.james.mailbox.inmemory.InMemoryMessageId; import org.apache.james.mailbox.store.JVMMailboxPathLocker; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreMailboxManager; @@ -142,7 +142,7 @@ public class ElasticSearchHostSystem extends JamesImapHostSystem { storeRightManager, quotaComponents, searchIndex, - PreDeletionHook.NO_PRE_DELETION_HOOK); + PreDeletionHooks.NO_PRE_DELETION_HOOK); eventBus.register(searchIndex); diff --git a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java index a2a7c3d..b6b24b2 100644 --- a/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java +++ b/mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java @@ -44,6 +44,7 @@ import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory; import org.apache.james.mailbox.inmemory.InMemoryMessageId; import org.apache.james.mailbox.lucene.search.LuceneMessageSearchIndex; import org.apache.james.mailbox.store.JVMMailboxPathLocker; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreRightManager; @@ -120,7 +121,7 @@ public class LuceneSearchHostSystem extends JamesImapHostSystem { rightManager, QuotaComponents.disabled(sessionProvider, mapperFactory), searchIndex, - PreDeletionHook.NO_PRE_DELETION_HOOK); + PreDeletionHooks.NO_PRE_DELETION_HOOK); searchIndex.setEnableSuffixMatch(true); diff --git a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java index 4612fea..adc1671 100644 --- a/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java +++ b/mpt/impl/imap-mailbox/maildir/src/test/java/org/apache/james/mpt/imapmailbox/maildir/host/MaildirHostSystem.java @@ -40,6 +40,7 @@ import org.apache.james.mailbox.maildir.MaildirMailboxSessionMapperFactory; import org.apache.james.mailbox.maildir.MaildirStore; import org.apache.james.mailbox.store.JVMMailboxPathLocker; import org.apache.james.mailbox.store.MailboxManagerConfiguration; +import org.apache.james.mailbox.store.PreDeletionHooks; import org.apache.james.mailbox.store.SessionProvider; import org.apache.james.mailbox.store.StoreMailboxAnnotationManager; import org.apache.james.mailbox.store.StoreMailboxManager; @@ -86,7 +87,7 @@ public class MaildirHostSystem extends JamesImapHostSystem { mailboxManager = new StoreMailboxManager(mailboxSessionMapperFactory, sessionProvider, locker, messageParser, new DefaultMessageId.Factory(), annotationManager, eventBus, storeRightManager, quotaComponents, - index, MailboxManagerConfiguration.DEFAULT, PreDeletionHook.NO_PRE_DELETION_HOOK); + index, MailboxManagerConfiguration.DEFAULT, PreDeletionHooks.NO_PRE_DELETION_HOOK); ImapProcessor defaultImapProcessorFactory = DefaultImapProcessorFactory.createDefaultProcessor( --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org