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 ro...@apache.org on 2020/06/08 13:16:12 UTC

[james-project] 18/30: JAMES-3179 Deal with AbstractMailboxProcessor.getSelectedMailbox nullability

This is an automated email from the ASF dual-hosted git repository.

rouazana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 2552baa371888b3adf90cabefddcabda2d476ecf
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Tue May 12 16:18:24 2020 +0200

    JAMES-3179 Deal with AbstractMailboxProcessor.getSelectedMailbox nullability
---
 .../imap/processor/AbstractMailboxProcessor.java   | 17 +++++++---------
 .../imap/processor/AbstractSelectionProcessor.java |  3 ++-
 .../james/imap/processor/CloseProcessor.java       |  3 ++-
 .../james/imap/processor/ExpungeProcessor.java     |  5 +++--
 .../james/imap/processor/SearchProcessor.java      |  3 ++-
 .../james/imap/processor/StoreProcessor.java       | 23 ++++++++++------------
 .../james/imap/processor/fetch/FetchProcessor.java | 15 ++++++--------
 7 files changed, 32 insertions(+), 37 deletions(-)

diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
index a5f2b4a..2675934 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
@@ -72,6 +72,8 @@ import org.apache.james.metrics.api.TimeMetric;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.github.fge.lambdas.Throwing;
+
 public abstract class AbstractMailboxProcessor<R extends ImapRequest> extends AbstractChainedProcessor<R> {
     private static final Logger LOGGER = LoggerFactory.getLogger(AbstractMailboxProcessor.class);
 
@@ -397,16 +399,11 @@ public abstract class AbstractMailboxProcessor<R extends ImapRequest> extends Ab
         return factory;
     }
 
