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/11/14 02:09:27 UTC
[james-project] 10/32: [Refactoring] StatusDataItems should be
immutable
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 <bt...@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-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org