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