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]
