You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2018/06/19 08:11:29 UTC

[01/11] james-project git commit: JAMES-2426 Introduce skeleton and first test

Repository: james-project
Updated Branches:
  refs/heads/master b99d96654 -> c0ea1007f


JAMES-2426 Introduce skeleton and first test


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

Branch: refs/heads/master
Commit: ecb7c94fabf5017fc020c1ea6d490f3cd0b0847d
Parents: d2b4143
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Wed Jun 13 17:44:22 2018 +0200
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 19 15:05:22 2018 +0700

----------------------------------------------------------------------
 mailbox/backup/pom.xml                          | 79 ++++++++++++++++++++
 .../org/apache/james/mailbox/backup/Backup.java | 30 ++++++++
 .../org/apache/james/mailbox/backup/Zipper.java | 36 +++++++++
 .../apache/james/mailbox/backup/ZipperTest.java | 53 +++++++++++++
 mailbox/pom.xml                                 |  1 +
 5 files changed, 199 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/ecb7c94f/mailbox/backup/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/backup/pom.xml b/mailbox/backup/pom.xml
new file mode 100644
index 0000000..613dcfc
--- /dev/null
+++ b/mailbox/backup/pom.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <artifactId>apache-james-mailbox</artifactId>
+        <groupId>org.apache.james</groupId>
+        <version>3.1.0-SNAPSHOT</version>
+        <relativePath>../pom.xml</relativePath>
+    </parent>
+
+    <artifactId>backup</artifactId>
+    <packaging>jar</packaging>
+
+    <name>Apache James :: Mailbox :: Backup</name>
+
+    <dependencies>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>apache-james-mailbox-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>apache-james-mailbox-store</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
+            <artifactId>james-server-testing</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>nl.jqno.equalsverifier</groupId>
+            <artifactId>equalsverifier</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-compress</artifactId>
+            <version>1.17</version>
+        </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-launcher</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+    
+</project>

http://git-wip-us.apache.org/repos/asf/james-project/blob/ecb7c94f/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Backup.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Backup.java b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Backup.java
new file mode 100644
index 0000000..2f2d6a4
--- /dev/null
+++ b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Backup.java
@@ -0,0 +1,30 @@
+/****************************************************************
+ * 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.backup;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.james.mailbox.store.mail.model.MailboxMessage;
+
+public interface Backup {
+
+    void archive(List<MailboxMessage> messages, File destination) throws IOException;
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/ecb7c94f/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java
new file mode 100644
index 0000000..c3ee4fb
--- /dev/null
+++ b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java
@@ -0,0 +1,36 @@
+/****************************************************************
+ * 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.backup;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
+import org.apache.james.mailbox.store.mail.model.MailboxMessage;
+
+public class Zipper implements Backup {
+
+    @Override
+    public void archive(List<MailboxMessage> messages, File destination) throws IOException {
+        try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) {
+            archiveOutputStream.finish();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/ecb7c94f/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
new file mode 100644
index 0000000..25d2fbb
--- /dev/null
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
@@ -0,0 +1,53 @@
+/****************************************************************
+ * 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.backup;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.io.File;
+
+import org.apache.commons.compress.archivers.zip.ZipFile;
+import org.apache.james.junit.TemporaryFolderExtension;
+import org.apache.james.junit.TemporaryFolderExtension.TemporaryFolder;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+
+import com.google.common.collect.ImmutableList;
+
+@ExtendWith(TemporaryFolderExtension.class)
+public class ZipperTest {
+    private Zipper testee;
+
+    @BeforeEach
+    void beforeEach() {
+        testee = new Zipper();
+    }
+
+    @Test
+    void archiveShouldWriteEmptyValidArchiveWhenNoMessage(TemporaryFolder temporaryFolder) throws Exception {
+        File destination = File.createTempFile("backup-test", ".zip", temporaryFolder.getTempDir());
+        testee.archive(ImmutableList.of(), destination);
+
+        try (ZipFile zipFile = new ZipFile(destination)) {
+            assertThat(zipFile.getEntries().hasMoreElements()).isFalse();
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/ecb7c94f/mailbox/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/pom.xml b/mailbox/pom.xml
index 2fa50dd..a542075 100644
--- a/mailbox/pom.xml
+++ b/mailbox/pom.xml
@@ -36,6 +36,7 @@
 
     <modules>
         <module>api</module>
+        <module>backup</module>
         <module>caching</module>
         <module>cassandra</module>
         <module>elasticsearch</module>


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


[08/11] james-project git commit: JAMES-2414 provide a default getAttachment implementation to have homogeneous MailboxMessage behavior at runtime

Posted by bt...@apache.org.
JAMES-2414 provide a default getAttachment implementation to have homogeneous MailboxMessage behavior at runtime


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

Branch: refs/heads/master
Commit: 2724e8937ff06be3108bb48aa31c987770133008
Parents: 71c4d39
Author: Matthieu Baechler <ma...@apache.org>
Authored: Mon Jun 18 17:44:10 2018 +0200
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 19 15:09:53 2018 +0700

----------------------------------------------------------------------
 .../mailbox/hbase/mail/HBaseMailboxMessage.java |  9 +++++++--
 .../jcr/mail/model/JCRMailboxMessage.java       |  9 +++++++--
 .../openjpa/AbstractJPAMailboxMessage.java      |  9 +++++++--
 .../maildir/mail/model/MaildirMessage.java      |  8 ++++++--
 .../mailbox/store/StoreMessageManager.java      | 20 +++++++-------------
 5 files changed, 34 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/2724e893/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMessage.java
----------------------------------------------------------------------
diff --git a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMessage.java b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMessage.java
index 6a45e36..e94f5c8 100644
--- a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMessage.java
+++ b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/mail/HBaseMailboxMessage.java
@@ -34,7 +34,6 @@ import java.util.List;
 
 import javax.mail.Flags;
 
-import org.apache.commons.lang.NotImplementedException;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
@@ -47,8 +46,10 @@ import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.mail.model.FlagsFactory;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.Property;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 import org.apache.james.mailbox.store.search.comparator.UidComparator;
+import org.apache.james.mime4j.MimeException;
 
 import com.google.common.base.Objects;
 
@@ -354,6 +355,10 @@ public class HBaseMailboxMessage implements MailboxMessage {
 
     @Override
     public List<MessageAttachment> getAttachments() {
-        throw new NotImplementedException("Attachments are not implemented");
+        try {
+            return new MessageParser().retrieveAttachments(getFullContent());
+        } catch (MimeException | IOException e) {
+            throw new RuntimeException(e);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2724e893/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMailboxMessage.java
----------------------------------------------------------------------
diff --git a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMailboxMessage.java b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMailboxMessage.java
index 5db9a03..ff095e9 100644
--- a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMailboxMessage.java
+++ b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/mail/model/JCRMailboxMessage.java
@@ -36,7 +36,6 @@ import javax.mail.util.SharedByteArrayInputStream;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.input.BoundedInputStream;
-import org.apache.commons.lang3.NotImplementedException;
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.commons.JcrUtils;
 import org.apache.james.mailbox.MessageUid;
@@ -51,8 +50,10 @@ import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.mail.model.FlagsFactory;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.Property;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 import org.apache.james.mailbox.store.search.comparator.UidComparator;
+import org.apache.james.mime4j.MimeException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -710,6 +711,10 @@ public class JCRMailboxMessage implements MailboxMessage, JCRImapConstants, Pers
 
     @Override
     public List<MessageAttachment> getAttachments() {
-        throw new NotImplementedException("Attachments are not implemented");
+        try {
+            return new MessageParser().retrieveAttachments(getFullContent());
+        } catch (MimeException | IOException e) {
+            throw new RuntimeException(e);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2724e893/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
index 0a37886..5480e1d 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
@@ -42,7 +42,6 @@ import javax.persistence.NamedQuery;
 import javax.persistence.OneToMany;
 import javax.persistence.OrderBy;
 
-import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.jpa.JPAId;
@@ -58,8 +57,10 @@ import org.apache.james.mailbox.store.mail.model.DelegatingMailboxMessage;
 import org.apache.james.mailbox.store.mail.model.FlagsFactory;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.Property;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 import org.apache.james.mailbox.store.search.comparator.UidComparator;
+import org.apache.james.mime4j.MimeException;
 import org.apache.openjpa.persistence.jdbc.ElementJoinColumn;
 import org.apache.openjpa.persistence.jdbc.ElementJoinColumns;
 import org.apache.openjpa.persistence.jdbc.Index;
@@ -508,7 +509,11 @@ public abstract class AbstractJPAMailboxMessage implements MailboxMessage {
 
     @Override
     public List<MessageAttachment> getAttachments() {
-        throw new NotImplementedException("Attachments are not implemented");
+        try {
+            return new MessageParser().retrieveAttachments(getFullContent());
+        } catch (MimeException | IOException e) {
+            throw new RuntimeException(e);
+        }
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2724e893/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
----------------------------------------------------------------------
diff --git a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
index 1f42c9c..b1f669d 100644
--- a/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
+++ b/mailbox/maildir/src/main/java/org/apache/james/mailbox/maildir/mail/model/MaildirMessage.java
@@ -29,13 +29,13 @@ import java.util.List;
 import javax.mail.util.SharedFileInputStream;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.NotImplementedException;
 import org.apache.james.mailbox.maildir.MaildirMessageName;
 import org.apache.james.mailbox.model.MessageAttachment;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.Message;
 import org.apache.james.mailbox.store.mail.model.Property;
+import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 import org.apache.james.mailbox.store.streaming.CountingInputStream;
 import org.apache.james.mailbox.store.streaming.LimitingFileInputStream;
@@ -282,7 +282,11 @@ public class MaildirMessage implements Message {
 
     @Override
     public List<MessageAttachment> getAttachments() {
-        throw new NotImplementedException("Attachments are not implemented");
+        try {
+            return new MessageParser().retrieveAttachments(getFullContent());
+        } catch (MimeException | IOException e) {
+            throw new RuntimeException(e);
+        }
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/2724e893/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 72274f6..307994a 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
@@ -469,19 +469,13 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
         return new SimpleMailboxMessage(messageIdFactory.generate(), internalDate, size, bodyStartOctet, content, flags, propertyBuilder, getMailboxEntity().getMailboxId(), attachments);
     }
 
-    protected MailboxMessage copyMessage(MailboxMessage message) throws MailboxException {
-        SimpleMailboxMessage copy = copyMessageWithoutMetadata(message);
-        copy.setUid(message.getUid());
-        copy.setModSeq(message.getModSeq());
-        return copy;
-    }
-
-    private SimpleMailboxMessage copyMessageWithoutMetadata(MailboxMessage message) throws MailboxException {
-        if (messageCapabilities.contains(MailboxManager.MessageCapabilities.Attachment)) {
-            return SimpleMailboxMessage.copy(message.getMailboxId(), message);
-        } else {
-            return SimpleMailboxMessage.copyWithoutAttachments(message.getMailboxId(), message);
-        }
+    private MailboxMessage copyMessage(MailboxMessage message) throws MailboxException {
+        return SimpleMailboxMessage
+            .from(message)
+            .mailboxId(message.getMailboxId())
+            .uid(message.getUid())
+            .modseq(message.getModSeq())
+            .build();
     }
 
     @Override


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


[05/11] james-project git commit: JAMES-2426 Allow to backup messages as ZIP files

Posted by bt...@apache.org.
JAMES-2426 Allow to backup messages as ZIP files


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

Branch: refs/heads/master
Commit: 84338dc4c71c61e1da26ad9c8f8740d13bc0042d
Parents: ecb7c94
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Wed Jun 13 18:17:26 2018 +0200
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 19 15:07:55 2018 +0700

----------------------------------------------------------------------
 mailbox/backup/pom.xml                          |  6 ++
 .../org/apache/james/mailbox/backup/Backup.java |  4 +-
 .../org/apache/james/mailbox/backup/Zipper.java | 16 +++-
 .../mailbox/backup/MailboxMessageFixture.java   | 83 ++++++++++++++++++++
 .../mailbox/backup/ZipArchiveEntryAssert.java   | 79 +++++++++++++++++++
 .../apache/james/mailbox/backup/ZipAssert.java  | 76 ++++++++++++++++++
 .../apache/james/mailbox/backup/ZipperTest.java | 62 +++++++++++++--
 7 files changed, 317 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/84338dc4/mailbox/backup/pom.xml
----------------------------------------------------------------------
diff --git a/mailbox/backup/pom.xml b/mailbox/backup/pom.xml
index 613dcfc..2628ca3 100644
--- a/mailbox/backup/pom.xml
+++ b/mailbox/backup/pom.xml
@@ -39,6 +39,12 @@
         </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
+            <artifactId>apache-james-mailbox-api</artifactId>
+            <type>test-jar</type>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>${project.groupId}</groupId>
             <artifactId>apache-james-mailbox-store</artifactId>
         </dependency>
         <dependency>

http://git-wip-us.apache.org/repos/asf/james-project/blob/84338dc4/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Backup.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Backup.java b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Backup.java
index 2f2d6a4..80f246f 100644
--- a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Backup.java
+++ b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Backup.java
@@ -18,13 +18,13 @@
  ****************************************************************/
 package org.apache.james.mailbox.backup;
 
-import java.io.File;
 import java.io.IOException;
