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:27 UTC
[james-project] 08/09: JAMES-2988 FetchGroupConverter should use
functional style
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 1443a487ef7f33ce7582b66151f6d931bcf92940
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Thu Nov 28 17:35:21 2019 +0700
JAMES-2988 FetchGroupConverter should use functional style
We replace many ifs by a map-reduce. FetchType reduction is fully tested.
---
.../mailbox/store/mail/FetchGroupConverter.java | 66 ++++++++++++++--------
.../james/mailbox/store/mail/MessageMapper.java | 4 +-
2 files changed, 45 insertions(+), 25 deletions(-)
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/FetchGroupConverter.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/FetchGroupConverter.java
index 1099c93..3e31584 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/FetchGroupConverter.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/FetchGroupConverter.java
@@ -19,48 +19,68 @@
package org.apache.james.mailbox.store.mail;
-import java.util.EnumSet;
+import java.util.Collection;
+import java.util.stream.Stream;
+import org.apache.commons.lang3.NotImplementedException;
import org.apache.james.mailbox.model.FetchGroup;
import org.apache.james.mailbox.model.FetchGroup.Profile;
+import com.github.steveash.guavate.Guavate;
+
public class FetchGroupConverter {
/**
* Use the passed {@link FetchGroup} and calculate the right
* {@link MessageMapper.FetchType} for it
*/
public static MessageMapper.FetchType getFetchType(FetchGroup group) {
- EnumSet<Profile> profiles = group.profiles();
-
- if (profiles.contains(Profile.FULL_CONTENT)) {
+ if (!group.getPartContentDescriptors().isEmpty()) {
return MessageMapper.FetchType.Full;
}
- if (profiles.contains(Profile.MIME_DESCRIPTOR)) {
- // If we need the mimedescriptor we MAY need the full profile later too.
- // This gives us no other choice then request it
+
+ Collection<MessageMapper.FetchType> fetchTypes = group.profiles()
+ .stream()
+ .map(FetchGroupConverter::toFetchType)
+ .collect(Guavate.toImmutableList());
+
+ return reduce(fetchTypes);
+ }
+
+ public static MessageMapper.FetchType reduce(Collection<MessageMapper.FetchType> fetchTypes) {
+ boolean full = fetchTypes.contains(MessageMapper.FetchType.Full);
+ boolean headers = fetchTypes.contains(MessageMapper.FetchType.Headers);
+ boolean body = fetchTypes.contains(MessageMapper.FetchType.Body);
+
+ if (full) {
return MessageMapper.FetchType.Full;
}
- if (profiles.contains(Profile.MIME_CONTENT)) {
+ if (headers && body) {
return MessageMapper.FetchType.Full;
}
- if (profiles.contains(Profile.MIME_HEADERS)) {
- return MessageMapper.FetchType.Full;
+ if (headers) {
+ return MessageMapper.FetchType.Headers;
}
- if (!group.getPartContentDescriptors().isEmpty()) {
- return MessageMapper.FetchType.Full;
+ if (body) {
+ return MessageMapper.FetchType.Body;
}
+ return MessageMapper.FetchType.Metadata;
+ }
- boolean headers = profiles.contains(Profile.HEADERS);
- boolean body = profiles.contains(Profile.BODY_CONTENT);
-
- if (body && headers) {
- return MessageMapper.FetchType.Full;
- } else if (body) {
- return MessageMapper.FetchType.Body;
- } else if (headers) {
- return MessageMapper.FetchType.Headers;
- } else {
- return MessageMapper.FetchType.Metadata;
+ private static MessageMapper.FetchType toFetchType(Profile profile) {
+ switch (profile) {
+ case HEADERS:
+ return MessageMapper.FetchType.Headers;
+ case BODY_CONTENT:
+ return MessageMapper.FetchType.Body;
+ case FULL_CONTENT:
+ case MIME_CONTENT:
+ case MIME_HEADERS:
+ case MIME_DESCRIPTOR:
+ // If we need the mimedescriptor we MAY need the full profile later too.
+ // This gives us no other choice then request it
+ return MessageMapper.FetchType.Full;
+ default:
+ throw new NotImplementedException("Unsupported FetchGroup Profile" + profile);
}
}
}
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
index a978a67..027a258 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
@@ -26,6 +26,7 @@ import java.util.Optional;
import javax.mail.Flags;
+import org.apache.commons.lang3.NotImplementedException;
import org.apache.james.mailbox.MessageUid;
import org.apache.james.mailbox.ModSeq;
import org.apache.james.mailbox.exception.MailboxException;
@@ -158,7 +159,6 @@ public interface MessageMapper extends Mapper {
*
*/
enum FetchType {
-
/**
* Fetch only the meta data of the {@link MailboxMessage} which includes:
* <p>
@@ -197,7 +197,7 @@ public interface MessageMapper extends Mapper {
* Fetch the complete {@link MailboxMessage}
*
*/
- Full
+ Full;
}
}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org