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 <btell...@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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org