Author: norman
Date: Tue May 24 10:27:55 2011
New Revision: 1126967

URL: http://svn.apache.org/viewvc?rev=1126967&view=rev
Log:
Expunged events now contains meta-data for the expunged messages. This makes it 
easier to write MailboxListeners 

Added:
    
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageMetaData.java
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/SimpleMessageMetaData.java
      - copied, changed from r1125789, 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java
Removed:
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java
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/MessageResult.java
    
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/util/MailboxEventDispatcher.java
    
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java
    
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
    
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMessage.java
    
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
    
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultIterator.java
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
    
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.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=1126967&r1=1126966&r2=1126967&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
 Tue May 24 10:27:55 2011
@@ -19,10 +19,8 @@
 
 package org.apache.james.mailbox;
 
-import java.util.Date;
 import java.util.List;
 
-import javax.mail.Flags;
 
 /**
  * Listens to <code>Mailbox</code> events.<br>
@@ -143,6 +141,13 @@ public interface MailboxListener {
         public Expunged(MailboxSession session, MailboxPath path) {
             super(session, path);
         }
+        
+        /**
+         * Return the flags which were set for the added message
+         * 
+         * @return flags
+         */
+        public abstract MessageMetaData getMetaData(long uid);
     }
 
     /**
@@ -173,12 +178,6 @@ public interface MailboxListener {
          */
         public abstract MessageMetaData getMetaData(long uid);
         
-        public interface MessageMetaData {
-            public long getUid();
-            public Flags getFlags();
-            public long getSize();
-            public Date getInternalDate();
-        }
     }
 
 }

Added: 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageMetaData.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageMetaData.java?rev=1126967&view=auto
==============================================================================
--- 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageMetaData.java
 (added)
+++ 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageMetaData.java
 Tue May 24 10:27:55 2011
@@ -0,0 +1,64 @@
+/****************************************************************
+ * 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;
+
+import java.util.Date;
+
+import javax.mail.Flags;
+
+/**
+ * Represent the {@link MessageMetaData} for a message
+ * 
+ *
+ */
+public interface MessageMetaData {
+
+    /**
+     * Return the uid of the message which the MessageResult belongs to
+     * 
+     * @return uid
+     */
+    long getUid();
+
+    /**
+     * Return the {@link Flags} 
+     * 
+     * @return flags
+     */
+    Flags getFlags();
+    
+    /**
+     * Return the size in bytes
+     * 
+     * @return size
+     */
+    long getSize();
+
+    /**
+     * <p>
+     * IMAP defines this as the time when the message has arrived to the server
+     * (by smtp). Clients are also allowed to set the internalDate on append.
+     * </p>
+     * <p>
+     * Is this Mail.getLastUpdates() for James delivery? Should we use
+     * MimeMessage.getReceivedDate()?
+     * </p>
+     */
+    Date getInternalDate();
+}

Modified: 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageResult.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageResult.java?rev=1126967&r1=1126966&r2=1126967&view=diff
==============================================================================
--- 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageResult.java
 (original)
+++ 
james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageResult.java
 Tue May 24 10:27:55 2011
@@ -19,11 +19,9 @@
 
 package org.apache.james.mailbox;
 
-import java.util.Date;
 import java.util.Iterator;
 import java.util.Set;
 
-import javax.mail.Flags;
 
 /**
  * <p>
@@ -53,7 +51,7 @@ import javax.mail.Flags;
  * </p>
  */
 