+import java.io.OutputStream;
 import java.util.List;
 
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 
 public interface Backup {
 
-    void archive(List<MailboxMessage> messages, File destination) throws IOException;
+    void archive(List<MailboxMessage> messages, OutputStream destination) throws IOException;
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/84338dc4/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java
index c3ee4fb..c6d95ad 100644
--- a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java
+++ b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java
@@ -20,17 +20,31 @@ package org.apache.james.mailbox.backup;
 
 import java.io.File;
 import java.io.IOException;
+import java.io.OutputStream;
 import java.util.List;
 
+import org.apache.commons.compress.archivers.ArchiveEntry;
 import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
+import org.apache.commons.io.IOUtils;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 
 public class Zipper implements Backup {
 
     @Override
-    public void archive(List<MailboxMessage> messages, File destination) throws IOException {
+    public void archive(List<MailboxMessage> messages, OutputStream destination) throws IOException {
         try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) {
+            for (MailboxMessage message: messages) {
+                storeInArchive(message, archiveOutputStream);
+            }
             archiveOutputStream.finish();
         }
     }
+
+    private void storeInArchive(MailboxMessage message, ZipArchiveOutputStream archiveOutputStream) throws IOException {
+        String entryId = message.getMessageId().serialize();
+        ArchiveEntry archiveEntry = archiveOutputStream.createArchiveEntry(new File(entryId), entryId);
+        archiveOutputStream.putArchiveEntry(archiveEntry);
+        IOUtils.copy(message.getFullContent(), archiveOutputStream);
+        archiveOutputStream.closeArchiveEntry();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/84338dc4/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxMessageFixture.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxMessageFixture.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxMessageFixture.java
new file mode 100644
index 0000000..8012e78
--- /dev/null
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxMessageFixture.java
@@ -0,0 +1,83 @@
+/****************************************************************
+ * 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.backup;
+
+import java.nio.charset.Charset;
+import java.nio.charset.StandardCharsets;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import javax.mail.Flags;
+import javax.mail.util.SharedByteArrayInputStream;
+
+import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.model.TestId;
+import org.apache.james.mailbox.model.TestMessageId;
+import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
+
+public interface MailboxMessageFixture {
+
+    SimpleDateFormat SIMPLE_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
+
+    Date DATE_1 = parseDate("2018-02-15 15:54:02");
+    Date DATE_2 = parseDate("2018-03-15 15:54:02");
+
+    MessageId.Factory MESSAGE_ID_FACTORY = new TestMessageId.Factory();
+    Charset MESSAGE_CHARSET = StandardCharsets.UTF_8;
+    String MESSAGE_CONTENT_1 = "Simple message content";
+    SharedByteArrayInputStream CONTENT_STREAM_1 = new SharedByteArrayInputStream(MESSAGE_CONTENT_1.getBytes(MESSAGE_CHARSET));
+    String MESSAGE_CONTENT_2 = "Other message content";
+    SharedByteArrayInputStream CONTENT_STREAM_2 = new SharedByteArrayInputStream(MESSAGE_CONTENT_2.getBytes(MESSAGE_CHARSET));
+    MessageId MESSAGE_ID_1 = MESSAGE_ID_FACTORY.generate();
+    MessageId MESSAGE_ID_2 = MESSAGE_ID_FACTORY.generate();
+    int SIZE_1 = 1000;
+    int SIZE_2 = 2000;
+
+    SimpleMailboxMessage MESSAGE_1 = SimpleMailboxMessage.builder()
+        .messageId(MESSAGE_ID_1)
+        .content(CONTENT_STREAM_1)
+        .size(SIZE_1)
+        .internalDate(DATE_1)
+        .bodyStartOctet(0)
+        .flags(new Flags())
+        .propertyBuilder(new PropertyBuilder())
+        .mailboxId(TestId.of(1L))
+        .build();
+    SimpleMailboxMessage MESSAGE_2 = SimpleMailboxMessage.builder()
+        .messageId(MESSAGE_ID_2)
+        .content(CONTENT_STREAM_2)
+        .size(SIZE_2)
+        .internalDate(DATE_2)
+        .bodyStartOctet(0)
+        .flags(new Flags())
+        .propertyBuilder(new PropertyBuilder())
+        .mailboxId(TestId.of(1L))
+        .build();
+
+    static Date parseDate(String input) {
+        try {
+            return SIMPLE_DATE_FORMAT.parse(input);
+        } catch (ParseException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/84338dc4/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java
new file mode 100644
index 0000000..f3d1b89
--- /dev/null
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java
@@ -0,0 +1,79 @@
+/****************************************************************
+ * 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.backup;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+
+import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ZipFile;
+import org.apache.commons.io.IOUtils;
+import org.assertj.core.api.AbstractAssert;
+import org.assertj.core.error.BasicErrorMessageFactory;
+
+public class ZipArchiveEntryAssert extends AbstractAssert<ZipArchiveEntryAssert, ZipArchiveEntry> {
+
+    public static ZipArchiveEntryAssert assertThatZipEntry(ZipFile zipFile, ZipArchiveEntry zipArchiveEntry) {
+        return new ZipArchiveEntryAssert(zipFile, zipArchiveEntry);
+    }
+
+    private static BasicErrorMessageFactory shouldHaveName(ZipArchiveEntry zipArchiveEntry, String expected) {
+        return new BasicErrorMessageFactory("%nExpecting %s to have name %s but was %s", zipArchiveEntry, expected, zipArchiveEntry.getName());
+    }
+
+    private static BasicErrorMessageFactory contentShouldBePresent(ZipArchiveEntry zipArchiveEntry) {
+        return new BasicErrorMessageFactory("%nCould not retrieve %s content", zipArchiveEntry);
+    }
+
+    private static BasicErrorMessageFactory shouldHaveContent(ZipArchiveEntry zipArchiveEntry, String expectedContent, String actualContent) {
+        return new BasicErrorMessageFactory("%nExpecting %s to have content %s but was %s", zipArchiveEntry, expectedContent, actualContent);
+    }
+
+    private final ZipFile zipFile;
+    private final ZipArchiveEntry actual;
+
+    private ZipArchiveEntryAssert(ZipFile zipFile, ZipArchiveEntry zipArchiveEntry) {
+        super(zipArchiveEntry, ZipArchiveEntryAssert.class);
+        this.zipFile = zipFile;
+        this.actual = zipArchiveEntry;
+    }
+
+    public ZipArchiveEntryAssert hasName(String name) {
+        isNotNull();
+        if (!actual.getName().equals(name)) {
+            throwAssertionError(shouldHaveName(actual, name));
+        }
+        return myself;
+    }
+
+    public ZipArchiveEntryAssert hasStringContent(String content) throws IOException {
+        isNotNull();
+        InputStream inputStream = zipFile.getInputStream(actual);
+        if (inputStream == null) {
+            throwAssertionError(contentShouldBePresent(actual));
+        }
+        String actualContentAsString = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
+        if (!actualContentAsString.equals(content)) {
+            throwAssertionError(shouldHaveContent(actual, content, actualContentAsString));
+        }
+        return myself;
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/84338dc4/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssert.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssert.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssert.java
new file mode 100644
index 0000000..f521b20
--- /dev/null
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssert.java
@@ -0,0 +1,76 @@
+/****************************************************************
+ * 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.backup;
+
+import static org.apache.james.mailbox.backup.ZipArchiveEntryAssert.assertThatZipEntry;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ZipFile;
+import org.assertj.core.api.AbstractAssert;
+import org.assertj.core.error.BasicErrorMessageFactory;
+
+public class ZipAssert extends AbstractAssert<ZipAssert, ZipFile> {
+    interface EntryCheck {
+        void test(ZipArchiveEntryAssert assertion) throws Exception;
+    }
+
+    public static ZipAssert assertThatZip(ZipFile zipFile) {
+        return new ZipAssert(zipFile);
+    }
+
+    private static BasicErrorMessageFactory shouldHaveSize(ZipFile zipFile, int expected, int actual) {
+        return new BasicErrorMessageFactory("%nExpecting %s to have side %d but was %d", zipFile, expected, actual);
+    }
+
+    private static BasicErrorMessageFactory shouldBeEmpty(ZipFile zipFile) {
+        return new BasicErrorMessageFactory("%nExpecting %s to be empty", zipFile);
+    }
+
+    private final ZipFile zipFile;
+
+    private ZipAssert(ZipFile zipFile) {
+        super(zipFile, ZipAssert.class);
+        this.zipFile = zipFile;
+    }
+
+    public ZipAssert containsExactlyEntriesMatching(EntryCheck... entryChecks) throws Exception {
+        isNotNull();
+        List<ZipArchiveEntry> entries = Collections.list(zipFile.getEntries());
+        if (entries.size() != entryChecks.length) {
+            throwAssertionError(shouldHaveSize(zipFile, entryChecks.length, entries.size()));
+        }
+        for (int i = 0; i < entries.size(); i++) {
+            entryChecks[i].test(assertThatZipEntry(zipFile, entries.get(i)));
+        }
+        return myself;
+    }
+
+    public ZipAssert hasNoEntry() {
+        isNotNull();
+        if (zipFile.getEntries().hasMoreElements()) {
+            throwAssertionError(shouldBeEmpty(zipFile));
+        }
+        return myself;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/84338dc4/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
index 25d2fbb..888fed6 100644
--- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
@@ -18,9 +18,16 @@
  ****************************************************************/
 package org.apache.james.mailbox.backup;
 
-import static org.assertj.core.api.Assertions.assertThat;
+import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_1;
+import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_2;
+import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_CONTENT_1;
+import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_CONTENT_2;
+import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_ID_1;
+import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_ID_2;
+import static org.apache.james.mailbox.backup.ZipAssert.assertThatZip;
 
 import java.io.File;
+import java.io.FileOutputStream;
 
 import org.apache.commons.compress.archivers.zip.ZipFile;
 import org.apache.james.junit.TemporaryFolderExtension;
@@ -34,20 +41,63 @@ import com.google.common.collect.ImmutableList;
 @ExtendWith(TemporaryFolderExtension.class)
 public class ZipperTest {
     private Zipper testee;
+    private File destination;
 
     @BeforeEach
-    void beforeEach() {
+    void beforeEach(TemporaryFolder temporaryFolder) throws Exception {
         testee = new Zipper();
+        destination = File.createTempFile("backup-test", ".zip", temporaryFolder.getTempDir());
     }
 
     @Test
-    void archiveShouldWriteEmptyValidArchiveWhenNoMessage(TemporaryFolder temporaryFolder) throws Exception {
-        File destination = File.createTempFile("backup-test", ".zip", temporaryFolder.getTempDir());
-        testee.archive(ImmutableList.of(), destination);
+    void archiveShouldWriteEmptyValidArchiveWhenNoMessage() throws Exception {
+        testee.archive(ImmutableList.of(), new FileOutputStream(destination));
 
         try (ZipFile zipFile = new ZipFile(destination)) {
-            assertThat(zipFile.getEntries().hasMoreElements()).isFalse();
+            assertThatZip(zipFile).hasNoEntry();
         }
     }
 
+    @Test
+    void archiveShouldWriteOneMessageWhenOne() throws Exception {
+        testee.archive(ImmutableList.of(MESSAGE_1), new FileOutputStream(destination));
+
+        try (ZipFile zipFile = new ZipFile(destination)) {
+            assertThatZip(zipFile)
+                .containsExactlyEntriesMatching(
+                    zipEntryAssert -> zipEntryAssert
+                        .hasName(MESSAGE_ID_1.serialize())
+                        .hasStringContent(MESSAGE_CONTENT_1));
+        }
+    }
+
+    @Test
+    void archiveShouldWriteTwoMessagesWhenTwo() throws Exception {
+        testee.archive(ImmutableList.of(MESSAGE_1, MESSAGE_2), new FileOutputStream(destination));
+
+        try (ZipFile zipFile = new ZipFile(destination)) {
+            assertThatZip(zipFile)
+                .containsExactlyEntriesMatching(
+                    zipEntryAssert -> zipEntryAssert
+                        .hasName(MESSAGE_ID_1.serialize())
+                        .hasStringContent(MESSAGE_CONTENT_1),
+                    zipEntryAssert -> zipEntryAssert
+                        .hasName(MESSAGE_ID_2.serialize())
+                        .hasStringContent(MESSAGE_CONTENT_2));
+        }
+    }
+
+    @Test
+    void archiveShouldOverwriteContent() throws Exception {
+        testee.archive(ImmutableList.of(MESSAGE_1), new FileOutputStream(destination));
+        testee.archive(ImmutableList.of(MESSAGE_2), new FileOutputStream(destination));
+
+        try (ZipFile zipFile = new ZipFile(destination)) {
+            assertThatZip(zipFile)
+                .containsExactlyEntriesMatching(
+                    zipEntryAssert -> zipEntryAssert
+                        .hasName(MESSAGE_ID_2.serialize())
+                        .hasStringContent(MESSAGE_CONTENT_2));
+        }
+    }
 }


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


[02/11] james-project git commit: Fix warnings

Posted by bt...@apache.org.
Fix warnings


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

Branch: refs/heads/master
Commit: d2b4143cd716663f64ed7bd14a4b2542c95978ac
Parents: b99d966
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Wed Jun 13 16:54:35 2018 +0200
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 19 15:05:22 2018 +0700

----------------------------------------------------------------------
 .../jpa/JPAMailRepositoryUrlStoreExtension.java              | 2 +-
 .../dlp/eventsourcing/aggregates/DLPDomainConfiguration.java | 8 --------
 2 files changed, 1 insertion(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/d2b4143c/server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreExtension.java
----------------------------------------------------------------------
diff --git a/server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreExtension.java b/server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreExtension.java
index 402a5de..3eabf52 100644
--- a/server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreExtension.java
+++ b/server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreExtension.java
@@ -27,7 +27,7 @@ import org.junit.jupiter.api.extension.ParameterContext;
 import org.junit.jupiter.api.extension.ParameterResolutionException;
 import org.junit.jupiter.api.extension.ParameterResolver;
 
-public class JPAMailRepositoryUrlStoreExtension implements ParameterResolver, AfterEachCallback{
+public class JPAMailRepositoryUrlStoreExtension implements ParameterResolver, AfterEachCallback {
     private static final JpaTestCluster JPA_TEST_CLUSTER = JpaTestCluster.create(JPAUrl.class);
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/d2b4143c/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPDomainConfiguration.java
----------------------------------------------------------------------
diff --git a/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPDomainConfiguration.java b/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPDomainConfiguration.java
index ece6353..003a5cc 100644
--- a/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPDomainConfiguration.java
+++ b/server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPDomainConfiguration.java
@@ -55,19 +55,11 @@ public class DLPDomainConfiguration {
             this.rules = rules;
         }
 
-        State add(DLPConfigurationItem rule) {
-            return add(ImmutableList.of(rule));
-        }
-
         State add(List<DLPConfigurationItem> toAdd) {
             ImmutableSet<DLPConfigurationItem> union = Stream.concat(this.rules.stream(), toAdd.stream()).collect(Guavate.toImmutableSet());
             return new State(union);
         }
 
-        State remove(DLPConfigurationItem toRemove) {
-            return remove(ImmutableList.of(toRemove));
-        }
-
         State remove(List<DLPConfigurationItem> toRemove) {
             ImmutableSet<DLPConfigurationItem> filtered = rules.stream().filter(rule -> !toRemove.contains(rule)).collect(Guavate.toImmutableSet());
             return new State(filtered);


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


[04/11] james-project git commit: JAMES-2426 Store size metadata in ZIP

Posted by bt...@apache.org.
JAMES-2426 Store size metadata in ZIP


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

Branch: refs/heads/master
Commit: feb18013f50d9fad042f89f2dae63725b9372e41
Parents: 84338dc
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Thu Jun 14 17:29:15 2018 +0200
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 19 15:07:55 2018 +0700

----------------------------------------------------------------------
 .../james/mailbox/backup/SizeExtraField.java    | 110 ++++++++++
 .../org/apache/james/mailbox/backup/Zipper.java |   9 +-
 .../mailbox/backup/MailboxMessageFixture.java   |   4 +-
 .../mailbox/backup/SizeExtraFieldTest.java      | 202 +++++++++++++++++++
 .../mailbox/backup/ZipArchiveEntryAssert.java   |  25 +++
 .../apache/james/mailbox/backup/ZipperTest.java |  13 ++
 6 files changed, 359 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/feb18013/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/SizeExtraField.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/SizeExtraField.java b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/SizeExtraField.java
new file mode 100644
index 0000000..4da7f9c
--- /dev/null
+++ b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/SizeExtraField.java
@@ -0,0 +1,110 @@
+/****************************************************************
+ * 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.backup;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.zip.ZipException;
+
+import org.apache.commons.compress.archivers.zip.ZipExtraField;
+import org.apache.commons.compress.archivers.zip.ZipShort;
+
+public class SizeExtraField implements ZipExtraField {
+    public static final ZipShort ID = new ZipShort(0x6A61); // "aj" in little-endian
+
+    private Optional<Long> size;
+
+    public SizeExtraField() {
+        this(Optional.empty());
+    }
+
+    public SizeExtraField(long size) {
+        this(Optional.of(size));
+    }
+
+    public SizeExtraField(Optional<Long> size) {
+        this.size = size;
+    }
+
+    @Override
+    public ZipShort getHeaderId() {
+        return ID;
+    }
+
+    @Override
+    public ZipShort getLocalFileDataLength() {
+        return new ZipShort(Long.BYTES);
+    }
+
+    @Override
+    public ZipShort getCentralDirectoryLength() {
+        return getLocalFileDataLength();
+    }
+
+    @Override
+    public byte[] getLocalFileDataData() {
+        long value = size.orElseThrow(() -> new RuntimeException("Value must by initialized"));
+        return ByteBuffer.allocate(Long.BYTES)
+            .order(ByteOrder.LITTLE_ENDIAN)
+            .putLong(value)
+            .array();
+    }
+
+    @Override
+    public byte[] getCentralDirectoryData() {
+        return getLocalFileDataData();
+    }
+
+    @Override
+    public void parseFromLocalFileData(byte[] buffer, int offset, int length) throws ZipException {
+        if (length != Long.BYTES) {
+            throw new ZipException("Unexpected data length for SizeExtraField. Expected " + Long.BYTES + " but got " + length + ".");
+        }
+        size = Optional.of(ByteBuffer
+                .wrap(buffer, offset, Long.BYTES)
+                .order(ByteOrder.LITTLE_ENDIAN)
+                .getLong());
+    }
+
+    @Override
+    public void parseFromCentralDirectoryData(byte[] buffer, int offset, int length) throws ZipException {
+        parseFromLocalFileData(buffer, offset, length);
+    }
+
+    public Optional<Long> getSize() {
+        return size;
+    }
+
+    @Override
+    public final boolean equals(Object o) {
+        if (o instanceof SizeExtraField) {
+            SizeExtraField that = (SizeExtraField) o;
+
+            return Objects.equals(this.size, that.size);
+        }
+        return false;
+    }
+
+    @Override
+    public final int hashCode() {
+        return Objects.hash(size);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/feb18013/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java
index c6d95ad..e4c2518 100644
--- a/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java
+++ b/mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Zipper.java
@@ -23,12 +23,16 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.util.List;
 
-import org.apache.commons.compress.archivers.ArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ExtraFieldUtils;
+import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
 import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
 import org.apache.commons.io.IOUtils;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 
 public class Zipper implements Backup {
+    public Zipper() {
+        ExtraFieldUtils.register(SizeExtraField.class);
+    }
 
     @Override
     public void archive(List<MailboxMessage> messages, OutputStream destination) throws IOException {
@@ -42,7 +46,8 @@ public class Zipper implements Backup {
 
     private void storeInArchive(MailboxMessage message, ZipArchiveOutputStream archiveOutputStream) throws IOException {
         String entryId = message.getMessageId().serialize();
-        ArchiveEntry archiveEntry = archiveOutputStream.createArchiveEntry(new File(entryId), entryId);
+        ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File(entryId), entryId);
+        archiveEntry.addExtraField(new SizeExtraField(message.getFullContentOctets()));
         archiveOutputStream.putArchiveEntry(archiveEntry);
         IOUtils.copy(message.getFullContent(), archiveOutputStream);
         archiveOutputStream.closeArchiveEntry();

http://git-wip-us.apache.org/repos/asf/james-project/blob/feb18013/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxMessageFixture.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxMessageFixture.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxMessageFixture.java
index 8012e78..3d46075 100644
--- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxMessageFixture.java
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxMessageFixture.java
@@ -49,8 +49,8 @@ public interface MailboxMessageFixture {
     SharedByteArrayInputStream CONTENT_STREAM_2 = new SharedByteArrayInputStream(MESSAGE_CONTENT_2.getBytes(MESSAGE_CHARSET));
     MessageId MESSAGE_ID_1 = MESSAGE_ID_FACTORY.generate();
     MessageId MESSAGE_ID_2 = MESSAGE_ID_FACTORY.generate();
-    int SIZE_1 = 1000;
-    int SIZE_2 = 2000;
+    long SIZE_1 = 1000;
+    long SIZE_2 = 2000;
 
     SimpleMailboxMessage MESSAGE_1 = SimpleMailboxMessage.builder()
         .messageId(MESSAGE_ID_1)

http://git-wip-us.apache.org/repos/asf/james-project/blob/feb18013/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/SizeExtraFieldTest.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/SizeExtraFieldTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/SizeExtraFieldTest.java
new file mode 100644
index 0000000..db2b274
--- /dev/null
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/SizeExtraFieldTest.java
@@ -0,0 +1,202 @@
+/****************************************************************
+ * 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.backup;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.util.zip.ZipException;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.testcontainers.shaded.org.bouncycastle.util.Arrays;
+
+import com.google.common.base.Charsets;
+
+public class SizeExtraFieldTest {
+    private static final byte[] ZERO_AS_BYTE_ARRAY = {0, 0, 0, 0, 0, 0, 0, 0};
+    private static final byte[] _123456789ABCDEF0_AS_LE_BYTE_ARRAY = new byte[] {(byte) 0xF0, (byte) 0xDE, (byte) 0xBC, (byte) 0x9A, 0x78, 0x56, 0x34, 0x12};
+    private static final byte[] FEDCBA9876543210_AS_LE_BYTE_ARRAY = new byte[] {0x10, 0x32, 0x54, 0x76, (byte) 0x98, (byte) 0xBA, (byte) 0xDC, (byte) 0xFE};
+    private static final byte[] UNUSED = new byte[] {(byte) 0xDE, (byte) 0xAD};
+
+    private SizeExtraField testee;
+
+    @BeforeEach
+    void setUp() {
+        testee = new SizeExtraField();
+    }
+
+    @Test
+    void getLocalFileDataLengthShouldReturnIntegerSize() {
+        assertThat(testee.getLocalFileDataLength().getValue())
+            .isEqualTo(Long.BYTES);
+    }
+
+    @Test
+    void getCentralDirectoryLengthShouldReturnIntegerSize() {
+        assertThat(testee.getCentralDirectoryLength().getValue())
+            .isEqualTo(Long.BYTES);
+    }
+
+    @Test
+    void getHeaderIdShouldReturnSpecificStringInLittleEndian() {
+        ByteBuffer byteBuffer = ByteBuffer.wrap(testee.getHeaderId().getBytes())
+            .order(ByteOrder.LITTLE_ENDIAN);
+        assertThat(Charsets.US_ASCII.decode(byteBuffer).toString())
+            .isEqualTo("aj");
+    }
+
+    @Test
+    void getLocalFileDataDataShouldThrowWhenNoValue() {
+        assertThatThrownBy(() -> testee.getLocalFileDataData())
+            .isInstanceOf(RuntimeException.class);
+    }
+
+    @Test
+    void getLocalFileDataDataShouldReturnZeroWhenZero() {
+        byte[] actual = new SizeExtraField(0).getLocalFileDataData();
+        assertThat(actual).isEqualTo(ZERO_AS_BYTE_ARRAY);
+    }
+
+    @Test
+    void getLocalFileDataDataShouldReturnValueInLittleIndianWhen123456789ABCDEF0() {
+        byte[] actual = new SizeExtraField(0x123456789ABCDEF0L).getLocalFileDataData();
+        assertThat(actual).isEqualTo(_123456789ABCDEF0_AS_LE_BYTE_ARRAY);
+    }
+
+    @Test
+    void getLocalFileDataDataShouldReturnValueInLittleIndianWhenFEDCBA9876543210() {
+        byte[] actual = new SizeExtraField(0xFEDCBA9876543210L).getLocalFileDataData();
+        assertThat(actual).isEqualTo(FEDCBA9876543210_AS_LE_BYTE_ARRAY);
+    }
+
+    @Test
+    void getCentralDirectoryDataShouldThrowWhenNoValue() {
+        assertThatThrownBy(() -> testee.getCentralDirectoryData())
+            .isInstanceOf(RuntimeException.class);
+    }
+
+    @Test
+    void getCentralDirectoryDataShouldReturnZeroWhenZero() {
+        byte[] actual = new SizeExtraField(0).getCentralDirectoryData();
+        assertThat(actual).isEqualTo(ZERO_AS_BYTE_ARRAY);
+    }
+
+    @Test
+    void getCentralDirectoryDataShouldReturnValueInLittleIndianWhen123456789ABCDEF0() {
+        byte[] actual = new SizeExtraField(0x123456789ABCDEF0L).getCentralDirectoryData();
+        assertThat(actual).isEqualTo(_123456789ABCDEF0_AS_LE_BYTE_ARRAY);
+    }
+
+    @Test
+    void getCentralDirectoryDataShouldReturnValueInLittleIndianWhenFEDCBA9876543210() {
+        byte[] actual = new SizeExtraField(0xFEDCBA9876543210L).getCentralDirectoryData();
+        assertThat(actual).isEqualTo(FEDCBA9876543210_AS_LE_BYTE_ARRAY);
+    }
+
+    @Test
+    void parseFromLocalFileDataShouldThrownWhenLengthIsSmallerThan8() {
+        byte[] input = new byte[] {0, 0, 0, 0, 0, 0, 0};
+        assertThatThrownBy(() -> testee.parseFromLocalFileData(input, 0, 7))
+            .isInstanceOf(ZipException.class);
+    }
+
+    @Test
+    void parseFromLocalFileDataShouldThrownWhenLengthIsBiggerThan8() {
+        byte[] input = new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0};
+        assertThatThrownBy(() -> testee.parseFromLocalFileData(input, 0, 9))
+            .isInstanceOf(ZipException.class);
+    }
+
+    @Test
+    void parseFromLocalFileDataShouldParseWhenZero() throws Exception {
+        testee.parseFromLocalFileData(ZERO_AS_BYTE_ARRAY, 0, 8);
+        assertThat(testee.getSize())
+            .contains(0L);
+    }
+
+    @Test
+    void parseFromLocalFileDataShouldParseWhen123456789ABCDEF0InLittleEndian() throws Exception {
+        testee.parseFromLocalFileData(_123456789ABCDEF0_AS_LE_BYTE_ARRAY, 0, 8);
+        assertThat(testee.getSize())
+            .contains(0x123456789ABCDEF0L);
+    }
+
+    @Test
+    void parseFromLocalFileDataShouldParseWhenFEDCBA9876543210InLittleEndian() throws Exception {
+        byte[] input = FEDCBA9876543210_AS_LE_BYTE_ARRAY;
+        testee.parseFromLocalFileData(input, 0, 8);
+        assertThat(testee.getSize())
+            .contains(0xFEDCBA9876543210L);
+    }
+
+    @Test
+    void parseFromLocalFileDataShouldHandleOffset() throws Exception {
+        byte[] input = Arrays.concatenate(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
+        testee.parseFromLocalFileData(input, 2, 8);
+        assertThat(testee.getSize())
+            .contains(0x123456789ABCDEF0L);
+    }
+
+    @Test
+    void parseFromCentralDirectoryDataShouldThrownWhenLengthIsSmallerThan8() {
+        byte[] input = new byte[7];
+        assertThatThrownBy(() -> testee.parseFromCentralDirectoryData(input, 0, 7))
+            .isInstanceOf(ZipException.class);
+    }
+
+    @Test
+    void parseFromCentralDirectoryDataShouldThrownWhenLengthIsBiggerThan8() {
+        byte[] input = new byte[9];
+        assertThatThrownBy(() -> testee.parseFromCentralDirectoryData(input, 0, 9))
+            .isInstanceOf(ZipException.class);
+    }
+
+    @Test
+    void parseFromCentralDirectoryDataShouldParseWhenZero() throws Exception {
+        testee.parseFromCentralDirectoryData(ZERO_AS_BYTE_ARRAY, 0, 8);
+        assertThat(testee.getSize())
+            .contains(0L);
+    }
+
+    @Test
+    void parseFromCentralDirectoryDataShouldParseWhen123456789ABCDEF0InLittleEndian() throws Exception {
+        testee.parseFromCentralDirectoryData(_123456789ABCDEF0_AS_LE_BYTE_ARRAY, 0, 8);
+        assertThat(testee.getSize())
+            .contains(0x123456789ABCDEF0L);
+    }
+
+    @Test
+    void parseFromCentralDirectoryDataShouldParseWhenFEDCBA9876543210InLittleEndian() throws Exception {
+        byte[] input = FEDCBA9876543210_AS_LE_BYTE_ARRAY;
+        testee.parseFromCentralDirectoryData(input, 0, 8);
+        assertThat(testee.getSize())
+            .contains(0xFEDCBA9876543210L);
+    }
+
+    @Test
+    void parseFromCentralDirectoryDataShouldHandleOffset() throws Exception {
+        byte[] input = Arrays.concatenate(UNUSED, _123456789ABCDEF0_AS_LE_BYTE_ARRAY);
+        testee.parseFromCentralDirectoryData(input, 2, 8);
+        assertThat(testee.getSize())
+            .contains(0x123456789ABCDEF0L);
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/feb18013/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java
index f3d1b89..4f268ec 100644
--- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java
@@ -22,8 +22,10 @@ package org.apache.james.mailbox.backup;
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
 
 import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ZipExtraField;
 import org.apache.commons.compress.archivers.zip.ZipFile;
 import org.apache.commons.io.IOUtils;
 import org.assertj.core.api.AbstractAssert;
@@ -47,6 +49,15 @@ public class ZipArchiveEntryAssert extends AbstractAssert<ZipArchiveEntryAssert,
         return new BasicErrorMessageFactory("%nExpecting %s to have content %s but was %s", zipArchiveEntry, expectedContent, actualContent);
     }
 
+    private static BasicErrorMessageFactory shouldHaveExtraFields(ZipArchiveEntry zipArchiveEntry,
+                                                                  ZipExtraField[] expectedExtraFields,
+                                                                  ZipExtraField[] actualExtraFields) {
+        return new BasicErrorMessageFactory("%nExpecting %s to contain exactly being %s" +
+            " but was containing being %s", zipArchiveEntry,
+            Arrays.toString(expectedExtraFields),
+            Arrays.toString(actualExtraFields));
+    }
+
     private final ZipFile zipFile;
     private final ZipArchiveEntry actual;
 
@@ -76,4 +87,18 @@ public class ZipArchiveEntryAssert extends AbstractAssert<ZipArchiveEntryAssert,
         }
         return myself;
     }
+
+    public ZipArchiveEntryAssert containsExactlyExtraFields(ZipExtraField... expectedExtraFields) {
+        isNotNull();
+        ZipExtraField[] actualExtraFields = actual.getExtraFields();
+        if (expectedExtraFields.length != actualExtraFields.length) {
+            throwAssertionError(shouldHaveExtraFields(actual, expectedExtraFields, actualExtraFields));
+        }
+        for (int i = 0; i < expectedExtraFields.length; i++) {
+            if (!expectedExtraFields[i].equals(actualExtraFields[i])) {
+                throwAssertionError(shouldHaveExtraFields(actual, expectedExtraFields, actualExtraFields));
+            }
+        }
+        return myself;
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/feb18013/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
index 888fed6..ed4e17a 100644
--- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
@@ -24,6 +24,7 @@ import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_CONT
 import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_CONTENT_2;
 import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_ID_1;
 import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_ID_2;
+import static org.apache.james.mailbox.backup.MailboxMessageFixture.SIZE_1;
 import static org.apache.james.mailbox.backup.ZipAssert.assertThatZip;
 
 import java.io.File;
@@ -100,4 +101,16 @@ public class ZipperTest {
                         .hasStringContent(MESSAGE_CONTENT_2));
         }
     }
+
+    @Test
+    void archiveShouldWriteSizeMetadata() throws Exception {
+        testee.archive(ImmutableList.of(MESSAGE_1), new FileOutputStream(destination));
+
+        try (ZipFile zipFile = new ZipFile(destination)) {
+            assertThatZip(zipFile)
+                .containsExactlyEntriesMatching(
+                    zipEntryAssert -> zipEntryAssert
+                        .containsExactlyExtraFields(new SizeExtraField(SIZE_1)));
+        }
+    }
 }


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


[07/11] james-project git commit: JAMES-2414 Rely on capabilities for copying messages with attachments

Posted by bt...@apache.org.
JAMES-2414 Rely on capabilities for copying messages with attachments


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

Branch: refs/heads/master
Commit: 0c84c453757f77440dbfa8d4b6914e5931cd2a49
Parents: fe22488
Author: benwa <bt...@linagora.com>
Authored: Mon Jun 18 10:14:14 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 19 15:09:48 2018 +0700

----------------------------------------------------------------------
 .../cassandra/CassandraMailboxManager.java       | 19 +++++++++++--------
 .../cassandra/CassandraMessageManager.java       | 10 +---------
 .../james/mailbox/hbase/HBaseMailboxManager.java |  6 ++++--
 .../james/mailbox/hbase/HBaseMessageManager.java |  2 +-
 .../james/mailbox/jcr/JCRMessageManager.java     |  2 +-
 .../james/mailbox/jpa/JPAMailboxManager.java     |  8 +++++---
 .../james/mailbox/jpa/JPAMessageManager.java     |  2 +-
 .../mailbox/inmemory/InMemoryMailboxManager.java | 17 ++++++++++-------
 .../mailbox/inmemory/InMemoryMessageManager.java | 11 +----------
 .../james/mailbox/store/StoreMailboxManager.java |  5 +++--
 .../james/mailbox/store/StoreMessageManager.java | 17 +++++++++++++++--
 11 files changed, 53 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
index be5d71c..aded5ad 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
@@ -47,6 +47,15 @@ import org.apache.james.mailbox.store.search.MessageSearchIndex;
  * Cassandra implementation of {@link StoreMailboxManager}
  */
 public class CassandraMailboxManager extends StoreMailboxManager {
+    public static final EnumSet<MailboxCapabilities> MAILBOX_CAPABILITIES = EnumSet.of(
+        MailboxCapabilities.Move,
+        MailboxCapabilities.UserFlag,
+        MailboxCapabilities.Namespace,
+        MailboxCapabilities.Annotation,
+        MailboxCapabilities.ACL,
+        MailboxCapabilities.Quota);
+    public static final EnumSet<MessageCapabilities> MESSAGE_CAPABILITIES = EnumSet.of(MessageCapabilities.Attachment, MessageCapabilities.UniqueID);
+
     private final MailboxPathLocker locker;
     private final CassandraMailboxSessionMapperFactory mapperFactory;
 
@@ -78,18 +87,12 @@ public class CassandraMailboxManager extends StoreMailboxManager {
 
     @Override
     public EnumSet<MailboxManager.MailboxCapabilities> getSupportedMailboxCapabilities() {
-        return EnumSet.of(
-            MailboxCapabilities.Move,
-            MailboxCapabilities.UserFlag,
-            MailboxCapabilities.Namespace,
-            MailboxCapabilities.Annotation,
-            MailboxCapabilities.ACL,
-            MailboxCapabilities.Quota);
+        return MAILBOX_CAPABILITIES;
     }
 
     @Override
     public EnumSet<MessageCapabilities> getSupportedMessageCapabilities() {
-        return EnumSet.of(MessageCapabilities.Attachment, MessageCapabilities.UniqueID);
+        return MESSAGE_CAPABILITIES;
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
index 09b773c..f396f1c 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
@@ -38,7 +38,6 @@ import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
-import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
 import com.github.steveash.guavate.Guavate;
@@ -56,7 +55,7 @@ public class CassandraMessageManager extends StoreMessageManager {
                                    QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory,
                                    BatchSizes batchSizes, ImmutableMailboxMessage.Factory immutableMailboxMessageFactory,
                                    StoreRightManager storeRightManager) throws MailboxException {
-        super(mapperFactory, index, dispatcher, locker, mailbox,
+        super(CassandraMailboxManager.MESSAGE_CAPABILITIES, mapperFactory, index, dispatcher, locker, mailbox,
             quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory, storeRightManager);
 
         this.mapperFactory = mapperFactory;
@@ -82,11 +81,4 @@ public class CassandraMessageManager extends StoreMessageManager {
                 message.getMessageId());
     }
 
-    @Override
-    protected MailboxMessage copyMessage(MailboxMessage message) throws MailboxException {
-        SimpleMailboxMessage copy = SimpleMailboxMessage.copy(message.getMailboxId(), message);
-        copy.setUid(message.getUid());
-        copy.setModSeq(message.getModSeq());
-        return copy;
-    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
index 5fe1378..eba9b3e 100644
--- a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
+++ b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
@@ -45,6 +45,8 @@ import org.apache.james.mailbox.store.transaction.Mapper;
  */
 public class HBaseMailboxManager extends StoreMailboxManager {
 
+    public static final EnumSet<MailboxCapabilities> MAILBOX_CAPABILITIES = EnumSet.of(MailboxCapabilities.Namespace);
+
     public HBaseMailboxManager(HBaseMailboxSessionMapperFactory mapperFactory,
                                Authenticator authenticator,
                                Authorizator authorizator,
@@ -60,7 +62,7 @@ public class HBaseMailboxManager extends StoreMailboxManager {
     }
 
     @Override
-    protected Mailbox doCreateMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
+    protected Mailbox doCreateMailbox(MailboxPath mailboxPath, MailboxSession session) {
         return new HBaseMailbox(mailboxPath, randomUidValidity());
     }
 
@@ -80,7 +82,7 @@ public class HBaseMailboxManager extends StoreMailboxManager {
 
     @Override
     public EnumSet<MailboxCapabilities> getSupportedMailboxCapabilities() {
-        return EnumSet.of(MailboxCapabilities.Namespace);
+        return MAILBOX_CAPABILITIES;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
index 95884c4..7e26219 100644
--- a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
+++ b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
@@ -54,7 +54,7 @@ public class HBaseMessageManager extends StoreMessageManager {
                                BatchSizes batchSizes,
                                ImmutableMailboxMessage.Factory immutableMailboxMessageFactory,
                                StoreRightManager storeRightManager) throws MailboxException {
-        super(mapperFactory, index, dispatcher, locker, mailbox, quotaManager,
+        super(HBaseMailboxManager.DEFAULT_NO_MESSAGE_CAPABILITIES, mapperFactory, index, dispatcher, locker, mailbox, quotaManager,
                 quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory, storeRightManager);
 
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
index 00012c5..f859afd 100644
--- a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
+++ b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
@@ -63,7 +63,7 @@ public class JCRMessageManager extends StoreMessageManager {
                              ImmutableMailboxMessage.Factory immutableMailboxMessageFactory,
                              StoreRightManager storeRightManager)
                     throws MailboxException {
-        super(mapperFactory, index, dispatcher, locker, mailbox, quotaManager,
+        super(JCRMailboxManager.DEFAULT_NO_MESSAGE_CAPABILITIES, mapperFactory, index, dispatcher, locker, mailbox, quotaManager,
                 quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory, storeRightManager);
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
index f6282d2..d8c4491 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
@@ -43,6 +43,10 @@ import org.apache.james.mailbox.store.transaction.Mapper;
  */
 public abstract class JPAMailboxManager extends StoreMailboxManager {
 
+    public static final EnumSet<MailboxCapabilities> MAILBOX_CAPABILITIES = EnumSet.of(MailboxCapabilities.UserFlag,
+        MailboxCapabilities.Namespace,
+        MailboxCapabilities.Annotation);
+
     public JPAMailboxManager(JPAMailboxSessionMapperFactory mailboxSessionMapperFactory,
                              Authenticator authenticator,
                              Authorizator authorizator,
@@ -65,9 +69,7 @@ public abstract class JPAMailboxManager extends StoreMailboxManager {
 
     @Override
     public EnumSet<MailboxCapabilities> getSupportedMailboxCapabilities() {
-        return EnumSet.of(MailboxCapabilities.UserFlag,
-            MailboxCapabilities.Namespace,
-            MailboxCapabilities.Annotation);
+        return MAILBOX_CAPABILITIES;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
index c37b5c4..77feb6d 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
@@ -63,7 +63,7 @@ public class JPAMessageManager extends StoreMessageManager {
                              ImmutableMailboxMessage.Factory immutableMailboxMessageFactory,
                              StoreRightManager storeRightManager) throws MailboxException {
 
-        super(mapperFactory, index, dispatcher, locker, mailbox,
+        super(JPAMailboxManager.DEFAULT_NO_MESSAGE_CAPABILITIES, mapperFactory, index, dispatcher, locker, mailbox,
             quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory, storeRightManager);
     }
     

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
index 2d5a11d..e2c51e2 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
@@ -42,6 +42,14 @@ import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
 public class InMemoryMailboxManager extends StoreMailboxManager {
 
+    public static final EnumSet<MailboxCapabilities> MAILBOX_CAPABILITIES = EnumSet.of(MailboxCapabilities.Move,
+        MailboxCapabilities.UserFlag,
+        MailboxCapabilities.Namespace,
+        MailboxCapabilities.Annotation,
+        MailboxCapabilities.ACL,
+        MailboxCapabilities.Quota);
+    public static final EnumSet<MessageCapabilities> MESSAGE_CAPABILITIES = EnumSet.of(MessageCapabilities.Attachment, MessageCapabilities.UniqueID);
+
     @Inject
     public InMemoryMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator, Authorizator authorizator,
                                   MailboxPathLocker locker, MessageParser messageParser, MessageId.Factory messageIdFactory, MailboxEventDispatcher dispatcher,
@@ -61,17 +69,12 @@ public class InMemoryMailboxManager extends StoreMailboxManager {
 
     @Override
     public EnumSet<MailboxCapabilities> getSupportedMailboxCapabilities() {
-        return EnumSet.of(MailboxCapabilities.Move,
-            MailboxCapabilities.UserFlag,
-            MailboxCapabilities.Namespace,
-            MailboxCapabilities.Annotation,
-            MailboxCapabilities.ACL,
-            MailboxCapabilities.Quota);
+        return MAILBOX_CAPABILITIES;
     }
     
     @Override
     public EnumSet<MessageCapabilities> getSupportedMessageCapabilities() {
-        return EnumSet.of(MessageCapabilities.Attachment, MessageCapabilities.UniqueID);
+        return MESSAGE_CAPABILITIES;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
index 458e97d..7bc1b13 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
@@ -20,7 +20,6 @@ import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
-import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
 import com.github.steveash.guavate.Guavate;
@@ -41,7 +40,7 @@ public class InMemoryMessageManager extends StoreMessageManager {
                                   BatchSizes batchSizes,
                                   ImmutableMailboxMessage.Factory immutableMailboxMessageFactory,
                                   StoreRightManager storeRightManager) throws MailboxException {
-        super(mapperFactory, index, dispatcher, locker, mailbox, quotaManager, quotaRootResolver,
+        super(InMemoryMailboxManager.MESSAGE_CAPABILITIES, mapperFactory, index, dispatcher, locker, mailbox, quotaManager, quotaRootResolver,
             messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory, storeRightManager);
         this.mapperFactory = (InMemoryMailboxSessionMapperFactory) mapperFactory;
     }
@@ -62,12 +61,4 @@ public class InMemoryMessageManager extends StoreMessageManager {
                     .collect(Guavate.toImmutableList()),
                 message.getMessageId());
     }
-
-    @Override
-    protected MailboxMessage copyMessage(MailboxMessage message) throws MailboxException {
-        SimpleMailboxMessage copy = SimpleMailboxMessage.copy(message.getMailboxId(), message);
-        copy.setUid(message.getUid());
-        copy.setModSeq(message.getModSeq());
-        return copy;
-    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index a8125fd..3746257 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -100,6 +100,7 @@ import com.google.common.collect.Iterables;
 public class StoreMailboxManager implements MailboxManager {
     private static final Logger LOGGER = LoggerFactory.getLogger(StoreMailboxManager.class);
     public static final char SQL_WILDCARD_CHAR = '%';
+    public static final EnumSet<MessageCapabilities> DEFAULT_NO_MESSAGE_CAPABILITIES = EnumSet.noneOf(MessageCapabilities.class);
 
     private final MailboxEventDispatcher dispatcher;
     private final DelegatingMailboxListener delegatingListener;
@@ -243,7 +244,7 @@ public class StoreMailboxManager implements MailboxManager {
 
     @Override
     public EnumSet<MessageCapabilities> getSupportedMessageCapabilities() {
-        return EnumSet.noneOf(MessageCapabilities.class);
+        return DEFAULT_NO_MESSAGE_CAPABILITIES;
     }
     
     @Override
@@ -415,7 +416,7 @@ public class StoreMailboxManager implements MailboxManager {
      * @return storeMailbox
      */
     protected StoreMessageManager createMessageManager(Mailbox mailbox, MailboxSession session) throws MailboxException {
-        return new StoreMessageManager(getMapperFactory(), getMessageSearchIndex(), getEventDispatcher(), 
+        return new StoreMessageManager(DEFAULT_NO_MESSAGE_CAPABILITIES, getMapperFactory(), getMessageSearchIndex(), getEventDispatcher(),
                 getLocker(), mailbox, getQuotaManager(),
                 getQuotaRootResolver(), getMessageParser(), getMessageIdFactory(), getBatchSizes(),
                 getImmutableMailboxMessageFactory(), getStoreRightManager());

http://git-wip-us.apache.org/repos/asf/james-project/blob/0c84c453/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 af19c66..cb0f22f 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
@@ -25,6 +25,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.EnumSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -39,6 +40,7 @@ import javax.mail.util.SharedFileInputStream;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.input.TeeInputStream;
 import org.apache.james.mailbox.MailboxListener;
+import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
@@ -127,6 +129,8 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
 
     private static final Logger LOG = LoggerFactory.getLogger(StoreMessageManager.class);
 
+    private final EnumSet<MailboxManager.MessageCapabilities> messageCapabilities;
+
     private final Mailbox mailbox;
 
     private final MailboxEventDispatcher dispatcher;
@@ -151,11 +155,12 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
 
     private final ImmutableMailboxMessage.Factory immutableMailboxMessageFactory;
 
-    public StoreMessageManager(MailboxSessionMapperFactory mapperFactory, MessageSearchIndex index, MailboxEventDispatcher dispatcher, 
+    public StoreMessageManager(EnumSet<MailboxManager.MessageCapabilities> messageCapabilities, MailboxSessionMapperFactory mapperFactory, MessageSearchIndex index, MailboxEventDispatcher dispatcher,
             MailboxPathLocker locker, Mailbox mailbox,
             QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes,
             ImmutableMailboxMessage.Factory immutableMailboxMessageFactory, StoreRightManager storeRightManager)
                     throws MailboxException {
+        this.messageCapabilities = messageCapabilities;
         this.mailbox = mailbox;
         this.dispatcher = dispatcher;
         this.mapperFactory = mapperFactory;
@@ -466,12 +471,20 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
     }
 
     protected MailboxMessage copyMessage(MailboxMessage message) throws MailboxException {
-        SimpleMailboxMessage copy = SimpleMailboxMessage.copyWithoutAttachments(message.getMailboxId(), message);
+        SimpleMailboxMessage copy = copyMessageWithoutMetadata(message);
         copy.setUid(message.getUid());
         copy.setModSeq(message.getModSeq());
         return copy;
     }
 
+    private SimpleMailboxMessage copyMessageWithoutMetadata(MailboxMessage message) throws MailboxException {
+        if (messageCapabilities.contains(MailboxManager.MessageCapabilities.Attachment)) {
+            return SimpleMailboxMessage.copy(message.getMailboxId(), message);
+        } else {
+            return SimpleMailboxMessage.copyWithoutAttachments(message.getMailboxId(), message);
+        }
+    }
+
     @Override
     public boolean isWriteable(MailboxSession session) throws MailboxException {
         return storeRightManager.isReadWrite(session, mailbox, getSharedPermanentFlags(session));


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


[11/11] james-project git commit: JAMES-2431 Update dockerfiles/site/homepage/Dockerfile

Posted by bt...@apache.org.
JAMES-2431 Update dockerfiles/site/homepage/Dockerfile

Contributed kindly by https://github.com/GaillardTheo

add apt-key update


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

Branch: refs/heads/master
Commit: c0ea1007fbf8610e9b4e293da725b9f41dc45794
Parents: ef463dd
Author: Théo Gaillard <th...@epitech.eu>
Authored: Tue Jun 19 00:09:38 2018 +0200
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 19 15:10:15 2018 +0700

----------------------------------------------------------------------
 dockerfiles/site/homepage/Dockerfile | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/c0ea1007/dockerfiles/site/homepage/Dockerfile
----------------------------------------------------------------------
diff --git a/dockerfiles/site/homepage/Dockerfile b/dockerfiles/site/homepage/Dockerfile
index e6d2bde..82ccf88 100644
--- a/dockerfiles/site/homepage/Dockerfile
+++ b/dockerfiles/site/homepage/Dockerfile
@@ -1,6 +1,7 @@
-FROM ruby:2.1
+FROM ruby:2.2
 
-RUN apt-get update \
+RUN apt-key update \
+  && apt-get update \
   && apt-get install -y \
     node \
     python-pygments \


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


[10/11] james-project git commit: JAMES-2414 remove Attachment Capability

Posted by bt...@apache.org.
JAMES-2414 remove Attachment Capability


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

Branch: refs/heads/master
Commit: ef463dd6de59af1de47675580458da0bc17a2a39
Parents: 2724e89
Author: Matthieu Baechler <ma...@apache.org>
Authored: Mon Jun 18 18:13:20 2018 +0200
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 19 15:09:53 2018 +0700

----------------------------------------------------------------------
 .../java/org/apache/james/mailbox/MailboxManager.java   |  1 -
 .../mailbox/cassandra/CassandraMailboxManager.java      |  2 +-
 .../james/mailbox/inmemory/InMemoryMailboxManager.java  |  2 +-
 .../james/mailbox/store/ImmutableMailboxMessage.java    |  5 +----
 .../mailbox/store/search/SimpleMessageSearchIndex.java  | 12 ++++--------
 .../org/apache/james/JamesCapabilitiesServerTest.java   |  2 +-
 .../src/main/java/org/apache/james/jmap/JMAPModule.java |  2 --
 7 files changed, 8 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/ef463dd6/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
index e00deb2..1d13791 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
@@ -84,7 +84,6 @@ public interface MailboxManager extends RequestAware, MailboxListenerSupport, Ri
     boolean hasCapability(MailboxCapabilities capability);
 
     enum MessageCapabilities {
-        Attachment,
         UniqueID
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/ef463dd6/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
index 7b071a5..81e543b 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
@@ -53,7 +53,7 @@ public class CassandraMailboxManager extends StoreMailboxManager {
         MailboxCapabilities.Annotation,
         MailboxCapabilities.ACL,
         MailboxCapabilities.Quota);
-    public static final EnumSet<MessageCapabilities> MESSAGE_CAPABILITIES = EnumSet.of(MessageCapabilities.Attachment, MessageCapabilities.UniqueID);
+    public static final EnumSet<MessageCapabilities> MESSAGE_CAPABILITIES = EnumSet.of(MessageCapabilities.UniqueID);
 
     private final MailboxPathLocker locker;
     private final CassandraMailboxSessionMapperFactory mapperFactory;

http://git-wip-us.apache.org/repos/asf/james-project/blob/ef463dd6/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
index 5f02b28..69736ac 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
@@ -47,7 +47,7 @@ public class InMemoryMailboxManager extends StoreMailboxManager {
         MailboxCapabilities.Annotation,
         MailboxCapabilities.ACL,
         MailboxCapabilities.Quota);
-    public static final EnumSet<MessageCapabilities> MESSAGE_CAPABILITIES = EnumSet.of(MessageCapabilities.Attachment, MessageCapabilities.UniqueID);
+    public static final EnumSet<MessageCapabilities> MESSAGE_CAPABILITIES = EnumSet.of(MessageCapabilities.UniqueID);
 
     @Inject
     public InMemoryMailboxManager(MailboxSessionMapperFactory mailboxSessionMapperFactory, Authenticator authenticator, Authorizator authorizator,

http://git-wip-us.apache.org/repos/asf/james-project/blob/ef463dd6/mailbox/store/src/main/java/org/apache/james/mailbox/store/ImmutableMailboxMessage.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/ImmutableMailboxMessage.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/ImmutableMailboxMessage.java
index 15330c7..dcc1e96 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/ImmutableMailboxMessage.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/ImmutableMailboxMessage.java
@@ -83,10 +83,7 @@ public class ImmutableMailboxMessage implements MailboxMessage {
         }
 
         private ImmutableList<MessageAttachment> attachments(MailboxMessage message) {
-            if (mailboxManager.getSupportedMessageCapabilities().contains(MailboxManager.MessageCapabilities.Attachment)) {
-                return ImmutableList.copyOf(message.getAttachments());
-            }
-            return ImmutableList.of();
+            return ImmutableList.copyOf(message.getAttachments());
         }
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/ef463dd6/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java
----------------------------------------------------------------------
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java
index 724c575..ce22aa9 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java
@@ -77,15 +77,11 @@ public class SimpleMessageSearchIndex implements MessageSearchIndex {
     
     @Override
     public EnumSet<SearchCapabilities> getSupportedCapabilities(EnumSet<MessageCapabilities> messageCapabilities) {
-        if (messageCapabilities.contains(MessageCapabilities.Attachment)) {
-            return EnumSet.of(SearchCapabilities.MultimailboxSearch,
-                SearchCapabilities.Text,
-                SearchCapabilities.Attachment,
-                SearchCapabilities.PartialEmailMatch,
-                SearchCapabilities.AttachmentFileName);
-        }
         return EnumSet.of(SearchCapabilities.MultimailboxSearch,
-            SearchCapabilities.Text);
+            SearchCapabilities.Text,
+            SearchCapabilities.Attachment,
+            SearchCapabilities.PartialEmailMatch,
+            SearchCapabilities.AttachmentFileName);
     }
     
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/ef463dd6/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
----------------------------------------------------------------------
diff --git a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
index 80132c1..45cc1a8 100644
--- a/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
+++ b/server/container/guice/cassandra-guice/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
@@ -111,7 +111,7 @@ public class JamesCapabilitiesServerTest {
         when(mailboxManager.getSupportedMailboxCapabilities())
             .thenReturn(EnumSet.allOf(MailboxManager.MailboxCapabilities.class));
         when(mailboxManager.getSupportedMessageCapabilities())
-            .thenReturn(EnumSet.complementOf(EnumSet.of(MailboxManager.MessageCapabilities.Attachment)));
+            .thenReturn(EnumSet.allOf(MailboxManager.MessageCapabilities.class));
         when(mailboxManager.getSupportedSearchCapabilities())
             .thenReturn(EnumSet.allOf(MailboxManager.SearchCapabilities.class));
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/ef463dd6/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
----------------------------------------------------------------------
diff --git a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
index 111b2f7..b70c953 100644
--- a/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
+++ b/server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPModule.java
@@ -148,8 +148,6 @@ public class JMAPModule extends AbstractModule {
                     "ACL support in MailboxManager is required by JMAP Module");
 
             EnumSet<MailboxManager.MessageCapabilities> messageCapabilities = mailboxManager.getSupportedMessageCapabilities();
-            Preconditions.checkArgument(messageCapabilities.contains(MailboxManager.MessageCapabilities.Attachment),
-                    "Attachment support in MailboxManager is required by JMAP Module");
             Preconditions.checkArgument(messageCapabilities.contains(MailboxManager.MessageCapabilities.UniqueID),
                     "MessageIdManager is not defined by this Mailbox implementation");
 


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


[09/11] james-project git commit: JAMES-2414 Somve various intelliJ warnings

Posted by bt...@apache.org.
JAMES-2414 Somve various intelliJ warnings

 - Uneeded exception
 - FQDNs
 - final qualifiers


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

Branch: refs/heads/master
Commit: 71c4d395ac20203a831e77de8fca28662192a078
Parents: 0c84c45
Author: benwa <bt...@linagora.com>
Authored: Mon Jun 18 10:18:59 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 19 15:09:53 2018 +0700

----------------------------------------------------------------------
 .../james/mailbox/cassandra/CassandraMailboxManager.java      | 5 ++---
 .../james/mailbox/cassandra/CassandraMessageManager.java      | 2 +-
 .../org/apache/james/mailbox/hbase/HBaseMailboxManager.java   | 4 ++--
 .../org/apache/james/mailbox/hbase/HBaseMessageManager.java   | 5 ++---
 .../java/org/apache/james/mailbox/jcr/JCRMailboxManager.java  | 7 +++----
 .../java/org/apache/james/mailbox/jcr/JCRMessageManager.java  | 4 ++--
 .../java/org/apache/james/mailbox/jpa/JPAMessageManager.java  | 6 +++---
 .../james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java      | 3 +--
 .../james/mailbox/jpa/openjpa/OpenJPAMessageManager.java      | 2 +-
 .../apache/james/mailbox/inmemory/InMemoryMailboxManager.java | 3 +--
 .../apache/james/mailbox/inmemory/InMemoryMessageManager.java | 3 ++-
 .../org/apache/james/mailbox/store/StoreMessageManager.java   | 3 +--
 12 files changed, 21 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/71c4d395/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
index aded5ad..7b071a5 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
@@ -26,7 +26,6 @@ import javax.inject.Inject;
 import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxACL;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
@@ -96,14 +95,14 @@ public class CassandraMailboxManager extends StoreMailboxManager {
     }
     
     @Override
-    protected Mailbox doCreateMailbox(MailboxPath mailboxPath, MailboxSession session) throws MailboxException {
+    protected Mailbox doCreateMailbox(MailboxPath mailboxPath, MailboxSession session) {
         SimpleMailbox cassandraMailbox = new SimpleMailbox(mailboxPath, randomUidValidity());
         cassandraMailbox.setACL(MailboxACL.EMPTY);
         return cassandraMailbox;
     }
 
     @Override
-    protected StoreMessageManager createMessageManager(Mailbox mailboxRow, MailboxSession session) throws MailboxException {
+    protected StoreMessageManager createMessageManager(Mailbox mailboxRow, MailboxSession session) {
         return new CassandraMessageManager(mapperFactory,
             getMessageSearchIndex(),
             getEventDispatcher(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/71c4d395/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
index f396f1c..5ce4286 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
@@ -54,7 +54,7 @@ public class CassandraMessageManager extends StoreMessageManager {
                                    MailboxEventDispatcher dispatcher, MailboxPathLocker locker, Mailbox mailbox, QuotaManager quotaManager,
                                    QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory,
                                    BatchSizes batchSizes, ImmutableMailboxMessage.Factory immutableMailboxMessageFactory,
-                                   StoreRightManager storeRightManager) throws MailboxException {
+                                   StoreRightManager storeRightManager) {
         super(CassandraMailboxManager.MESSAGE_CAPABILITIES, mapperFactory, index, dispatcher, locker, mailbox,
             quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory, storeRightManager);
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/71c4d395/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
index eba9b3e..5606185 100644
--- a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
+++ b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMailboxManager.java
@@ -74,7 +74,7 @@ public class HBaseMailboxManager extends StoreMailboxManager {
      */
     public void deleteEverything(MailboxSession mailboxSession) throws MailboxException {
 
-        final HBaseMailboxMapper mapper = (HBaseMailboxMapper) getMapperFactory().getMailboxMapper(mailboxSession);
+        HBaseMailboxMapper mapper = (HBaseMailboxMapper) getMapperFactory().getMailboxMapper(mailboxSession);
 
         mapper.execute(Mapper.toTransaction(mapper::deleteAllMemberships));
         mapper.execute(Mapper.toTransaction(mapper::deleteAllMailboxes));
@@ -86,7 +86,7 @@ public class HBaseMailboxManager extends StoreMailboxManager {
     }
 
     @Override
-    protected StoreMessageManager createMessageManager(Mailbox mailboxRow, MailboxSession session) throws MailboxException {
+    protected StoreMessageManager createMessageManager(Mailbox mailboxRow, MailboxSession session) {
         return new HBaseMessageManager(getMapperFactory(),
             getMessageSearchIndex(),
             getEventDispatcher(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/71c4d395/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
index 7e26219..be64742 100644
--- a/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
+++ b/mailbox/hbase/src/main/java/org/apache/james/mailbox/hbase/HBaseMessageManager.java
@@ -22,7 +22,6 @@ import javax.mail.Flags;
 
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
@@ -53,10 +52,10 @@ public class HBaseMessageManager extends StoreMessageManager {
                                MessageId.Factory messageIdFactory,
                                BatchSizes batchSizes,
                                ImmutableMailboxMessage.Factory immutableMailboxMessageFactory,
-                               StoreRightManager storeRightManager) throws MailboxException {
+                               StoreRightManager storeRightManager) {
+
         super(HBaseMailboxManager.DEFAULT_NO_MESSAGE_CAPABILITIES, mapperFactory, index, dispatcher, locker, mailbox, quotaManager,
                 quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory, storeRightManager);
-
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/71c4d395/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java
index 42acd3d..373f947 100644
--- a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java
+++ b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMailboxManager.java
@@ -22,7 +22,6 @@ import java.util.EnumSet;
 
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.jcr.mail.model.JCRMailbox;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageId;
@@ -63,7 +62,7 @@ public class JCRMailboxManager extends StoreMailboxManager implements JCRImapCon
     }
     
     @Override
-    protected StoreMessageManager createMessageManager(Mailbox mailboxEntity, MailboxSession session) throws MailboxException {
+    protected StoreMessageManager createMessageManager(Mailbox mailboxEntity, MailboxSession session) {
         return new JCRMessageManager(getMapperFactory(),
             getMessageSearchIndex(),
             getEventDispatcher(),
@@ -79,8 +78,8 @@ public class JCRMailboxManager extends StoreMailboxManager implements JCRImapCon
     }
 
     @Override
-    protected Mailbox doCreateMailbox(MailboxPath path, MailboxSession session) throws MailboxException {
-        return new org.apache.james.mailbox.jcr.mail.model.JCRMailbox(path, randomUidValidity());
+    protected Mailbox doCreateMailbox(MailboxPath path, MailboxSession session) {
+        return new JCRMailbox(path, randomUidValidity());
     }
 
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/71c4d395/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
index f859afd..1c50328 100644
--- a/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
+++ b/mailbox/jcr/src/main/java/org/apache/james/mailbox/jcr/JCRMessageManager.java
@@ -61,8 +61,8 @@ public class JCRMessageManager extends StoreMessageManager {
                              MessageId.Factory messageIdFactory,
                              BatchSizes batchSizes,
                              ImmutableMailboxMessage.Factory immutableMailboxMessageFactory,
-                             StoreRightManager storeRightManager)
-                    throws MailboxException {
+                             StoreRightManager storeRightManager) {
+
         super(JCRMailboxManager.DEFAULT_NO_MESSAGE_CAPABILITIES, mapperFactory, index, dispatcher, locker, mailbox, quotaManager,
                 quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory, storeRightManager);
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/71c4d395/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
index 77feb6d..c19d0bc 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
@@ -52,16 +52,16 @@ public class JPAMessageManager extends StoreMessageManager {
     
     public JPAMessageManager(MailboxSessionMapperFactory mapperFactory,
                              MessageSearchIndex index,
-                             final MailboxEventDispatcher dispatcher,
+                             MailboxEventDispatcher dispatcher,
                              MailboxPathLocker locker,
-                             final Mailbox mailbox,
+                             Mailbox mailbox,
                              QuotaManager quotaManager,
                              QuotaRootResolver quotaRootResolver,
                              MessageParser messageParser,
                              MessageId.Factory messageIdFactory,
                              BatchSizes batchSizes,
                              ImmutableMailboxMessage.Factory immutableMailboxMessageFactory,
-                             StoreRightManager storeRightManager) throws MailboxException {
+                             StoreRightManager storeRightManager) {
 
         super(JPAMailboxManager.DEFAULT_NO_MESSAGE_CAPABILITIES, mapperFactory, index, dispatcher, locker, mailbox,
             quotaManager, quotaRootResolver, messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory, storeRightManager);

http://git-wip-us.apache.org/repos/asf/james-project/blob/71c4d395/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
index fcfde56..1c88d21 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
@@ -22,7 +22,6 @@ package org.apache.james.mailbox.jpa.openjpa;
 import javax.inject.Inject;
 
 import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.jpa.JPAMailboxManager;
 import org.apache.james.mailbox.jpa.JPAMailboxSessionMapperFactory;
 import org.apache.james.mailbox.jpa.openjpa.OpenJPAMessageManager.AdvancedFeature;
@@ -63,7 +62,7 @@ public class OpenJPAMailboxManager extends JPAMailboxManager {
     }
 
     @Override
-    protected StoreMessageManager createMessageManager(Mailbox mailboxRow, MailboxSession session) throws MailboxException {
+    protected StoreMessageManager createMessageManager(Mailbox mailboxRow, MailboxSession session) {
         return new OpenJPAMessageManager(getMapperFactory(),
             getMessageSearchIndex(),
             getEventDispatcher(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/71c4d395/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
index d6668c6..3863dcf 100644
--- a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
+++ b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
@@ -64,7 +64,7 @@ public class OpenJPAMessageManager extends JPAMessageManager {
                                  MailboxPathLocker locker, Mailbox mailbox, AdvancedFeature f,
                                  QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser,
                                  MessageId.Factory messageIdFactory, BatchSizes batchSizes,
-                                 ImmutableMailboxMessage.Factory immutableMailboxMessageFactory, StoreRightManager storeRightManager) throws MailboxException {
+                                 ImmutableMailboxMessage.Factory immutableMailboxMessageFactory, StoreRightManager storeRightManager) {
 
         super(mapperFactory,  index, dispatcher, locker, mailbox, quotaManager, quotaRootResolver,
             messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory, storeRightManager);

http://git-wip-us.apache.org/repos/asf/james-project/blob/71c4d395/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
index e2c51e2..5f02b28 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
@@ -25,7 +25,6 @@ import javax.inject.Inject;
 
 import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.Authorizator;
@@ -78,7 +77,7 @@ public class InMemoryMailboxManager extends StoreMailboxManager {
     }
 
     @Override
-    protected StoreMessageManager createMessageManager(Mailbox mailbox, MailboxSession session) throws MailboxException {
+    protected StoreMessageManager createMessageManager(Mailbox mailbox, MailboxSession session) {
         return new InMemoryMessageManager(getMapperFactory(),
             getMessageSearchIndex(),
             getEventDispatcher(),

http://git-wip-us.apache.org/repos/asf/james-project/blob/71c4d395/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
index 7bc1b13..d422f0d 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
@@ -39,7 +39,8 @@ public class InMemoryMessageManager extends StoreMessageManager {
                                   MessageId.Factory messageIdFactory,
                                   BatchSizes batchSizes,
                                   ImmutableMailboxMessage.Factory immutableMailboxMessageFactory,
-                                  StoreRightManager storeRightManager) throws MailboxException {
+                                  StoreRightManager storeRightManager) {
+
         super(InMemoryMailboxManager.MESSAGE_CAPABILITIES, mapperFactory, index, dispatcher, locker, mailbox, quotaManager, quotaRootResolver,
             messageParser, messageIdFactory, batchSizes, immutableMailboxMessageFactory, storeRightManager);
         this.mapperFactory = (InMemoryMailboxSessionMapperFactory) mapperFactory;

http://git-wip-us.apache.org/repos/asf/james-project/blob/71c4d395/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 cb0f22f..72274f6 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
@@ -158,8 +158,7 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
     public StoreMessageManager(EnumSet<MailboxManager.MessageCapabilities> messageCapabilities, MailboxSessionMapperFactory mapperFactory, MessageSearchIndex index, MailboxEventDispatcher dispatcher,
             MailboxPathLocker locker, Mailbox mailbox,
             QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser messageParser, MessageId.Factory messageIdFactory, BatchSizes batchSizes,
-            ImmutableMailboxMessage.Factory immutableMailboxMessageFactory, StoreRightManager storeRightManager)
-                    throws MailboxException {
+            ImmutableMailboxMessage.Factory immutableMailboxMessageFactory, StoreRightManager storeRightManager) {
         this.messageCapabilities = messageCapabilities;
         this.mailbox = mailbox;
         this.dispatcher = dispatcher;


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


[06/11] james-project git commit: JAMES-2414 Copy dispatched message

Posted by bt...@apache.org.
JAMES-2414 Copy dispatched message


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

Branch: refs/heads/master
Commit: fe224885f06a3e9a63edaac20ddfd0cce7099016
Parents: 32ed4d8
Author: benwa <bt...@linagora.com>
Authored: Thu Jun 14 15:54:17 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 19 15:09:28 2018 +0700

----------------------------------------------------------------------
 .../james/mailbox/cassandra/CassandraMessageManager.java  |  9 +++++++++
 .../james/mailbox/inmemory/InMemoryMessageManager.java    |  9 +++++++++
 .../apache/james/mailbox/store/StoreMessageManager.java   | 10 +++++++++-
 3 files changed, 27 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/fe224885/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
index 31e7c17..09b773c 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
@@ -38,6 +38,7 @@ import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
 import com.github.steveash.guavate.Guavate;
@@ -80,4 +81,12 @@ public class CassandraMessageManager extends StoreMessageManager {
                     .collect(Guavate.toImmutableList()),
                 message.getMessageId());
     }
+
+    @Override
+    protected MailboxMessage copyMessage(MailboxMessage message) throws MailboxException {
+        SimpleMailboxMessage copy = SimpleMailboxMessage.copy(message.getMailboxId(), message);
+        copy.setUid(message.getUid());
+        copy.setModSeq(message.getModSeq());
+        return copy;
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/fe224885/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
index 21b9479..458e97d 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
@@ -20,6 +20,7 @@ import org.apache.james.mailbox.store.event.MailboxEventDispatcher;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
+import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
 import org.apache.james.mailbox.store.search.MessageSearchIndex;
 
 import com.github.steveash.guavate.Guavate;
@@ -61,4 +62,12 @@ public class InMemoryMessageManager extends StoreMessageManager {
                     .collect(Guavate.toImmutableList()),
                 message.getMessageId());
     }
+
+    @Override
+    protected MailboxMessage copyMessage(MailboxMessage message) throws MailboxException {
+        SimpleMailboxMessage copy = SimpleMailboxMessage.copy(message.getMailboxId(), message);
+        copy.setUid(message.getUid());
+        copy.setModSeq(message.getModSeq());
+        return copy;
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/fe224885/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 84bc92f..af19c66 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
@@ -419,7 +419,8 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
                 MessageMetaData data = appendMessageToStore(message, attachments, mailboxSession);
 
                 Mailbox mailbox = getMailboxEntity();
-                dispatcher.added(mailboxSession, mailbox, message);
+                MailboxMessage copy = copyMessage(message);
+                dispatcher.added(mailboxSession, mailbox, copy);
                 return new ComposedMessageId(mailbox.getMailboxId(), data.getMessageId(), data.getUid());
             }, true);
 
@@ -464,6 +465,13 @@ public class StoreMessageManager implements org.apache.james.mailbox.MessageMana
         return new SimpleMailboxMessage(messageIdFactory.generate(), internalDate, size, bodyStartOctet, content, flags, propertyBuilder, getMailboxEntity().getMailboxId(), attachments);
     }
 
+    protected MailboxMessage copyMessage(MailboxMessage message) throws MailboxException {
+        SimpleMailboxMessage copy = SimpleMailboxMessage.copyWithoutAttachments(message.getMailboxId(), message);
+        copy.setUid(message.getUid());
+        copy.setModSeq(message.getModSeq());
+        return copy;
+    }
+
     @Override
     public boolean isWriteable(MailboxSession session) throws MailboxException {
         return storeRightManager.isReadWrite(session, mailbox, getSharedPermanentFlags(session));


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


[03/11] james-project git commit: JAMES-2426 Relax and test ZipAsserts

Posted by bt...@apache.org.
JAMES-2426 Relax and test ZipAsserts

Order can not be enforced as it highly depends on common-compress internals.

This commit makes the choice to enforce order by natural entry-name order so that we have a reference order. The downside is that entry names needs to be present.

Also, extra field ordering had been relaxed.


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

Branch: refs/heads/master
Commit: 32ed4d8b721f719b7c0c89f76605f634089d1841
Parents: feb1801
Author: benwa <bt...@linagora.com>
Authored: Mon Jun 18 12:06:16 2018 +0700
Committer: benwa <bt...@linagora.com>
Committed: Tue Jun 19 15:07:55 2018 +0700

----------------------------------------------------------------------
 .../mailbox/backup/ZipArchiveEntryAssert.java   |  26 +-
 .../apache/james/mailbox/backup/ZipAssert.java  |  52 ++-
 .../james/mailbox/backup/ZipAssertTest.java     | 328 +++++++++++++++++++
 .../apache/james/mailbox/backup/ZipperTest.java |  28 +-
 4 files changed, 397 insertions(+), 37 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/32ed4d8b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java
index 4f268ec..2a6aae3 100644
--- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java
@@ -19,10 +19,11 @@
 
 package org.apache.james.mailbox.backup;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
-import java.util.Arrays;
 
 import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
 import org.apache.commons.compress.archivers.zip.ZipExtraField;
@@ -49,15 +50,6 @@ public class ZipArchiveEntryAssert extends AbstractAssert<ZipArchiveEntryAssert,
         return new BasicErrorMessageFactory("%nExpecting %s to have content %s but was %s", zipArchiveEntry, expectedContent, actualContent);
     }
 
-    private static BasicErrorMessageFactory shouldHaveExtraFields(ZipArchiveEntry zipArchiveEntry,
-                                                                  ZipExtraField[] expectedExtraFields,
-                                                                  ZipExtraField[] actualExtraFields) {
-        return new BasicErrorMessageFactory("%nExpecting %s to contain exactly being %s" +
-            " but was containing being %s", zipArchiveEntry,
-            Arrays.toString(expectedExtraFields),
-            Arrays.toString(actualExtraFields));
-    }
-
     private final ZipFile zipFile;
     private final ZipArchiveEntry actual;
 
@@ -88,17 +80,15 @@ public class ZipArchiveEntryAssert extends AbstractAssert<ZipArchiveEntryAssert,
         return myself;
     }
 
-    public ZipArchiveEntryAssert containsExactlyExtraFields(ZipExtraField... expectedExtraFields) {
+    public ZipArchiveEntryAssert containsExtraFields(ZipExtraField... expectedExtraFields) {
         isNotNull();
         ZipExtraField[] actualExtraFields = actual.getExtraFields();
-        if (expectedExtraFields.length != actualExtraFields.length) {
-            throwAssertionError(shouldHaveExtraFields(actual, expectedExtraFields, actualExtraFields));
-        }
-        for (int i = 0; i < expectedExtraFields.length; i++) {
-            if (!expectedExtraFields[i].equals(actualExtraFields[i])) {
-                throwAssertionError(shouldHaveExtraFields(actual, expectedExtraFields, actualExtraFields));
-            }
+        if (expectedExtraFields.length == 0) {
+            return myself;
         }
+        assertThat(actualExtraFields)
+            .as(String.format("Asserting Zip entry %s extra fields.", actual))
+            .contains(expectedExtraFields);
         return myself;
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/32ed4d8b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssert.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssert.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssert.java
index f521b20..c007421 100644
--- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssert.java
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssert.java
@@ -21,17 +21,53 @@ package org.apache.james.mailbox.backup;
 
 import static org.apache.james.mailbox.backup.ZipArchiveEntryAssert.assertThatZipEntry;
 
+import java.util.Arrays;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ZipExtraField;
 import org.apache.commons.compress.archivers.zip.ZipFile;
 import org.assertj.core.api.AbstractAssert;
 import org.assertj.core.error.BasicErrorMessageFactory;
 
+import com.github.steveash.guavate.Guavate;
+
 public class ZipAssert extends AbstractAssert<ZipAssert, ZipFile> {
     interface EntryCheck {
-        void test(ZipArchiveEntryAssert assertion) throws Exception;
+        default EntryCheck compose(EntryCheck other) {
+            return assertion -> other.test(this.test(assertion));
+        }
+
+        ZipArchiveEntryAssert test(ZipArchiveEntryAssert assertion) throws Exception;
+    }
+
+    public static class EntryChecks {
+        public static EntryChecks hasName(String name) {
+            return new EntryChecks(name, assertion -> assertion.hasName(name));
+        }
+
+        private final String name;
+        private final EntryCheck check;
+
+        private EntryChecks(String name, EntryCheck check) {
+            this.name = name;
+            this.check = check;
+        }
+
+        public EntryChecks check(EntryCheck additionalCheck) {
+            return new EntryChecks(name,
+                check.compose(additionalCheck));
+        }
+
+        public EntryChecks hasStringContent(String stringConyent) {
+            return check(check.compose(assertion -> assertion.hasStringContent(stringConyent)));
+        }
+
+        public EntryChecks containsExtraFields(ZipExtraField... expectedExtraFields) {
+            return check(check.compose(assertion -> assertion.containsExtraFields(expectedExtraFields)));
+        }
     }
 
     public static ZipAssert assertThatZip(ZipFile zipFile) {
@@ -39,7 +75,7 @@ public class ZipAssert extends AbstractAssert<ZipAssert, ZipFile> {
     }
 
     private static BasicErrorMessageFactory shouldHaveSize(ZipFile zipFile, int expected, int actual) {
-        return new BasicErrorMessageFactory("%nExpecting %s to have side %d but was %d", zipFile, expected, actual);
+        return new BasicErrorMessageFactory("%nExpecting %s to have side %s but was %s", zipFile, expected, actual);
     }
 
     private static BasicErrorMessageFactory shouldBeEmpty(ZipFile zipFile) {
@@ -53,14 +89,20 @@ public class ZipAssert extends AbstractAssert<ZipAssert, ZipFile> {
         this.zipFile = zipFile;
     }
 
-    public ZipAssert containsExactlyEntriesMatching(EntryCheck... entryChecks) throws Exception {
+    public ZipAssert containsOnlyEntriesMatching(EntryChecks... entryChecks) throws Exception {
         isNotNull();
-        List<ZipArchiveEntry> entries = Collections.list(zipFile.getEntries());
+        List<EntryChecks> sortedEntryChecks= Arrays.stream(entryChecks)
+            .sorted(Comparator.comparing(checks -> checks.name))
+            .collect(Guavate.toImmutableList());
+        List<ZipArchiveEntry> entries = Collections.list(zipFile.getEntries())
+            .stream()
+            .sorted(Comparator.comparing(ZipArchiveEntry::getName))
+            .collect(Guavate.toImmutableList());
         if (entries.size() != entryChecks.length) {
             throwAssertionError(shouldHaveSize(zipFile, entryChecks.length, entries.size()));
         }
         for (int i = 0; i < entries.size(); i++) {
-            entryChecks[i].test(assertThatZipEntry(zipFile, entries.get(i)));
+            sortedEntryChecks.get(i).check.test(assertThatZipEntry(zipFile, entries.get(i)));
         }
         return myself;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/32ed4d8b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssertTest.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssertTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssertTest.java
new file mode 100644
index 0000000..b903eb2
--- /dev/null
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssertTest.java
@@ -0,0 +1,328 @@
+/****************************************************************
+ * 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.backup;
+
+import static org.apache.james.mailbox.backup.ZipAssert.EntryChecks.hasName;
+import static org.apache.james.mailbox.backup.ZipAssert.assertThatZip;
+import static org.assertj.core.api.Assertions.assertThatCode;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+
+import org.apache.commons.compress.archivers.zip.ExtraFieldUtils;
+import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
+import org.apache.commons.compress.archivers.zip.ZipFile;
+import org.apache.commons.io.IOUtils;
+import org.apache.james.junit.TemporaryFolderExtension;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+
+@ExtendWith(TemporaryFolderExtension.class)
+public class ZipAssertTest {
+    public static final String ENTRY_NAME = "entryName";
+    public static final String ENTRY_NAME_2 = "entryName2";
+    public static final String STRING_ENTRY_CONTENT = "abcdefghijkl";
+    public static final String STRING_ENTRY_CONTENT_2 = "mnopqrstuvwxyz";
+    public static final byte[] ENTRY_CONTENT = STRING_ENTRY_CONTENT.getBytes(StandardCharsets.UTF_8);
+    public static final byte[] ENTRY_CONTENT_2 = STRING_ENTRY_CONTENT_2.getBytes(StandardCharsets.UTF_8);
+    public static final SizeExtraField EXTRA_FIELD = new SizeExtraField(42);
+
+
+    private File destination;
+
+    @BeforeEach
+    void beforeEach(TemporaryFolderExtension.TemporaryFolder temporaryFolder) throws Exception {
+        destination = File.createTempFile("backup-test", ".zip", temporaryFolder.getTempDir());
+
+        ExtraFieldUtils.register(SizeExtraField.class);
+    }
+
+    @Test
+    public void hasNoEntryShouldNotThrowWhenEmpty() throws Exception {
+        try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) {
+            archiveOutputStream.finish();
+        }
+
+        assertThatCode(() -> assertThatZip(new ZipFile(destination))
+                .hasNoEntry())
+            .doesNotThrowAnyException();
+    }
+
+    @Test
+    public void hasNoEntryShouldThrowWhenNotEmpty() throws Exception {
+        try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) {
+
+            ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME);
+            archiveOutputStream.putArchiveEntry(archiveEntry);
+            IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream);
+            archiveOutputStream.closeArchiveEntry();
+
+            archiveOutputStream.finish();
+        }
+
+        assertThatThrownBy(() -> assertThatZip(new ZipFile(destination))
+                .hasNoEntry())
+            .isInstanceOf(AssertionError.class);
+    }
+
+    @Test
+    public void containsExactlyEntriesMatchingShouldNotThrowWhenBothEmpty() throws Exception {
+        try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) {
+            archiveOutputStream.finish();
+        }
+
+        assertThatCode(() -> assertThatZip(new ZipFile(destination))
+                .containsOnlyEntriesMatching())
+            .doesNotThrowAnyException();
+    }
+
+    @Test
+    public void containsExactlyEntriesMatchingShouldNotThrowWhenRightOrder() throws Exception {
+        try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) {
+
+            ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME);
+            archiveOutputStream.putArchiveEntry(archiveEntry);
+            IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream);
+            archiveOutputStream.closeArchiveEntry();
+
+            ZipArchiveEntry archiveEntry2 = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME_2);
+            archiveOutputStream.putArchiveEntry(archiveEntry2);
+            IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT_2), archiveOutputStream);
+            archiveOutputStream.closeArchiveEntry();
+
+            archiveOutputStream.finish();
+        }
+
+        assertThatCode(() -> assertThatZip(new ZipFile(destination))
+                .containsOnlyEntriesMatching(
+                    hasName(ENTRY_NAME),
+                    hasName(ENTRY_NAME_2)))
+            .doesNotThrowAnyException();
+    }
+
+    @Test
+    public void hasNameShouldThrowWhenWrongName() throws Exception {
+        try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) {
+
+            ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME);
+            archiveOutputStream.putArchiveEntry(archiveEntry);
+            IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream);
+            archiveOutputStream.closeArchiveEntry();
+            archiveOutputStream.finish();
+        }
+
+        assertThatThrownBy(() -> assertThatZip(new ZipFile(destination))
+                .containsOnlyEntriesMatching(
+                    hasName(ENTRY_NAME_2)))
+            .isInstanceOf(AssertionError.class);
+    }
+
+    @Test
+    public void containsExactlyEntriesMatchingShouldNotThrowWhenWrongOrder() throws Exception {
+        try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) {
+
+            ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME);
+            archiveOutputStream.putArchiveEntry(archiveEntry);
+            IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream);
+            archiveOutputStream.closeArchiveEntry();
+
+            ZipArchiveEntry archiveEntry2 = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME_2);
+            archiveOutputStream.putArchiveEntry(archiveEntry2);
+            IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT_2), archiveOutputStream);
+            archiveOutputStream.closeArchiveEntry();
+
+            archiveOutputStream.finish();
+        }
+
+        assertThatCode(() -> assertThatZip(new ZipFile(destination))
+                .containsOnlyEntriesMatching(
+                    hasName(ENTRY_NAME),
+                    hasName(ENTRY_NAME_2)))
+            .doesNotThrowAnyException();
+    }
+
+    @Test
+    public void containsExactlyEntriesMatchingShouldThrowWhenExpectingMoreEntries() throws Exception {
+        try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) {
+
+            ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME);
+            archiveOutputStream.putArchiveEntry(archiveEntry);
+            IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream);
+            archiveOutputStream.closeArchiveEntry();
+
+            ZipArchiveEntry archiveEntry2 = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME_2);
+            archiveOutputStream.putArchiveEntry(archiveEntry2);
+            IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT_2), archiveOutputStream);
+            archiveOutputStream.closeArchiveEntry();
+
+            archiveOutputStream.finish();
+        }
+
+        assertThatThrownBy(() -> assertThatZip(new ZipFile(destination))
+                .containsOnlyEntriesMatching(
+                    hasName(ENTRY_NAME),
+                    hasName(ENTRY_NAME_2),
+                    hasName("extraEntry")))
+            .isInstanceOf(AssertionError.class);
+    }
+
+    @Test
+    public void containsExactlyEntriesMatchingShouldThrowWhenExpectingLessEntries() throws Exception {
+        try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) {
+
+            ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME);
+            archiveOutputStream.putArchiveEntry(archiveEntry);
+            IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream);
+            archiveOutputStream.closeArchiveEntry();
+
+            ZipArchiveEntry archiveEntry2 = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME_2);
+            archiveOutputStream.putArchiveEntry(archiveEntry2);
+            IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT_2), archiveOutputStream);
+            archiveOutputStream.closeArchiveEntry();
+
+            archiveOutputStream.finish();
+        }
+
+        assertThatThrownBy(() -> assertThatZip(new ZipFile(destination))
+                .containsOnlyEntriesMatching(
+                    hasName(ENTRY_NAME)))
+            .isInstanceOf(AssertionError.class);
+    }
+
+    @Test
+    public void hasStringContentShouldNotThrowWhenIdentical() throws Exception {
+        try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) {
+
+            ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME);
+            archiveOutputStream.putArchiveEntry(archiveEntry);
+            IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream);
+            archiveOutputStream.closeArchiveEntry();
+
+            archiveOutputStream.finish();
+        }
+
+        assertThatCode(() -> assertThatZip(new ZipFile(destination))
+            .containsOnlyEntriesMatching(
+                hasName(ENTRY_NAME)
+                    .hasStringContent(STRING_ENTRY_CONTENT)))
+            .doesNotThrowAnyException();
+    }
+
+    @Test
+    public void hasStringContentShouldThrowWhenDifferent() throws Exception {
+        try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) {
+
+            ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME);
+            archiveOutputStream.putArchiveEntry(archiveEntry);
+            IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream);
+            archiveOutputStream.closeArchiveEntry();
+
+            archiveOutputStream.finish();
+        }
+
+        assertThatThrownBy(() -> assertThatZip(new ZipFile(destination))
+            .containsOnlyEntriesMatching(
+                hasName(ENTRY_NAME)
+                    .hasStringContent(STRING_ENTRY_CONTENT_2)))
+            .isInstanceOf(AssertionError.class);
+    }
+
+    @Test
+    public void containsExactlyExtraFieldsShouldNotThrowWhenBothEmpty() throws Exception {
+        try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) {
+
+            ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME);
+            archiveOutputStream.putArchiveEntry(archiveEntry);
+            IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream);
+            archiveOutputStream.closeArchiveEntry();
+
+            archiveOutputStream.finish();
+        }
+
+        assertThatCode(() -> assertThatZip(new ZipFile(destination))
+            .containsOnlyEntriesMatching(
+                hasName(ENTRY_NAME)
+                    .containsExtraFields()))
+            .doesNotThrowAnyException();
+    }
+
+    @Test
+    public void containsExactlyExtraFieldsShouldThrowWhenMissingExpectedField() throws Exception {
+        try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) {
+
+            ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME);
+            archiveOutputStream.putArchiveEntry(archiveEntry);
+            IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream);
+            archiveOutputStream.closeArchiveEntry();
+
+            archiveOutputStream.finish();
+        }
+
+        assertThatThrownBy(() -> assertThatZip(new ZipFile(destination))
+            .containsOnlyEntriesMatching(
+                hasName(ENTRY_NAME)
+                    .containsExtraFields(EXTRA_FIELD)))
+            .isInstanceOf(AssertionError.class);
+    }
+
+    @Test
+    public void containsExactlyExtraFieldsShouldNotThrowWhenUnexpectedField() throws Exception {
+        try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) {
+
+            ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME);
+            archiveEntry.addExtraField(EXTRA_FIELD);
+            archiveOutputStream.putArchiveEntry(archiveEntry);
+            IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream);
+            archiveOutputStream.closeArchiveEntry();
+
+            archiveOutputStream.finish();
+        }
+
+        assertThatCode(() -> assertThatZip(new ZipFile(destination))
+            .containsOnlyEntriesMatching(
+                hasName(ENTRY_NAME)
+                    .containsExtraFields()))
+            .doesNotThrowAnyException();
+    }
+
+    @Test
+    public void containsExactlyExtraFieldsShouldNotThrowWhenContainingExpectedExtraFields() throws Exception {
+        try (ZipArchiveOutputStream archiveOutputStream = new ZipArchiveOutputStream(destination)) {
+
+            ZipArchiveEntry archiveEntry = (ZipArchiveEntry) archiveOutputStream.createArchiveEntry(new File("any"), ENTRY_NAME);
+            archiveEntry.addExtraField(EXTRA_FIELD);
+            archiveOutputStream.putArchiveEntry(archiveEntry);
+            IOUtils.copy(new ByteArrayInputStream(ENTRY_CONTENT), archiveOutputStream);
+            archiveOutputStream.closeArchiveEntry();
+
+            archiveOutputStream.finish();
+        }
+
+        assertThatCode(() -> assertThatZip(new ZipFile(destination))
+            .containsOnlyEntriesMatching(
+                hasName(ENTRY_NAME)
+                    .containsExtraFields(EXTRA_FIELD)))
+            .doesNotThrowAnyException();
+    }
+}

http://git-wip-us.apache.org/repos/asf/james-project/blob/32ed4d8b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
----------------------------------------------------------------------
diff --git a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
index ed4e17a..824b022 100644
--- a/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
+++ b/mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
@@ -25,11 +25,13 @@ import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_CONT
 import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_ID_1;
 import static org.apache.james.mailbox.backup.MailboxMessageFixture.MESSAGE_ID_2;
 import static org.apache.james.mailbox.backup.MailboxMessageFixture.SIZE_1;
+import static org.apache.james.mailbox.backup.ZipAssert.EntryChecks.hasName;
 import static org.apache.james.mailbox.backup.ZipAssert.assertThatZip;
 
 import java.io.File;
 import java.io.FileOutputStream;
 
+import org.apache.commons.compress.archivers.zip.ExtraFieldUtils;
 import org.apache.commons.compress.archivers.zip.ZipFile;
 import org.apache.james.junit.TemporaryFolderExtension;
 import org.apache.james.junit.TemporaryFolderExtension.TemporaryFolder;
@@ -48,6 +50,8 @@ public class ZipperTest {
     void beforeEach(TemporaryFolder temporaryFolder) throws Exception {
         testee = new Zipper();
         destination = File.createTempFile("backup-test", ".zip", temporaryFolder.getTempDir());
+
+        ExtraFieldUtils.register(SizeExtraField.class);
     }
 
     @Test
@@ -65,9 +69,8 @@ public class ZipperTest {
 
         try (ZipFile zipFile = new ZipFile(destination)) {
             assertThatZip(zipFile)
-                .containsExactlyEntriesMatching(
-                    zipEntryAssert -> zipEntryAssert
-                        .hasName(MESSAGE_ID_1.serialize())
+                .containsOnlyEntriesMatching(
+                    hasName(MESSAGE_ID_1.serialize())
                         .hasStringContent(MESSAGE_CONTENT_1));
         }
     }
@@ -78,12 +81,10 @@ public class ZipperTest {
 
         try (ZipFile zipFile = new ZipFile(destination)) {
             assertThatZip(zipFile)
-                .containsExactlyEntriesMatching(
-                    zipEntryAssert -> zipEntryAssert
-                        .hasName(MESSAGE_ID_1.serialize())
+                .containsOnlyEntriesMatching(
+                    hasName(MESSAGE_ID_1.serialize())
                         .hasStringContent(MESSAGE_CONTENT_1),
-                    zipEntryAssert -> zipEntryAssert
-                        .hasName(MESSAGE_ID_2.serialize())
+                    hasName(MESSAGE_ID_2.serialize())
                         .hasStringContent(MESSAGE_CONTENT_2));
         }
     }
@@ -95,9 +96,8 @@ public class ZipperTest {
 
         try (ZipFile zipFile = new ZipFile(destination)) {
             assertThatZip(zipFile)
-                .containsExactlyEntriesMatching(
-                    zipEntryAssert -> zipEntryAssert
-                        .hasName(MESSAGE_ID_2.serialize())
+                .containsOnlyEntriesMatching(
+                    hasName(MESSAGE_ID_2.serialize())
                         .hasStringContent(MESSAGE_CONTENT_2));
         }
     }
@@ -108,9 +108,9 @@ public class ZipperTest {
 
         try (ZipFile zipFile = new ZipFile(destination)) {
             assertThatZip(zipFile)
-                .containsExactlyEntriesMatching(
-                    zipEntryAssert -> zipEntryAssert
-                        .containsExactlyExtraFields(new SizeExtraField(SIZE_1)));
+                .containsOnlyEntriesMatching(
+                    hasName(MESSAGE_ID_1.serialize())
+                        .containsExtraFields(new SizeExtraField(SIZE_1)));
         }
     }
 }


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