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 9c0287f70b4aab71b2e7db5c5d2382a187debbd0 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Wed Nov 13 11:46:10 2019 +0700 [Refactoring] StatusDataItems should be immutable --- .../james/imap/api/message/StatusDataItems.java | 71 ++++++++-------------- .../imap/decode/parser/StatusCommandParser.java | 24 ++++---- 2 files changed, 39 insertions(+), 56 deletions(-) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/api/message/StatusDataItems.java b/protocols/imap/src/main/java/org/apache/james/imap/api/message/StatusDataItems.java index 5458e1a..06e3542 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/api/message/StatusDataItems.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/api/message/StatusDataItems.java @@ -18,78 +18,59 @@ ****************************************************************/ package org.apache.james.imap.api.message; +import java.util.EnumSet; + import com.google.common.base.MoreObjects; public class StatusDataItems { - private boolean messages; - - private boolean recent; - - private boolean uidNext; - - private boolean uidValidity; - - private boolean unseen; + public enum StatusItem { + MESSAGES, + RECENT, + UID_NEXT, + UID_VALIDITY, + UNSEEN, + HIGHEST_MODSEQ + } - private boolean highestModSeq; + private final EnumSet<StatusItem> statusItems; - public boolean isMessages() { - return messages; + public StatusDataItems(EnumSet<StatusItem> statusItems) { + this.statusItems = statusItems; } - public void setMessages(boolean messages) { - this.messages = messages; + public boolean isMessages() { + return statusItems.contains(StatusItem.MESSAGES); } public boolean isRecent() { - return recent; - } - - public void setRecent(boolean recent) { - this.recent = recent; + return statusItems.contains(StatusItem.RECENT); } public boolean isUidNext() { - return uidNext; - } - - public void setUidNext(boolean uidNext) { - this.uidNext = uidNext; + return statusItems.contains(StatusItem.UID_NEXT); } public boolean isUidValidity() { - return uidValidity; - } - - public void setUidValidity(boolean uidValidity) { - this.uidValidity = uidValidity; + return statusItems.contains(StatusItem.UID_VALIDITY); } public boolean isUnseen() { - return unseen; - } - - public void setUnseen(boolean unseen) { - this.unseen = unseen; - } - - public void setHighestModSeq(boolean highestModSeq) { - this.highestModSeq = highestModSeq; + return statusItems.contains(StatusItem.UNSEEN); } public boolean isHighestModSeq() { - return highestModSeq; + return statusItems.contains(StatusItem.HIGHEST_MODSEQ); } @Override public String toString() { return MoreObjects.toStringHelper(this) - .add("messages", messages) - .add("recent", recent) - .add("uidNext", uidNext) - .add("uidValidity", uidValidity) - .add("unseen", unseen) - .add("highestModSeq", highestModSeq) + .add("messages", isMessages()) + .add("recent", isRecent()) + .add("uidNext", isUidNext()) + .add("uidValidity", isUidValidity()) + .add("unseen", isUnseen()) + .add("highestModSeq", isHighestModSeq()) .toString(); } } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StatusCommandParser.java b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StatusCommandParser.java index 5030f92..92babee 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StatusCommandParser.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StatusCommandParser.java @@ -18,6 +18,8 @@ ****************************************************************/ package org.apache.james.imap.decode.parser; +import java.util.EnumSet; + import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.ImapMessage; @@ -40,7 +42,7 @@ public class StatusCommandParser extends AbstractImapCommandParser { } private StatusDataItems statusDataItems(ImapRequestLineReader request) throws DecodingException { - StatusDataItems items = new StatusDataItems(); + EnumSet<StatusDataItems.StatusItem> items = EnumSet.noneOf(StatusDataItems.StatusItem.class); request.nextWordChar(); request.consumeChar('('); @@ -48,33 +50,33 @@ public class StatusCommandParser extends AbstractImapCommandParser { String nextWord = request.consumeWord(validator); while (!nextWord.endsWith(")")) { - addItem(nextWord, items); + items.add(parseStatus(nextWord)); nextWord = request.consumeWord(validator); } // Got the closing ")", may be attached to a word. if (nextWord.length() > 1) { - addItem(nextWord.substring(0, nextWord.length() - 1), items); + items.add(parseStatus(nextWord.substring(0, nextWord.length() - 1))); } - return items; + return new StatusDataItems(items); } - private void addItem(String nextWord, StatusDataItems items) throws DecodingException { + private StatusDataItems.StatusItem parseStatus(String nextWord) throws DecodingException { // All the matching must be done in a case-insensitive fashion. // See rfc3501 9. Formal Syntax and IMAP-282 if (nextWord.equalsIgnoreCase(ImapConstants.STATUS_MESSAGES)) { - items.setMessages(true); + return StatusDataItems.StatusItem.MESSAGES; } else if (nextWord.equalsIgnoreCase(ImapConstants.STATUS_RECENT)) { - items.setRecent(true); + return StatusDataItems.StatusItem.RECENT; } else if (nextWord.equalsIgnoreCase(ImapConstants.STATUS_UIDNEXT)) { - items.setUidNext(true); + return StatusDataItems.StatusItem.UID_NEXT; } else if (nextWord.equalsIgnoreCase(ImapConstants.STATUS_UIDVALIDITY)) { - items.setUidValidity(true); + return StatusDataItems.StatusItem.UID_VALIDITY; } else if (nextWord.equalsIgnoreCase(ImapConstants.STATUS_UNSEEN)) { - items.setUnseen(true); + return StatusDataItems.StatusItem.UNSEEN; } else if (nextWord.equalsIgnoreCase(ImapConstants.STATUS_HIGHESTMODSEQ)) { // HIGHESTMODSEQ status item as defined in RFC4551 3.6 HIGHESTMODSEQ Status Data Items - items.setHighestModSeq(true); + return StatusDataItems.StatusItem.HIGHEST_MODSEQ; } else { throw new DecodingException(HumanReadableText.ILLEGAL_ARGUMENTS, "Unknown status item: '" + nextWord + "'"); } --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org