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