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

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

commit cddd67557e087278c16a72a8c916ff362c0b3566
Author: Benoit Tellier <btell...@linagora.com>
AuthorDate: Thu Nov 28 16:57:08 2019 +0700

    JAMES-2988 Share code between FetchGroup & PartContentDescriptor
---
 .../org/apache/james/mailbox/model/FetchGroup.java | 37 +++++--------------
 .../james/mailbox/model/PartContentDescriptor.java | 31 +++-------------
 .../org/apache/james/mailbox/model/Profiles.java}  | 43 +++++++++++++++++-----
 .../apache/james/mailbox/model/FetchGroupTest.java |  1 +
 .../mailbox/model/PartContentDescriptorTest.java   |  2 +-
 5 files changed, 50 insertions(+), 64 deletions(-)

diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/FetchGroup.java 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/FetchGroup.java
index 753c646..0fcb47a 100644
--- a/mailbox/api/src/main/java/org/apache/james/mailbox/model/FetchGroup.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/FetchGroup.java
@@ -26,13 +26,12 @@ import java.util.stream.Stream;
 
 import com.github.steveash.guavate.Guavate;
 import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableSet;
 
 /**
  * Indicates the results fetched.
  */
-public class FetchGroup {
+public class FetchGroup extends Profiles<FetchGroup> {
     public enum Profile {
         MIME_DESCRIPTOR,
         HEADERS,
@@ -51,7 +50,6 @@ public class FetchGroup {
     public static final FetchGroup FULL_CONTENT = new 
FetchGroup(EnumSet.of(Profile.FULL_CONTENT));
     public static final FetchGroup BODY_CONTENT = new 
FetchGroup(EnumSet.of(Profile.BODY_CONTENT));
 
-    private final EnumSet<Profile> content;
     private final ImmutableSet<PartContentDescriptor> partContentDescriptors;
 
     @VisibleForTesting
@@ -61,30 +59,13 @@ public class FetchGroup {
 
     @VisibleForTesting
     FetchGroup(EnumSet<Profile> content, ImmutableSet<PartContentDescriptor> 
partContentDescriptors) {
-        this.content = content;
+        super(content);
         this.partContentDescriptors = partContentDescriptors;
     }
 
-    /**
-     * Profiles to be fetched.
-     *
-     * @return Return an enumset of profiles to be fetched
-     * @see Profile
-     */
-    public EnumSet<Profile> profiles() {
-        return content;
-    }
-
-    public FetchGroup with(Profile... profiles) {
-        Preconditions.checkArgument(profiles.length > 0);
-        return with(EnumSet.copyOf(ImmutableSet.copyOf(profiles)));
-    }
-
-    public FetchGroup with(EnumSet<Profile> profiles) {
-        EnumSet<Profile> result = EnumSet.noneOf(Profile.class);
-        result.addAll(this.content);
-        result.addAll(profiles);
-        return new FetchGroup(result, partContentDescriptors);
+    @Override
+    FetchGroup copyWith(EnumSet<Profile> profiles) {
+        return new FetchGroup(profiles, partContentDescriptors);
     }
 
     /**
@@ -109,7 +90,7 @@ public class FetchGroup {
     public FetchGroup addPartContent(MimePath path, EnumSet<Profile> profiles) 
{
         PartContentDescriptor newContent = 
retrieveUpdatedPartContentDescriptor(path, profiles);
 
-        return new FetchGroup(this.content,
+        return new FetchGroup(profiles(),
             Stream.concat(
                 partContentDescriptors.stream()
                     .filter(descriptor -> !descriptor.path().equals(path)),
@@ -126,7 +107,7 @@ public class FetchGroup {
 
     @Override
     public String toString() {
-        return "Fetch " + content;
+        return "Fetch " + profiles();
     }
 
     @Override
@@ -134,7 +115,7 @@ public class FetchGroup {
         if (o instanceof FetchGroup) {
             FetchGroup that = (FetchGroup) o;
 
-            return Objects.equals(this.content, that.content)
+            return Objects.equals(this.profiles(), that.profiles())
                 && Objects.equals(this.partContentDescriptors, 
that.partContentDescriptors);
         }
         return false;
@@ -142,6 +123,6 @@ public class FetchGroup {
 
     @Override
     public final int hashCode() {
-        return Objects.hash(content, partContentDescriptors);
+        return Objects.hash(profiles(), partContentDescriptors);
     }
 }
diff --git 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/PartContentDescriptor.java
 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/PartContentDescriptor.java
index a0ce5bf..d8c2161 100644
--- 
a/mailbox/api/src/main/java/org/apache/james/mailbox/model/PartContentDescriptor.java
+++ 
b/mailbox/api/src/main/java/org/apache/james/mailbox/model/PartContentDescriptor.java
@@ -22,16 +22,12 @@ package org.apache.james.mailbox.model;
 import java.util.EnumSet;
 import java.util.Objects;
 
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableSet;
-
 /**
  * Describes the contents to be fetched for a mail part. All
  * implementations MUST implement equals. Two implementations are equal
  * if and only if their paths are equal.
  */
-public class PartContentDescriptor {
-    private final EnumSet<FetchGroup.Profile> content;
+public class PartContentDescriptor extends Profiles<PartContentDescriptor> {
     private final MimePath path;
 
     public PartContentDescriptor(MimePath path) {
@@ -39,30 +35,13 @@ public class PartContentDescriptor {
     }
 
     public PartContentDescriptor(EnumSet<FetchGroup.Profile> content, MimePath 
path) {
-        this.content = content;
+        super(content);
         this.path = path;
     }
 
-    public PartContentDescriptor with(FetchGroup.Profile... profiles) {
-        Preconditions.checkArgument(profiles.length > 0);
-        return with(EnumSet.copyOf(ImmutableSet.copyOf(profiles)));
-    }
-
-    public PartContentDescriptor with(EnumSet<FetchGroup.Profile> profiles) {
-        EnumSet<FetchGroup.Profile> result = 
EnumSet.noneOf(FetchGroup.Profile.class);
-        result.addAll(this.content);
-        result.addAll(profiles);
-        return new PartContentDescriptor(result, path);
-    }
-
-    /**
-     * Profiles to be fetched.
-     *
-     * @return Return an enumset of profiles to be fetched
-     * @see FetchGroup.Profile
-     */
-    public EnumSet<FetchGroup.Profile> profiles() {
-        return content;
+    @Override
+    PartContentDescriptor copyWith(EnumSet<FetchGroup.Profile> enumSet) {
+        return new PartContentDescriptor(enumSet, path);
     }
 
     /**
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/PartContentDescriptorTest.java
 b/mailbox/api/src/main/java/org/apache/james/mailbox/model/Profiles.java
similarity index 56%
copy from 
mailbox/api/src/test/java/org/apache/james/mailbox/model/PartContentDescriptorTest.java
copy to mailbox/api/src/main/java/org/apache/james/mailbox/model/Profiles.java
index ff9a817..496c5aa 100644
--- 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/PartContentDescriptorTest.java
+++ b/mailbox/api/src/main/java/org/apache/james/mailbox/model/Profiles.java
@@ -19,15 +19,40 @@
 
 package org.apache.james.mailbox.model;
 
-import org.junit.jupiter.api.Test;
+import java.util.Collection;
+import java.util.EnumSet;
 
-import nl.jqno.equalsverifier.EqualsVerifier;
+import org.apache.james.mailbox.model.FetchGroup.Profile;
 
-class PartContentDescriptorTest {
-    @Test
-    void shouldMatchBeanContract() {
-        EqualsVerifier.forClass(PartContentDescriptor.class)
-            .withIgnoredFields("content")
-            .verify();
+import com.google.common.collect.ImmutableSet;
+
+public abstract class Profiles<T extends Profiles<T>> {
+    private final EnumSet<Profile> profiles;
+
+    public Profiles(EnumSet<Profile> profiles) {
+        this.profiles = profiles;
     }
-}
\ No newline at end of file
+
+    /**
+     * Profiles to be fetched.
+     *
+     * @return Return an enumset of profiles to be fetched
+     * @see Profile
+     */
+    public EnumSet<Profile> profiles() {
+        return EnumSet.copyOf(profiles);
+    }
+
+    public T with(Profile... profiles) {
+        return with(EnumSet.copyOf(ImmutableSet.copyOf(profiles)));
+    }
+
+    public T with(Collection<Profile> profiles) {
+        EnumSet<Profile> result = EnumSet.noneOf(Profile.class);
+        result.addAll(this.profiles);
+        result.addAll(profiles);
+        return copyWith(result);
+    }
+
+    abstract T copyWith(EnumSet<Profile> profiles);
+}
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/FetchGroupTest.java 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/FetchGroupTest.java
index 483f0a8..c900cdb 100644
--- 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/FetchGroupTest.java
+++ 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/FetchGroupTest.java
@@ -38,6 +38,7 @@ class FetchGroupTest {
     @Test
     void shouldMatchBeanContract() {
         EqualsVerifier.forClass(FetchGroup.class)
+            .withNonnullFields("profiles")
             .verify();
     }
 
diff --git 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/PartContentDescriptorTest.java
 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/PartContentDescriptorTest.java
index ff9a817..d9d6cf3 100644
--- 
a/mailbox/api/src/test/java/org/apache/james/mailbox/model/PartContentDescriptorTest.java
+++ 
b/mailbox/api/src/test/java/org/apache/james/mailbox/model/PartContentDescriptorTest.java
@@ -27,7 +27,7 @@ class PartContentDescriptorTest {
     @Test
     void shouldMatchBeanContract() {
         EqualsVerifier.forClass(PartContentDescriptor.class)
-            .withIgnoredFields("content")
+            .withIgnoredFields("profiles")
             .verify();
     }
 }
\ No newline at end of file


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

Reply via email to