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:16 UTC
[james-project] 22/30: JAMES-3179 Deal with FetchResponseBuilder
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 e318886c8ce5a730cbe8bc7866fc3c9d884841e6
Author: Gautier DI FOLCO <gd...@linagora.com>
AuthorDate: Tue May 12 17:48:34 2020 +0200
JAMES-3179 Deal with FetchResponseBuilder nullability
---
.../imap/processor/fetch/FetchResponseBuilder.java | 79 +++++++++++-----------
1 file changed, 38 insertions(+), 41 deletions(-)
diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java
index 4229b5e..bc978b7 100644
--- a/protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java
+++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java
@@ -29,6 +29,7 @@ import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
+import java.util.Optional;
import javax.mail.Flags;
@@ -221,28 +222,29 @@ public final class FetchResponseBuilder {
final Long numberOfOctets = fetchElement.getNumberOfOctets();
final String name = fetchElement.getResponseName();
final SectionType specifier = fetchElement.getSectionType();
- final int[] path = fetchElement.getPath();
+ final Optional<MimePath> path = Optional.ofNullable(fetchElement.getPath())
+ .filter(paths -> paths.length > 0)
+ .map(MimePath::new);
final Collection<String> names = fetchElement.getFieldNames();
- final boolean isBase = (path == null || path.length == 0);
- final FetchResponse.BodyElement fullResult = bodyContent(messageResult, name, specifier, path, names, isBase);
+ final FetchResponse.BodyElement fullResult = bodyContent(messageResult, name, specifier, path, names);
return wrapIfPartialFetch(firstOctet, numberOfOctets, fullResult);
}
- private FetchResponse.BodyElement bodyContent(MessageResult messageResult, String name, SectionType specifier, int[] path, Collection<String> names, boolean isBase) throws MailboxException {
+ private FetchResponse.BodyElement bodyContent(MessageResult messageResult, String name, SectionType specifier, Optional<MimePath> path, Collection<String> names) throws MailboxException {
switch (specifier) {
case CONTENT:
- return content(messageResult, name, path, isBase);
+ return content(messageResult, name, path);
case HEADER_FIELDS:
- return fields(messageResult, name, path, names, isBase);
+ return fields(messageResult, name, path, names);
case HEADER_NOT_FIELDS:
- return fieldsNot(messageResult, name, path, names, isBase);
+ return fieldsNot(messageResult, name, path, names);
case MIME:
- return mimeHeaders(messageResult, name, path, isBase);
+ return mimeHeaders(messageResult, name, path);
case HEADER:
- return headers(messageResult, name, path, isBase);
+ return headers(messageResult, name, path);
case TEXT:
- return text(messageResult, name, path, isBase);
+ return text(messageResult, name, path);
default:
return null;
}
@@ -263,18 +265,17 @@ public final class FetchResponseBuilder {
return result;
}
- private FetchResponse.BodyElement text(MessageResult messageResult, String name, int[] path, boolean isBase) throws MailboxException {
+ private FetchResponse.BodyElement text(MessageResult messageResult, String name, Optional<MimePath> path) throws MailboxException {
final FetchResponse.BodyElement result;
Content body;
- if (isBase) {
+ if (!path.isPresent()) {
try {
body = messageResult.getBody();
} catch (IOException e) {
throw new MailboxException("Unable to get TEXT of body", e);
}
} else {
- MimePath mimePath = new MimePath(path);
- body = messageResult.getBody(mimePath);
+ body = messageResult.getBody(path.get());
}
if (body == null) {
body = new EmptyContent();
@@ -283,15 +284,15 @@ public final class FetchResponseBuilder {
return result;
}
- private FetchResponse.BodyElement mimeHeaders(MessageResult messageResult, String name, int[] path, boolean isBase) throws MailboxException {
+ private FetchResponse.BodyElement mimeHeaders(MessageResult messageResult, String name, Optional<MimePath> path) throws MailboxException {
final FetchResponse.BodyElement result;
- final Iterator<Header> headers = getMimeHeaders(messageResult, path, isBase);
+ final Iterator<Header> headers = getMimeHeaders(messageResult, path);
List<Header> lines = MessageResultUtils.getAll(headers);
result = new MimeBodyElement(name, lines);
return result;
}
- private HeaderBodyElement headerBodyElement(MessageResult messageResult, String name, List<Header> lines, int[] path, boolean isBase) throws MailboxException {
+ private HeaderBodyElement headerBodyElement(MessageResult messageResult, String name, List<Header> lines, Optional<MimePath> path) throws MailboxException {
final HeaderBodyElement result = new HeaderBodyElement(name, lines);
// if the size is 2 we had found not header and just want to write the empty line with CLRF terminated
// so check if there is a content for it. If not we MUST NOT write the empty line in any case
@@ -300,15 +301,14 @@ public final class FetchResponseBuilder {
// Check if its base as this can give use a more correctly working check
// to see if we need to write the newline out to the client.
// This is related to IMAP-298
- if (isBase) {
+ if (!path.isPresent()) {
if (messageResult.getSize() - result.size() <= 0) {
// Seems like this mail has no body
result.noBody();
}
-
} else {
try {
- if (content(messageResult, name, path, isBase).size() <= 0) {
+ if (content(messageResult, name, path).size() <= 0) {
// Seems like this mail has no body
result.noBody();
}
@@ -320,8 +320,8 @@ public final class FetchResponseBuilder {
return result;
}
- private FetchResponse.BodyElement headers(MessageResult messageResult, String name, int[] path, boolean isBase) throws MailboxException {
- if (isBase) {
+ private FetchResponse.BodyElement headers(MessageResult messageResult, String name, Optional<MimePath> path) throws MailboxException {
+ if (!path.isPresent()) {
// if its base we can just return the raw headers without parsing
// them. See MAILBOX-311 and IMAP-?
HeadersBodyElement element = new HeadersBodyElement(name, messageResult.getHeaders());
@@ -337,45 +337,43 @@ public final class FetchResponseBuilder {
}
return element;
} else {
- final Iterator<Header> headers = getHeaders(messageResult, path, isBase);
+ final Iterator<Header> headers = getHeaders(messageResult, path);
List<Header> lines = MessageResultUtils.getAll(headers);
- return headerBodyElement(messageResult, name, lines, path, isBase);
+ return headerBodyElement(messageResult, name, lines, path);
}
}
- private FetchResponse.BodyElement fieldsNot(MessageResult messageResult, String name, int[] path, Collection<String> names, boolean isBase) throws MailboxException {
- final Iterator<Header> headers = getHeaders(messageResult, path, isBase);
+ private FetchResponse.BodyElement fieldsNot(MessageResult messageResult, String name, Optional<MimePath> path, Collection<String> names) throws MailboxException {
+ final Iterator<Header> headers = getHeaders(messageResult, path);
List<Header> lines = MessageResultUtils.getNotMatching(names, headers);
- return headerBodyElement(messageResult, name, lines, path, isBase);
+ return headerBodyElement(messageResult, name, lines, path);
}
- private FetchResponse.BodyElement fields(MessageResult messageResult, String name, int[] path, Collection<String> names, boolean isBase) throws MailboxException {
- final Iterator<Header> headers = getHeaders(messageResult, path, isBase);
+ private FetchResponse.BodyElement fields(MessageResult messageResult, String name, Optional<MimePath> path, Collection<String> names) throws MailboxException {
+ final Iterator<Header> headers = getHeaders(messageResult, path);
List<Header> lines = MessageResultUtils.getMatching(names, headers);
- return headerBodyElement(messageResult, name, lines, path, isBase);
+ return headerBodyElement(messageResult, name, lines, path);
}
- private Iterator<Header> getHeaders(MessageResult messageResult, int[] path, boolean isBase) throws MailboxException {
+ private Iterator<Header> getHeaders(MessageResult messageResult, Optional<MimePath> path) throws MailboxException {
final Iterator<Header> headers;
- if (isBase) {
+ if (!path.isPresent()) {
headers = messageResult.getHeaders().headers();
} else {
- MimePath mimePath = new MimePath(path);
- headers = messageResult.iterateHeaders(mimePath);
+ headers = messageResult.iterateHeaders(path.get());
}
return headers;
}
- private Iterator<Header> getMimeHeaders(MessageResult messageResult, int[] path, boolean isBase) throws MailboxException {
- MimePath mimePath = new MimePath(path);
- return messageResult.iterateMimeHeaders(mimePath);
+ private Iterator<Header> getMimeHeaders(MessageResult messageResult, Optional<MimePath> path) throws MailboxException {
+ return messageResult.iterateMimeHeaders(path.get());
}
- private FetchResponse.BodyElement content(MessageResult messageResult, String name, int[] path, boolean isBase) throws MailboxException {
+ private FetchResponse.BodyElement content(MessageResult messageResult, String name, Optional<MimePath> path) throws MailboxException {
final FetchResponse.BodyElement result;
Content full;
- if (isBase) {
+ if (!path.isPresent()) {
try {
full = messageResult.getFullContent();
@@ -383,8 +381,7 @@ public final class FetchResponseBuilder {
throw new MailboxException("Unable to get content", e);
}
} else {
- MimePath mimePath = new MimePath(path);
- full = messageResult.getMimeBody(mimePath);
+ full = messageResult.getMimeBody(path.get());
}
if (full == null) {
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org