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/01/17 06:50:35 UTC
[19/27] james-project git commit: JAMES-2641 Allow specifying group
of registered listeners
JAMES-2641 Allow specifying group of registered listeners
This allow duplicate listeners to be registered, a feature used by over-quota mailing
to specify several thresholds.
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/8d66bb11
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/8d66bb11
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/8d66bb11
Branch: refs/heads/master
Commit: 8d66bb110a21a7a473dc3fcea84fb5a5399499b3
Parents: 24fe28f
Author: Benoit Tellier <bt...@linagora.com>
Authored: Mon Jan 14 10:44:20 2019 +0700
Committer: Benoit Tellier <bt...@linagora.com>
Committed: Thu Jan 17 13:49:09 2019 +0700
----------------------------------------------------------------------
.../apache/james/mailbox/MailboxListener.java | 2 +-
.../apache/james/mailbox/events/EventBus.java | 2 +-
.../james/mailbox/events/GenericGroup.java | 45 ++++++++++++++++++++
.../org/apache/james/mailbox/events/Group.java | 4 +-
.../apache/james/mailbox/events/GroupTest.java | 7 +++
.../james/mailbox/util/EventCollector.java | 2 +-
.../CacheInvalidatingMailboxListener.java | 2 +-
.../MailboxOperationLoggingListener.java | 2 +-
...lasticSearchListeningMessageSearchIndex.java | 2 +-
.../lucene/search/LuceneMessageSearchIndex.java | 2 +-
.../QuotaThresholdCrossingListener.java | 2 +-
.../ElasticSearchQuotaMailboxListener.java | 2 +-
.../spamassassin/SpamAssassinListener.java | 2 +-
.../store/event/MailboxAnnotationListener.java | 2 +-
.../quota/ListeningCurrentQuotaUpdater.java | 2 +-
.../store/search/LazyMessageSearchIndex.java | 2 +-
.../modules/mailbox/CassandraQuotaModule.java | 2 +-
.../modules/mailbox/ListenerConfiguration.java | 13 ++++--
.../modules/mailbox/MailboxListenerFactory.java | 6 +--
.../modules/mailbox/MailboxListenersLoader.java | 6 ++-
.../mailbox/MailboxListenersLoaderImpl.java | 29 ++++++++++---
.../modules/mailbox/NoopMailboxListener.java | 2 +-
.../mailbox/ListenerConfigurationTest.java | 25 ++++++++++-
.../mailbox/MailboxListenersLoaderImplTest.java | 39 ++++++++++++++++-
.../src/test/resources/listeners.xml | 2 +
.../src/test/resources/listeners.xml | 2 +
.../src/test/resources/listeners.xml | 2 +
.../event/PropagateLookupRightListener.java | 2 +-
28 files changed, 176 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
index fd79dd9..d845154 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
@@ -50,7 +50,7 @@ import com.google.common.collect.ImmutableMap;
public interface MailboxListener {
interface GroupMailboxListener extends MailboxListener {
- Group getGroup();
+ Group getDefaultGroup();
}
enum ExecutionMode {
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java b/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java
index 70275cc..6b25f1b 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/events/EventBus.java
@@ -40,6 +40,6 @@ public interface EventBus {
}
default Registration register(MailboxListener.GroupMailboxListener groupMailboxListener) {
- return register(groupMailboxListener, groupMailboxListener.getGroup());
+ return register(groupMailboxListener, groupMailboxListener.getDefaultGroup());
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/api/src/main/java/org/apache/james/mailbox/events/GenericGroup.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/events/GenericGroup.java b/mailbox/api/src/main/java/org/apache/james/mailbox/events/GenericGroup.java
new file mode 100644
index 0000000..ed36568
--- /dev/null
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/events/GenericGroup.java
@@ -0,0 +1,45 @@
+/****************************************************************
+ * 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.events;
+
+import java.util.Objects;
+
+public class GenericGroup extends Group {
+ private final String groupName;
+
+ public GenericGroup(String groupName) {
+ this.groupName = groupName;
+ }
+
+ @Override
+ public final boolean equals(Object o) {
+ if (o instanceof GenericGroup) {
+ GenericGroup that = (GenericGroup) o;
+
+ return Objects.equals(this.groupName, that.groupName);
+ }
+ return false;
+ }
+
+ @Override
+ public final int hashCode() {
+ return Objects.hash(groupName);
+ }
+}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/api/src/main/java/org/apache/james/mailbox/events/Group.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/events/Group.java b/mailbox/api/src/main/java/org/apache/james/mailbox/events/Group.java
index 33df511..2da5cb4 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/events/Group.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/events/Group.java
@@ -23,7 +23,7 @@ import java.util.Objects;
public class Group {
@Override
- public final boolean equals(Object o) {
+ public boolean equals(Object o) {
if (o == null) {
return false;
}
@@ -31,7 +31,7 @@ public class Group {
}
@Override
- public final int hashCode() {
+ public int hashCode() {
return Objects.hash(getClass());
}
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupTest.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupTest.java
index 80a7029..0acb141 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupTest.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/events/GroupTest.java
@@ -58,4 +58,11 @@ class GroupTest {
void equalsShouldReturnFalseOnParentClass() {
assertThat(new GroupC()).isNotEqualTo(new GroupA());
}
+
+ @Test
+ void genericGroupShouldMatchBeanContract() {
+ EqualsVerifier.forClass(GenericGroup.class)
+ .withRedefinedSuperclass()
+ .verify();
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java b/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
index c88eefb..f2f3c42 100644
--- a/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
+++ b/mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
@@ -34,7 +34,7 @@ public class EventCollector implements MailboxListener.GroupMailboxListener {
private final List<Event> events = new ArrayList<>();
@Override
- public Group getGroup() {
+ public Group getDefaultGroup() {
return GROUP;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
index 1c98ce1..e3f38c8 100644
--- a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
+++ b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CacheInvalidatingMailboxListener.java
@@ -27,7 +27,7 @@ public class CacheInvalidatingMailboxListener implements MailboxListener.GroupMa
}
@Override
- public Group getGroup() {
+ public Group getDefaultGroup() {
return GROUP;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
index bf1822a..660a748 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
@@ -40,7 +40,7 @@ public class MailboxOperationLoggingListener implements MailboxListener.GroupMai
private static final Group GROUP = new MailboxOperationLoggingListenerGroup();
@Override
- public Group getGroup() {
+ public Group getDefaultGroup() {
return GROUP;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
index 010b7e7..398e792 100644
--- a/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
+++ b/mailbox/elasticsearch/src/main/java/org/apache/james/mailbox/elasticsearch/events/ElasticSearchListeningMessageSearchIndex.java
@@ -82,7 +82,7 @@ public class ElasticSearchListeningMessageSearchIndex extends ListeningMessageSe
}
@Override
- public Group getGroup() {
+ public Group getDefaultGroup() {
return GROUP;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
index 3952deb..6ede59f 100644
--- a/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
+++ b/mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
@@ -402,7 +402,7 @@ public class LuceneMessageSearchIndex extends ListeningMessageSearchIndex {
}
@Override
- public org.apache.james.mailbox.events.Group getGroup() {
+ public org.apache.james.mailbox.events.Group getDefaultGroup() {
return GROUP;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java b/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
index ee8546b..73c6b1c 100644
--- a/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
+++ b/mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
@@ -66,7 +66,7 @@ public class QuotaThresholdCrossingListener implements MailboxListener.GroupMail
}
@Override
- public Group getGroup() {
+ public Group getDefaultGroup() {
return GROUP;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
index 03b5d6f..a546492 100644
--- a/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
+++ b/mailbox/plugin/quota-search-elasticsearch/src/main/java/org/apache/james/quota/search/elasticsearch/events/ElasticSearchQuotaMailboxListener.java
@@ -51,7 +51,7 @@ public class ElasticSearchQuotaMailboxListener implements MailboxListener.GroupM
}
@Override
- public Group getGroup() {
+ public Group getDefaultGroup() {
return GROUP;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
----------------------------------------------------------------------
diff --git a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
index 8efc15c..5427320 100644
--- a/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
+++ b/mailbox/plugin/spamassassin/src/main/java/org/apache/james/mailbox/spamassassin/SpamAssassinListener.java
@@ -72,7 +72,7 @@ public class SpamAssassinListener implements SpamEventListener {
}
@Override
- public Group getGroup() {
+ public Group getDefaultGroup() {
return GROUP;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java
index eff61a7..b026186 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java
@@ -51,7 +51,7 @@ public class MailboxAnnotationListener implements MailboxListener.GroupMailboxLi
}
@Override
- public Group getGroup() {
+ public Group getDefaultGroup() {
return GROUP;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
index 26fea63..251541b 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
@@ -60,7 +60,7 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener.GroupMailbo
}
@Override
- public Group getGroup() {
+ public Group getDefaultGroup() {
return GROUP;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
index 9145620..6a44864 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
@@ -73,7 +73,7 @@ public class LazyMessageSearchIndex extends ListeningMessageSearchIndex {
}
@Override
- public Group getGroup() {
+ public Group getDefaultGroup() {
return GROUP;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java
index 6cdef0f..1684aa6 100644
--- a/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java
+++ b/server/container/guice/cassandra-guice/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java
@@ -65,7 +65,7 @@ public class CassandraQuotaModule extends AbstractModule {
bind(ListeningCurrentQuotaUpdater.class).in(Scopes.SINGLETON);
bind(QuotaUpdater.class).to(ListeningCurrentQuotaUpdater.class);
- Multibinder.newSetBinder(binder(), MailboxListener.class)
+ Multibinder.newSetBinder(binder(), MailboxListener.GroupMailboxListener.class)
.addBinding()
.to(ListeningCurrentQuotaUpdater.class);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenerConfiguration.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenerConfiguration.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenerConfiguration.java
index ec99546..2eea8a2 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenerConfiguration.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenerConfiguration.java
@@ -31,11 +31,12 @@ public class ListenerConfiguration {
String listenerClass = configuration.getString("class");
Preconditions.checkState(!Strings.isNullOrEmpty(listenerClass), "class name is mandatory");
Optional<Boolean> isAsync = Optional.ofNullable(configuration.getBoolean("async", null));
- return new ListenerConfiguration(listenerClass, extractSubconfiguration(configuration), isAsync);
+ Optional<String> group = Optional.ofNullable(configuration.getString("group", null));
+ return new ListenerConfiguration(listenerClass, group, extractSubconfiguration(configuration), isAsync);
}
public static ListenerConfiguration forClass(String clazz) {
- return new ListenerConfiguration(clazz, Optional.empty(), Optional.empty());
+ return new ListenerConfiguration(clazz, Optional.empty(), Optional.empty(), Optional.empty());
}
private static Optional<HierarchicalConfiguration> extractSubconfiguration(HierarchicalConfiguration configuration) {
@@ -45,15 +46,21 @@ public class ListenerConfiguration {
}
private final String clazz;
+ private final Optional<String> group;
private final Optional<HierarchicalConfiguration> configuration;
private final Optional<Boolean> isAsync;
- private ListenerConfiguration(String clazz, Optional<HierarchicalConfiguration> configuration, Optional<Boolean> isAsync) {
+ private ListenerConfiguration(String clazz, Optional<String> group, Optional<HierarchicalConfiguration> configuration, Optional<Boolean> isAsync) {
this.clazz = clazz;
+ this.group = group;
this.configuration = configuration;
this.isAsync = isAsync;
}
+ public Optional<String> getGroup() {
+ return group;
+ }
+
public String getClazz() {
return clazz;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
index 9af26be..4c39661 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
@@ -32,7 +32,7 @@ public class MailboxListenerFactory {
public static class MailboxListenerBuilder {
private final Injector injector;
- private Optional<Class<MailboxListener.GroupMailboxListener>> clazz;
+ private Optional<Class<MailboxListener>> clazz;
private Optional<MailboxListener.ExecutionMode> executionMode;
private Optional<HierarchicalConfiguration> configuration;
@@ -63,12 +63,12 @@ public class MailboxListenerFactory {
return this;
}
- public MailboxListenerBuilder clazz(Class<MailboxListener.GroupMailboxListener> clazz) {
+ public MailboxListenerBuilder clazz(Class<MailboxListener> clazz) {
this.clazz = Optional.of(clazz);
return this;
}
- public MailboxListener.GroupMailboxListener build() {
+ public MailboxListener build() {
Preconditions.checkState(clazz.isPresent(), "'clazz' is mandatory");
return injector.createChildInjector(
binder -> binder.bind(MailboxListener.ExecutionMode.class)
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoader.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoader.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoader.java
index 1909a3f..0f0b458 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoader.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoader.java
@@ -18,10 +18,12 @@
****************************************************************/
package org.apache.james.modules.mailbox;
+import org.apache.commons.lang3.tuple.Pair;
import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.events.Group;
public interface MailboxListenersLoader {
- MailboxListener.GroupMailboxListener createListener(ListenerConfiguration configuration);
+ Pair<Group, MailboxListener> createListener(ListenerConfiguration configuration);
- void register(MailboxListener.GroupMailboxListener listener);
+ void register(Pair<Group, MailboxListener> listener);
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
index b4bf0fa..e1721fb 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
@@ -21,13 +21,17 @@ package org.apache.james.modules.mailbox;
import java.util.Set;
import org.apache.commons.configuration.HierarchicalConfiguration;
+import org.apache.commons.lang3.tuple.Pair;
import org.apache.james.lifecycle.api.Configurable;
import org.apache.james.mailbox.MailboxListener;
import org.apache.james.mailbox.events.EventBus;
+import org.apache.james.mailbox.events.GenericGroup;
+import org.apache.james.mailbox.events.Group;
import org.apache.james.utils.ExtendedClassLoader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.common.base.Preconditions;
import com.google.inject.Inject;
public class MailboxListenersLoaderImpl implements Configurable, MailboxListenersLoader {
@@ -39,7 +43,7 @@ public class MailboxListenersLoaderImpl implements Configurable, MailboxListener
private final Set<MailboxListener.GroupMailboxListener> guiceDefinedListeners;
@Inject
- public MailboxListenersLoaderImpl(MailboxListenerFactory mailboxListenerFactory, EventBus eventBus,
+ MailboxListenersLoaderImpl(MailboxListenerFactory mailboxListenerFactory, EventBus eventBus,
ExtendedClassLoader classLoader, Set<MailboxListener.GroupMailboxListener> guiceDefinedListeners) {
this.mailboxListenerFactory = mailboxListenerFactory;
this.eventBus = eventBus;
@@ -53,7 +57,7 @@ public class MailboxListenersLoaderImpl implements Configurable, MailboxListener
ListenersConfiguration listenersConfiguration = ListenersConfiguration.from(configuration);
- guiceDefinedListeners.forEach(this::register);
+ guiceDefinedListeners.forEach(eventBus::register);
listenersConfiguration.getListenersConfiguration().stream()
.map(this::createListener)
@@ -61,26 +65,39 @@ public class MailboxListenersLoaderImpl implements Configurable, MailboxListener
}
@Override
- public void register(MailboxListener.GroupMailboxListener listener) {
- eventBus.register(listener);
+ public void register(Pair<Group, MailboxListener> listener) {
+ eventBus.register(listener.getRight(), listener.getLeft());
}
@Override
- public MailboxListener.GroupMailboxListener createListener(ListenerConfiguration configuration) {
+ public Pair<Group, MailboxListener> createListener(ListenerConfiguration configuration) {
String listenerClass = configuration.getClazz();
try {
LOGGER.info("Loading user registered mailbox listener {}", listenerClass);
- return mailboxListenerFactory.newInstance()
+ MailboxListener mailboxListener = mailboxListenerFactory.newInstance()
.withConfiguration(configuration.getConfiguration())
.withExecutionMode(configuration.isAsync().map(this::getExecutionMode))
.clazz(classLoader.locateClass(listenerClass))
.build();
+
+
+ return configuration.getGroup()
+ .map(GenericGroup::new)
+ .map(group -> Pair.<Group, MailboxListener>of(group, mailboxListener))
+ .orElseGet(() -> withDefaultGroup(mailboxListener));
} catch (ClassNotFoundException e) {
LOGGER.error("Error while loading user registered global listener {}", listenerClass, e);
throw new RuntimeException(e);
}
}
+ private Pair<Group, MailboxListener> withDefaultGroup(MailboxListener mailboxListener) {
+ Preconditions.checkArgument(mailboxListener instanceof MailboxListener.GroupMailboxListener);
+
+ MailboxListener.GroupMailboxListener groupMailboxListener = (MailboxListener.GroupMailboxListener) mailboxListener;
+ return Pair.of(groupMailboxListener.getDefaultGroup(), groupMailboxListener);
+ }
+
private MailboxListener.ExecutionMode getExecutionMode(boolean isAsync) {
if (isAsync) {
return MailboxListener.ExecutionMode.ASYNCHRONOUS;
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
index 14dd45d..70a544d 100644
--- a/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
+++ b/server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
@@ -28,7 +28,7 @@ public class NoopMailboxListener implements MailboxListener.GroupMailboxListener
static final Group GROUP = new NoopMailboxListenerGroup();
@Override
- public Group getGroup() {
+ public Group getDefaultGroup() {
return GROUP;
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ListenerConfigurationTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ListenerConfigurationTest.java b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ListenerConfigurationTest.java
index b2db84c..5184717 100644
--- a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ListenerConfigurationTest.java
+++ b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ListenerConfigurationTest.java
@@ -57,12 +57,33 @@ public class ListenerConfigurationTest {
@Test
public void isAsyncShouldReturnConfiguredValue() {
DefaultConfigurationBuilder configuration = new DefaultConfigurationBuilder();
- String expectedClazz = "MyClassName";
- configuration.addProperty("class", expectedClazz);
+ configuration.addProperty("class", "MyClassName");
configuration.addProperty("async", "false");
ListenerConfiguration listenerConfiguration = ListenerConfiguration.from(configuration);
assertThat(listenerConfiguration.isAsync()).contains(false);
}
+
+ @Test
+ public void getGroupShouldBeEmptyByDefault() {
+ DefaultConfigurationBuilder configuration = new DefaultConfigurationBuilder();
+ configuration.addProperty("class", "MyClassName");
+
+ ListenerConfiguration listenerConfiguration = ListenerConfiguration.from(configuration);
+
+ assertThat(listenerConfiguration.getGroup()).isEmpty();
+ }
+
+ @Test
+ public void getGroupShouldContainsConfiguredValue() {
+ String groupName = "Avengers";
+ DefaultConfigurationBuilder configuration = new DefaultConfigurationBuilder();
+ configuration.addProperty("class", "MyClassName");
+ configuration.addProperty("group", groupName);
+
+ ListenerConfiguration listenerConfiguration = ListenerConfiguration.from(configuration);
+
+ assertThat(listenerConfiguration.getGroup()).contains(groupName);
+ }
}
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
index a9f454d..bcdbcc6 100644
--- a/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
+++ b/server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
@@ -30,8 +30,11 @@ import java.nio.charset.StandardCharsets;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.DefaultConfigurationBuilder;
+import org.apache.commons.lang3.tuple.Pair;
import org.apache.james.filesystem.api.FileSystem;
import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.events.GenericGroup;
+import org.apache.james.mailbox.events.Group;
import org.apache.james.mailbox.events.InVMEventBus;
import org.apache.james.mailbox.events.delivery.InVmEventDelivery;
import org.apache.james.metrics.api.NoopMetricFactory;
@@ -86,9 +89,9 @@ public class MailboxListenersLoaderImplTest {
public void createListenerShouldReturnMailboxListenerWhenConfigurationIsGood() {
ListenerConfiguration configuration = ListenerConfiguration.forClass("org.apache.james.modules.mailbox.NoopMailboxListener");
- MailboxListener listener = testee.createListener(configuration);
+ Pair<Group, MailboxListener> listener = testee.createListener(configuration);
- assertThat(listener).isInstanceOf(NoopMailboxListener.class);
+ assertThat(listener.getRight()).isInstanceOf(NoopMailboxListener.class);
}
@Test
@@ -104,6 +107,38 @@ public class MailboxListenersLoaderImplTest {
assertThat(eventBus.registeredGroups()).containsExactly(NoopMailboxListener.GROUP);
}
+ @Test
+ public void customGroupCanBePassed() throws ConfigurationException {
+ DefaultConfigurationBuilder configuration = toConfigutation("<listeners>" +
+ "<listener>" +
+ "<class>org.apache.james.modules.mailbox.NoopMailboxListener</class>" +
+ "<group>Avengers</group>" +
+ "</listener>" +
+ "</listeners>");
+
+ testee.configure(configuration);
+
+ assertThat(eventBus.registeredGroups()).containsExactly(new GenericGroup("Avengers"));
+ }
+
+ @Test
+ public void aListenerCanBeRegisteredOnSeveralGroups() throws ConfigurationException {
+ DefaultConfigurationBuilder configuration = toConfigutation("<listeners>" +
+ "<listener>" +
+ "<class>org.apache.james.modules.mailbox.NoopMailboxListener</class>" +
+ "<group>Avengers</group>" +
+ "</listener>" +
+ "<listener>" +
+ "<class>org.apache.james.modules.mailbox.NoopMailboxListener</class>" +
+ "<group>Fantastic 4</group>" +
+ "</listener>" +
+ "</listeners>");
+
+ testee.configure(configuration);
+
+ assertThat(eventBus.registeredGroups()).containsExactlyInAnyOrder(new GenericGroup("Avengers"), new GenericGroup("Fantastic 4"));
+ }
+
private DefaultConfigurationBuilder toConfigutation(String configurationString) throws ConfigurationException {
DefaultConfigurationBuilder configuration = new DefaultConfigurationBuilder();
configuration.load(new ByteArrayInputStream(configurationString.getBytes(StandardCharsets.UTF_8)));
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml
index 7227803..9d0f61b 100644
--- a/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml
+++ b/server/protocols/jmap-integration-testing/cassandra-jmap-integration-testing/src/test/resources/listeners.xml
@@ -30,6 +30,7 @@
</listener>
<listener>
<class>org.apache.james.mailbox.quota.mailing.listeners.QuotaThresholdCrossingListener</class>
+ <group>QuotaThresholdCrossingListener-lower-threshold</group>
<configuration>
<thresholds>
<threshold>
@@ -41,6 +42,7 @@
</listener>
<listener>
<class>org.apache.james.mailbox.quota.mailing.listeners.QuotaThresholdCrossingListener</class>
+ <group>QuotaThresholdCrossingListener-upper-threshold</group>
<configuration>
<thresholds>
<threshold>
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml
index cd9acd6..2145b25 100644
--- a/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml
+++ b/server/protocols/jmap-integration-testing/memory-jmap-integration-testing/src/test/resources/listeners.xml
@@ -27,6 +27,7 @@
</listener>
<listener>
<class>org.apache.james.mailbox.quota.mailing.listeners.QuotaThresholdCrossingListener</class>
+ <group>QuotaThresholdCrossingListener-lower-threshold</group>
<configuration>
<thresholds>
<threshold>
@@ -38,6 +39,7 @@
</listener>
<listener>
<class>org.apache.james.mailbox.quota.mailing.listeners.QuotaThresholdCrossingListener</class>
+ <group>QuotaThresholdCrossingListener-upper-threshold</group>
<configuration>
<thresholds>
<threshold>
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/resources/listeners.xml
----------------------------------------------------------------------
diff --git a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/resources/listeners.xml b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/resources/listeners.xml
index 7227803..9d0f61b 100644
--- a/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/resources/listeners.xml
+++ b/server/protocols/jmap-integration-testing/rabbitmq-jmap-integration-testing/src/test/resources/listeners.xml
@@ -30,6 +30,7 @@
</listener>
<listener>
<class>org.apache.james.mailbox.quota.mailing.listeners.QuotaThresholdCrossingListener</class>
+ <group>QuotaThresholdCrossingListener-lower-threshold</group>
<configuration>
<thresholds>
<threshold>
@@ -41,6 +42,7 @@
</listener>
<listener>
<class>org.apache.james.mailbox.quota.mailing.listeners.QuotaThresholdCrossingListener</class>
+ <group>QuotaThresholdCrossingListener-upper-threshold</group>
<configuration>
<thresholds>
<threshold>
http://git-wip-us.apache.org/repos/asf/james-project/blob/8d66bb11/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
----------------------------------------------------------------------
diff --git a/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java b/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
index 4f6dc0c..2ab0273 100644
--- a/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
+++ b/server/protocols/jmap/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
@@ -54,7 +54,7 @@ public class PropagateLookupRightListener implements MailboxListener.GroupMailbo
}
@Override
- public Group getGroup() {
+ public Group getDefaultGroup() {
return GROUP;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org