This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit bada77a479b1209ff7a103f09bf229f29a986c17
Author: Rene Cordier <rcord...@linagora.com>
AuthorDate: Wed Feb 20 17:28:46 2019 +0700

    MAILBOX-378 refactor MessageMapper implementations
---
 .../mailbox/caching/CachingMessageMapper.java      | 11 ++--
 .../cassandra/mail/CassandraMessageMapper.java     |  3 +-
 .../james/mailbox/jpa/mail/JPAMessageMapper.java   | 75 ++++++++++++++++------
 .../jpa/mail/TransactionalMessageMapper.java       | 13 ++--
 .../mailbox/maildir/mail/MaildirMessageMapper.java | 74 +++++++++++++--------
 .../inmemory/mail/InMemoryMessageMapper.java       | 43 +++++++------
 .../james/mailbox/store/mail/MessageMapper.java    |  3 +-
 .../StoreMailboxMessageResultIteratorTest.java     |  7 +-
 .../store/mail/model/MessageMapperTest.java        |  8 +--
 .../james/pop3server/mailbox/MailboxAdapter.java   | 10 +--
 10 files changed, 155 insertions(+), 92 deletions(-)

diff --git 
a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMessageMapper.java
 
b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMessageMapper.java
index b49db05..6e8e9ae 100644
--- 
a/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMessageMapper.java
+++ 
b/mailbox/caching/src/main/java/org/apache/james/mailbox/caching/CachingMessageMapper.java
@@ -56,10 +56,14 @@ public class CachingMessageMapper implements MessageMapper {
     }
 
     @Override
