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