Author: btellier Date: Sat Nov 28 12:55:45 2015 New Revision: 1716955 URL: http://svn.apache.org/viewvc?rev=1716955&view=rev Log: MAILBOX-211 Introduce event factories
Added: james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java Modified: james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java Added: james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java?rev=1716955&view=auto ============================================================================== --- james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java (added) +++ james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java Sat Nov 28 12:55:45 2015 @@ -0,0 +1,176 @@ + + +package org.apache.james.mailbox.store.event; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import org.apache.james.mailbox.MailboxListener; +import org.apache.james.mailbox.MailboxSession; +import org.apache.james.mailbox.model.MailboxPath; +import org.apache.james.mailbox.model.MessageMetaData; +import org.apache.james.mailbox.model.UpdatedFlags; +import org.apache.james.mailbox.store.StoreMailboxPath; +import org.apache.james.mailbox.store.mail.model.Mailbox; +import org.apache.james.mailbox.store.mail.model.MailboxId; + +import java.util.List; +import java.util.Map; +import java.util.SortedMap; + +public class EventFactory<Id extends MailboxId> { + + public interface MailboxAware<LocalId extends MailboxId> { + Mailbox<LocalId> getMailbox(); + } + + public final class AddedImpl<LocalId extends MailboxId> extends MailboxListener.Added implements MailboxAware<LocalId> { + private final Map<Long, MessageMetaData> added; + private final Mailbox<LocalId> mailbox; + + public AddedImpl(final MailboxSession session, final Mailbox<LocalId> mailbox, final SortedMap<Long, MessageMetaData> added) { + super(session, new StoreMailboxPath<LocalId>(mailbox)); + this.added = ImmutableMap.copyOf(added); + this.mailbox = mailbox; + } + + public List<Long> getUids() { + return ImmutableList.copyOf(added.keySet()); + } + + public MessageMetaData getMetaData(long uid) { + return added.get(uid); + } + + public Mailbox<LocalId> getMailbox() { + return mailbox; + } + } + + public final class ExpungedImpl<LocalId extends MailboxId> extends MailboxListener.Expunged implements MailboxAware<LocalId> { + private final Map<Long, MessageMetaData> uids; + private final Mailbox<LocalId> mailbox; + + public ExpungedImpl(MailboxSession session, final Mailbox<LocalId> mailbox, final Map<Long, MessageMetaData> uids) { + super(session, new StoreMailboxPath<LocalId>(mailbox)); + this.uids = ImmutableMap.copyOf(uids); + this.mailbox = mailbox; + } + + public List<Long> getUids() { + return ImmutableList.copyOf(uids.keySet()); + } + + public MessageMetaData getMetaData(long uid) { + return uids.get(uid); + } + + public Mailbox<LocalId> getMailbox() { + return mailbox; + } + } + + public final class FlagsUpdatedImpl<LocalId extends MailboxId> extends MailboxListener.FlagsUpdated implements MailboxAware<LocalId> { + private final List<Long> uids; + + private final Mailbox<LocalId> mailbox; + + private final List<UpdatedFlags> uFlags; + + public FlagsUpdatedImpl(MailboxSession session, final Mailbox<LocalId> mailbox, final List<Long> uids, final List<UpdatedFlags> uFlags) { + super(session, new StoreMailboxPath<LocalId>(mailbox)); + this.uids = ImmutableList.copyOf(uids); + this.uFlags = ImmutableList.copyOf(uFlags); + this.mailbox = mailbox; + } + + public List<Long> getUids() { + return uids; + } + + public List<UpdatedFlags> getUpdatedFlags() { + return uFlags; + } + + public Mailbox<LocalId> getMailbox() { + return mailbox; + } + + } + + public final class MailboxDeletionImpl<LocalId extends MailboxId> extends MailboxListener.MailboxDeletion implements MailboxAware<LocalId> { + private final Mailbox<LocalId> mailbox; + + public MailboxDeletionImpl(MailboxSession session, Mailbox<LocalId> mailbox) { + super(session, new StoreMailboxPath<LocalId>(mailbox)); + this.mailbox = mailbox; + } + + + public Mailbox<LocalId> getMailbox() { + return mailbox; + } + + } + + public final class MailboxAddedImpl<LocalId extends MailboxId> extends MailboxListener.MailboxAdded implements MailboxAware<LocalId> { + + private final Mailbox<LocalId> mailbox; + + public MailboxAddedImpl(MailboxSession session, Mailbox<LocalId> mailbox) { + super(session, new StoreMailboxPath<LocalId>(mailbox)); + this.mailbox = mailbox; + } + + + public Mailbox<LocalId> getMailbox() { + return mailbox; + } + + } + + public final class MailboxRenamedEventImpl<LocalId extends MailboxId> extends MailboxListener.MailboxRenamed implements MailboxAware<LocalId> { + + private final MailboxPath newPath; + private final Mailbox<LocalId> newMailbox; + + public MailboxRenamedEventImpl(final MailboxSession session, final MailboxPath oldPath, final Mailbox<LocalId> newMailbox) { + super(session, oldPath); + this.newPath = new StoreMailboxPath<LocalId>(newMailbox); + this.newMailbox = newMailbox; + } + + public MailboxPath getNewPath() { + return newPath; + } + + @Override + public Mailbox<LocalId> getMailbox() { + return newMailbox; + } + } + + public MailboxListener.Added added(MailboxSession session, SortedMap<Long, MessageMetaData> uids, Mailbox<Id> mailbox) { + return new AddedImpl<Id>(session, mailbox, uids); + } + + public MailboxListener.Expunged expunged(final MailboxSession session, Map<Long, MessageMetaData> uids, Mailbox<Id> mailbox) { + return new ExpungedImpl<Id>(session, mailbox, uids); + } + + public MailboxListener.FlagsUpdated flagsUpdated(MailboxSession session, final List<Long> uids, final Mailbox<Id> mailbox, final List<UpdatedFlags> uflags) { + return new FlagsUpdatedImpl<Id>(session, mailbox, uids, uflags); + } + + public MailboxListener.MailboxRenamed mailboxRenamed(MailboxSession session, MailboxPath from, Mailbox<Id> to) { + return new MailboxRenamedEventImpl<Id>(session, from, to); + } + + public MailboxListener.MailboxDeletion mailboxDeleted(MailboxSession session, Mailbox<Id> mailbox) { + return new MailboxDeletionImpl<Id>(session, mailbox); + } + + public MailboxListener.MailboxAdded mailboxAdded(MailboxSession session, Mailbox<Id> mailbox) { + return new MailboxAddedImpl<Id>(session, mailbox); + } + +} Modified: james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java?rev=1716955&r1=1716954&r2=1716955&view=diff ============================================================================== --- james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java (original) +++ james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxEventDispatcher.java Sat Nov 28 12:55:45 2015 @@ -19,19 +19,15 @@ package org.apache.james.mailbox.store.event; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.SortedMap; import org.apache.james.mailbox.MailboxListener; -import org.apache.james.mailbox.MailboxListener.MailboxAdded; -import org.apache.james.mailbox.MailboxListener.MailboxDeletion; import org.apache.james.mailbox.MailboxSession; import org.apache.james.mailbox.model.MailboxPath; import org.apache.james.mailbox.model.MessageMetaData; import org.apache.james.mailbox.model.UpdatedFlags; -import org.apache.james.mailbox.store.StoreMailboxPath; import org.apache.james.mailbox.store.mail.model.MailboxId; import org.apache.james.mailbox.store.mail.model.Mailbox; @@ -40,260 +36,68 @@ import org.apache.james.mailbox.store.ma */ public class MailboxEventDispatcher<Id extends MailboxId> { - private final MailboxListener listener; + private final EventFactory<Id> eventFactory; public MailboxEventDispatcher(MailboxListener listener) { this.listener = listener; + this.eventFactory = new EventFactory<Id>(); } - /** * Should get called when a new message was added to a Mailbox. All * registered MailboxListener will get triggered then - * + * * @param session The mailbox session * @param uids Sorted map with uids and message meta data * @param mailbox The mailbox */ public void added(MailboxSession session, SortedMap<Long, MessageMetaData> uids, Mailbox<Id> mailbox) { - final AddedImpl added = new AddedImpl(session, mailbox, uids); - listener.event(added); + listener.event(eventFactory.added(session, uids, mailbox)); } /** * Should get called when a message was expunged from a Mailbox. All * registered MailboxListener will get triggered then - * + * * @param session The mailbox session * @param uids Sorted map with uids and message meta data * @param mailbox The mailbox */ public void expunged(final MailboxSession session, Map<Long, MessageMetaData> uids, Mailbox<Id> mailbox) { - final ExpungedImpl expunged = new ExpungedImpl(session, mailbox, uids); - listener.event(expunged); + listener.event(eventFactory.expunged(session, uids, mailbox)); } /** * Should get called when the message flags were update in a Mailbox. All * registered MailboxListener will get triggered then - * - * @param session - * @param uids - * @param mailbox - * @param uflags */ public void flagsUpdated(MailboxSession session, final List<Long> uids, final Mailbox<Id> mailbox, final List<UpdatedFlags> uflags) { - final FlagsUpdatedImpl flags = new FlagsUpdatedImpl(session, mailbox, uids, uflags); - listener.event(flags); + listener.event(eventFactory.flagsUpdated(session, uids, mailbox, uflags)); } - - /** * Should get called when a Mailbox was renamed. All registered * MailboxListener will get triggered then - * - * @param session - * @param from - * @param to */ public void mailboxRenamed(MailboxSession session, MailboxPath from, Mailbox<Id> to) { - listener.event(new MailboxRenamedEventImpl(session, from, to)); - } - - public final class AddedImpl extends MailboxListener.Added { - - /** - * - */ - private static final long serialVersionUID = 1L; - private SortedMap<Long, MessageMetaData> added; - private final Mailbox<Id> mailbox; - - public AddedImpl(final MailboxSession session, final Mailbox<Id> mailbox, final SortedMap<Long, MessageMetaData> added) { - super(session, new StoreMailboxPath<Id>(mailbox)); - this.added = added; - this.mailbox = mailbox; - } - - /** - * @see org.apache.james.mailbox.MailboxListener.MessageEvent#getUids() - */ - public List<Long> getUids() { - return new ArrayList<Long>(added.keySet()); - } - - /** - * @see org.apache.james.mailbox.MailboxListener.Added#getMetaData(long) - */ - public MessageMetaData getMetaData(long uid) { - return added.get(uid); - } - - public Mailbox<Id> getMailbox() { - return mailbox; - } - } - - public final class ExpungedImpl extends MailboxListener.Expunged { - /** - * - */ - private static final long serialVersionUID = 1L; - private final Map<Long, MessageMetaData> uids; - private final Mailbox<Id> mailbox; - - public ExpungedImpl(MailboxSession session, final Mailbox<Id> mailbox, final Map<Long, MessageMetaData> uids) { - super(session, new StoreMailboxPath<Id>(mailbox)); - this.uids = uids; - this.mailbox = mailbox; - } - - /** - * @see org.apache.james.mailbox.MailboxListener.MessageEvent#getUids() - */ - public List<Long> getUids() { - return new ArrayList<Long>(uids.keySet()); - } - - /** - * @see org.apache.james.mailbox.MailboxListener.Expunged#getMetaData(long) - */ - public MessageMetaData getMetaData(long uid) { - return uids.get(uid); - } - - public Mailbox<Id> getMailbox() { - return mailbox; - } + listener.event(eventFactory.mailboxRenamed(session, from, to)); } - public final class FlagsUpdatedImpl extends MailboxListener.FlagsUpdated { - /** - * - */ - private static final long serialVersionUID = 1L; - private final List<Long> uids; - - private final Mailbox<Id> mailbox; - - private final List<UpdatedFlags> uFlags; - - public FlagsUpdatedImpl(MailboxSession session, final Mailbox<Id> mailbox, final List<Long> uids, final List<UpdatedFlags> uFlags) { - super(session, new StoreMailboxPath<Id>(mailbox)); - this.uids = uids; - this.uFlags = uFlags; - this.mailbox = mailbox; - } - - /** - * @see org.apache.james.mailbox.MailboxListener.MessageEvent#getUids() - */ - public List<Long> getUids() { - return uids; - } - - /** - * @see org.apache.james.mailbox.MailboxListener.FlagsUpdated#getUpdatedFlags() - */ - public List<UpdatedFlags> getUpdatedFlags() { - return uFlags; - } - - public Mailbox<Id> getMailbox() { - return mailbox; - } - - } - - public final class MailboxDeletionImpl extends MailboxDeletion { - /** - * - */ - private static final long serialVersionUID = 1L; - private final Mailbox<Id> mailbox; - - public MailboxDeletionImpl(MailboxSession session, Mailbox<Id> mailbox) { - super(session, new StoreMailboxPath<Id>(mailbox)); - this.mailbox = mailbox; - } - - - public Mailbox<Id> getMailbox() { - return mailbox; - } - - } - - public final class MailboxAddedImpl extends MailboxAdded { - /** - * - */ - private static final long serialVersionUID = 1L; - - private final Mailbox<Id> mailbox; - - public MailboxAddedImpl(MailboxSession session, Mailbox<Id> mailbox) { - super(session, new StoreMailboxPath<Id>(mailbox)); - this.mailbox = mailbox; - } - - - public Mailbox<Id> getMailbox() { - return mailbox; - } - - } /** * Should get called when a Mailbox was deleted. All registered * MailboxListener will get triggered then - * - * @param session - * @param mailbox */ public void mailboxDeleted(MailboxSession session, Mailbox<Id> mailbox) { - final MailboxDeletion event = new MailboxDeletionImpl(session, mailbox); - listener.event(event); + listener.event(eventFactory.mailboxDeleted(session, mailbox)); } /** * Should get called when a Mailbox was added. All registered * MailboxListener will get triggered then - * - * @param session - * @param mailbox */ public void mailboxAdded(MailboxSession session, Mailbox<Id> mailbox) { - final MailboxAdded event = new MailboxAddedImpl(session, mailbox); - listener.event(event); + listener.event(eventFactory.mailboxAdded(session, mailbox)); } - public final class MailboxRenamedEventImpl extends MailboxListener.MailboxRenamed { - /** - * - */ - private static final long serialVersionUID = 1L; - - private final MailboxPath newPath; - private final Mailbox<Id> newMailbox; - - public MailboxRenamedEventImpl(final MailboxSession session, final MailboxPath oldPath, final Mailbox<Id> newMailbox) { - super(session, oldPath); - this.newPath = new StoreMailboxPath<Id>(newMailbox); - this.newMailbox = newMailbox; - } - - /** - * @see - * org.apache.james.mailbox.MailboxListener.MailboxRenamed#getNewPath() - */ - public MailboxPath getNewPath() { - return newPath; - } - - public Mailbox<Id> getNewMailbox() { - return newMailbox; - } - } } Modified: james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java URL: http://svn.apache.org/viewvc/james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java?rev=1716955&r1=1716954&r2=1716955&view=diff ============================================================================== --- james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java (original) +++ james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java Sat Nov 28 12:55:45 2015 @@ -28,10 +28,7 @@ import org.apache.james.mailbox.MailboxS import org.apache.james.mailbox.exception.MailboxException; import org.apache.james.mailbox.model.MessageRange; import org.apache.james.mailbox.model.UpdatedFlags; -import org.apache.james.mailbox.store.event.MailboxEventDispatcher.AddedImpl; -import org.apache.james.mailbox.store.event.MailboxEventDispatcher.ExpungedImpl; -import org.apache.james.mailbox.store.event.MailboxEventDispatcher.FlagsUpdatedImpl; -import org.apache.james.mailbox.store.event.MailboxEventDispatcher.MailboxDeletionImpl; +import org.apache.james.mailbox.store.event.EventFactory; import org.apache.james.mailbox.store.mail.MessageMapper.FetchType; import org.apache.james.mailbox.store.mail.MessageMapperFactory; import org.apache.james.mailbox.store.mail.model.MailboxId; @@ -75,8 +72,8 @@ public abstract class ListeningMessageSe try { if (event instanceof MessageEvent) { - if (event instanceof AddedImpl) { - AddedImpl added = (AddedImpl) event; + if (event instanceof EventFactory.AddedImpl) { + EventFactory.AddedImpl added = (EventFactory.AddedImpl) event; final Mailbox<Id> mailbox = added.getMailbox(); Iterator<Long> uids = added.getUids().iterator(); @@ -93,8 +90,8 @@ public abstract class ListeningMessageSe } } - } else if (event instanceof ExpungedImpl) { - ExpungedImpl expunged = (ExpungedImpl) event; + } else if (event instanceof EventFactory.ExpungedImpl) { + EventFactory.ExpungedImpl expunged = (EventFactory.ExpungedImpl) event; final Mailbox<Id> mailbox = expunged.getMailbox(); List<Long> uids = expunged.getUids(); List<MessageRange> ranges = MessageRange.toRanges(uids); @@ -106,8 +103,8 @@ public abstract class ListeningMessageSe session.getLog().debug("Unable to deleted range " + range.toString() + " from index for mailbox " + mailbox, e); } } - } else if (event instanceof FlagsUpdatedImpl) { - FlagsUpdatedImpl flagsUpdated = (FlagsUpdatedImpl) event; + } else if (event instanceof EventFactory.FlagsUpdatedImpl) { + EventFactory.FlagsUpdatedImpl flagsUpdated = (EventFactory.FlagsUpdatedImpl) event; final Mailbox<Id> mailbox = flagsUpdated.getMailbox(); Iterator<UpdatedFlags> flags = flagsUpdated.getUpdatedFlags().iterator(); @@ -120,9 +117,9 @@ public abstract class ListeningMessageSe } } } - } else if (event instanceof MailboxDeletionImpl) { + } else if (event instanceof EventFactory.MailboxDeletionImpl) { // delete all indexed messages for the mailbox - delete(session, ((MailboxDeletionImpl) event).getMailbox(), MessageRange.all()); + delete(session, ((EventFactory.MailboxDeletionImpl) event).getMailbox(), MessageRange.all()); } } catch (MailboxException e) { session.getLog().debug("Unable to update index", e); @@ -139,7 +136,7 @@ public abstract class ListeningMessageSe /** * Add the {@link Message} for the given {@link Mailbox} to the index - * + * * @param session * @param mailbox * @param message @@ -149,7 +146,7 @@ public abstract class ListeningMessageSe /** * Delete the {@link MessageRange} for the given {@link Mailbox} from the index - * + * * @param session * @param mailbox * @param range @@ -160,7 +157,7 @@ public abstract class ListeningMessageSe /** * Update the {@link MessageRange} for the given {@link Mailbox} with the new {@link Flags} in the index - * + * * @param session * @param mailbox * @param range --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org