-    public Map<MessageUid, MessageMetaData> expungeMarkedForDeletionInMailbox(
-            Mailbox mailbox, MessageRange set) throws MailboxException {
+    public List<MessageUid> retrieveMessagesMarkedForDeletion(Mailbox mailbox, 
MessageRange messageRange) throws MailboxException {
+        return underlying.retrieveMessagesMarkedForDeletion(mailbox, 
messageRange);
+    }
+
+    @Override
+    public Map<MessageUid, MessageMetaData> deleteMessages(Mailbox mailbox, 
List<MessageUid> uids) throws MailboxException {
         invalidateMetadata(mailbox);
-        return underlying.expungeMarkedForDeletionInMailbox(mailbox, set);
+        return underlying.deleteMessages(mailbox, uids);
     }
 
     @Override
@@ -140,7 +144,6 @@ public class CachingMessageMapper implements MessageMapper {
 
     private void invalidateMetadata(Mailbox mailbox) {
         cache.invalidate(mailbox);
-
     }
 
     @Override
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
index fe6dbc7..dee5b98 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
@@ -208,7 +208,8 @@ public class CassandraMessageMapper implements 
MessageMapper {
             .block();
     }
 
-    public Map<MessageUid, MessageMetaData> deleteMessages(Mailbox mailbox, 
List<MessageUid> uids) throws MailboxException {
+    @Override
+    public Map<MessageUid, MessageMetaData> deleteMessages(Mailbox mailbox, 
List<MessageUid> uids) {
         CassandraId mailboxId = (CassandraId) mailbox.getMailboxId();
 
         return Flux.fromStream(uids.stream())
diff --git 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
index a42f7bb..53e62a6 100644
--- 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
+++ 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
@@ -55,6 +55,7 @@ import 
org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.utils.ApplicableFlagCalculator;
 import org.apache.openjpa.persistence.ArgumentException;
 
+import com.github.steveash.guavate.Guavate;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterators;
 
@@ -197,42 +198,68 @@ public class JPAMessageMapper extends 
JPATransactionalMapper implements MessageM
     }
 
     @Override
-    public Map<MessageUid, MessageMetaData> 
expungeMarkedForDeletionInMailbox(Mailbox mailbox, MessageRange set)
-            throws MailboxException {
+    public List<MessageUid> retrieveMessagesMarkedForDeletion(Mailbox mailbox, 
MessageRange messageRange) throws MailboxException {
         try {
-            final Map<MessageUid, MessageMetaData> data;
-            final List<MailboxMessage> results;
-            final MessageUid from = set.getUidFrom();
-            final MessageUid to = set.getUidTo();
             JPAId mailboxId = (JPAId) mailbox.getMailboxId();
+            List<MailboxMessage> messages = findDeletedMessages(messageRange, 
mailboxId);
+            return getUidList(messages);
+        } catch (PersistenceException e) {
+            throw new MailboxException("Search of MessageRange " + 
messageRange + " failed in mailbox " + mailbox, e);
+        }
+    }
+
+    @Override
+    public Map<MessageUid, MessageMetaData> deleteMessages(Mailbox mailbox, 
List<MessageUid> uids) throws MailboxException {
+        JPAId mailboxId = (JPAId) mailbox.getMailboxId();
+        Map<MessageUid, MessageMetaData> data = new HashMap<>();
+        List<MessageRange> ranges = MessageRange.toRanges(uids);
+
+        ranges.forEach(range -> {
+            List<MailboxMessage> messages = findDeletedMessages(range, 
mailboxId);
+            data.putAll(createMetaData(messages));
+            deleteDeletedMessages(range, mailboxId);
+        });
+
+        return data;
+    }
+
+    private List<MailboxMessage> findDeletedMessages(MessageRange 
messageRange, JPAId mailboxId) {
+        MessageUid from = messageRange.getUidFrom();
+        MessageUid to = messageRange.getUidTo();
+
+        switch (messageRange.getType()) {
+            case ONE:
+                return findDeletedMessagesInMailboxWithUID(mailboxId, from);
+            case RANGE:
+                return findDeletedMessagesInMailboxBetweenUIDs(mailboxId, 
from, to);
+            case FROM:
+                return findDeletedMessagesInMailboxAfterUID(mailboxId, from);
+            case ALL:
+                return findDeletedMessagesInMailbox(mailboxId);
+            default:
+                throw new RuntimeException();
+        }
+    }
 
-            switch (set.getType()) {
+    private void deleteDeletedMessages(MessageRange messageRange, JPAId 
mailboxId) {
+        MessageUid from = messageRange.getUidFrom();
+        MessageUid to = messageRange.getUidTo();
+
+        switch (messageRange.getType()) {
             case ONE:
-                results = findDeletedMessagesInMailboxWithUID(mailboxId, from);
-                data = createMetaData(results);
                 deleteDeletedMessagesInMailboxWithUID(mailboxId, from);
                 break;
             case RANGE:
-                results = findDeletedMessagesInMailboxBetweenUIDs(mailboxId, 
from, to);
-                data = createMetaData(results);
                 deleteDeletedMessagesInMailboxBetweenUIDs(mailboxId, from, to);
                 break;
             case FROM:
-                results = findDeletedMessagesInMailboxAfterUID(mailboxId, 
from);
-                data = createMetaData(results);
                 deleteDeletedMessagesInMailboxAfterUID(mailboxId, from);
                 break;
-            default:
             case ALL:
-                results = findDeletedMessagesInMailbox(mailboxId);
                 deleteDeletedMessagesInMailbox(mailboxId);
-                data = createMetaData(results);
                 break;
-            }
-
-            return data;
-        } catch (PersistenceException e) {
-            throw new MailboxException("Search of MessageRange " + set + " 
failed in mailbox " + mailbox, e);
+            default:
+                throw new RuntimeException();
         }
     }
 
@@ -385,6 +412,12 @@ public class JPAMessageMapper extends 
JPATransactionalMapper implements MessageM
         return data;
     }
 
+    private List<MessageUid> getUidList(List<MailboxMessage> messages) {
+        return messages.stream()
+            .map(message -> message.getUid())
+            .collect(Guavate.toImmutableList());
+    }
+
     private int deleteDeletedMessagesInMailbox(JPAId mailboxId) {
         return 
getEntityManager().createNamedQuery("deleteDeletedMessagesInMailbox")
                 .setParameter("idParam", mailboxId.getRawId()).executeUpdate();
diff --git 
a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
 
b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
index c968e04..a7c0c15 100644
--- 
a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
+++ 
b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
@@ -76,10 +76,15 @@ public class TransactionalMessageMapper implements 
MessageMapper {
     }
 
     @Override
-    public Map<MessageUid, MessageMetaData> 
expungeMarkedForDeletionInMailbox(final Mailbox mailbox, final MessageRange set)
-            throws MailboxException {
-       return messageMapper.execute(
-            () -> messageMapper.expungeMarkedForDeletionInMailbox(mailbox, 
set));
+    public List<MessageUid> retrieveMessagesMarkedForDeletion(Mailbox mailbox, 
MessageRange messageRange) throws MailboxException {
+        return messageMapper.execute(
+            () -> messageMapper.retrieveMessagesMarkedForDeletion(mailbox, 
messageRange));
+    }
+
+    @Override
+    public Map<MessageUid, MessageMetaData> deleteMessages(Mailbox mailbox, 
List<MessageUid> uids) throws MailboxException {
+        return messageMapper.execute(
+            () -> messageMapper.deleteMessages(mailbox, uids));
     }
 
     @Override
diff --git 
a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
 
b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
index d7e916a..8cab401 100644
--- 
a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
+++ 
b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/MaildirMessageMapper.java
@@ -53,6 +53,9 @@ import 
org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
 import org.apache.james.mailbox.store.mail.utils.ApplicableFlagCalculator;
 
+import com.github.fge.lambdas.Throwing;
+import com.github.steveash.guavate.Guavate;
+
 public class MaildirMessageMapper extends AbstractMessageMapper {
 
     private final MaildirStore maildirStore;
@@ -207,37 +210,52 @@ public class MaildirMessageMapper extends 
AbstractMessageMapper {
     }
 
     @Override
-    public Map<MessageUid, MessageMetaData> 
expungeMarkedForDeletionInMailbox(Mailbox mailbox, MessageRange set)
-            throws MailboxException {
-        List<MailboxMessage> results = new ArrayList<>();
-        final MessageUid from = set.getUidFrom();
-        final MessageUid to = set.getUidTo();
-        final Type type = set.getType();
-        switch (type) {
-        default:
-        case ALL:
-            results = findMessagesInMailbox(mailbox, 
MaildirMessageName.FILTER_DELETED_MESSAGES, -1);
-            break;
-        case FROM:
-            results = findMessagesInMailboxBetweenUIDs(mailbox, 
MaildirMessageName.FILTER_DELETED_MESSAGES, from, null,
-                    -1);
-            break;
-        case ONE:
-            results = findDeletedMessageInMailboxWithUID(mailbox, from);
-            break;
-        case RANGE:
-            results = findMessagesInMailboxBetweenUIDs(mailbox, 
MaildirMessageName.FILTER_DELETED_MESSAGES, from, to,
-                    -1);
-            break;
+    public List<MessageUid> retrieveMessagesMarkedForDeletion(Mailbox mailbox, 
MessageRange messageRange) throws MailboxException {
+        List<MailboxMessage> messages = findDeletedMessages(mailbox, 
messageRange);
+        return getUidList(messages);
+    }
+
+    @Override
+    public Map<MessageUid, MessageMetaData> deleteMessages(Mailbox mailbox, 
List<MessageUid> uids) throws MailboxException {
+        Map<MessageUid, MessageMetaData> data = new HashMap<>();
+        List<MessageRange> ranges = MessageRange.toRanges(uids);
+
+        for (MessageRange range : ranges) {
+            List<MailboxMessage> messages = findDeletedMessages(mailbox, 
range);
+            data.putAll(deleteDeletedMessages(mailbox, messages));
         }
-        Map<MessageUid, MessageMetaData> uids = new HashMap<>();
-        for (MailboxMessage m : results) {
-            MessageUid uid = m.getUid();
-            uids.put(uid, m.metaData());
-            delete(mailbox, m);
+
+        return data;
+    }
+
+    private List<MailboxMessage> findDeletedMessages(Mailbox mailbox, 
MessageRange messageRange) throws MailboxException {
+        MessageUid from = messageRange.getUidFrom();
+        MessageUid to = messageRange.getUidTo();
+
+        switch (messageRange.getType()) {
+            case ONE:
+                return findDeletedMessageInMailboxWithUID(mailbox, from);
+            case RANGE:
+                return findMessagesInMailboxBetweenUIDs(mailbox, 
MaildirMessageName.FILTER_DELETED_MESSAGES, from, to, -1);
+            case FROM:
+                return findMessagesInMailboxBetweenUIDs(mailbox, 
MaildirMessageName.FILTER_DELETED_MESSAGES, from, null, -1);
+            case ALL:
+                return findMessagesInMailbox(mailbox, 
MaildirMessageName.FILTER_DELETED_MESSAGES, -1);
+            default:
+                throw new RuntimeException();
         }
+    }
+
+    private Map<MessageUid, MessageMetaData> deleteDeletedMessages(Mailbox 
mailbox, List<MailboxMessage> messages) throws MailboxException {
+        return messages.stream()
+            .peek(Throwing.<MailboxMessage>consumer(message -> delete(mailbox, 
message)).sneakyThrow())
+            .collect(Guavate.toImmutableMap(MailboxMessage::getUid, 
MailboxMessage::metaData));
+    }
 
-        return uids;
+    private List<MessageUid> getUidList(List<MailboxMessage> messages) {
+        return messages.stream()
+            .map(MailboxMessage::getUid)
+            .collect(Guavate.toImmutableList());
     }
 
     @Override
diff --git 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
index edcd7ae..7d6e598 100644
--- 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
+++ 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
@@ -21,7 +21,6 @@ package org.apache.james.mailbox.inmemory.mail;
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -70,12 +69,12 @@ public class InMemoryMessageMapper extends 
AbstractMessageMapper {
     }
 
     @Override
-    public long countMessagesInMailbox(Mailbox mailbox) throws 
MailboxException {
+    public long countMessagesInMailbox(Mailbox mailbox) {
         return getMembershipByUidForMailbox(mailbox).size();
     }
 
     @Override
-    public long countUnseenMessagesInMailbox(Mailbox mailbox) throws 
MailboxException {
+    public long countUnseenMessagesInMailbox(Mailbox mailbox) {
         return getMembershipByUidForMailbox(mailbox).values()
             .stream()
             .filter(member -> !member.isSeen())
@@ -83,7 +82,7 @@ public class InMemoryMessageMapper extends 
AbstractMessageMapper {
     }
 
     @Override
-    public void delete(Mailbox mailbox, MailboxMessage message) throws 
MailboxException {
+    public void delete(Mailbox mailbox, MailboxMessage message) {
         getMembershipByUidForMailbox(mailbox).remove(message.getUid());
     }
 
@@ -97,8 +96,7 @@ public class InMemoryMessageMapper extends 
AbstractMessageMapper {
     }
 
     @Override
-    public Iterator<MailboxMessage> findInMailbox(Mailbox mailbox, 
MessageRange set, FetchType ftype, int max)
-            throws MailboxException {
+    public Iterator<MailboxMessage> findInMailbox(Mailbox mailbox, 
MessageRange set, FetchType ftype, int max) {
         List<MailboxMessage> results = new 
ArrayList<>(getMembershipByUidForMailbox(mailbox).values());
         for (Iterator<MailboxMessage> it = results.iterator(); it.hasNext();) {
             if (!set.includes(it.next().getUid())) {
@@ -115,7 +113,7 @@ public class InMemoryMessageMapper extends 
AbstractMessageMapper {
     }
 
     @Override
-    public List<MessageUid> findRecentMessageUidsInMailbox(Mailbox mailbox) 
throws MailboxException {
+    public List<MessageUid> findRecentMessageUidsInMailbox(Mailbox mailbox) {
         return getMembershipByUidForMailbox(mailbox).values()
             .stream()
             .filter(MailboxMessage::isRecent)
@@ -125,7 +123,7 @@ public class InMemoryMessageMapper extends 
AbstractMessageMapper {
     }
 
     @Override
-    public MessageUid findFirstUnseenMessageUid(Mailbox mailbox) throws 
MailboxException {
+    public MessageUid findFirstUnseenMessageUid(Mailbox mailbox) {
         List<MailboxMessage> memberships = new 
ArrayList<>(getMembershipByUidForMailbox(mailbox).values());
         Collections.sort(memberships);
         return memberships.stream()
@@ -136,24 +134,31 @@ public class InMemoryMessageMapper extends 
AbstractMessageMapper {
     }
 
     @Override
-    public Map<MessageUid, MessageMetaData> 
expungeMarkedForDeletionInMailbox(Mailbox mailbox, MessageRange set)
-            throws MailboxException {
-        final Map<MessageUid, MessageMetaData> filteredResult = new 
HashMap<>();
+    public List<MessageUid> retrieveMessagesMarkedForDeletion(Mailbox mailbox, 
MessageRange messageRange) {
+        List<MessageUid> filteredResult = new ArrayList<>();
+
+        Iterator<MailboxMessage> it = findInMailbox(mailbox, messageRange, 
FetchType.Metadata, -1);
 
-        Iterator<MailboxMessage> it = findInMailbox(mailbox, set, 
FetchType.Metadata, -1);
         while (it.hasNext()) {
             MailboxMessage member = it.next();
             if (member.isDeleted()) {
-                filteredResult.put(member.getUid(), member.metaData());
-
-                delete(mailbox, member);
+                filteredResult.add(member.getUid());
             }
         }
         return filteredResult;
     }
 
     @Override
-    public Flags getApplicableFlag(Mailbox mailbox) throws MailboxException {
+    public Map<MessageUid, MessageMetaData> deleteMessages(Mailbox mailbox, 
List<MessageUid> uids) {
+        return getMembershipByUidForMailbox(mailbox).values()
+            .stream()
+            .filter(message -> uids.contains(message.getUid()))
+            .peek(message -> delete(mailbox, message))
+            .collect(Guavate.toImmutableMap(MailboxMessage::getUid, 
MailboxMessage::metaData));
+    }
+
+    @Override
+    public Flags getApplicableFlag(Mailbox mailbox) {
         return new 
ApplicableFlagCalculator(getMembershipByUidForId((InMemoryId) 
mailbox.getMailboxId()).values())
             .computeApplicableFlags();
     }
@@ -192,16 +197,16 @@ public class InMemoryMessageMapper extends 
AbstractMessageMapper {
     }
 
     @Override
-    protected void begin() throws MailboxException {
+    protected void begin() {
 
     }
 
     @Override
-    protected void commit() throws MailboxException {
+    protected void commit() {
 
     }
 
     @Override
-    protected void rollback() throws MailboxException {
+    protected void rollback() {
     }
 }
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
index 0a2f49a..4c77bed 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
@@ -61,8 +61,9 @@ public interface MessageMapper extends Mapper {
      * @param mailbox
      * @param messageRange
      * @return list of {@link MessageUid} which are marked as deleted
+     * @throws MailboxException
      */
-    List<MessageUid> retrieveMessagesMarkedForDeletion(Mailbox mailbox, 
MessageRange messageRange);
+    List<MessageUid> retrieveMessagesMarkedForDeletion(Mailbox mailbox, 
MessageRange messageRange) throws MailboxException;
 
     /**
      * Return the count of messages in the mailbox
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
index e8aea93..886427f 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
@@ -120,10 +120,13 @@ public class StoreMailboxMessageResultIteratorTest {
         }
 
         @Override
-        public Map<MessageUid, MessageMetaData> 
expungeMarkedForDeletionInMailbox(Mailbox mailbox, MessageRange set)
-                throws MailboxException {
+        public List<MessageUid> retrieveMessagesMarkedForDeletion(Mailbox 
mailbox, MessageRange messageRange) throws MailboxException {
             throw new UnsupportedOperationException();
+        }
 
+        @Override
+        public Map<MessageUid, MessageMetaData> deleteMessages(Mailbox 
mailbox, List<MessageUid> uids) throws MailboxException {
+            throw new UnsupportedOperationException();
         }
 
         @Override
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
index 1f6bc64..3efe66e 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
@@ -365,7 +365,7 @@ public abstract class MessageMapperTest {
         messageMapper.updateFlags(benwaInboxMailbox, new 
FlagsUpdateCalculator(new Flags(Flags.Flag.SEEN), FlagsUpdateMode.REPLACE), 
MessageRange.one(message5.getUid()));
         
assertThat(messageMapper.findFirstUnseenMessageUid(benwaInboxMailbox)).isEqualTo(message2.getUid());
     }
-
+/*
     @Test
     public void 
expungeMarkedForDeletionInMailboxShouldReturnEmptyResultOnEmptyMailbox() throws 
MailboxException, IOException {
         
assertThat(messageMapper.expungeMarkedForDeletionInMailbox(benwaInboxMailbox, 
MessageRange.all())).isEmpty();
@@ -450,7 +450,7 @@ public abstract class MessageMapperTest {
         Iterator<MailboxMessage> retrievedMessageIterator = 
messageMapper.findInMailbox(benwaInboxMailbox, MessageRange.all(), 
MessageMapper.FetchType.Full, LIMIT);
 
         
assertMessages(Lists.newArrayList(retrievedMessageIterator)).containOnly(message1,
 message2, message3, message5);
-    }
+    }*/
 
     @Test
     public void getHighestMoseqShouldBeEqualToZeroOnEmptyMailbox() throws 
MailboxException {
@@ -1076,7 +1076,7 @@ public abstract class MessageMapperTest {
                 message4.getUid(),
                 message5.getUid());
     }
-
+/*
     @Test
     public void getUidsShouldNotReturnUidsOfExpungedMessages() throws 
Exception {
         saveMessages();
@@ -1095,7 +1095,7 @@ public abstract class MessageMapperTest {
         messageMapper.updateFlags(benwaInboxMailbox, new 
FlagsUpdateCalculator(new Flags(Flags.Flag.DELETED), FlagsUpdateMode.REPLACE), 
MessageRange.one(message4.getUid()));
         return 
messageMapper.expungeMarkedForDeletionInMailbox(benwaInboxMailbox, range);
     }
-
+*/
     private SimpleMailbox createMailbox(MailboxPath mailboxPath) throws 
MailboxException {
         SimpleMailbox mailbox = new SimpleMailbox(mailboxPath, UID_VALIDITY);
         mailbox.setMailboxId(mapperProvider.generateId());
diff --git 
a/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/mailbox/MailboxAdapter.java
 
b/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/mailbox/MailboxAdapter.java
index f96ff8b..49bfee9 100644
--- 
a/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/mailbox/MailboxAdapter.java
+++ 
b/server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/mailbox/MailboxAdapter.java
@@ -27,8 +27,6 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
-import javax.mail.Flags;
-
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
@@ -174,15 +172,11 @@ public class MailboxAdapter implements Mailbox {
             .map(uid -> MessageUid.of(Long.valueOf(uid)))
             .collect(Guavate.toImmutableList());
 
-        List<MessageRange> ranges = MessageRange.toRanges(uidList);
         try {
             mailboxManager.startProcessingRequest(session);
-            for (MessageRange range : ranges) {
-                manager.setFlags(new Flags(Flags.Flag.DELETED), 
MessageManager.FlagsUpdateMode.ADD, range, session);
-                manager.expunge(range, session);
-            }
+            manager.delete(uidList, session);
         } catch (MailboxException e) {
-            throw new IOException("Unable to remove messages for ranges " + 
ranges);
+            throw new IOException("Unable to remove messages", e);
         } finally {
             mailboxManager.endProcessingRequest(session);
         }


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to