IMAP-370 Expunge notification should be sent upon move

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/762af8ed
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/762af8ed
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/762af8ed

Branch: refs/heads/master
Commit: 762af8ed3f2309305663caf75d2da2db809645c9
Parents: 792a87a
Author: Benoit Tellier <[email protected]>
Authored: Wed Feb 24 16:26:02 2016 +0700
Committer: Benoit Tellier <[email protected]>
Committed: Fri Mar 4 19:35:23 2016 +0700

----------------------------------------------------------------------
 .../apache/james/mailbox/store/MoveResult.java  | 43 ++++++++++++++++++++
 .../mailbox/store/StoreMessageManager.java      | 15 ++++---
 2 files changed, 53 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/762af8ed/mailbox/store/src/main/java/org/apache/james/mailbox/store/MoveResult.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MoveResult.java 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MoveResult.java
new file mode 100644
index 0000000..76bbb86
--- /dev/null
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MoveResult.java
@@ -0,0 +1,43 @@
+/****************************************************************
+ * 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.store;
+
+import java.util.Iterator;
+
+import org.apache.james.mailbox.model.MessageMetaData;
+
+public class MoveResult {
+
+    private final Iterator<MessageMetaData> movedMessages;
+    private final Iterator<MessageMetaData> originalMessages;
+
+    public MoveResult(Iterator<MessageMetaData> movedMessages, 
Iterator<MessageMetaData> originalMessages) {
+        this.movedMessages = movedMessages;
+        this.originalMessages = originalMessages;
+    }
+
+    public Iterator<MessageMetaData> getMovedMessages() {
+        return movedMessages;
+    }
+
+    public Iterator<MessageMetaData> getOriginalMessages() {
+        return originalMessages;
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/762af8ed/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index f0098c3..6b842bb 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -84,6 +84,9 @@ import org.apache.james.mime4j.stream.MimeConfig;
 import org.apache.james.mime4j.stream.MimeTokenStream;
 import org.apache.james.mime4j.stream.RecursionMode;
 
+import com.google.common.base.Function;
+import com.google.common.collect.Iterators;
+
 /**
  * Base class for {@link org.apache.james.mailbox.MessageManager}
  * implementations.
@@ -716,23 +719,23 @@ public class StoreMessageManager<Id extends MailboxId> 
implements org.apache.jam
         return copiedRows.iterator();
     }
 
-    private Iterator<MessageMetaData> move(Iterator<MailboxMessage<Id>> 
originalRows,
-                       MailboxSession session) throws MailboxException {
+    private MoveResult move(Iterator<MailboxMessage<Id>> originalRows, 
MailboxSession session) throws MailboxException {
         final List<MessageMetaData> movedRows = new 
ArrayList<MessageMetaData>();
+        final List<MessageMetaData> originalRowsCopy = new 
ArrayList<MessageMetaData>();
         final MessageMapper<Id> messageMapper = 
mapperFactory.getMessageMapper(session);
 
         while (originalRows.hasNext()) {
             final MailboxMessage<Id> originalMessage = originalRows.next();
+            originalRowsCopy.add(new SimpleMessageMetaData(originalMessage));
             MessageMetaData data = messageMapper.execute(new 
Mapper.Transaction<MessageMetaData>() {
                 public MessageMetaData run() throws MailboxException {
                     return messageMapper.move(getMailboxEntity(), 
originalMessage);
-
                 }
 
             });
             movedRows.add(data);
         }
-        return movedRows.iterator();
+        return new MoveResult(movedRows.iterator(), 
originalRowsCopy.iterator());
        }
 
 
@@ -743,7 +746,9 @@ public class StoreMessageManager<Id extends MailboxId> 
implements org.apache.jam
 
     private SortedMap<Long, MessageMetaData> move(MessageRange set, 
StoreMessageManager<Id> to, MailboxSession session) throws MailboxException {
         Iterator<MailboxMessage<Id>> originalRows = retrieveOriginalRows(set, 
session);
-        return collectMetadata(to.move(originalRows, session));
+        MoveResult moveResult = to.move(originalRows, session);
+        dispatcher.expunged(session, 
collectMetadata(moveResult.getOriginalMessages()), getMailboxEntity());
+        return collectMetadata(moveResult.getMovedMessages());
     }
 
     private Iterator<MailboxMessage<Id>> retrieveOriginalRows(MessageRange 
set, MailboxSession session) throws MailboxException {


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

Reply via email to