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