-    protected MessageManager getSelectedMailbox(ImapSession session) throws MailboxException {
-        MessageManager result;
-        final SelectedMailbox selectedMailbox = session.getSelected();
-        if (selectedMailbox == null) {
-            result = null;
-        } else {
-            final MailboxManager mailboxManager = getMailboxManager();
-            result = mailboxManager.getMailbox(selectedMailbox.getMailboxId(), session.getMailboxSession());
-        }
-        return result;
+    protected Optional<MessageManager> getSelectedMailbox(ImapSession session) throws MailboxException {
+        return Optional.ofNullable(session.getSelected())
+            .map(Throwing.<SelectedMailbox, MessageManager>function(selectedMailbox ->
+                getMailboxManager().getMailbox(selectedMailbox.getMailboxId(), session.getMailboxSession()))
+                .sneakyThrow());
     }
 
     /**
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
index 3905387..0a676fa 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
@@ -444,7 +444,8 @@ abstract class AbstractSelectionProcessor<R extends AbstractMailboxSelectionRequ
                     MailboxMetaData metaData  = null;
                     boolean send = false;
                     if (sm != null) {
-                        MessageManager mailbox = getSelectedMailbox(session);
+                        MessageManager mailbox = getSelectedMailbox(session)
+                            .orElseThrow(() -> new MailboxException("Session not in SELECTED state"));
                         metaData = mailbox.getMetaData(false, session.getMailboxSession(), FetchGroup.NO_COUNT);
                         send = true;
                     }
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/CloseProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/CloseProcessor.java
index e92891d..60d6e17 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/CloseProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/CloseProcessor.java
@@ -48,7 +48,8 @@ public class CloseProcessor extends AbstractMailboxProcessor<CloseRequest> {
     @Override
     protected void processRequest(CloseRequest request, ImapSession session, Responder responder) {
         try {
-            MessageManager mailbox = getSelectedMailbox(session);
+            MessageManager mailbox = getSelectedMailbox(session)
+                .orElseThrow(() -> new MailboxException("Session not in SELECTED state"));
             final MailboxSession mailboxSession = session.getMailboxSession();
             if (mailbox.getMetaData(false, mailboxSession, FetchGroup.NO_COUNT).isWriteable()) {
                 mailbox.expunge(MessageRange.all(), mailboxSession);
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java
index c72b385..dc6094d 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java
@@ -64,8 +64,9 @@ public class ExpungeProcessor extends AbstractMailboxProcessor<ExpungeRequest> i
     @Override
     protected void processRequest(ExpungeRequest request, ImapSession session, Responder responder) {
         try {
-            final MessageManager mailbox = getSelectedMailbox(session);
-            final MailboxSession mailboxSession = session.getMailboxSession();
+            MessageManager mailbox = getSelectedMailbox(session)
+                .orElseThrow(() -> new MailboxException("Session not in SELECTED state"));
+            MailboxSession mailboxSession = session.getMailboxSession();
 
             int expunged = 0;
             MailboxMetaData mdata = mailbox.getMetaData(false, mailboxSession, FetchGroup.NO_COUNT);
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
index 9ed93cf..c2ccf61 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
@@ -91,7 +91,8 @@ public class SearchProcessor extends AbstractMailboxProcessor<SearchRequest> imp
 
         try {
 
-            final MessageManager mailbox = getSelectedMailbox(session);
+            MessageManager mailbox = getSelectedMailbox(session)
+                .orElseThrow(() -> new MailboxException("Session not in SELECTED state"));
 
             final SearchQuery query = toQuery(searchKey, session);
             MailboxSession msession = session.getMailboxSession();
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 cbc579f..f14fac2 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
@@ -77,19 +77,19 @@ public class StoreProcessor extends AbstractMailboxProcessor<StoreRequest> {
 
     @Override
     protected void processRequest(StoreRequest request, ImapSession session, Responder responder) {
-        final IdRange[] idSet = request.getIdSet();
-        final boolean useUids = request.isUseUids();
-        final long unchangedSince = request.getUnchangedSince();
-        ImapCommand imapCommand = request.getCommand();
-        
+        IdRange[] idSet = request.getIdSet();
+        boolean useUids = request.isUseUids();
+        long unchangedSince = request.getUnchangedSince();
+
         try {
-            final MessageManager mailbox = getSelectedMailbox(session);
-            final MailboxSession mailboxSession = session.getMailboxSession();
-            final Flags flags = request.getFlags();
-            
+            MessageManager mailbox = getSelectedMailbox(session)
+                .orElseThrow(() -> new MailboxException("Session not in SELECTED state"));
+            MailboxSession mailboxSession = session.getMailboxSession();
+            Flags flags = request.getFlags();
+
             if (unchangedSince != -1) {
                 MailboxMetaData metaData = mailbox.getMetaData(false, mailboxSession, MailboxMetaData.FetchGroup.NO_COUNT);
-                if (metaData.isModSeqPermanent() == false) {
+                if (!metaData.isModSeqPermanent()) {
                     // Check if the mailbox did not support modsequences. If so return a tagged bad response.
                     // See RFC4551 3.1.2. NOMODSEQ Response Code 
                     taggedBad(request, responder, HumanReadableText.NO_MOD_SEQ);
@@ -120,9 +120,6 @@ public class StoreProcessor extends AbstractMailboxProcessor<StoreRequest> {
                 if (messageSet != null) {
 
                     if (unchangedSince != -1) {
-                        // Ok we have a CONDSTORE option so use the CONDSTORE_COMMAND
-                        imapCommand = CONDSTORE_COMMAND;
-
                         List<MessageUid> uids = new ArrayList<>();
 
                         MessageResultIterator results = mailbox.getMessages(messageSet, FetchGroup.MINIMAL, mailboxSession);
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
index b1ef8f8..4fe3a81 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
@@ -60,20 +60,17 @@ public class FetchProcessor extends AbstractMailboxProcessor<FetchRequest> {
 
     @Override
     protected void processRequest(FetchRequest request, ImapSession session, Responder responder) {
-        final boolean useUids = request.isUseUids();
-        final IdRange[] idSet = request.getIdSet();
-        final FetchData fetch = computeFetchData(request, session);
+        boolean useUids = request.isUseUids();
+        IdRange[] idSet = request.getIdSet();
+        FetchData fetch = computeFetchData(request, session);
 
         try {
             final long changedSince = fetch.getChangedSince();
 
-            final MessageManager mailbox = getSelectedMailbox(session);
+            MessageManager mailbox = getSelectedMailbox(session)
+                .orElseThrow(() -> new MailboxException("Session not in SELECTED state"));
 
-            if (mailbox == null) {
-                throw new MailboxException("Session not in SELECTED state");
-            }
-
-            final boolean vanished = fetch.getVanished();
+            boolean vanished = fetch.getVanished();
             if (vanished && !EnableProcessor.getEnabledCapabilities(session).contains(ImapConstants.SUPPORTS_QRESYNC)) {
                 taggedBad(request, responder, HumanReadableText.QRESYNC_NOT_ENABLED);
                 return;


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org