JAMES-2342 Introduce Event interface
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/da4b71ac Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/da4b71ac Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/da4b71ac Branch: refs/heads/master Commit: da4b71acb53fcbcf3c296616b5ff8a7fec26235b Parents: 66a58be Author: Antoine Duprat <[email protected]> Authored: Tue Mar 6 11:55:02 2018 +0100 Committer: Antoine Duprat <[email protected]> Committed: Thu Mar 8 11:01:21 2018 +0100 ---------------------------------------------------------------------- .../java/org/apache/james/mailbox/Event.java | 24 ++++++++++ .../apache/james/mailbox/MailboxListener.java | 4 +- .../james/mailbox/MailboxManagerStressTest.java | 2 +- .../james/mailbox/util/EventCollector.java | 7 +-- .../CacheInvalidatingMailboxListener.java | 10 ++++- .../MailboxOperationLoggingListener.java | 9 ++-- .../spamassassin/SpamAssassinListener.java | 5 ++- .../store/event/AsynchronousEventDelivery.java | 3 +- .../event/DefaultDelegatingMailboxListener.java | 23 ++++++---- .../mailbox/store/event/EventDelivery.java | 3 +- .../store/event/MailboxAnnotationListener.java | 3 +- .../store/event/MailboxEventDispatcher.java | 2 +- .../mailbox/store/event/MixedEventDelivery.java | 3 +- .../store/event/SynchronousEventDelivery.java | 3 +- .../BroadcastDelegatingMailboxListener.java | 12 ++++- .../RegisteredDelegatingMailboxListener.java | 33 +++++++++----- .../quota/ListeningCurrentQuotaUpdater.java | 12 +++-- .../search/ListeningMessageSearchIndex.java | 5 ++- .../store/MailboxEventDispatcherTest.java | 5 ++- .../registrations/GlobalRegistration.java | 9 ++-- .../registrations/MailboxRegistration.java | 3 +- .../james/imap/processor/IdleProcessor.java | 3 +- .../processor/base/SelectedMailboxImpl.java | 47 ++++++++++++-------- .../integration/SetMessagesMethodTest.java | 7 +-- .../event/PropagateLookupRightListener.java | 5 ++- 25 files changed, 165 insertions(+), 77 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/mailbox/api/src/main/java/org/apache/james/mailbox/Event.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/Event.java b/mailbox/api/src/main/java/org/apache/james/mailbox/Event.java new file mode 100644 index 0000000..a2190cf --- /dev/null +++ b/mailbox/api/src/main/java/org/apache/james/mailbox/Event.java @@ -0,0 +1,24 @@ +/**************************************************************** + * 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; + +public interface Event { + + MailboxSession getSession(); +} http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/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 5f9cbce..16f6bb8 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 @@ -55,12 +55,12 @@ public interface MailboxListener { * @param event * not null */ - void event(MailboxEvent event); + void event(Event event); /** * A mailbox event. */ - abstract class MailboxEvent implements Serializable { + abstract class MailboxEvent implements Event, Serializable { private final MailboxSession session; private final MailboxPath path; http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java ---------------------------------------------------------------------- diff --git a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java index 9c6cbaf..941d7a6 100644 --- a/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java +++ b/mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressTest.java @@ -78,7 +78,7 @@ public abstract class MailboxManagerStressTest { } @Override - public void event(MailboxEvent event) { + public void event(Event event) { MessageUid u = ((Added) event).getUids().get(0); uList.add(u); } http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/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 97b07fb..fb17648 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 @@ -22,11 +22,12 @@ package org.apache.james.mailbox.util; import java.util.ArrayList; import java.util.List; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; public class EventCollector implements MailboxListener { - private final List<MailboxEvent> events = new ArrayList<>(); + private final List<Event> events = new ArrayList<>(); private final ListenerType listenerType; @@ -48,11 +49,11 @@ public class EventCollector implements MailboxListener { return ExecutionMode.SYNCHRONOUS; } - public List<MailboxEvent> getEvents() { + public List<Event> getEvents() { return events; } - public void event(MailboxEvent event) { + public void event(Event event) { events.add(event); } http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/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 90fc351..80a5ab8 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 @@ -1,5 +1,6 @@ package org.apache.james.mailbox.caching; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxListenerSupport; import org.apache.james.mailbox.exception.MailboxException; @@ -44,7 +45,13 @@ public class CacheInvalidatingMailboxListener implements MailboxListener { } @Override - public void event(MailboxEvent event) { + public void event(Event event) { + if (event instanceof MailboxEvent) { + mailboxEvent((MailboxEvent) event); + } + } + + private void mailboxEvent(MailboxEvent event) { // TODO this needs for sure to be smarter try { if (event instanceof MessageEvent) { @@ -55,7 +62,6 @@ public class CacheInvalidatingMailboxListener implements MailboxListener { } catch (MailboxException e) { LOGGER.error("Error while invalidation cache", e); } - } private void invalidateMetadata(MailboxEvent event) throws MailboxException { http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/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 9059288..ca7f94d 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 @@ -22,6 +22,7 @@ package org.apache.james.mailbox.cassandra; import static org.apache.james.mailbox.cassandra.GhostMailbox.MAILBOX_NAME; import static org.apache.james.mailbox.cassandra.GhostMailbox.TYPE; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; /** @@ -44,7 +45,7 @@ public class MailboxOperationLoggingListener implements MailboxListener { } @Override - public void event(MailboxEvent event) { + public void event(Event event) { if (event instanceof MailboxRenamed) { MailboxRenamed mailboxRenamed = (MailboxRenamed) event; GhostMailbox.logger() @@ -57,14 +58,16 @@ public class MailboxOperationLoggingListener implements MailboxListener { .log(logger -> logger.info("Mailbox renamed event")); } if (event instanceof MailboxDeletion) { + MailboxDeletion mailboxDeletion = (MailboxDeletion) event; GhostMailbox.logger() - .addField(MAILBOX_NAME, event.getMailboxPath()) + .addField(MAILBOX_NAME, mailboxDeletion.getMailboxPath()) .addField(TYPE, REMOVED) .log(logger -> logger.info("Mailbox deleted event")); } if (event instanceof MailboxAdded) { + MailboxAdded mailboxAdded = (MailboxAdded) event; GhostMailbox.logger() - .addField(MAILBOX_NAME, event.getMailboxPath()) + .addField(MAILBOX_NAME, mailboxAdded.getMailboxPath()) .addField(TYPE, ADDED) .log(logger -> logger.info("Mailbox added event")); } http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/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 4462ed0..b2501f3 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 @@ -22,6 +22,7 @@ import java.io.InputStream; import javax.inject.Inject; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.Role; import org.apache.james.mailbox.store.event.EventFactory; import org.apache.james.mailbox.store.event.SpamEventListener; @@ -56,7 +57,7 @@ public class SpamAssassinListener implements SpamEventListener { } @Override - public void event(MailboxEvent event) { + public void event(Event event) { LOGGER.debug("Event {} received in listener.", event); if (event instanceof EventFactory.AddedImpl) { EventFactory.AddedImpl addedToMailboxEvent = (EventFactory.AddedImpl) event; @@ -67,7 +68,7 @@ public class SpamAssassinListener implements SpamEventListener { .stream() .map(Throwing.function(Message::getFullContent)) .collect(Guavate.toImmutableList()); - spamAssassin.learnSpam(messages, event.getMailboxPath().getUser()); + spamAssassin.learnSpam(messages, addedToMailboxEvent.getMailboxPath().getUser()); } } } http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/AsynchronousEventDelivery.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/AsynchronousEventDelivery.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/AsynchronousEventDelivery.java index 3dfd113..98a43ab 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/AsynchronousEventDelivery.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/AsynchronousEventDelivery.java @@ -24,6 +24,7 @@ import java.util.concurrent.Executors; import javax.annotation.PreDestroy; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; public class AsynchronousEventDelivery implements EventDelivery { @@ -37,7 +38,7 @@ public class AsynchronousEventDelivery implements EventDelivery { } @Override - public void deliver(final MailboxListener mailboxListener, final MailboxListener.MailboxEvent event) { + public void deliver(MailboxListener mailboxListener, Event event) { threadPoolExecutor.submit(() -> synchronousEventDelivery.deliver(mailboxListener, event)); } http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java index 7a20207..687ff22 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/DefaultDelegatingMailboxListener.java @@ -23,6 +23,7 @@ import java.util.Collection; import javax.inject.Inject; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.exception.MailboxException; @@ -86,16 +87,22 @@ public class DefaultDelegatingMailboxListener implements DelegatingMailboxListen } @Override - public void event(MailboxEvent event) { - Collection<MailboxListener> listenerSnapshot = registry.getLocalMailboxListeners(event.getMailboxPath()); - if (event instanceof MailboxDeletion && listenerSnapshot.size() > 0) { - registry.deleteRegistryFor(event.getMailboxPath()); - } else if (event instanceof MailboxRenamed && listenerSnapshot.size() > 0) { - MailboxRenamed renamed = (MailboxRenamed) event; + public void event(Event event) { + if (event instanceof MailboxEvent) { + mailboxEvent((MailboxEvent) event); + } + } + + private void mailboxEvent(MailboxEvent mailboxEvent) { + Collection<MailboxListener> listenerSnapshot = registry.getLocalMailboxListeners(mailboxEvent.getMailboxPath()); + if (mailboxEvent instanceof MailboxDeletion && listenerSnapshot.size() > 0) { + registry.deleteRegistryFor(mailboxEvent.getMailboxPath()); + } else if (mailboxEvent instanceof MailboxRenamed && listenerSnapshot.size() > 0) { + MailboxRenamed renamed = (MailboxRenamed) mailboxEvent; registry.handleRename(renamed.getMailboxPath(), renamed.getNewPath()); } - deliverEventToMailboxListeners(event, listenerSnapshot); - deliverEventToGlobalListeners(event); + deliverEventToMailboxListeners(mailboxEvent, listenerSnapshot); + deliverEventToGlobalListeners(mailboxEvent); } protected void deliverEventToMailboxListeners(MailboxEvent event, Collection<MailboxListener> listenerSnapshot) { http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventDelivery.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventDelivery.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventDelivery.java index e9a8d13..517d296 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventDelivery.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventDelivery.java @@ -19,10 +19,11 @@ package org.apache.james.mailbox.store.event; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; public interface EventDelivery { - void deliver(MailboxListener mailboxListener, MailboxListener.MailboxEvent event); + void deliver(MailboxListener mailboxListener, Event event); } http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/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 c504f7c..4ac362e 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 @@ -20,6 +20,7 @@ package org.apache.james.mailbox.store.event; import java.util.List; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MailboxAnnotation; @@ -48,7 +49,7 @@ public class MailboxAnnotationListener implements MailboxListener { } @Override - public void event(MailboxEvent event) { + public void event(Event event) { if (event instanceof EventFactory.MailboxDeletionImpl) { try { AnnotationMapper annotationMapper = mailboxSessionMapperFactory.getAnnotationMapper(event.getSession()); http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java index 43d811b..0f628a1 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java @@ -42,7 +42,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSortedMap; /** - * Helper class to dispatch {@link org.apache.james.mailbox.MailboxListener.MailboxEvent}'s to registerend MailboxListener + * Helper class to dispatch {@link org.apache.james.mailbox.Event}'s to registerend MailboxListener */ public class MailboxEventDispatcher { http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MixedEventDelivery.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MixedEventDelivery.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MixedEventDelivery.java index 2086c5b..bcbc044 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MixedEventDelivery.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MixedEventDelivery.java @@ -19,6 +19,7 @@ package org.apache.james.mailbox.store.event; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; public class MixedEventDelivery implements EventDelivery { @@ -33,7 +34,7 @@ public class MixedEventDelivery implements EventDelivery { } @Override - public void deliver(MailboxListener mailboxListener, MailboxListener.MailboxEvent event) { + public void deliver(MailboxListener mailboxListener, Event event) { if (mailboxListener.getExecutionMode().equals(MailboxListener.ExecutionMode.SYNCHRONOUS)) { synchronousEventDelivery.deliver(mailboxListener, event); } else { http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/SynchronousEventDelivery.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/SynchronousEventDelivery.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/SynchronousEventDelivery.java index 0d8960c..97112de 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/SynchronousEventDelivery.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/SynchronousEventDelivery.java @@ -19,6 +19,7 @@ package org.apache.james.mailbox.store.event; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -28,7 +29,7 @@ public class SynchronousEventDelivery implements EventDelivery { private static final Logger LOGGER = LoggerFactory.getLogger(SynchronousEventDelivery.class); @Override - public void deliver(MailboxListener mailboxListener, MailboxListener.MailboxEvent event) { + public void deliver(MailboxListener mailboxListener, Event event) { try { mailboxListener.event(event); } catch (Throwable throwable) { http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListener.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListener.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListener.java index 63fae03..cb2ecb3 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListener.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/BroadcastDelegatingMailboxListener.java @@ -21,6 +21,7 @@ package org.apache.james.mailbox.store.event.distributed; import java.util.Collection; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.exception.MailboxException; @@ -97,8 +98,15 @@ public class BroadcastDelegatingMailboxListener implements DistributedDelegating } @Override - public void event(MailboxEvent event) { + public void event(Event event) { deliverEventToGlobalListeners(event, ListenerType.ONCE); + if (event instanceof MailboxEvent) { + MailboxEvent mailboxEvent = (MailboxEvent) event; + publishMailboxEvent(mailboxEvent); + } + } + + private void publishMailboxEvent(MailboxEvent event) { try { publisher.publish(globalTopic, eventSerializer.serializeEvent(event)); } catch (Throwable t) { @@ -129,7 +137,7 @@ public class BroadcastDelegatingMailboxListener implements DistributedDelegating } } - private void deliverEventToGlobalListeners(MailboxEvent event, ListenerType type) { + private void deliverEventToGlobalListeners(Event event, ListenerType type) { for (MailboxListener mailboxListener : mailboxListenerRegistry.getGlobalListeners()) { if (mailboxListener.getType() == type) { eventDelivery.deliver(mailboxListener, event); http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/RegisteredDelegatingMailboxListener.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/RegisteredDelegatingMailboxListener.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/RegisteredDelegatingMailboxListener.java index 3c2255c..ef3fca6 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/RegisteredDelegatingMailboxListener.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/distributed/RegisteredDelegatingMailboxListener.java @@ -22,6 +22,7 @@ package org.apache.james.mailbox.store.event.distributed; import java.util.Collection; import java.util.Set; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.exception.MailboxException; @@ -103,11 +104,14 @@ public class RegisteredDelegatingMailboxListener implements DistributedDelegatin } @Override - public void event(MailboxEvent event) { + public void event(Event event) { try { deliverEventToOnceGlobalListeners(event); deliverToMailboxPathRegisteredListeners(event); - sendToRemoteJames(event); + if (event instanceof MailboxEvent) { + MailboxEvent mailboxEvent = (MailboxEvent) event; + sendToRemoteJames(mailboxEvent); + } } catch (Throwable t) { LOGGER.error("Error while delegating event {}", event.getClass().getCanonicalName(), t); } @@ -122,22 +126,29 @@ public class RegisteredDelegatingMailboxListener implements DistributedDelegatin } } - private void deliverToMailboxPathRegisteredListeners(MailboxEvent event) throws MailboxException { - Collection<MailboxListener> listenerSnapshot = mailboxListenerRegistry.getLocalMailboxListeners(event.getMailboxPath()); - if (event instanceof MailboxDeletion && listenerSnapshot.size() > 0) { - mailboxListenerRegistry.deleteRegistryFor(event.getMailboxPath()); - mailboxPathRegister.doCompleteUnRegister(event.getMailboxPath()); - } else if (event instanceof MailboxRenamed && listenerSnapshot.size() > 0) { - MailboxRenamed renamed = (MailboxRenamed) event; + private void deliverToMailboxPathRegisteredListeners(Event event) throws MailboxException { + if (event instanceof MailboxEvent) { + MailboxEvent mailboxEvent = (MailboxEvent) event; + deliverToMailboxPathRegisteredListeners(mailboxEvent); + } + } + + private void deliverToMailboxPathRegisteredListeners(MailboxEvent mailboxEvent) throws MailboxException { + Collection<MailboxListener> listenerSnapshot = mailboxListenerRegistry.getLocalMailboxListeners(mailboxEvent.getMailboxPath()); + if (mailboxEvent instanceof MailboxDeletion && listenerSnapshot.size() > 0) { + mailboxListenerRegistry.deleteRegistryFor(mailboxEvent.getMailboxPath()); + mailboxPathRegister.doCompleteUnRegister(mailboxEvent.getMailboxPath()); + } else if (mailboxEvent instanceof MailboxRenamed && listenerSnapshot.size() > 0) { + MailboxRenamed renamed = (MailboxRenamed) mailboxEvent; mailboxListenerRegistry.handleRename(renamed.getMailboxPath(), renamed.getNewPath()); mailboxPathRegister.doRename(renamed.getMailboxPath(), renamed.getNewPath()); } for (MailboxListener listener : listenerSnapshot) { - eventDelivery.deliver(listener, event); + eventDelivery.deliver(listener, mailboxEvent); } } - private void deliverEventToOnceGlobalListeners(MailboxEvent event) { + private void deliverEventToOnceGlobalListeners(Event event) { for (MailboxListener mailboxListener : mailboxListenerRegistry.getGlobalListeners()) { if (mailboxListener.getType() == ListenerType.ONCE) { eventDelivery.deliver(mailboxListener, event); http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/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 0f1ea14..6512b18 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 @@ -22,6 +22,7 @@ import java.util.List; import javax.inject.Inject; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.exception.MailboxException; @@ -54,13 +55,16 @@ public class ListeningCurrentQuotaUpdater implements MailboxListener, QuotaUpdat } @Override - public void event(MailboxEvent event) { + public void event(Event event) { try { - QuotaRoot quotaRoot = quotaRootResolver.getQuotaRoot(event.getMailboxPath()); if (event instanceof Added) { - handleAddedEvent((Added) event, quotaRoot); + Added addedEvent = (Added) event; + QuotaRoot quotaRoot = quotaRootResolver.getQuotaRoot(addedEvent.getMailboxPath()); + handleAddedEvent(addedEvent, quotaRoot); } else if (event instanceof Expunged) { - handleExpungedEvent((Expunged) event, quotaRoot); + Expunged expungedEvent = (Expunged) event; + QuotaRoot quotaRoot = quotaRootResolver.getQuotaRoot(expungedEvent.getMailboxPath()); + handleExpungedEvent(expungedEvent, quotaRoot); } } catch (MailboxException e) { LOGGER.error("Error while updating quotas", e); http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java index 488bab2..92dc0db 100644 --- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java +++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java @@ -21,6 +21,7 @@ package org.apache.james.mailbox.store.search; import java.util.List; import java.util.Optional; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.MessageUid; @@ -67,11 +68,11 @@ public abstract class ListeningMessageSearchIndex implements MessageSearchIndex, /** - * Process the {@link org.apache.james.mailbox.MailboxListener.MailboxEvent} and update the index if + * Process the {@link org.apache.james.mailbox.Event} and update the index if * something relevant is received */ @Override - public void event(MailboxEvent event) { + public void event(Event event) { final MailboxSession session = event.getSession(); try { http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/mailbox/store/src/test/java/org/apache/james/mailbox/store/MailboxEventDispatcherTest.java ---------------------------------------------------------------------- diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MailboxEventDispatcherTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MailboxEventDispatcherTest.java index 8c481b7..d67b242 100644 --- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MailboxEventDispatcherTest.java +++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MailboxEventDispatcherTest.java @@ -26,6 +26,7 @@ import static org.mockito.Mockito.when; import javax.mail.Flags; import javax.mail.Flags.Flag; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.FlagsBuilder; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxSession; @@ -49,9 +50,9 @@ import com.google.common.collect.ImmutableMap; public class MailboxEventDispatcherTest { private static final int sessionId = 10; private static final int MOD_SEQ = -1; - public static final Condition<MailboxListener.MailboxEvent> INSTANCE_OF_EVENT_FLAGS_UPDATED = new Condition<MailboxListener.MailboxEvent>() { + public static final Condition<Event> INSTANCE_OF_EVENT_FLAGS_UPDATED = new Condition<Event>() { @Override - public boolean matches(MailboxListener.MailboxEvent event) { + public boolean matches(Event event) { return event instanceof MailboxListener.FlagsUpdated; } }; http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/GlobalRegistration.java ---------------------------------------------------------------------- diff --git a/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/GlobalRegistration.java b/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/GlobalRegistration.java index 9eee6c5..56e5b54 100644 --- a/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/GlobalRegistration.java +++ b/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/GlobalRegistration.java @@ -22,6 +22,7 @@ package org.apache.james.mailbox.indexer.registrations; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.model.MailboxPath; @@ -54,11 +55,13 @@ public class GlobalRegistration implements MailboxListener { } @Override - public void event(MailboxEvent event) { + public void event(Event event) { if (event instanceof MailboxDeletion) { - isPathDeleted.put(event.getMailboxPath(), true); + MailboxDeletion mailboxDeletion = (MailboxDeletion) event; + isPathDeleted.put(mailboxDeletion.getMailboxPath(), true); } else if (event instanceof MailboxRenamed) { - nameCorrespondence.put(event.getMailboxPath(), ((MailboxRenamed) event).getNewPath()); + MailboxRenamed mailboxRenamed = (MailboxRenamed) event; + nameCorrespondence.put(mailboxRenamed.getMailboxPath(), ((MailboxRenamed) event).getNewPath()); } } } http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/MailboxRegistration.java ---------------------------------------------------------------------- diff --git a/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/MailboxRegistration.java b/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/MailboxRegistration.java index 0f0b49a..6232c92 100644 --- a/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/MailboxRegistration.java +++ b/mailbox/tool/src/main/java/org/apache/james/mailbox/indexer/registrations/MailboxRegistration.java @@ -21,6 +21,7 @@ package org.apache.james.mailbox.indexer.registrations; import java.util.List; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.indexer.events.FlagsMessageEvent; @@ -59,7 +60,7 @@ public class MailboxRegistration implements MailboxListener { } @Override - public void event(MailboxEvent event) { + public void event(Event event) { if (event instanceof FlagsUpdated) { for (UpdatedFlags updatedFlags : ((FlagsUpdated) event).getUpdatedFlags()) { impactingMessageEvents.put(updatedFlags.getUid(), new FlagsMessageEvent(mailboxPath, updatedFlags.getUid(), updatedFlags.getNewFlags())); http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java index bcd7807..caa128f 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java @@ -42,6 +42,7 @@ import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.api.process.SelectedMailbox; import org.apache.james.imap.message.request.IdleRequest; import org.apache.james.imap.message.response.ContinuationResponse; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; @@ -188,7 +189,7 @@ public class IdleProcessor extends AbstractMailboxProcessor<IdleRequest> impleme this.responder = responder; } - public void event(MailboxEvent event) { + public void event(Event event) { if (event instanceof Added || event instanceof Expunged || event instanceof FlagsUpdated) { unsolicitedResponses(session, responder, false); } http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java ---------------------------------------------------------------------- diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java index c60c9b0..bdb6583 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java @@ -27,12 +27,14 @@ import java.util.List; import java.util.Optional; import java.util.Set; import java.util.TreeSet; + import javax.mail.Flags; import javax.mail.Flags.Flag; import org.apache.james.imap.api.ImapSessionUtils; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.api.process.SelectedMailbox; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxManager; import org.apache.james.mailbox.MailboxSession; @@ -305,16 +307,23 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener { } - public synchronized void event(MailboxEvent event) { + public synchronized void event(Event event) { + + if (event instanceof MailboxEvent) { + MailboxEvent mailboxEvent = (MailboxEvent) event; + mailboxEvent(mailboxEvent); + } + } + private void mailboxEvent(MailboxEvent mailboxEvent) { // Check if the event was for the mailbox we are observing - if (event.getMailboxPath().equals(getPath())) { - final long eventSessionId = event.getSession().getSessionId(); - if (event instanceof MessageEvent) { - final MessageEvent messageEvent = (MessageEvent) event; + if (mailboxEvent.getMailboxPath().equals(getPath())) { + final long eventSessionId = mailboxEvent.getSession().getSessionId(); + if (mailboxEvent instanceof MessageEvent) { + final MessageEvent messageEvent = (MessageEvent) mailboxEvent; if (messageEvent instanceof Added) { sizeChanged = true; - final List<MessageUid> uids = ((Added) event).getUids(); + final List<MessageUid> uids = ((Added) mailboxEvent).getUids(); SelectedMailbox sm = session.getSelected(); for (MessageUid uid : uids) { uidMsnConverter.addUid(uid); @@ -326,14 +335,14 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener { FlagsUpdated updated = (FlagsUpdated) messageEvent; List<UpdatedFlags> uFlags = updated.getUpdatedFlags(); if (sessionId != eventSessionId || !silentFlagChanges) { - + for (UpdatedFlags u : uFlags) { if (interestingFlags(u)) { flagUpdateUids.add(u.getUid()); } } } - + SelectedMailbox sm = session.getSelected(); if (sm != null) { // We need to add the UID of the message to the recent @@ -343,33 +352,33 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener { List<UpdatedFlags> uflags = updated.getUpdatedFlags(); for (UpdatedFlags u : uflags) { Iterator<Flag> flags = u.systemFlagIterator(); - + while (flags.hasNext()) { if (Flag.RECENT.equals(flags.next())) { MailboxPath path = sm.getPath(); - if (path != null && path.equals(event.getMailboxPath())) { + if (path != null && path.equals(mailboxEvent.getMailboxPath())) { sm.addRecent(u.getUid()); } } } - - + + } } int size = applicableFlags.getUserFlags().length; FlagsUpdated updatedF = (FlagsUpdated) messageEvent; List<UpdatedFlags> flags = updatedF.getUpdatedFlags(); - + for (UpdatedFlags flag : flags) { applicableFlags.add(flag.getNewFlags()); - + } - + // \RECENT is not a applicable flag in imap so remove it // from the list applicableFlags.remove(Flags.Flag.RECENT); - + if (size < applicableFlags.getUserFlags().length) { applicableFlagsChanged = true; } @@ -379,12 +388,12 @@ public class SelectedMailboxImpl implements SelectedMailbox, MailboxListener { expungedUids.addAll(messageEvent.getUids()); } - } else if (event instanceof MailboxDeletion) { + } else if (mailboxEvent instanceof MailboxDeletion) { if (eventSessionId != sessionId) { isDeletedByOtherSession = true; } - } else if (event instanceof MailboxRenamed) { - final MailboxRenamed mailboxRenamed = (MailboxRenamed) event; + } else if (mailboxEvent instanceof MailboxRenamed) { + final MailboxRenamed mailboxRenamed = (MailboxRenamed) mailboxEvent; path = mailboxRenamed.getNewPath(); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java ---------------------------------------------------------------------- diff --git a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java index 0ffe39b..5b78467 100644 --- a/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java +++ b/server/protocols/jmap-integration-testing/jmap-integration-testing-common/src/test/java/org/apache/james/jmap/methods/integration/SetMessagesMethodTest.java @@ -59,6 +59,7 @@ import org.apache.james.GuiceJamesServer; import org.apache.james.jmap.HttpJmapAuthentication; import org.apache.james.jmap.api.access.AccessToken; import org.apache.james.mailbox.DefaultMailboxes; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.FlagsBuilder; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.Role; @@ -2196,7 +2197,7 @@ public abstract class SetMessagesMethodTest { " ]" + "]"; - List<MailboxListener.MailboxEvent> events = Lists.newArrayList(); + List<Event> events = Lists.newArrayList(); jmapServer.getProbe(JmapGuiceProbe.class).addMailboxListener(new MailboxListener() { @Override public ListenerType getType() { @@ -2209,7 +2210,7 @@ public abstract class SetMessagesMethodTest { } @Override - public void event(MailboxEvent event) { + public void event(Event event) { events.add(event); } }); @@ -2230,7 +2231,7 @@ public abstract class SetMessagesMethodTest { .anyMatch(event -> isAddedToOutboxEvent(messageId, event))); } - private boolean isAddedToOutboxEvent(String messageId, MailboxListener.MailboxEvent event) { + private boolean isAddedToOutboxEvent(String messageId, Event event) { if (!(event instanceof EventFactory.AddedImpl)) { return false; } http://git-wip-us.apache.org/repos/asf/james-project/blob/da4b71ac/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 8d901ba..44734dc 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 @@ -23,6 +23,7 @@ import java.util.stream.Stream; import javax.inject.Inject; +import org.apache.james.mailbox.Event; import org.apache.james.mailbox.MailboxListener; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.RightManager; @@ -58,13 +59,13 @@ public class PropagateLookupRightListener implements MailboxListener { } @Override - public void event(MailboxEvent event) { + public void event(Event event) { MailboxSession mailboxSession = event.getSession(); if (event instanceof MailboxACLUpdated) { MailboxACLUpdated aclUpdateEvent = (MailboxACLUpdated) event; - updateLookupRightOnParent(mailboxSession, event.getMailboxPath(), aclUpdateEvent.getAclDiff()); + updateLookupRightOnParent(mailboxSession, aclUpdateEvent.getMailboxPath(), aclUpdateEvent.getAclDiff()); } else if (event instanceof MailboxRenamed) { MailboxRenamed renamedEvent = (MailboxRenamed) event; updateLookupRightOnParent(mailboxSession, renamedEvent.getNewPath()); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
