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/13 02:39:18 UTC
[james-project] 02/27: [Refactoring] Strongly type FlagsUpdateMode
in StoreRequest
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 547f94478d6abe749024334461feab8a05255787
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Dec 10 09:52:34 2019 +0700
[Refactoring] Strongly type FlagsUpdateMode in StoreRequest
Before, a nullable boolean argument was representing the 3 possible state.
The request was storing this as 2 boolean (allowing 4 states thus one being invalid)
and some conversion logic was needed in the processor.
Using the FlagsUpdateMode enum straight away get rids of all this added
complexity.
---
.../imap/decode/parser/StoreCommandParser.java | 13 +++---
.../james/imap/message/request/StoreRequest.java | 48 ++++------------------
.../james/imap/processor/StoreProcessor.java | 11 +----
3 files changed, 16 insertions(+), 56 deletions(-)
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StoreCommandParser.java b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StoreCommandParser.java
index 07f924f..de64f2e 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StoreCommandParser.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StoreCommandParser.java
@@ -31,6 +31,7 @@ import org.apache.james.imap.decode.DecodingException;
import org.apache.james.imap.decode.ImapRequestLineReader;
import org.apache.james.imap.decode.ImapRequestLineReader.CharacterValidator;
import org.apache.james.imap.message.request.StoreRequest;
+import org.apache.james.mailbox.MessageManager;
/**
* Parse STORE commands
@@ -46,7 +47,6 @@ public class StoreCommandParser extends AbstractUidCommandParser {
@Override
protected ImapMessage decode(ImapCommand command, ImapRequestLineReader request, Tag tag, boolean useUids, ImapSession session) throws DecodingException {
final IdRange[] idSet = request.parseIdRange(session);
- final Boolean sign;
boolean silent = false;
long unchangedSince = -1;
char next = request.nextWordChar();
@@ -70,15 +70,16 @@ public class StoreCommandParser extends AbstractUidCommandParser {
request.consumeChar(')');
next = request.nextWordChar();
}
-
+
+ final MessageManager.FlagsUpdateMode flagsUpdateMode;
if (next == '+') {
- sign = Boolean.TRUE;
+ flagsUpdateMode = MessageManager.FlagsUpdateMode.ADD;
request.consume();
} else if (next == '-') {
- sign = Boolean.FALSE;
+ flagsUpdateMode = MessageManager.FlagsUpdateMode.REMOVE;
request.consume();
} else {
- sign = null;
+ flagsUpdateMode = MessageManager.FlagsUpdateMode.REPLACE;
}
String directive = request.consumeWord(new ImapRequestLineReader.NoopCharValidator());
@@ -109,6 +110,6 @@ public class StoreCommandParser extends AbstractUidCommandParser {
}
request.eol();
- return new StoreRequest(command, idSet, silent, flags, useUids, tag, sign, unchangedSince);
+ return new StoreRequest(command, idSet, silent, flags, useUids, tag, flagsUpdateMode, unchangedSince);
}
}
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/message/request/StoreRequest.java b/protocols/imap/src/main/java/org/apache/james/imap/message/request/StoreRequest.java
index 53f3bc4..fb56994 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/message/request/StoreRequest.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/message/request/StoreRequest.java
@@ -23,39 +23,23 @@ import javax.mail.Flags;
import org.apache.james.imap.api.ImapCommand;
import org.apache.james.imap.api.Tag;
import org.apache.james.imap.api.message.IdRange;
+import org.apache.james.mailbox.MessageManager;
public class StoreRequest extends AbstractImapRequest {
-
private final IdRange[] idSet;
-
private final Flags flags;
-
private final boolean useUids;
-
private final boolean silent;
-
- private final boolean signedMinus;
-
- private final boolean signedPlus;
-
+ private final MessageManager.FlagsUpdateMode flagsUpdateMode;
private final long unchangedSince;
- public StoreRequest(ImapCommand command, IdRange[] idSet, boolean silent, Flags flags, boolean useUids, Tag tag, Boolean sign, long unchangedSince) {
+ public StoreRequest(ImapCommand command, IdRange[] idSet, boolean silent, Flags flags, boolean useUids, Tag tag, MessageManager.FlagsUpdateMode flagsUpdateMode, long unchangedSince) {
super(tag, command);
this.idSet = idSet;
this.silent = silent;
this.flags = flags;
this.useUids = useUids;
- if (sign == null) {
- signedMinus = false;
- signedPlus = false;
- } else if (sign) {
- signedMinus = false;
- signedPlus = true;
- } else {
- signedMinus = true;
- signedPlus = false;
- }
+ this.flagsUpdateMode = flagsUpdateMode;
this.unchangedSince = unchangedSince;
}
@@ -68,24 +52,8 @@ public class StoreRequest extends AbstractImapRequest {
return silent;
}
- /**
- * Is the store signed MINUS? Note that {@link #isSignedPlus()} must be
- * false when this property is true.
- *
- * @return true if the store is subtractive
- */
- public final boolean isSignedMinus() {
- return signedMinus;
- }
-
- /**
- * Is the store signed PLUS? Note that {@link #isSignedMinus()} must be
- * false when this property is true.
- *
- * @return true if the store is additive
- */
- public final boolean isSignedPlus() {
- return signedPlus;
+ public final MessageManager.FlagsUpdateMode getFlagsUpdateMode() {
+ return flagsUpdateMode;
}
public final Flags getFlags() {
@@ -113,10 +81,10 @@ public class StoreRequest extends AbstractImapRequest {
if (isSilent()) {
builder.append("SILENT ");
}
- if (isSignedPlus()) {
+ if (flagsUpdateMode == MessageManager.FlagsUpdateMode.ADD) {
builder.append("+ ");
}
- if (isSignedMinus()) {
+ if (flagsUpdateMode == MessageManager.FlagsUpdateMode.REMOVE) {
builder.append("- ");
}
if (flags.contains(Flags.Flag.ANSWERED)) {
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
index cbba9d4..7671d89 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
@@ -225,17 +225,8 @@ public class StoreProcessor extends AbstractMailboxProcessor<StoreRequest> {
final Flags flags = request.getFlags();
final boolean useUids = request.isUseUids();
final boolean silent = request.isSilent();
- final boolean isSignedPlus = request.isSignedPlus();
- final boolean isSignedMinus = request.isSignedMinus();
final long unchangedSince = request.getUnchangedSince();
- final MessageManager.FlagsUpdateMode mode;
- if (isSignedMinus) {
- mode = MessageManager.FlagsUpdateMode.REMOVE;
- } else if (isSignedPlus) {
- mode = MessageManager.FlagsUpdateMode.ADD;
- } else {
- mode = MessageManager.FlagsUpdateMode.REPLACE;
- }
+ final MessageManager.FlagsUpdateMode mode = request.getFlagsUpdateMode();
SelectedMailbox selected = session.getSelected();
final Map<MessageUid, Flags> flagsByUid = mailbox.setFlags(flags, mode, messageSet, mailboxSession);
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org