-public interface MessageResult extends Comparable<MessageResult>, Headers {
+public interface MessageResult extends Comparable<MessageResult>, 
MessageMetaData, Headers {
 
     /**
      * Indicates the results fetched.
@@ -135,41 +133,6 @@ public interface MessageResult extends C
     MimeDescriptor getMimeDescriptor() throws MailboxException;
 
     /**
-     * Return the uid of the message which the MessageResult belongs to
-     * 
-     * @return uid
-     */
-    long getUid();
-
-    /**
-     * <p>
-     * IMAP defines this as the time when the message has arrived to the server
-     * (by smtp). Clients are also allowed to set the internalDate on append.
-     * </p>
-     * <p>
-     * Is this Mail.getLastUpdates() for James delivery? Should we use
-     * MimeMessage.getReceivedDate()?
-     * </p>
-     */
-
-    Date getInternalDate();
-
-    /**
-     * TODO optional, to be decided <br>
-     * maybe this is a good thing because IMAP often requests only the Flags 
and
-     * this way we don't need to create a lazy-loading MimeMessage instance 
just
-     * for the Flags.
-     */
-    Flags getFlags() throws MailboxException;
-
-    /**
-     * Return the size in bytes
-     * 
-     * @return size
-     */
-    long getSize();
-
-    /**
      * Iterates the message headers for the given part in a multipart message.
      * 
      * @param path

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=1126967&r1=1126966&r2=1126967&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
 Tue May 24 10:27:55 2011
@@ -28,9 +28,9 @@ import java.util.Set;
 import java.util.concurrent.CopyOnWriteArraySet;
 
 import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.MailboxListener.Added.MessageMetaData;
 import org.apache.james.mailbox.MailboxPath;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageMetaData;
 import org.apache.james.mailbox.UpdatedFlags;
 
 /**
@@ -87,7 +87,7 @@ public class MailboxEventDispatcher impl
      * @param uids
      * @param path
      */
-    public void expunged(final MailboxSession session, final List<Long> uids, 
MailboxPath path) {
+    public void expunged(final MailboxSession session,  Map<Long, 
MessageMetaData> uids, MailboxPath path) {
         final ExpungedImpl expunged = new ExpungedImpl(session, path, uids);
         event(expunged);
     }
@@ -179,9 +179,9 @@ public class MailboxEventDispatcher impl
 
     private final static class ExpungedImpl extends MailboxListener.Expunged {
 
-        private final List<Long> uids;
+        private final Map<Long, MessageMetaData> uids;
 
-        public ExpungedImpl(MailboxSession session, final MailboxPath path, 
final List<Long> uids) {
+        public ExpungedImpl(MailboxSession session, final MailboxPath path, 
final  Map<Long, MessageMetaData> uids) {
             super(session, path);
             this.uids = uids;
         }
@@ -190,7 +190,15 @@ public class MailboxEventDispatcher impl
          * @see org.apache.james.mailbox.MailboxListener.MessageEvent#getUids()
          */
         public List<Long> getUids() {
-            return uids;
+            return new ArrayList<Long>(uids.keySet());
+        }
+        
+        /*
+         * (non-Javadoc)
+         * @see 
org.apache.james.mailbox.MailboxListener.Expunged#getMetaData(long)
+         */
+        public MessageMetaData getMetaData(long uid) {
+            return uids.get(uid);
         }
     }
 

Modified: 
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java?rev=1126967&r1=1126966&r2=1126967&view=diff
==============================================================================
--- 
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java
 (original)
+++ 
james/mailbox/trunk/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/JCRMessageMapper.java
 Tue May 24 10:27:55 2011
@@ -22,8 +22,10 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import javax.jcr.ItemNotFoundException;
 import javax.jcr.Node;
@@ -38,6 +40,7 @@ import org.apache.jackrabbit.commons.Jcr
 import org.apache.jackrabbit.util.ISO9075;
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageMetaData;
 import org.apache.james.mailbox.MessageRange;
 import org.apache.james.mailbox.MessageRange.Type;
 import org.apache.james.mailbox.UpdatedFlags;
@@ -45,6 +48,7 @@ import org.apache.james.mailbox.jcr.Abst
 import org.apache.james.mailbox.jcr.MailboxSessionJCRRepository;
 import org.apache.james.mailbox.jcr.mail.model.JCRMessage;
 import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.SimpleMessageMetaData;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.Message;
 import org.slf4j.Logger;
@@ -377,7 +381,7 @@ public class JCRMessageMapper extends Ab
      * (non-Javadoc)
      * @see 
org.apache.james.mailbox.store.mail.MessageMapper#expungeMarkedForDeletionInMailbox(org.apache.james.mailbox.store.mail.model.Mailbox,
 org.apache.james.mailbox.MessageRange)
      */
-    public Iterator<Long> expungeMarkedForDeletionInMailbox(Mailbox<String> 
mailbox, MessageRange set) throws MailboxException {
+    public Map<Long, MessageMetaData> 
expungeMarkedForDeletionInMailbox(Mailbox<String> mailbox, MessageRange set) 
throws MailboxException {
         try {
             final List<Message<String>> results;
             final long from = set.getUidFrom();
@@ -398,14 +402,14 @@ public class JCRMessageMapper extends Ab
                     results = findDeletedMessagesInMailboxBetweenUIDs(mailbox, 
from, to);
                     break;       
             }
-            List<Long> uids = new ArrayList<Long>();
+            Map<Long, MessageMetaData> uids = new HashMap<Long, 
MessageMetaData>();
             for (int i = 0; i < results.size(); i++) {
                 Message<String> m = results.get(i);
                 long uid = m.getUid();
+                uids.put(uid, new SimpleMessageMetaData(m));
                 delete(mailbox, m);
-                uids.add(uid);
             }
-            return uids.iterator();
+            return uids;
         } catch (RepositoryException e) {
             throw new MailboxException("Unable to search MessageRange " + set 
+ " in mailbox " + mailbox, e);
         }

Modified: 
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java?rev=1126967&r1=1126966&r2=1126967&view=diff
==============================================================================
--- 
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
 (original)
+++ 
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
 Tue May 24 10:27:55 2011
@@ -19,8 +19,10 @@
 package org.apache.james.mailbox.jpa.mail;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import javax.mail.Flags;
 import javax.persistence.EntityManagerFactory;
@@ -28,6 +30,7 @@ import javax.persistence.PersistenceExce
 import javax.persistence.Query;
 
 import org.apache.james.mailbox.MailboxException;
+import org.apache.james.mailbox.MessageMetaData;
 import org.apache.james.mailbox.MessageRange;
 import org.apache.james.mailbox.UpdatedFlags;
 import org.apache.james.mailbox.MessageRange.Type;
@@ -37,6 +40,7 @@ import org.apache.james.mailbox.jpa.mail
 import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMessage;
 import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAStreamingMessage;
 import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.SimpleMessageMetaData;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.Message;
 import org.apache.openjpa.persistence.ArgumentException;
@@ -136,36 +140,51 @@ public class JPAMessageMapper extends JP
      * (non-Javadoc)
      * @see 
org.apache.james.mailbox.store.mail.MessageMapper#expungeMarkedForDeletionInMailbox(org.apache.james.mailbox.store.mail.model.Mailbox,
 org.apache.james.mailbox.MessageRange)
      */
-    public Iterator<Long> expungeMarkedForDeletionInMailbox(Mailbox<Long> 
mailbox, final MessageRange set) throws MailboxException {
+    public Map<Long, MessageMetaData> 
expungeMarkedForDeletionInMailbox(Mailbox<Long> mailbox, final MessageRange 
set) throws MailboxException {
         try {
-            final List<Long> results;
+            final Map<Long, MessageMetaData> data;
+            final List<Message<Long>> results;
             final long from = set.getUidFrom();
             final long to = set.getUidTo();
+            
             switch (set.getType()) {
                 case ONE:
                     results = findDeletedMessagesInMailboxWithUID(mailbox, 
from);
+                    data = createMetaData(results);
                     deleteDeletedMessagesInMailboxWithUID(mailbox, from);
                     break;
                 case RANGE:
                     results = findDeletedMessagesInMailboxBetweenUIDs(mailbox, 
from, to);
+                    data = createMetaData(results);
                     deleteDeletedMessagesInMailboxBetweenUIDs(mailbox, from, 
to);
                     break;
                 case FROM:
                     results = findDeletedMessagesInMailboxAfterUID(mailbox, 
from);
+                    data = createMetaData(results);
                     deleteDeletedMessagesInMailboxAfterUID(mailbox, from);
                     break;
                 default:
                 case ALL:
                     results = findDeletedMessagesInMailbox(mailbox);
+                    data = createMetaData(results);
                     deleteDeletedMessagesInMailbox(mailbox);
                     break;
             }
             
-            return results.iterator();
+            return data;
         } catch (PersistenceException e) {
             throw new MailboxException("Search of MessageRange " + set + " 
failed in mailbox " + mailbox, e);
         }
     }
+    
+    private Map<Long, MessageMetaData> createMetaData(List<Message<Long>> 
uids) {
+        final Map<Long, MessageMetaData> data = new HashMap<Long, 
MessageMetaData>();
+        for (int i = 0; i < uids.size(); i++) {
+            Message<Long> m = uids.get(i);
+            data.put(m.getUid(),  new SimpleMessageMetaData(m));
+        }
+        return data;
+    }
 
 
     private int deleteDeletedMessagesInMailbox(Mailbox<Long> mailbox) {
@@ -193,26 +212,26 @@ public class JPAMessageMapper extends JP
 
     
     @SuppressWarnings("unchecked")
-    private List<Long> findDeletedMessagesInMailbox(Mailbox<Long> mailbox) {
+    private List<Message<Long>> findDeletedMessagesInMailbox(Mailbox<Long> 
mailbox) {
         return 
getEntityManager().createNamedQuery("findDeletedMessagesInMailbox").setParameter("idParam",
 mailbox.getMailboxId()).getResultList();
     }
 
     @SuppressWarnings("unchecked")
-    private List<Long> findDeletedMessagesInMailboxAfterUID(Mailbox<Long> 
mailbox, long uid) {
+    private List<Message<Long>> 
findDeletedMessagesInMailboxAfterUID(Mailbox<Long> mailbox, long uid) {
         return 
getEntityManager().createNamedQuery("findDeletedMessagesInMailboxAfterUID")
         .setParameter("idParam", mailbox.getMailboxId())
         .setParameter("uidParam", uid).getResultList();
     }
 
     @SuppressWarnings("unchecked")
-    private List<Long> findDeletedMessagesInMailboxWithUID(Mailbox<Long> 
mailbox, long uid) {
+    private List<Message<Long>> 
findDeletedMessagesInMailboxWithUID(Mailbox<Long> mailbox, long uid) {
         return 
getEntityManager().createNamedQuery("findDeletedMessagesInMailboxWithUID")
         .setParameter("idParam", mailbox.getMailboxId())
         .setParameter("uidParam", uid).setMaxResults(1).getResultList();
     }
 
     @SuppressWarnings("unchecked")
-    private List<Long> findDeletedMessagesInMailboxBetweenUIDs(Mailbox<Long> 
mailbox, long from, long to) {
+    private List<Message<Long>> 
findDeletedMessagesInMailboxBetweenUIDs(Mailbox<Long> mailbox, long from, long 
to) {
         return 
getEntityManager().createNamedQuery("findDeletedMessagesInMailboxBetweenUIDs")
         .setParameter("idParam", mailbox.getMailboxId())
         .setParameter("fromParam", from)

Modified: 
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMessage.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMessage.java?rev=1126967&r1=1126966&r2=1126967&view=diff
==============================================================================
--- 
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMessage.java
 (original)
+++ 
james/mailbox/trunk/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMessage.java
 Tue May 24 10:27:55 2011
@@ -20,7 +20,6 @@ package org.apache.james.mailbox.jpa.mai
 
 import java.io.Serializable;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -70,13 +69,13 @@ import org.apache.openjpa.persistence.jd
     @NamedQuery(name="findMessagesInMailboxAfterUID",
             query="SELECT message FROM Message message WHERE 
message.mailbox.mailboxId = :idParam AND message.uid>=:uidParam"),              
      
     @NamedQuery(name="findDeletedMessagesInMailbox",
-            query="SELECT message.uid FROM Message message WHERE 
message.mailbox.mailboxId = :idParam AND message.deleted=TRUE"),        
+            query="SELECT message FROM Message message WHERE 
message.mailbox.mailboxId = :idParam AND message.deleted=TRUE"),        
     @NamedQuery(name="findDeletedMessagesInMailboxBetweenUIDs",
-            query="SELECT message.uid FROM Message message WHERE 
message.mailbox.mailboxId = :idParam AND message.uid BETWEEN :fromParam AND 
:toParam AND message.deleted=TRUE"),        
+            query="SELECT message FROM Message message WHERE 
message.mailbox.mailboxId = :idParam AND message.uid BETWEEN :fromParam AND 
:toParam AND message.deleted=TRUE"),        
     @NamedQuery(name="findDeletedMessagesInMailboxWithUID",
-            query="SELECT message.uid FROM Message message WHERE 
message.mailbox.mailboxId = :idParam AND message.uid=:uidParam AND 
message.deleted=TRUE"),                    
+            query="SELECT message FROM Message message WHERE 
message.mailbox.mailboxId = :idParam AND message.uid=:uidParam AND 
message.deleted=TRUE"),                    
     @NamedQuery(name="findDeletedMessagesInMailboxAfterUID",
-            query="SELECT message.uid FROM Message message WHERE 
message.mailbox.mailboxId = :idParam AND message.uid>=:uidParam AND 
message.deleted=TRUE"),          
+            query="SELECT message FROM Message message WHERE 
message.mailbox.mailboxId = :idParam AND message.uid>=:uidParam AND 
message.deleted=TRUE"),          
             
     @NamedQuery(name="deleteDeletedMessagesInMailbox",
             query="DELETE FROM Message message WHERE message.mailbox.mailboxId 
= :idParam AND message.deleted=TRUE"),        

Modified: 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java?rev=1126967&r1=1126966&r2=1126967&view=diff
==============================================================================
--- 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
 (original)
+++ 
james/mailbox/trunk/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
 Tue May 24 10:27:55 2011
@@ -24,8 +24,10 @@ import java.io.FilenameFilter;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
 import java.util.SortedMap;
 
@@ -34,6 +36,7 @@ import javax.mail.Flags.Flag;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.james.mailbox.MailboxException;
+import org.apache.james.mailbox.MessageMetaData;
 import org.apache.james.mailbox.MessageRange;
 import org.apache.james.mailbox.MessageRange.Type;
 import org.apache.james.mailbox.UpdatedFlags;
@@ -44,6 +47,7 @@ import org.apache.james.mailbox.maildir.
 import org.apache.james.mailbox.maildir.mail.model.LazyLoadingMaildirMessage;
 import org.apache.james.mailbox.maildir.mail.model.MaildirMessage;
 import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.SimpleMessageMetaData;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.Message;
 import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
@@ -194,7 +198,7 @@ public class MaildirMessageMapper extend
      * (non-Javadoc)
      * @see 
org.apache.james.mailbox.store.mail.MessageMapper#expungeMarkedForDeletionInMailbox(org.apache.james.mailbox.store.mail.model.Mailbox,
 org.apache.james.mailbox.MessageRange)
      */
-    public Iterator<Long> expungeMarkedForDeletionInMailbox(Mailbox<Integer> 
mailbox, MessageRange set) throws MailboxException {
+    public Map<Long, MessageMetaData> 
expungeMarkedForDeletionInMailbox(Mailbox<Integer> mailbox, MessageRange set) 
throws MailboxException {
         List<Message<Integer>> results = new ArrayList<Message<Integer>>();
         final long from = set.getUidFrom();
         final long to = set.getUidTo();
@@ -214,14 +218,14 @@ public class MaildirMessageMapper extend
             results = findMessagesInMailboxBetweenUIDs(mailbox, 
MaildirMessageName.FILTER_DELETED_MESSAGES, from, to);
             break;       
         }
-        List<Long> uids = new ArrayList<Long>();
+        Map<Long, MessageMetaData> uids = new HashMap<Long, MessageMetaData>();
         for (int i = 0; i < results.size(); i++) {
             Message<Integer> m = results.get(i);
             long uid = m.getUid();
+            uids.put(uid, new SimpleMessageMetaData(m));
             delete(mailbox, m);
-            uids.add(uid);
         }
-        return uids.iterator();
+        return uids;
     }
 
     private List<Message<Integer>> findMessagesInMailbox(Mailbox<Integer> 
mailbox,

Modified: 
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java?rev=1126967&r1=1126966&r2=1126967&view=diff
==============================================================================
--- 
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
 (original)
+++ 
james/mailbox/trunk/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
 Tue May 24 10:27:55 2011
@@ -21,6 +21,7 @@ package org.apache.james.mailbox.inmemor
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -29,10 +30,12 @@ import java.util.concurrent.ConcurrentHa
 import javax.mail.Flags;
 
 import org.apache.james.mailbox.MailboxException;
+import org.apache.james.mailbox.MessageMetaData;
 import org.apache.james.mailbox.MessageRange;
 import org.apache.james.mailbox.UpdatedFlags;
 import org.apache.james.mailbox.inmemory.mail.model.SimpleMailboxMembership;
 import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.SimpleMessageMetaData;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.Message;
 import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
@@ -144,8 +147,8 @@ public class InMemoryMessageMapper exten
      * (non-Javadoc)
      * @see 
org.apache.james.mailbox.store.mail.MessageMapper#expungeMarkedForDeletionInMailbox(org.apache.james.mailbox.store.mail.model.Mailbox,
 org.apache.james.mailbox.MessageRange)
      */
-    public Iterator<Long> expungeMarkedForDeletionInMailbox(final 
Mailbox<Long> mailbox, MessageRange set) throws MailboxException {
-        final List<Long> filteredResult = new ArrayList<Long>();
+    public Map<Long, MessageMetaData> expungeMarkedForDeletionInMailbox(final 
Mailbox<Long> mailbox, MessageRange set) throws MailboxException {
+        final Map<Long, MessageMetaData> filteredResult = new HashMap<Long, 
MessageMetaData>();
 
         findInMailbox(mailbox, set, new MailboxMembershipCallback<Long>() {
 
@@ -153,14 +156,15 @@ public class InMemoryMessageMapper exten
                 for (final Iterator<Message<Long>> it = results.iterator(); 
it.hasNext();) {
                     Message<Long> member = it.next();
                     if (member.isDeleted()) {
+                        filteredResult.put(member.getUid(), new 
SimpleMessageMetaData(member));
+
                         delete(mailbox, member);
-                        filteredResult.add(member.getUid());
                     }
                 }
             }
         });
 
-        return filteredResult.iterator();
+        return filteredResult;
     }
 
     /*

Modified: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultIterator.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultIterator.java?rev=1126967&r1=1126966&r2=1126967&view=diff
==============================================================================
--- 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultIterator.java
 (original)
+++ 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/ResultIterator.java
 Tue May 24 10:27:55 2011
@@ -97,17 +97,20 @@ public class ResultIterator<Id> implemen
 
         private final long uid;
 
+        private final Flags flags;
+
         public UnloadedMessageResult(final Message<Id> message,
                 final MailboxException exception) {
             super();
             internalDate = message.getInternalDate();
             size = message.getFullContentOctets();
             uid = message.getUid();
+            flags = message.createFlags();
             this.exception = exception;
         }
 
-        public Flags getFlags() throws MailboxException {
-            throw exception;
+        public Flags getFlags() {
+            return flags;
         }
 
         public Content getFullContent() throws MailboxException {

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=1126967&r1=1126966&r2=1126967&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
 Tue May 24 10:27:55 2011
@@ -40,8 +40,8 @@ import javax.mail.util.SharedFileInputSt
 
 import org.apache.james.mailbox.MailboxException;
 import org.apache.james.mailbox.MailboxListener;
-import org.apache.james.mailbox.MailboxListener.Added.MessageMetaData;
 import org.apache.james.mailbox.MailboxSession;
+import org.apache.james.mailbox.MessageMetaData;
 import org.apache.james.mailbox.MessageRange;
 import org.apache.james.mailbox.MessageResult;
 import org.apache.james.mailbox.SearchQuery;
@@ -52,6 +52,7 @@ import org.apache.james.mailbox.MessageR
 import org.apache.james.mailbox.SearchQuery.Criterion;
 import org.apache.james.mailbox.store.mail.MessageMapper;
 import org.apache.james.mailbox.store.mail.MessageMapperFactory;
+import org.apache.james.mailbox.store.mail.SimpleMessageMetaData;
 import org.apache.james.mailbox.store.mail.UidProvider;
 import org.apache.james.mailbox.store.mail.model.Header;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -149,14 +150,10 @@ public abstract class StoreMessageManage
      * @see 
org.apache.james.mailbox.Mailbox#expunge(org.apache.james.mailbox.MessageRange, 
org.apache.james.mailbox.MailboxSession)
      */
     public Iterator<Long> expunge(final MessageRange set, MailboxSession 
mailboxSession) throws MailboxException {
-        List<Long> uids = new ArrayList<Long>();
-        Iterator<Long> uidIt = deleteMarkedInMailbox(set, mailboxSession);
-        while(uidIt.hasNext()) {
-            long uid = uidIt.next();
-            uids.add(uid);
-        }
+        Map<Long, MessageMetaData> uids = deleteMarkedInMailbox(set, 
mailboxSession);
+     
         dispatcher.expunged(mailboxSession, uids, new 
StoreMailboxPath<Id>(getMailboxEntity()));
-        return uids.iterator();    
+        return uids.keySet().iterator();    
     }
 
     /*
@@ -622,12 +619,12 @@ public abstract class StoreMessageManage
     }
 
     
-    protected Iterator<Long> deleteMarkedInMailbox(final MessageRange range, 
final MailboxSession session) throws MailboxException {
+    protected Map<Long, MessageMetaData> deleteMarkedInMailbox(final 
MessageRange range, final MailboxSession session) throws MailboxException {
         final MessageMapper<Id> messageMapper = 
mapperFactory.getMessageMapper(session);
 
-        return messageMapper.execute(new Mapper.Transaction<Iterator<Long>>() {
+        return messageMapper.execute(new Mapper.Transaction<Map<Long, 
MessageMetaData>>() {
 
-            public Iterator<Long> run() throws MailboxException {
+            public Map<Long, MessageMetaData> run() throws MailboxException {
                 return 
messageMapper.expungeMarkedForDeletionInMailbox(getMailboxEntity(), range);
             }
             

Modified: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java?rev=1126967&r1=1126966&r2=1126967&view=diff
==============================================================================
--- 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
 (original)
+++ 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
 Tue May 24 10:27:55 2011
@@ -20,10 +20,12 @@ package org.apache.james.mailbox.store.m
 
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import javax.mail.Flags;
 
 import org.apache.james.mailbox.MailboxException;
+import org.apache.james.mailbox.MessageMetaData;
 import org.apache.james.mailbox.MessageRange;
 import org.apache.james.mailbox.UpdatedFlags;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -56,7 +58,7 @@ public interface MessageMapper<Id> exten
      * @return uids
      * @throws MailboxException
      */
-    public abstract Iterator<Long> expungeMarkedForDeletionInMailbox(
+    public abstract Map<Long, MessageMetaData> 
expungeMarkedForDeletionInMailbox(
             Mailbox<Id> mailbox, final MessageRange set)
             throws MailboxException;
 

Copied: 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/SimpleMessageMetaData.java
 (from r1125789, 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java)
URL: 
http://svn.apache.org/viewvc/james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/SimpleMessageMetaData.java?p2=james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/SimpleMessageMetaData.java&p1=james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java&r1=1125789&r2=1126967&rev=1126967&view=diff
==============================================================================
--- 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java
 (original)
+++ 
james/mailbox/trunk/store/src/main/java/org/apache/james/mailbox/store/mail/SimpleMessageMetaData.java
 Tue May 24 10:27:55 2011
@@ -17,13 +17,15 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.mailbox.store;
+package org.apache.james.mailbox.store.mail;
 
 import java.util.Date;
 
 import javax.mail.Flags;
 
-import org.apache.james.mailbox.MailboxListener.Added.MessageMetaData;
+import org.apache.james.mailbox.MessageMetaData;
+import org.apache.james.mailbox.store.mail.model.Message;
+
 
 public class SimpleMessageMetaData implements MessageMetaData{
     private long uid;
@@ -38,6 +40,11 @@ public class SimpleMessageMetaData imple
         this.internalDate = internalDate;
     }
     
+    public SimpleMessageMetaData(Message<?> message) {
+        this(message.getUid(), message.createFlags(), 
message.getFullContentOctets(), message.getInternalDate());
+    }
+    
+    
     /*
      * (non-Javadoc)
      * @see 
org.apache.james.mailbox.MailboxListener.Added.MessageMetaData#getFlags()
@@ -70,4 +77,20 @@ public class SimpleMessageMetaData imple
         return uid;
     }
 
+    @Override
+    public boolean equals(Object obj) {
+        if(obj instanceof SimpleMessageMetaData) {
+            return uid == ((SimpleMessageMetaData) obj).getUid();
+        }
+        return false;
+    }
+
+    @Override
+    public int hashCode() {
+        final int PRIME = 31;
+        int result = 1;
+        result = PRIME * result + (int) (uid ^ (uid >>> 32));
+        return result;
+    }
+
 }



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

Reply via email to