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 <gdifo...@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-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org