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 2019/12/03 02:32:23 UTC

[james-project] 04/09: JAMES-2988 Fully remove bitewise logic from fetchGroup

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 86bcf2e242605152e600f2ecf4d2c6c5bf44a51d
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Nov 28 12:04:51 2019 +0700

    JAMES-2988 Fully remove bitewise logic from fetchGroup
---
 .../org/apache/james/mailbox/model/FetchGroup.java | 39 ++++------------------
 .../apache/james/mailbox/model/FetchGroupTest.java | 32 +++++-------------
 .../store/mail/FetchGroupConverterTest.java        |  8 ++---
 3 files changed, 18 insertions(+), 61 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 05844e4..753c646 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
@@ -19,11 +19,9 @@
 
 package org.apache.james.mailbox.model;
 
-import java.util.Arrays;
 import java.util.EnumSet;
 import java.util.Objects;
 import java.util.Set;
-import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import com.github.steveash.guavate.Guavate;
@@ -36,39 +34,18 @@ import com.google.common.collect.ImmutableSet;
  */
 public class FetchGroup {
     public enum Profile {
-        MIME_DESCRIPTOR(MIME_DESCRIPTOR_MASK),
-        HEADERS(HEADERS_MASK),
-        FULL_CONTENT(FULL_CONTENT_MASK),
-        BODY_CONTENT(BODY_CONTENT_MASK),
-        MIME_HEADERS(MIME_HEADERS_MASK),
-        MIME_CONTENT(MIME_CONTENT_MASK);
-
-        public static EnumSet<Profile> of(int content) {
-            return Arrays.stream(values())
-                .filter(value -> (content & value.mask) > 0)
-                .collect(Collectors.toCollection(() -> EnumSet.noneOf(Profile.class)));
-        }
-
-        private final int mask;
-
-        Profile(int mask) {
-            this.mask = mask;
-        }
+        MIME_DESCRIPTOR,
+        HEADERS,
+        FULL_CONTENT,
+        BODY_CONTENT,
+        MIME_HEADERS,
+        MIME_CONTENT;
     }
 
     /**
      * For example: could have best performance when doing store and then
      * forget. UIDs are always returned
      */
-    public static final int NO_MASK = 0;
-    public static final int MINIMAL_MASK = 0x00;
-    public static final int MIME_DESCRIPTOR_MASK = 0x01;
-    public static final int HEADERS_MASK = 0x100;
-    public static final int FULL_CONTENT_MASK = 0x200;
-    public static final int BODY_CONTENT_MASK = 0x400;
-    public static final int MIME_HEADERS_MASK = 0x800;
-    public static final int MIME_CONTENT_MASK = 0x1000;
-
     public static final FetchGroup MINIMAL = new FetchGroup(EnumSet.noneOf(Profile.class));
     public static final FetchGroup HEADERS = new FetchGroup(EnumSet.of(Profile.HEADERS));
     public static final FetchGroup FULL_CONTENT = new FetchGroup(EnumSet.of(Profile.FULL_CONTENT));
@@ -98,10 +75,6 @@ public class FetchGroup {
         return content;
     }
 
-    public FetchGroup with(int content) {
-        return with(Profile.of(content));
-    }
-
     public FetchGroup with(Profile... profiles) {
         Preconditions.checkArgument(profiles.length > 0);
         return with(EnumSet.copyOf(ImmutableSet.copyOf(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 b0b072f..c779a3a 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
@@ -22,37 +22,15 @@ package org.apache.james.mailbox.model;
 import static org.assertj.core.api.Assertions.assertThat;
 
 import java.util.EnumSet;
-import java.util.stream.Stream;
 
 import org.apache.james.mailbox.model.FetchGroup.Profile;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.MethodSource;
 
 import com.google.common.collect.ImmutableSet;
 
 import nl.jqno.equalsverifier.EqualsVerifier;
 
 class FetchGroupTest {
-    static Stream<Arguments> ofContentShouldReturnCorrectValue() {
-        return Stream.of(
-            Arguments.arguments(0, EnumSet.noneOf(Profile.class)),
-            Arguments.arguments(FetchGroup.MIME_DESCRIPTOR_MASK, EnumSet.of(Profile.MIME_DESCRIPTOR)),
-            Arguments.arguments(FetchGroup.BODY_CONTENT_MASK, EnumSet.of(Profile.BODY_CONTENT)),
-            Arguments.arguments(FetchGroup.FULL_CONTENT_MASK, EnumSet.of(Profile.FULL_CONTENT)),
-            Arguments.arguments(FetchGroup.HEADERS_MASK, EnumSet.of(Profile.HEADERS)),
-            Arguments.arguments(FetchGroup.MIME_HEADERS_MASK, EnumSet.of(Profile.MIME_HEADERS)),
-            Arguments.arguments(FetchGroup.MIME_CONTENT_MASK, EnumSet.of(Profile.MIME_CONTENT)),
-            Arguments.arguments(FetchGroup.HEADERS_MASK | FetchGroup.MIME_CONTENT_MASK, EnumSet.of(Profile.HEADERS, Profile.MIME_CONTENT)));
-    }
-
-    @ParameterizedTest
-    @MethodSource
-    void ofContentShouldReturnCorrectValue(int content, EnumSet<Profile> expected) {
-        assertThat(Profile.of(content)).isEqualTo(expected);
-    }
-
     @Test
     void shouldMatchBeanContract() {
         EqualsVerifier.forClass(FetchGroup.class)
@@ -60,12 +38,18 @@ class FetchGroupTest {
     }
 
     @Test
-    void orShouldReturnAFetchGroupWithUpdatedContent() {
-        assertThat(FetchGroup.HEADERS.with(FetchGroup.FULL_CONTENT_MASK))
+    void withShouldReturnAFetchGroupWithUpdatedContent() {
+        assertThat(FetchGroup.HEADERS.with(Profile.FULL_CONTENT))
             .isEqualTo(new FetchGroup(EnumSet.of(Profile.HEADERS, Profile.FULL_CONTENT)));
     }
 
     @Test
+    void withShouldReturnAFetchGroupWithSameContentWhenNoop() {
+        assertThat(FetchGroup.HEADERS.with(Profile.HEADERS))
+            .isEqualTo(new FetchGroup(EnumSet.of(Profile.HEADERS, Profile.HEADERS)));
+    }
+
+    @Test
     void addPartContentShouldAddPartContentWhenNotYetSpecified() {
         int[] path = {12};
         assertThat(
diff --git a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/FetchGroupConverterTest.java b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/FetchGroupConverterTest.java
index 0c1b376..5cfe5bf 100644
--- a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/FetchGroupConverterTest.java
+++ b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/FetchGroupConverterTest.java
@@ -41,10 +41,10 @@ class FetchGroupConverterTest {
             Arguments.arguments(FetchGroup.HEADERS, FetchType.Headers),
             Arguments.arguments(FetchGroup.BODY_CONTENT, FetchType.Body),
             Arguments.arguments(FetchGroup.FULL_CONTENT, FetchType.Full),
-            Arguments.arguments(FetchGroup.BODY_CONTENT.with(FetchGroup.HEADERS_MASK), FetchType.Full),
-            Arguments.arguments(FetchGroup.MINIMAL.with(FetchGroup.MIME_CONTENT_MASK), FetchType.Full),
-            Arguments.arguments(FetchGroup.MINIMAL.with(FetchGroup.MIME_DESCRIPTOR_MASK), FetchType.Full),
-            Arguments.arguments(FetchGroup.MINIMAL.with(FetchGroup.MIME_HEADERS_MASK), FetchType.Full),
+            Arguments.arguments(FetchGroup.BODY_CONTENT.with(Profile.HEADERS), FetchType.Full),
+            Arguments.arguments(FetchGroup.MINIMAL.with(Profile.MIME_CONTENT), FetchType.Full),
+            Arguments.arguments(FetchGroup.MINIMAL.with(Profile.MIME_DESCRIPTOR), FetchType.Full),
+            Arguments.arguments(FetchGroup.MINIMAL.with(Profile.MIME_HEADERS), FetchType.Full),
             Arguments.arguments(FetchGroup.MINIMAL.addPartContent(new MimePath(PARTS), EnumSet.noneOf(Profile.class)), FetchType.Full),
             Arguments.arguments(FetchGroup.MINIMAL.addPartContent(new MimePath(PARTS), EnumSet.of(Profile.HEADERS)), FetchType.Full),
             Arguments.arguments(FetchGroup.MINIMAL.addPartContent(new MimePath(PARTS), EnumSet.of(Profile.BODY_CONTENT)), FetchType.Full),


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