Author: norman
Date: Sat Apr 30 15:21:08 2011
New Revision: 1098120

URL: http://svn.apache.org/viewvc?rev=1098120&view=rev
Log:
Make it possible to get the flags for added message via the Added event

Modified:
    
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
    
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/MailboxEventDispatcher.java
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java

Modified: 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListener.java?rev=1098120&r1=1098119&r2=1098120&view=diff
==============================================================================
--- 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
 (original)
+++ 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MailboxListener.java
 Sat Apr 30 15:21:08 2011
@@ -21,6 +21,7 @@ package org.apache.james.mailbox;
 
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import javax.mail.Flags;
 
@@ -165,6 +166,13 @@ public interface MailboxListener {
         public Added(MailboxSession session, MailboxPath path) {
             super(session, path);
         }
+        
+        /**
+         * Return the flags which were set for the added message
+         * 
+         * @return flags
+         */
+        public abstract Map<Long, Flags> getFlags();
     }
 
 }

Modified: 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/MailboxEventDispatcher.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/MailboxEventDispatcher.java?rev=1098120&r1=1098119&r2=1098120&view=diff
==============================================================================
--- 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/MailboxEventDispatcher.java
 (original)
+++ 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/MailboxEventDispatcher.java
 Sat Apr 30 15:21:08 2011
@@ -23,9 +23,12 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.CopyOnWriteArraySet;
 
+import javax.mail.Flags;
+
 import org.apache.james.mailbox.MailboxListener;
 import org.apache.james.mailbox.MailboxPath;
 import org.apache.james.mailbox.MailboxSession;
@@ -71,7 +74,7 @@ public class MailboxEventDispatcher impl
      * @param sessionId
      * @param path
      */
-    public void added(MailboxSession session, List<Long> uids, MailboxPath 
path) {
+    public void added(MailboxSession session, Map<Long, Flags> uids, 
MailboxPath path) {
         pruneClosed();
         final AddedImpl added = new AddedImpl(session, path, uids);
         event(added);
@@ -150,10 +153,12 @@ public class MailboxEventDispatcher impl
     private final static class AddedImpl extends MailboxListener.Added {
 
         private final List<Long> uids;
+        private Map<Long, Flags> added;
 
-        public AddedImpl(final MailboxSession session, final MailboxPath path, 
final List<Long> uids) {
+        public AddedImpl(final MailboxSession session, final MailboxPath path, 
final Map<Long, Flags> added) {
             super(session, path);
-            this.uids = uids;
+            this.uids = new ArrayList<Long>(added.keySet());
+            this.added = added;
         }
 
         /*
@@ -163,6 +168,14 @@ public class MailboxEventDispatcher impl
         public List<Long> getUids() {
             return uids;
         }
+
+        /*
+         * (non-Javadoc)
+         * @see org.apache.james.mailbox.MailboxListener.Added#getFlags()
+         */
+        public Map<Long, Flags> getFlags() {
+            return added;
+        }
     }
 
     private final static class ExpungedImpl extends MailboxListener.Expunged {

Modified: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java?rev=1098120&r1=1098119&r2=1098120&view=diff
==============================================================================
--- 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
 (original)
+++ 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
 Sat Apr 30 15:21:08 2011
@@ -25,9 +25,9 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.PushbackInputStream;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -287,8 +287,10 @@ public abstract class StoreMessageManage
             long nextUid = uidProvider.nextUid(mailboxSession, 
getMailboxEntity());
             final Message<Id> message = createMessage(nextUid, internalDate, 
size, bodyStartOctet, tmpMsgIn.newStream(0, -1), flags, headers, 
propertyBuilder);
             long uid = appendMessageToStore(message, mailboxSession);
-                        
-            dispatcher.added(mailboxSession, Arrays.asList(uid), new 
StoreMailboxPath<Id>(getMailboxEntity()));
+                       
+            Map<Long, Flags> uids = new HashMap<Long, Flags>();
+            uids.put(uid, flags);
+            dispatcher.added(mailboxSession, uids, new 
StoreMailboxPath<Id>(getMailboxEntity()));
             return uid;
         } catch (IOException e) {
             throw new MailboxException("Unable to parse message", e);
@@ -501,15 +503,10 @@ public abstract class StoreMessageManage
      */
     public List<MessageRange> copyTo(MessageRange set, StoreMessageManager<Id> 
toMailbox, MailboxSession session) throws MailboxException {
         try {
-            Iterator<Long> copiedUids = copy(set, toMailbox, session);
-            List<Long> uids = new ArrayList<Long>();
-            while(copiedUids.hasNext()) {
-                long uid = copiedUids.next();
-                uids.add(uid);
-            }
-            dispatcher.added(session, uids, new 
StoreMailboxPath<Id>(toMailbox.getMailboxEntity()));
+            Map<Long, Flags> copiedUids = copy(set, toMailbox, session);
+            dispatcher.added(session, copiedUids, new 
StoreMailboxPath<Id>(toMailbox.getMailboxEntity()));
 
-            return MessageRange.toRanges(uids);
+            return MessageRange.toRanges(new 
ArrayList<Long>(copiedUids.keySet()));
         } catch (MailboxException e) {
             throw new MailboxException("Unable to parse message", e);
         }
@@ -723,20 +720,24 @@ public abstract class StoreMessageManage
      * (non-Javadoc)
      * @see 
org.apache.james.mailbox.store.AbstractStoreMessageManager#copy(org.apache.james.mailbox.MessageRange,
 org.apache.james.mailbox.store.AbstractStoreMessageManager, 
org.apache.james.mailbox.MailboxSession)
      */
-    protected Iterator<Long> copy(MessageRange set, final 
StoreMessageManager<Id> to, final MailboxSession session) throws 
MailboxException {
+    private Map<Long, Flags> copy(MessageRange set, final 
StoreMessageManager<Id> to, final MailboxSession session) throws 
MailboxException {
         try {
             MessageMapper<Id> messageMapper = 
mapperFactory.getMessageMapper(session);
 
-            final List<Long> copiedMessages = new ArrayList<Long>();
+            final Map<Long, Flags> copiedMessages = new HashMap<Long, Flags>();
             messageMapper.findInMailbox(getMailboxEntity(), set, new 
MailboxMembershipCallback<Id>() {
 
                 public void onMailboxMembers(List<Message<Id>> originalRows) 
throws MailboxException {
                     Iterator<Long> ids = to.copy(originalRows, session);
-                    while (ids.hasNext())
-                        copiedMessages.add(ids.next());
+                    int i = 0; 
+                    while (ids.hasNext()) {
+                        
+                        copiedMessages.put(ids.next(), 
originalRows.get(i).createFlags());
+                        i++;
+                    }
                 }
             });
-            return copiedMessages.iterator();
+            return copiedMessages;
 
         } catch (MailboxException e) {
             throw new MailboxException("Unable to parse message", e);



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to