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 2015/11/28 13:55:45 UTC

svn commit: r1716955 - in /james/project/trunk/mailbox/store/src/main/java/org/apache/james/mailbox/store: event/EventFactory.java event/MailboxEventDispatcher.java search/ListeningMessageSearchIndex.java

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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org