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 <[email protected]> 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: [email protected] For additional commands, e-mail: [email protected]
