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 cea95b025b2350c0c4aa0629c3f4c6bee8865891 Author: Benoit Tellier <[email protected]> AuthorDate: Fri Dec 6 14:06:38 2019 +0700 PROTOCOLS-120 ImapEncoders should no longer be chained --- .../james/imap/encode/ACLResponseEncoder.java | 19 ++--- .../imap/encode/AnnotationResponseEncoder.java | 19 ++--- .../imap/encode/AuthenticateResponseEncoder.java | 16 +--- .../imap/encode/CapabilityResponseEncoder.java | 18 ++--- .../imap/encode/ContinuationResponseEncoder.java | 22 ++---- .../james/imap/encode/ESearchResponseEncoder.java | 18 ++--- .../james/imap/encode/EnableResponseEncoder.java | 18 ++--- .../james/imap/encode/ExistsResponseEncoder.java | 18 ++--- .../james/imap/encode/ExpungeResponseEncoder.java | 17 ++-- .../james/imap/encode/FetchResponseEncoder.java | 50 +++++------- .../james/imap/encode/FlagsResponseEncoder.java | 18 ++--- ...sponseEncoder.java => ImapResponseEncoder.java} | 33 ++++---- .../james/imap/encode/LSubResponseEncoder.java | 20 ++--- .../james/imap/encode/ListResponseEncoder.java | 20 ++--- .../imap/encode/ListRightsResponseEncoder.java | 18 ++--- .../imap/encode/MailboxStatusResponseEncoder.java | 19 ++--- .../james/imap/encode/MyRightsResponseEncoder.java | 20 ++--- .../imap/encode/NamespaceResponseEncoder.java | 19 ++--- .../james/imap/encode/QuotaResponseEncoder.java | 21 ++--- .../imap/encode/QuotaRootResponseEncoder.java | 22 ++---- .../james/imap/encode/RecentResponseEncoder.java | 17 ++-- .../james/imap/encode/SearchResponseEncoder.java | 18 ++--- .../james/imap/encode/StatusResponseEncoder.java | 23 +++--- .../james/imap/encode/VanishedResponseEncoder.java | 22 ++---- .../james/imap/encode/XListResponseEncoder.java | 22 ++---- .../encode/base/AbstractChainedImapEncoder.java | 86 --------------------- .../encode/main/DefaultImapEncoderFactory.java | 90 +++++++++++++++------- .../imap/encode/AnnotationResponseEncoderTest.java | 3 +- .../encode/FetchResponseEncoderEnvelopeTest.java | 40 +++++----- .../FetchResponseEncoderNoExtensionsTest.java | 24 ++---- .../imap/encode/FetchResponseEncoderTest.java | 23 ++---- .../james/imap/encode/LSubResponseEncoderTest.java | 26 +------ .../james/imap/encode/ListResponseEncoderTest.java | 27 +------ .../encode/MailboxStatusResponseEncoderTest.java | 14 +--- .../imap/encode/NamespaceResponseEncoderTest.java | 21 ++--- .../imap/encode/QuotaResponseEncoderTest.java | 5 +- .../imap/encode/QuotaRootResponseEncoderTest.java | 3 +- .../imap/encode/SearchResponseEncoderTest.java | 17 +--- .../imap/encode/XListResponseEncoderTest.java | 31 +------- 39 files changed, 274 insertions(+), 663 deletions(-) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/ACLResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/ACLResponseEncoder.java index 09f05a4..9cbb8c4 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/ACLResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/ACLResponseEncoder.java @@ -24,27 +24,18 @@ import java.util.Map; import java.util.Map.Entry; import org.apache.james.imap.api.ImapConstants; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.ACLResponse; import org.apache.james.mailbox.model.MailboxACL.EntryKey; import org.apache.james.mailbox.model.MailboxACL.Rfc4314Rights; /** * ACL Response Encoder. - * */ -public class ACLResponseEncoder extends AbstractChainedImapEncoder { - - public ACLResponseEncoder(ImapEncoder next) { - super(next); - } - +public class ACLResponseEncoder implements ImapResponseEncoder<ACLResponse> { @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - final ACLResponse aclResponse = (ACLResponse) acceptableMessage; - final Map<EntryKey, Rfc4314Rights> entries = aclResponse.getAcl().getEntries(); + public void encode(ACLResponse aclResponse, ImapResponseComposer composer, ImapSession session) throws IOException { + Map<EntryKey, Rfc4314Rights> entries = aclResponse.getAcl().getEntries(); composer.untagged(); composer.commandName(ImapConstants.ACL_RESPONSE_NAME); @@ -63,7 +54,7 @@ public class ACLResponseEncoder extends AbstractChainedImapEncoder { } @Override - public boolean isAcceptable(ImapMessage message) { - return message instanceof ACLResponse; + public Class<ACLResponse> acceptableMessages() { + return ACLResponse.class; } } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/AnnotationResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/AnnotationResponseEncoder.java index 6b0c36a..21429f2 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/AnnotationResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/AnnotationResponseEncoder.java @@ -24,26 +24,22 @@ import java.util.List; import java.util.Optional; import org.apache.james.imap.api.ImapConstants; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.AnnotationResponse; import org.apache.james.mailbox.model.MailboxAnnotation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class AnnotationResponseEncoder extends AbstractChainedImapEncoder { +public class AnnotationResponseEncoder implements ImapResponseEncoder<AnnotationResponse> { private static final Logger LOGGER = LoggerFactory.getLogger(AnnotationResponseEncoder.class); - public AnnotationResponseEncoder(ImapEncoder next) { - super(next); + @Override + public Class<AnnotationResponse> acceptableMessages() { + return AnnotationResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, final ImapResponseComposer composer, ImapSession session) throws IOException { - - AnnotationResponse response = (AnnotationResponse) acceptableMessage; - + public void encode(AnnotationResponse response, ImapResponseComposer composer, ImapSession session) throws IOException { composer.untagged(); composer.commandName(ImapConstants.ANNOTATION_RESPONSE_NAME); @@ -71,9 +67,4 @@ public class AnnotationResponseEncoder extends AbstractChainedImapEncoder { composer.quote(annotation.getValue().orElse("")); } } - - @Override - public boolean isAcceptable(ImapMessage message) { - return message instanceof AnnotationResponse; - } } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/AuthenticateResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/AuthenticateResponseEncoder.java index 689a2ca..bbb6c46 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/AuthenticateResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/AuthenticateResponseEncoder.java @@ -20,25 +20,17 @@ package org.apache.james.imap.encode; import java.io.IOException; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.AuthenticateResponse; -public class AuthenticateResponseEncoder extends AbstractChainedImapEncoder { - - public AuthenticateResponseEncoder(ImapEncoder next) { - super(next); - } - +public class AuthenticateResponseEncoder implements ImapResponseEncoder<AuthenticateResponse> { @Override - protected boolean isAcceptable(ImapMessage message) { - return message instanceof AuthenticateResponse; + public Class<AuthenticateResponse> acceptableMessages() { + return AuthenticateResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { + public void encode(AuthenticateResponse message, ImapResponseComposer composer, ImapSession session) throws IOException { composer.continuationResponse(""); } - } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/CapabilityResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/CapabilityResponseEncoder.java index 90eee64..685d283 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/CapabilityResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/CapabilityResponseEncoder.java @@ -22,10 +22,8 @@ import java.io.IOException; import java.util.Iterator; import org.apache.james.imap.api.ImapConstants; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.CapabilityResponse; /** @@ -33,15 +31,14 @@ import org.apache.james.imap.message.response.CapabilityResponse; * href='http://james.apache.org/server/rfclist/imap4/rfc2060.txt' * rel='tag'>RFC2060</a>. */ -public class CapabilityResponseEncoder extends AbstractChainedImapEncoder { - - public CapabilityResponseEncoder(ImapEncoder next) { - super(next); +public class CapabilityResponseEncoder implements ImapResponseEncoder<CapabilityResponse> { + @Override + public Class<CapabilityResponse> acceptableMessages() { + return CapabilityResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - final CapabilityResponse response = (CapabilityResponse) acceptableMessage; + public void encode(CapabilityResponse response, ImapResponseComposer composer, ImapSession session) throws IOException { Iterator<Capability> capabilities = response.getCapabilities().iterator(); composer.untagged(); composer.message(ImapConstants.CAPABILITY_COMMAND_NAME); @@ -50,9 +47,4 @@ public class CapabilityResponseEncoder extends AbstractChainedImapEncoder { } composer.end(); } - - @Override - protected boolean isAcceptable(ImapMessage message) { - return (message instanceof CapabilityResponse); - } } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/ContinuationResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/ContinuationResponseEncoder.java index f589984..9620c00 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/ContinuationResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/ContinuationResponseEncoder.java @@ -22,28 +22,28 @@ package org.apache.james.imap.encode; import java.io.IOException; import java.util.ArrayList; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.display.Locales; import org.apache.james.imap.api.display.Localizer; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.ContinuationResponse; -public class ContinuationResponseEncoder extends AbstractChainedImapEncoder { +public class ContinuationResponseEncoder implements ImapResponseEncoder<ContinuationResponse> { private final Localizer localizer; - public ContinuationResponseEncoder(ImapEncoder next, Localizer localizer) { - super(next); + public ContinuationResponseEncoder(Localizer localizer) { this.localizer = localizer; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { + public Class<ContinuationResponse> acceptableMessages() { + return ContinuationResponse.class; + } - ContinuationResponse response = (ContinuationResponse) acceptableMessage; - final String message = response.getData() != null ? response.getData() : asString(response.getTextKey(), session); + @Override + public void encode(ContinuationResponse response, ImapResponseComposer composer, ImapSession session) throws IOException { + String message = response.getData() != null ? response.getData() : asString(response.getTextKey(), session); composer.continuationResponse(message); } @@ -51,10 +51,4 @@ public class ContinuationResponseEncoder extends AbstractChainedImapEncoder { // TODO: calculate locales return localizer.localize(text, new Locales(new ArrayList<>(), null)); } - - @Override - protected boolean isAcceptable(ImapMessage message) { - return (message instanceof ContinuationResponse); - } - } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/ESearchResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/ESearchResponseEncoder.java index 8a4b65d..289e659 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/ESearchResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/ESearchResponseEncoder.java @@ -21,28 +21,25 @@ package org.apache.james.imap.encode; import java.io.IOException; import java.util.List; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.Tag; import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.UidRange; import org.apache.james.imap.api.message.request.SearchResultOption; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.ESearchResponse; import org.apache.james.mailbox.ModSeq; /** * Encoders IMAP4rev1 <code>ESEARCH</code> responses. */ -public class ESearchResponseEncoder extends AbstractChainedImapEncoder { - - public ESearchResponseEncoder(ImapEncoder next) { - super(next); +public class ESearchResponseEncoder implements ImapResponseEncoder<ESearchResponse> { + @Override + public Class<ESearchResponse> acceptableMessages() { + return ESearchResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - ESearchResponse response = (ESearchResponse) acceptableMessage; + public void encode(ESearchResponse response, ImapResponseComposer composer, ImapSession session) throws IOException { Tag tag = response.getTag(); long min = response.getMinUid(); long max = response.getMaxUid(); @@ -84,9 +81,4 @@ public class ESearchResponseEncoder extends AbstractChainedImapEncoder { } composer.end(); } - - @Override - protected boolean isAcceptable(ImapMessage message) { - return (message instanceof ESearchResponse); - } } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/EnableResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/EnableResponseEncoder.java index d9ca32f..0cdd72f 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/EnableResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/EnableResponseEncoder.java @@ -21,24 +21,21 @@ package org.apache.james.imap.encode; import java.io.IOException; import java.util.Set; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.EnableResponse; /** * Encodes <code>Enable</code> response. */ -public class EnableResponseEncoder extends AbstractChainedImapEncoder { - - public EnableResponseEncoder(ImapEncoder next) { - super(next); +public class EnableResponseEncoder implements ImapResponseEncoder<EnableResponse> { + @Override + public Class<EnableResponse> acceptableMessages() { + return EnableResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - final EnableResponse response = (EnableResponse) acceptableMessage; + public void encode(EnableResponse response, ImapResponseComposer composer, ImapSession session) throws IOException { Set<Capability> capabilities = response.getCapabilities(); composer.untagged(); // Return ENABLED capabilities. See IMAP-323 @@ -48,9 +45,4 @@ public class EnableResponseEncoder extends AbstractChainedImapEncoder { } composer.end(); } - - @Override - protected boolean isAcceptable(ImapMessage message) { - return (message instanceof EnableResponse); - } } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/ExistsResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/ExistsResponseEncoder.java index ad205cb..6263ab5 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/ExistsResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/ExistsResponseEncoder.java @@ -21,28 +21,20 @@ package org.apache.james.imap.encode; import java.io.IOException; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.ExistsResponse; -public class ExistsResponseEncoder extends AbstractChainedImapEncoder { - +public class ExistsResponseEncoder implements ImapResponseEncoder<ExistsResponse> { public static final String EXISTS = "EXISTS"; - public ExistsResponseEncoder(ImapEncoder next) { - super(next); - } - @Override - public boolean isAcceptable(ImapMessage message) { - return message instanceof ExistsResponse; + public Class<ExistsResponse> acceptableMessages() { + return ExistsResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - final ExistsResponse existsResponse = (ExistsResponse) acceptableMessage; - final long numberOfMessages = existsResponse.getNumberOfMessages(); + public void encode(ExistsResponse existsResponse, ImapResponseComposer composer, ImapSession session) throws IOException { + long numberOfMessages = existsResponse.getNumberOfMessages(); composer.untagged().message(numberOfMessages).message(EXISTS).end(); diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/ExpungeResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/ExpungeResponseEncoder.java index 0308f39..25ad3f5 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/ExpungeResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/ExpungeResponseEncoder.java @@ -21,27 +21,20 @@ package org.apache.james.imap.encode; import java.io.IOException; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.ExpungeResponse; -public class ExpungeResponseEncoder extends AbstractChainedImapEncoder { +public class ExpungeResponseEncoder implements ImapResponseEncoder<ExpungeResponse> { public static final String EXPUNGE = "EXPUNGE"; - public ExpungeResponseEncoder(ImapEncoder next) { - super(next); - } - @Override - public boolean isAcceptable(ImapMessage message) { - return (message instanceof ExpungeResponse); + public Class<ExpungeResponse> acceptableMessages() { + return ExpungeResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - final ExpungeResponse expungeResponse = (ExpungeResponse) acceptableMessage; - final int messageSequenceNumber = expungeResponse.getMessageSequenceNumber(); + public void encode(ExpungeResponse expungeResponse, ImapResponseComposer composer, ImapSession session) throws IOException { + int messageSequenceNumber = expungeResponse.getMessageSequenceNumber(); composer.untagged().message(messageSequenceNumber).message(EXPUNGE).end(); } } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/FetchResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/FetchResponseEncoder.java index 344ebe1..6bc11be 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/FetchResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/FetchResponseEncoder.java @@ -31,9 +31,7 @@ import java.util.TreeSet; import javax.mail.Flags; import org.apache.james.imap.api.ImapConstants; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.FetchResponse; import org.apache.james.imap.message.response.FetchResponse.Structure; import org.apache.james.mailbox.MessageUid; @@ -41,7 +39,7 @@ import org.apache.james.mailbox.ModSeq; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class FetchResponseEncoder extends AbstractChainedImapEncoder { +public class FetchResponseEncoder implements ImapResponseEncoder<FetchResponse> { private static final Logger LOGGER = LoggerFactory.getLogger(FetchResponseEncoder.class); public static final String ENVELOPE = "ENVELOPE"; @@ -50,44 +48,38 @@ public class FetchResponseEncoder extends AbstractChainedImapEncoder { /** * Constructs an encoder for FETCH messages. - * - * @param next - * not null + * * @param neverAddBodyStructureExtensions * true to activate a workaround for broken clients who cannot * parse BODYSTRUCTURE extensions, false to fully support RFC3501 */ - public FetchResponseEncoder(ImapEncoder next, boolean neverAddBodyStructureExtensions) { - super(next); + public FetchResponseEncoder(boolean neverAddBodyStructureExtensions) { this.neverAddBodyStructureExtensions = neverAddBodyStructureExtensions; } @Override - public boolean isAcceptable(ImapMessage message) { - return (message instanceof FetchResponse); + public Class<FetchResponse> acceptableMessages() { + return FetchResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - if (acceptableMessage instanceof FetchResponse) { - final FetchResponse fetchResponse = (FetchResponse) acceptableMessage; - final long messageNumber = fetchResponse.getMessageNumber(); - - composer.untagged().message(messageNumber).message(ImapConstants.FETCH_COMMAND_NAME).openParen(); + public void encode(FetchResponse fetchResponse, ImapResponseComposer composer, ImapSession session) throws IOException { + long messageNumber = fetchResponse.getMessageNumber(); - - encodeModSeq(composer, fetchResponse); - encodeFlags(composer, fetchResponse); - encodeInternalDate(composer, fetchResponse); - encodeSize(composer, fetchResponse); - encodeEnvelope(composer, fetchResponse); - encodeBody(composer, fetchResponse.getBody(), session); - encodeBodyStructure(composer, fetchResponse.getBodyStructure(), session); - encodeUid(composer, fetchResponse); - encodeBodyElements(composer, fetchResponse.getElements()); - - composer.closeParen().end(); - } + composer.untagged().message(messageNumber).message(ImapConstants.FETCH_COMMAND_NAME).openParen(); + + + encodeModSeq(composer, fetchResponse); + encodeFlags(composer, fetchResponse); + encodeInternalDate(composer, fetchResponse); + encodeSize(composer, fetchResponse); + encodeEnvelope(composer, fetchResponse); + encodeBody(composer, fetchResponse.getBody(), session); + encodeBodyStructure(composer, fetchResponse.getBodyStructure(), session); + encodeUid(composer, fetchResponse); + encodeBodyElements(composer, fetchResponse.getElements()); + + composer.closeParen().end(); } // Handle the MODSEQ diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/FlagsResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/FlagsResponseEncoder.java index 1d31d66..548f3ec 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/FlagsResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/FlagsResponseEncoder.java @@ -23,26 +23,18 @@ import java.io.IOException; import javax.mail.Flags; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.FlagsResponse; -public class FlagsResponseEncoder extends AbstractChainedImapEncoder { - - public FlagsResponseEncoder(ImapEncoder next) { - super(next); - } - +public class FlagsResponseEncoder implements ImapResponseEncoder<FlagsResponse> { @Override - public boolean isAcceptable(ImapMessage message) { - return message instanceof FlagsResponse; + public Class<FlagsResponse> acceptableMessages() { + return FlagsResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - final FlagsResponse flagsResponse = (FlagsResponse) acceptableMessage; - final Flags flags = flagsResponse.getFlags(); + public void encode(FlagsResponse flagsResponse, ImapResponseComposer composer, ImapSession session) throws IOException { + Flags flags = flagsResponse.getFlags(); composer.untagged().flags(flags).end(); } } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/AuthenticateResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/ImapResponseEncoder.java similarity index 68% copy from protocols/imap/src/main/java/org/apache/james/imap/encode/AuthenticateResponseEncoder.java copy to protocols/imap/src/main/java/org/apache/james/imap/encode/ImapResponseEncoder.java index 689a2ca..dc7c0ed 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/AuthenticateResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/ImapResponseEncoder.java @@ -16,29 +16,28 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ + package org.apache.james.imap.encode; import java.io.IOException; import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; -import org.apache.james.imap.message.response.AuthenticateResponse; - -public class AuthenticateResponseEncoder extends AbstractChainedImapEncoder { - - public AuthenticateResponseEncoder(ImapEncoder next) { - super(next); - } - - @Override - protected boolean isAcceptable(ImapMessage message) { - return message instanceof AuthenticateResponse; - } - @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - composer.continuationResponse(""); - } +public interface ImapResponseEncoder<T extends ImapMessage> { + Class<T> acceptableMessages(); + /** + * Writes response. + * + * @param message + * <code>ImapMessage</code>, not null + * @param composer + * <code>ImapResponseComposer</code>, not null + * @param session + * TODO + * @throws IOException + * when message encoding fails + */ + void encode(T message, ImapResponseComposer composer, ImapSession session) throws IOException; } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/LSubResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/LSubResponseEncoder.java index 8e47eea..315ef46 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/LSubResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/LSubResponseEncoder.java @@ -21,30 +21,20 @@ package org.apache.james.imap.encode; import java.io.IOException; import org.apache.james.imap.api.ImapConstants; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; -import org.apache.james.imap.message.response.AbstractListingResponse; import org.apache.james.imap.message.response.LSubResponse; /** * Encoders IMAP4rev1 <code>List</code> responses. */ -public class LSubResponseEncoder extends AbstractChainedImapEncoder { - - public LSubResponseEncoder(ImapEncoder next) { - super(next); - } - +public class LSubResponseEncoder implements ImapResponseEncoder<LSubResponse> { @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - final AbstractListingResponse response = (AbstractListingResponse) acceptableMessage; - ListingEncodingUtils.encodeListingResponse(ImapConstants.LSUB_RESPONSE_NAME, composer, response); + public Class<LSubResponse> acceptableMessages() { + return LSubResponse.class; } @Override - protected boolean isAcceptable(ImapMessage message) { - return (message instanceof LSubResponse); + public void encode(LSubResponse response, ImapResponseComposer composer, ImapSession session) throws IOException { + ListingEncodingUtils.encodeListingResponse(ImapConstants.LSUB_RESPONSE_NAME, composer, response); } - } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/ListResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/ListResponseEncoder.java index 7485796..ba8df0f 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/ListResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/ListResponseEncoder.java @@ -21,30 +21,20 @@ package org.apache.james.imap.encode; import java.io.IOException; import org.apache.james.imap.api.ImapConstants; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; -import org.apache.james.imap.message.response.AbstractListingResponse; import org.apache.james.imap.message.response.ListResponse; /** * Encoders IMAP4rev1 <code>List</code> responses. */ -public class ListResponseEncoder extends AbstractChainedImapEncoder { - - public ListResponseEncoder(ImapEncoder next) { - super(next); - } - +public class ListResponseEncoder implements ImapResponseEncoder<ListResponse> { @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - final AbstractListingResponse response = (AbstractListingResponse) acceptableMessage; - ListingEncodingUtils.encodeListingResponse(ImapConstants.LIST_RESPONSE_NAME, composer, response); + public Class<ListResponse> acceptableMessages() { + return ListResponse.class; } @Override - protected boolean isAcceptable(ImapMessage message) { - return (message instanceof ListResponse); + public void encode(ListResponse response, ImapResponseComposer composer, ImapSession session) throws IOException { + ListingEncodingUtils.encodeListingResponse(ImapConstants.LIST_RESPONSE_NAME, composer, response); } - } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/ListRightsResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/ListRightsResponseEncoder.java index 18b7b2e..86428cc 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/ListRightsResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/ListRightsResponseEncoder.java @@ -22,24 +22,21 @@ package org.apache.james.imap.encode; import java.io.IOException; import org.apache.james.imap.api.ImapConstants; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.ListRightsResponse; import org.apache.james.mailbox.model.MailboxACL.Rfc4314Rights; /** * ACL Response Encoder. */ -public class ListRightsResponseEncoder extends AbstractChainedImapEncoder { - - public ListRightsResponseEncoder(ImapEncoder next) { - super(next); +public class ListRightsResponseEncoder implements ImapResponseEncoder<ListRightsResponse> { + @Override + public Class<ListRightsResponse> acceptableMessages() { + return ListRightsResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - final ListRightsResponse listRightsResponse = (ListRightsResponse) acceptableMessage; + public void encode(ListRightsResponse listRightsResponse, ImapResponseComposer composer, ImapSession session) throws IOException { composer.untagged(); composer.commandName(ImapConstants.LISTRIGHTS_RESPONSE_NAME); @@ -56,9 +53,4 @@ public class ListRightsResponseEncoder extends AbstractChainedImapEncoder { } composer.end(); } - - @Override - public boolean isAcceptable(ImapMessage message) { - return message instanceof ListRightsResponse; - } } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/MailboxStatusResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/MailboxStatusResponseEncoder.java index 20a961d..b507434 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/MailboxStatusResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/MailboxStatusResponseEncoder.java @@ -22,9 +22,7 @@ package org.apache.james.imap.encode; import java.io.IOException; import org.apache.james.imap.api.ImapConstants; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.MailboxStatusResponse; import org.apache.james.mailbox.MessageUid; import org.apache.james.mailbox.ModSeq; @@ -32,15 +30,14 @@ import org.apache.james.mailbox.ModSeq; /** * Encodes <code>STATUS</code> responses. */ -public class MailboxStatusResponseEncoder extends AbstractChainedImapEncoder implements ImapConstants { - - public MailboxStatusResponseEncoder(ImapEncoder next) { - super(next); +public class MailboxStatusResponseEncoder implements ImapConstants, ImapResponseEncoder<MailboxStatusResponse> { + @Override + public Class<MailboxStatusResponse> acceptableMessages() { + return MailboxStatusResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - MailboxStatusResponse response = (MailboxStatusResponse) acceptableMessage; + public void encode(MailboxStatusResponse response, ImapResponseComposer composer, ImapSession session) throws IOException { Long messages = response.getMessages(); Long recent = response.getRecent(); MessageUid uidNext = response.getUidNext(); @@ -92,10 +89,4 @@ public class MailboxStatusResponseEncoder extends AbstractChainedImapEncoder imp composer.closeParen(); composer.end(); } - - @Override - protected boolean isAcceptable(ImapMessage message) { - return message != null && message instanceof MailboxStatusResponse; - } - } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/MyRightsResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/MyRightsResponseEncoder.java index 20a124a..e5f619c 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/MyRightsResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/MyRightsResponseEncoder.java @@ -22,25 +22,22 @@ package org.apache.james.imap.encode; import java.io.IOException; import org.apache.james.imap.api.ImapConstants; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.MyRightsResponse; import org.apache.james.mailbox.model.MailboxACL.Rfc4314Rights; /** * MYRIGHTS Response Encoder. */ -public class MyRightsResponseEncoder extends AbstractChainedImapEncoder { - - public MyRightsResponseEncoder(ImapEncoder next) { - super(next); +public class MyRightsResponseEncoder implements ImapResponseEncoder<MyRightsResponse> { + @Override + public Class<MyRightsResponse> acceptableMessages() { + return MyRightsResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - final MyRightsResponse aclResponse = (MyRightsResponse) acceptableMessage; - final Rfc4314Rights myRights = aclResponse.getMyRights(); + public void encode(MyRightsResponse aclResponse, ImapResponseComposer composer, ImapSession session) throws IOException { + Rfc4314Rights myRights = aclResponse.getMyRights(); composer.untagged(); composer.commandName(ImapConstants.MYRIGHTS_RESPONSE_NAME); @@ -49,9 +46,4 @@ public class MyRightsResponseEncoder extends AbstractChainedImapEncoder { composer.quote(myRights == null ? "" : myRights.serialize()); composer.end(); } - - @Override - public boolean isAcceptable(ImapMessage message) { - return message instanceof MyRightsResponse; - } } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/NamespaceResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/NamespaceResponseEncoder.java index 9cc5987..3eee9cc 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/NamespaceResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/NamespaceResponseEncoder.java @@ -22,24 +22,21 @@ import java.io.IOException; import java.util.List; import org.apache.james.imap.api.ImapConstants; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.NamespaceResponse; import org.apache.james.imap.message.response.NamespaceResponse.Namespace; /** * Encodes namespace responses. */ -public class NamespaceResponseEncoder extends AbstractChainedImapEncoder { - - public NamespaceResponseEncoder(ImapEncoder next) { - super(next); +public class NamespaceResponseEncoder implements ImapResponseEncoder<NamespaceResponse> { + @Override + public Class<NamespaceResponse> acceptableMessages() { + return NamespaceResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - final NamespaceResponse response = (NamespaceResponse) acceptableMessage; + public void encode(NamespaceResponse response, ImapResponseComposer composer, ImapSession session) throws IOException { composer.untagged(); composer.commandName(ImapConstants.NAMESPACE_COMMAND_NAME); @@ -77,10 +74,4 @@ public class NamespaceResponseEncoder extends AbstractChainedImapEncoder { composer.quote(delimiter); composer.closeParen(); } - - @Override - protected boolean isAcceptable(ImapMessage message) { - return message instanceof NamespaceResponse; - } - } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/QuotaResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/QuotaResponseEncoder.java index a803ec7..9764e54 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/QuotaResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/QuotaResponseEncoder.java @@ -23,26 +23,21 @@ import java.io.IOException; import java.util.Locale; import org.apache.james.imap.api.ImapConstants; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.QuotaResponse; import org.apache.james.mailbox.model.Quota; /** * Quota response encoder */ -public class QuotaResponseEncoder extends AbstractChainedImapEncoder { - - public QuotaResponseEncoder(ImapEncoder next) { - super(next); +public class QuotaResponseEncoder implements ImapResponseEncoder<QuotaResponse> { + @Override + public Class<QuotaResponse> acceptableMessages() { + return QuotaResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - - QuotaResponse quotaResponse = (QuotaResponse) acceptableMessage; - + public void encode(QuotaResponse quotaResponse, ImapResponseComposer composer, ImapSession session) throws IOException { String quotaRoot = quotaResponse.getQuotaRoot(); Quota<?, ?> quota = quotaResponse.getQuota(); @@ -75,10 +70,4 @@ public class QuotaResponseEncoder extends AbstractChainedImapEncoder { composer.message(quota.getUsed().asLong()); composer.message(quota.getLimit().asLong()); } - - @Override - public boolean isAcceptable(ImapMessage message) { - return message instanceof QuotaResponse; - } - } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/QuotaRootResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/QuotaRootResponseEncoder.java index e464b78..b13505f 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/QuotaRootResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/QuotaRootResponseEncoder.java @@ -22,39 +22,27 @@ package org.apache.james.imap.encode; import java.io.IOException; import org.apache.james.imap.api.ImapConstants; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.QuotaRootResponse; /** * QUOTAROOT response encoder */ -public class QuotaRootResponseEncoder extends AbstractChainedImapEncoder { - - public QuotaRootResponseEncoder(ImapEncoder next) { - super(next); +public class QuotaRootResponseEncoder implements ImapResponseEncoder<QuotaRootResponse> { + @Override + public Class<QuotaRootResponse> acceptableMessages() { + return QuotaRootResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - - QuotaRootResponse quotaRootResponse = (QuotaRootResponse) acceptableMessage; - + public void encode(QuotaRootResponse quotaRootResponse, ImapResponseComposer composer, ImapSession session) throws IOException { String quotaRoot = quotaRootResponse.getQuotaRoot(); String mailbox = quotaRootResponse.getMailboxName(); - composer.untagged(); composer.commandName(ImapConstants.QUOTAROOT_RESPONSE_NAME); composer.mailbox(mailbox == null ? "" : mailbox); composer.message(quotaRoot == null ? "" : quotaRoot); composer.end(); } - - @Override - public boolean isAcceptable(ImapMessage message) { - return message instanceof QuotaRootResponse; - } - } \ No newline at end of file diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/RecentResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/RecentResponseEncoder.java index 72cc1c8..be8df6f 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/RecentResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/RecentResponseEncoder.java @@ -21,27 +21,20 @@ package org.apache.james.imap.encode; import java.io.IOException; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.RecentResponse; -public class RecentResponseEncoder extends AbstractChainedImapEncoder { +public class RecentResponseEncoder implements ImapResponseEncoder<RecentResponse> { public static final String RECENT = "RECENT"; - public RecentResponseEncoder(ImapEncoder next) { - super(next); - } - @Override - public boolean isAcceptable(ImapMessage message) { - return (message instanceof RecentResponse); + public Class<RecentResponse> acceptableMessages() { + return RecentResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - final RecentResponse recentResponse = (RecentResponse) acceptableMessage; - final int numberFlaggedRecent = recentResponse.getNumberFlaggedRecent(); + public void encode(RecentResponse recentResponse, ImapResponseComposer composer, ImapSession session) throws IOException { + int numberFlaggedRecent = recentResponse.getNumberFlaggedRecent(); composer.untagged().message(numberFlaggedRecent).message(RECENT).end(); } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/SearchResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/SearchResponseEncoder.java index e5020f0..b91f3c3 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/SearchResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/SearchResponseEncoder.java @@ -21,24 +21,21 @@ package org.apache.james.imap.encode; import java.io.IOException; import org.apache.james.imap.api.ImapConstants; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.SearchResponse; import org.apache.james.mailbox.ModSeq; /** * Encoders IMAP4rev1 <code>SEARCH</code> responses. */ -public class SearchResponseEncoder extends AbstractChainedImapEncoder { - - public SearchResponseEncoder(ImapEncoder next) { - super(next); +public class SearchResponseEncoder implements ImapResponseEncoder<SearchResponse> { + @Override + public Class<SearchResponse> acceptableMessages() { + return SearchResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - SearchResponse response = (SearchResponse) acceptableMessage; + public void encode(SearchResponse response, ImapResponseComposer composer, ImapSession session) throws IOException { final long[] ids = response.getIds(); ModSeq highestModSeq = response.getHighestModSeq(); composer.untagged(); @@ -58,9 +55,4 @@ public class SearchResponseEncoder extends AbstractChainedImapEncoder { } composer.end(); } - - @Override - protected boolean isAcceptable(ImapMessage message) { - return (message instanceof SearchResponse); - } } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/StatusResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/StatusResponseEncoder.java index 7afafea..e811e5b 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/StatusResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/StatusResponseEncoder.java @@ -24,7 +24,6 @@ import java.util.ArrayList; import java.util.Collection; import org.apache.james.imap.api.ImapCommand; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.Tag; import org.apache.james.imap.api.display.HumanReadableText; import org.apache.james.imap.api.display.Locales; @@ -33,20 +32,22 @@ import org.apache.james.imap.api.message.response.StatusResponse; import org.apache.james.imap.api.message.response.StatusResponse.ResponseCode; import org.apache.james.imap.api.message.response.StatusResponse.Type; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; - -public class StatusResponseEncoder extends AbstractChainedImapEncoder { +import org.apache.james.imap.message.response.ImmutableStatusResponse; +public class StatusResponseEncoder implements ImapResponseEncoder<ImmutableStatusResponse> { private final Localizer localizer; - public StatusResponseEncoder(ImapEncoder next, Localizer localizer) { - super(next); + public StatusResponseEncoder(Localizer localizer) { this.localizer = localizer; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - StatusResponse response = (StatusResponse) acceptableMessage; + public Class<ImmutableStatusResponse> acceptableMessages() { + return ImmutableStatusResponse.class; + } + + @Override + public void encode(ImmutableStatusResponse response, ImapResponseComposer composer, ImapSession session) throws IOException { final Type serverResponseType = response.getServerResponseType(); final String type = asString(serverResponseType); final ResponseCode responseCode = response.getResponseCode(); @@ -127,10 +128,4 @@ public class StatusResponseEncoder extends AbstractChainedImapEncoder { } return result; } - - @Override - protected boolean isAcceptable(ImapMessage message) { - return (message instanceof StatusResponse); - } - } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/VanishedResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/VanishedResponseEncoder.java index d43e8f5..d17ba5b 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/VanishedResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/VanishedResponseEncoder.java @@ -20,35 +20,25 @@ package org.apache.james.imap.encode; import java.io.IOException; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; import org.apache.james.imap.message.response.VanishedResponse; -public class VanishedResponseEncoder extends AbstractChainedImapEncoder { - - public VanishedResponseEncoder(ImapEncoder next) { - super(next); - } - +public class VanishedResponseEncoder implements ImapResponseEncoder<VanishedResponse> { @Override - protected boolean isAcceptable(ImapMessage message) { - return message instanceof VanishedResponse; + public Class<VanishedResponse> acceptableMessages() { + return VanishedResponse.class; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - VanishedResponse vr = (VanishedResponse) acceptableMessage; + public void encode(VanishedResponse message, ImapResponseComposer composer, ImapSession session) throws IOException { composer.untagged(); composer.message("VANISHED"); - if (vr.isEarlier()) { + if (message.isEarlier()) { composer.openParen(); composer.message("EARLIER"); composer.closeParen(); } - composer.sequenceSet(vr.getUids()); + composer.sequenceSet(message.getUids()); composer.end(); - } - } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/XListResponseEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/XListResponseEncoder.java index 8ba977f..d24a9cf 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/XListResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/XListResponseEncoder.java @@ -21,29 +21,17 @@ package org.apache.james.imap.encode; import java.io.IOException; import org.apache.james.imap.api.ImapConstants; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.base.AbstractChainedImapEncoder; -import org.apache.james.imap.message.response.AbstractListingResponse; import org.apache.james.imap.message.response.XListResponse; -/** - * - */ -public class XListResponseEncoder extends AbstractChainedImapEncoder { - - public XListResponseEncoder(ImapEncoder next) { - super(next); - } - +public class XListResponseEncoder implements ImapResponseEncoder<XListResponse> { @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - final AbstractListingResponse response = (AbstractListingResponse) acceptableMessage; - ListingEncodingUtils.encodeListingResponse(ImapConstants.XLIST_RESPONSE_NAME, composer, response); + public Class<XListResponse> acceptableMessages() { + return XListResponse.class; } @Override - protected boolean isAcceptable(ImapMessage message) { - return (message instanceof XListResponse); + public void encode(XListResponse message, ImapResponseComposer composer, ImapSession session) throws IOException { + ListingEncodingUtils.encodeListingResponse(ImapConstants.XLIST_RESPONSE_NAME, composer, message); } } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/base/AbstractChainedImapEncoder.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/base/AbstractChainedImapEncoder.java deleted file mode 100644 index 1c454c7..0000000 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/base/AbstractChainedImapEncoder.java +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.imap.encode.base; - -import java.io.IOException; - -import org.apache.james.imap.api.ImapMessage; -import org.apache.james.imap.api.process.ImapSession; -import org.apache.james.imap.encode.ImapEncoder; -import org.apache.james.imap.encode.ImapResponseComposer; - -/** - * Abstract base class for chained {@link ImapEncoder} implementations. - * Implementations of this will check if the {@link ImapMessage} should get - * encoded by this Implementation or should get passed to the next - * {@link ImapEncoder} in the chain - */ -public abstract class AbstractChainedImapEncoder implements ImapEncoder { - - private final ImapEncoder next; - - public AbstractChainedImapEncoder(ImapEncoder next) { - super(); - this.next = next; - } - - /** - * Encode the {@link ImapMessage} if {@link #isAcceptable(ImapMessage)} - * return true, if not pass it to the next encoder in the chain - */ - @Override - public void encode(ImapMessage message, ImapResponseComposer composer, ImapSession session) throws IOException { - final boolean isAcceptable = isAcceptable(message); - if (isAcceptable) { - doEncode(message, composer, session); - } else { - chainEncode(message, composer, session); - } - } - - /** - * Call next Encoder in the chain - */ - protected void chainEncode(ImapMessage message, ImapResponseComposer composer, ImapSession session) throws IOException { - next.encode(message, composer, session); - } - - /** - * Is the given message acceptable? - * - * @param message - * <code>ImapMessage</code>, not null - * @return true if the given message is encodable by this encoder - */ - protected abstract boolean isAcceptable(ImapMessage message); - - /** - * Processes an acceptable message. Only messages passing - * {@link #isAcceptable(ImapMessage)} should be passed to this method. - * - * @param acceptableMessage - * <code>ImapMessage</code>, not null - * @param composer - * <code>ImapResponseComposer</code>, not null - * @param session - * TODO - */ - protected abstract void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException; -} diff --git a/protocols/imap/src/main/java/org/apache/james/imap/encode/main/DefaultImapEncoderFactory.java b/protocols/imap/src/main/java/org/apache/james/imap/encode/main/DefaultImapEncoderFactory.java index 974604f..1050ff7 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/main/DefaultImapEncoderFactory.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/encode/main/DefaultImapEncoderFactory.java @@ -19,7 +19,15 @@ package org.apache.james.imap.encode.main; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Stream; + +import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.display.Localizer; +import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.encode.ACLResponseEncoder; import org.apache.james.imap.encode.AnnotationResponseEncoder; import org.apache.james.imap.encode.AuthenticateResponseEncoder; @@ -33,6 +41,8 @@ import org.apache.james.imap.encode.FetchResponseEncoder; import org.apache.james.imap.encode.FlagsResponseEncoder; import org.apache.james.imap.encode.ImapEncoder; import org.apache.james.imap.encode.ImapEncoderFactory; +import org.apache.james.imap.encode.ImapResponseComposer; +import org.apache.james.imap.encode.ImapResponseEncoder; import org.apache.james.imap.encode.LSubResponseEncoder; import org.apache.james.imap.encode.ListResponseEncoder; import org.apache.james.imap.encode.ListRightsResponseEncoder; @@ -48,10 +58,36 @@ import org.apache.james.imap.encode.VanishedResponseEncoder; import org.apache.james.imap.encode.XListResponseEncoder; import org.apache.james.imap.encode.base.EndImapEncoder; +import com.github.steveash.guavate.Guavate; +import com.google.common.collect.ImmutableList; + /** * TODO: perhaps a POJO would be better */ public class DefaultImapEncoderFactory implements ImapEncoderFactory { + private static class DefaultImapEncoder implements ImapEncoder { + private final Map<Class<? extends ImapMessage>, ImapResponseEncoder> encoders; + private final EndImapEncoder endImapEncoder; + + private DefaultImapEncoder(Stream<ImapResponseEncoder> encoders, EndImapEncoder endImapEncoder) { + this.encoders = encoders + .collect(Guavate.toImmutableMap( + ImapResponseEncoder::acceptableMessages, + Function.identity())); + this.endImapEncoder = endImapEncoder; + } + + @Override + public void encode(ImapMessage message, ImapResponseComposer composer, ImapSession session) throws IOException { + ImapResponseEncoder imapResponseEncoder = encoders.get(message.getClass()); + + if (imapResponseEncoder != null) { + imapResponseEncoder.encode(message, composer, session); + } else { + endImapEncoder.encode(message, composer, session); + } + } + } /** * Builds the default encoder @@ -64,33 +100,32 @@ public class DefaultImapEncoderFactory implements ImapEncoderFactory { * @return not null */ public static final ImapEncoder createDefaultEncoder(Localizer localizer, boolean neverAddBodyStructureExtensions) { - final EndImapEncoder endImapEncoder = new EndImapEncoder(); - - final AnnotationResponseEncoder annotationResponseEncoder = new AnnotationResponseEncoder(endImapEncoder); - final MyRightsResponseEncoder myRightsResponseEncoder = new MyRightsResponseEncoder(annotationResponseEncoder); - final ListRightsResponseEncoder listRightsResponseEncoder = new ListRightsResponseEncoder(myRightsResponseEncoder); - final ACLResponseEncoder aclResponseEncoder = new ACLResponseEncoder(listRightsResponseEncoder); - final NamespaceResponseEncoder namespaceEncoder = new NamespaceResponseEncoder(aclResponseEncoder); - final StatusResponseEncoder statusResponseEncoder = new StatusResponseEncoder(namespaceEncoder, localizer); - final RecentResponseEncoder recentResponseEncoder = new RecentResponseEncoder(statusResponseEncoder); - final FetchResponseEncoder fetchResponseEncoder = new FetchResponseEncoder(recentResponseEncoder, neverAddBodyStructureExtensions); - final ExpungeResponseEncoder expungeResponseEncoder = new ExpungeResponseEncoder(fetchResponseEncoder); - final ExistsResponseEncoder existsResponseEncoder = new ExistsResponseEncoder(expungeResponseEncoder); - final MailboxStatusResponseEncoder statusCommandResponseEncoder = new MailboxStatusResponseEncoder(existsResponseEncoder); - final SearchResponseEncoder searchResponseEncoder = new SearchResponseEncoder(statusCommandResponseEncoder); - final LSubResponseEncoder lsubResponseEncoder = new LSubResponseEncoder(searchResponseEncoder); - final ListResponseEncoder listResponseEncoder = new ListResponseEncoder(lsubResponseEncoder); - final XListResponseEncoder xListResponseEncoder = new XListResponseEncoder(listResponseEncoder); - final FlagsResponseEncoder flagsResponseEncoder = new FlagsResponseEncoder(xListResponseEncoder); - final CapabilityResponseEncoder capabilityResponseEncoder = new CapabilityResponseEncoder(flagsResponseEncoder); - final EnableResponseEncoder enableResponseEncoder = new EnableResponseEncoder(capabilityResponseEncoder); - final ContinuationResponseEncoder continuationResponseEncoder = new ContinuationResponseEncoder(enableResponseEncoder, localizer); - final AuthenticateResponseEncoder authResponseEncoder = new AuthenticateResponseEncoder(continuationResponseEncoder); - final ESearchResponseEncoder esearchResponseEncoder = new ESearchResponseEncoder(authResponseEncoder); - final VanishedResponseEncoder vanishedResponseEncoder = new VanishedResponseEncoder(esearchResponseEncoder); - final QuotaResponseEncoder quotaResponseEncoder = new QuotaResponseEncoder(vanishedResponseEncoder); - final QuotaRootResponseEncoder quotaRootResponseEncoder = new QuotaRootResponseEncoder(quotaResponseEncoder); - return quotaRootResponseEncoder; + return new DefaultImapEncoder(Stream.of( + new AnnotationResponseEncoder(), + new MyRightsResponseEncoder(), + new ListRightsResponseEncoder(), + new ListResponseEncoder(), + new ACLResponseEncoder(), + new NamespaceResponseEncoder(), + new StatusResponseEncoder(localizer), + new RecentResponseEncoder(), + new FetchResponseEncoder(neverAddBodyStructureExtensions), + new ExpungeResponseEncoder(), + new ExistsResponseEncoder(), + new MailboxStatusResponseEncoder(), + new SearchResponseEncoder(), + new LSubResponseEncoder(), + new XListResponseEncoder(), + new FlagsResponseEncoder(), + new CapabilityResponseEncoder(), + new EnableResponseEncoder(), + new ContinuationResponseEncoder(localizer), + new AuthenticateResponseEncoder(), + new ESearchResponseEncoder(), + new VanishedResponseEncoder(), + new QuotaResponseEncoder(), + new QuotaRootResponseEncoder()), + new EndImapEncoder()); } private final Localizer localizer; @@ -110,7 +145,6 @@ public class DefaultImapEncoderFactory implements ImapEncoderFactory { * parse BODYSTRUCTURE extensions, false to fully support RFC3501 */ public DefaultImapEncoderFactory(Localizer localizer, boolean neverAddBodyStructureExtensions) { - super(); this.localizer = localizer; this.neverAddBodyStructureExtensions = neverAddBodyStructureExtensions; } diff --git a/protocols/imap/src/test/java/org/apache/james/imap/encode/AnnotationResponseEncoderTest.java b/protocols/imap/src/test/java/org/apache/james/imap/encode/AnnotationResponseEncoderTest.java index 3f7b4c8..c04074e 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/encode/AnnotationResponseEncoderTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/encode/AnnotationResponseEncoderTest.java @@ -24,7 +24,6 @@ import static org.mockito.Mockito.mock; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.encode.base.ByteImapResponseWriter; -import org.apache.james.imap.encode.base.EndImapEncoder; import org.apache.james.imap.encode.base.ImapResponseComposerImpl; import org.apache.james.imap.message.response.AnnotationResponse; import org.apache.james.mailbox.model.MailboxAnnotation; @@ -53,7 +52,7 @@ public class AnnotationResponseEncoderTest { imapSession = mock(ImapSession.class); composer = new ImapResponseComposerImpl(byteImapResponseWriter, 1024); - encoder = new AnnotationResponseEncoder(new EndImapEncoder()); + encoder = new AnnotationResponseEncoder(); } @Test diff --git a/protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderEnvelopeTest.java b/protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderEnvelopeTest.java index 54d035b..f48a61b 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderEnvelopeTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderEnvelopeTest.java @@ -51,9 +51,6 @@ public class FetchResponseEncoderEnvelopeTest { private static final int MSN = 100; - - private ImapEncoder mockNextEncoder; - private FetchResponseEncoder encoder; private FetchResponse message; @@ -100,8 +97,7 @@ public class FetchResponseEncoderEnvelopeTest { to = null; message = new FetchResponse(MSN, null, null, null, null, null, envelope, null, null, null); - mockNextEncoder = mock(ImapEncoder.class); - encoder = new FetchResponseEncoder(mockNextEncoder, false); + encoder = new FetchResponseEncoder(false); } private Address[] mockOneAddress() { @@ -144,7 +140,7 @@ public class FetchResponseEncoderEnvelopeTest { @Test public void testShouldNilAllNullProperties() throws Exception { envelopExpects(); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL))\r\n"); } @@ -155,7 +151,7 @@ public class FetchResponseEncoderEnvelopeTest { envelopExpects(); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (ENVELOPE (\"a date\" NIL NIL NIL NIL NIL NIL NIL NIL NIL))\r\n"); } @@ -165,7 +161,7 @@ public class FetchResponseEncoderEnvelopeTest { subject = "some subject"; envelopExpects(); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (ENVELOPE (NIL \"some subject\" NIL NIL NIL NIL NIL NIL NIL NIL))\r\n"); } @@ -175,7 +171,7 @@ public class FetchResponseEncoderEnvelopeTest { inReplyTo = "some reply to"; envelopExpects(); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL \"some reply to\" NIL))\r\n"); } @@ -184,7 +180,7 @@ public class FetchResponseEncoderEnvelopeTest { messageId = "some message id"; envelopExpects(); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL NIL NIL \"some message id\"))\r\n"); } @@ -193,7 +189,7 @@ public class FetchResponseEncoderEnvelopeTest { public void testShouldComposeOneFromAddress() throws Exception { from = mockOneAddress(); envelopExpects(); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (ENVELOPE (NIL NIL ((\"NAME\" \"DOMAIN LIST\" \"MAILBOX\" \"HOST\")) NIL NIL NIL NIL NIL NIL NIL))\r\n"); } @@ -203,7 +199,7 @@ public class FetchResponseEncoderEnvelopeTest { from = mockManyAddresses(); envelopExpects(); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (ENVELOPE (NIL NIL ((\"NAME\" \"DOMAIN LIST\" \"MAILBOX\" \"HOST\")(\"2NAME\" \"2DOMAIN LIST\" \"2MAILBOX\" \"2HOST\")) NIL NIL NIL NIL NIL NIL NIL))\r\n"); } @@ -213,7 +209,7 @@ public class FetchResponseEncoderEnvelopeTest { sender = mockOneAddress(); envelopExpects(); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (ENVELOPE (NIL NIL NIL ((\"NAME\" \"DOMAIN LIST\" \"MAILBOX\" \"HOST\")) NIL NIL NIL NIL NIL NIL))\r\n"); } @@ -223,7 +219,7 @@ public class FetchResponseEncoderEnvelopeTest { sender = mockManyAddresses(); envelopExpects(); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (ENVELOPE (NIL NIL NIL ((\"NAME\" \"DOMAIN LIST\" \"MAILBOX\" \"HOST\")(\"2NAME\" \"2DOMAIN LIST\" \"2MAILBOX\" \"2HOST\")) NIL NIL NIL NIL NIL NIL))\r\n"); } @@ -234,7 +230,7 @@ public class FetchResponseEncoderEnvelopeTest { replyTo = mockOneAddress(); envelopExpects(); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (ENVELOPE (NIL NIL NIL NIL ((\"NAME\" \"DOMAIN LIST\" \"MAILBOX\" \"HOST\")) NIL NIL NIL NIL NIL))\r\n"); } @@ -244,7 +240,7 @@ public class FetchResponseEncoderEnvelopeTest { replyTo = mockManyAddresses(); envelopExpects(); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (ENVELOPE (NIL NIL NIL NIL ((\"NAME\" \"DOMAIN LIST\" \"MAILBOX\" \"HOST\")(\"2NAME\" \"2DOMAIN LIST\" \"2MAILBOX\" \"2HOST\")) NIL NIL NIL NIL NIL))\r\n"); } @@ -254,7 +250,7 @@ public class FetchResponseEncoderEnvelopeTest { to = mockOneAddress(); envelopExpects(); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (ENVELOPE (NIL NIL NIL NIL NIL ((\"NAME\" \"DOMAIN LIST\" \"MAILBOX\" \"HOST\")) NIL NIL NIL NIL))\r\n"); } @@ -264,7 +260,7 @@ public class FetchResponseEncoderEnvelopeTest { to = mockManyAddresses(); envelopExpects(); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (ENVELOPE (NIL NIL NIL NIL NIL ((\"NAME\" \"DOMAIN LIST\" \"MAILBOX\" \"HOST\")(\"2NAME\" \"2DOMAIN LIST\" \"2MAILBOX\" \"2HOST\")) NIL NIL NIL NIL))\r\n"); } @@ -274,7 +270,7 @@ public class FetchResponseEncoderEnvelopeTest { cc = mockOneAddress(); envelopExpects(); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (ENVELOPE (NIL NIL NIL NIL NIL NIL ((\"NAME\" \"DOMAIN LIST\" \"MAILBOX\" \"HOST\")) NIL NIL NIL))\r\n"); } @@ -284,7 +280,7 @@ public class FetchResponseEncoderEnvelopeTest { cc = mockManyAddresses(); envelopExpects(); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (ENVELOPE (NIL NIL NIL NIL NIL NIL ((\"NAME\" \"DOMAIN LIST\" \"MAILBOX\" \"HOST\")(\"2NAME\" \"2DOMAIN LIST\" \"2MAILBOX\" \"2HOST\")) NIL NIL NIL))\r\n"); } @@ -294,7 +290,7 @@ public class FetchResponseEncoderEnvelopeTest { bcc = mockOneAddress(); envelopExpects(); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL ((\"NAME\" \"DOMAIN LIST\" \"MAILBOX\" \"HOST\")) NIL NIL))\r\n"); } @@ -304,7 +300,7 @@ public class FetchResponseEncoderEnvelopeTest { bcc = mockManyAddresses(); envelopExpects(); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (ENVELOPE (NIL NIL NIL NIL NIL NIL NIL ((\"NAME\" \"DOMAIN LIST\" \"MAILBOX\" \"HOST\")(\"2NAME\" \"2DOMAIN LIST\" \"2MAILBOX\" \"2HOST\")) NIL NIL))\r\n"); } diff --git a/protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderNoExtensionsTest.java b/protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderNoExtensionsTest.java index 356997b..1d687f4 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderNoExtensionsTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderNoExtensionsTest.java @@ -30,7 +30,6 @@ import java.util.Map; import javax.mail.Flags; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.encode.base.ByteImapResponseWriter; import org.apache.james.imap.encode.base.ImapResponseComposerImpl; import org.apache.james.imap.message.response.FetchResponse; @@ -49,29 +48,16 @@ public class FetchResponseEncoderNoExtensionsTest { @Before public void setUp() throws Exception { - mockNextEncoder = mock(ImapEncoder.class); - encoder = new FetchResponseEncoder(mockNextEncoder, true); + encoder = new FetchResponseEncoder(true); flags = new Flags(Flags.Flag.DELETED); stubStructure = mock(FetchResponse.Structure.class); } - - @Test - public void testShouldNotAcceptUnknownResponse() { - assertThat(encoder.isAcceptable(mock(ImapMessage.class))).isFalse(); - } - - @Test - public void testShouldAcceptFetchResponse() { - assertThat(encoder.isAcceptable(new FetchResponse(11, null, null, null, null, - null, null, null, null, null))).isTrue(); - } - @Test public void testShouldEncodeFlagsResponse() throws Exception { FetchResponse message = new FetchResponse(100, flags, null, null, null, null, null, null, null, null); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (FLAGS (\\Deleted))\r\n"); } @@ -79,7 +65,7 @@ public class FetchResponseEncoderNoExtensionsTest { public void testShouldEncodeUidResponse() throws Exception { FetchResponse message = new FetchResponse(100, null, MessageUid.of(72), null, null, null, null, null, null, null); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (UID 72)\r\n"); } @@ -88,7 +74,7 @@ public class FetchResponseEncoderNoExtensionsTest { public void testShouldEncodeAllResponse() throws Exception { FetchResponse message = new FetchResponse(100, flags, MessageUid.of(72), null, null, null, null, null, null, null); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (FLAGS (\\Deleted) UID 72)\r\n"); } @@ -113,7 +99,7 @@ public class FetchResponseEncoderNoExtensionsTest { when(stubStructure.getDescription()).thenReturn(""); final FakeImapSession fakeImapSession = new FakeImapSession(); - encoder.doEncode(message, composer, fakeImapSession); + encoder.encode(message, composer, fakeImapSession); assertThat(writer.getString()).isEqualTo("* 100 FETCH (FLAGS (\\Deleted) BODYSTRUCTURE (\"TEXT\" \"HTML\" (\"CHARSET\" \"US-ASCII\") \"\" \"\" \"7BIT\" 2279 48) UID 72)\r\n"); } diff --git a/protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderTest.java b/protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderTest.java index 1eee9c8..4d867db 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderTest.java @@ -20,11 +20,9 @@ package org.apache.james.imap.encode; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; import javax.mail.Flags; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.encode.base.ByteImapResponseWriter; import org.apache.james.imap.encode.base.ImapResponseComposerImpl; import org.apache.james.imap.message.response.FetchResponse; @@ -35,36 +33,25 @@ import org.junit.Test; public class FetchResponseEncoderTest { private ByteImapResponseWriter writer = new ByteImapResponseWriter(); private ImapResponseComposer composer = new ImapResponseComposerImpl(writer); - private Flags flags; - - private ImapEncoder mockNextEncoder; - private FetchResponseEncoder encoder; @Before public void setUp() throws Exception { - mockNextEncoder = mock(ImapEncoder.class); - encoder = new FetchResponseEncoder(mockNextEncoder, false); + encoder = new FetchResponseEncoder(false); flags = new Flags(Flags.Flag.DELETED); } @Test - public void testShouldNotAcceptUnknownResponse() { - assertThat(encoder.isAcceptable(mock(ImapMessage.class))).isFalse(); - } - - @Test public void testShouldAcceptFetchResponse() { - assertThat(encoder.isAcceptable(new FetchResponse(11, null, null, null, null, - null, null, null, null, null))).isTrue(); + assertThat(encoder.acceptableMessages()).isEqualTo(FetchResponse.class); } @Test public void testShouldEncodeFlagsResponse() throws Exception { FetchResponse message = new FetchResponse(100, flags, null, null, null, null, null, null, null, null); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (FLAGS (\\Deleted))\r\n"); @@ -74,7 +61,7 @@ public class FetchResponseEncoderTest { public void testShouldEncodeUidResponse() throws Exception { FetchResponse message = new FetchResponse(100, null, MessageUid.of(72), null, null, null, null, null, null, null); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (UID 72)\r\n"); @@ -84,7 +71,7 @@ public class FetchResponseEncoderTest { public void testShouldEncodeAllResponse() throws Exception { FetchResponse message = new FetchResponse(100, flags, MessageUid.of(72), null, null, null, null, null, null, null); - encoder.doEncode(message, composer, new FakeImapSession()); + encoder.encode(message, composer, new FakeImapSession()); assertThat(writer.getString()).isEqualTo("* 100 FETCH (FLAGS (\\Deleted) UID 72)\r\n"); } diff --git a/protocols/imap/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java b/protocols/imap/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java index b1a15aa..97ecead 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java @@ -20,14 +20,10 @@ package org.apache.james.imap.encode; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.encode.base.ByteImapResponseWriter; import org.apache.james.imap.encode.base.ImapResponseComposerImpl; import org.apache.james.imap.message.response.LSubResponse; -import org.apache.james.imap.message.response.ListResponse; -import org.apache.james.mailbox.model.MailboxMetaData; import org.junit.Before; import org.junit.Test; @@ -39,28 +35,12 @@ public class LSubResponseEncoderTest { @Before public void setUp() throws Exception { - encoder = new LSubResponseEncoder(mock(ImapEncoder.class)); + encoder = new LSubResponseEncoder(); } @Test - public void encoderShouldNotAcceptListResponse() { - assertThat(encoder.isAcceptable(new ListResponse(MailboxMetaData.Children.HAS_CHILDREN, MailboxMetaData.Selectability.NOSELECT, "name", '.'))) - .isFalse(); - } - - @Test - public void encoderShouldAcceptLsubResponse() { - assertThat(encoder.isAcceptable(new LSubResponse("name", true, '.'))).isTrue(); - } - - @Test - public void encoderShouldNotAcceptImapMessage() { - assertThat(encoder.isAcceptable(mock(ImapMessage.class))).isFalse(); - } - - @Test - public void encoderShouldNotAcceptNull() { - assertThat(encoder.isAcceptable(null)).isFalse(); + public void encoderShouldAcceptLSubResponse() { + assertThat(encoder.acceptableMessages()).isEqualTo(LSubResponse.class); } @Test diff --git a/protocols/imap/src/test/java/org/apache/james/imap/encode/ListResponseEncoderTest.java b/protocols/imap/src/test/java/org/apache/james/imap/encode/ListResponseEncoderTest.java index f7615b7..57e621b 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/encode/ListResponseEncoderTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/encode/ListResponseEncoderTest.java @@ -20,50 +20,27 @@ package org.apache.james.imap.encode; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.encode.base.ByteImapResponseWriter; import org.apache.james.imap.encode.base.ImapResponseComposerImpl; -import org.apache.james.imap.message.response.LSubResponse; import org.apache.james.imap.message.response.ListResponse; import org.apache.james.mailbox.model.MailboxMetaData; import org.junit.Before; import org.junit.Test; public class ListResponseEncoderTest { - private ListResponseEncoder encoder; - private ByteImapResponseWriter writer = new ByteImapResponseWriter(); private ImapResponseComposer composer = new ImapResponseComposerImpl(writer); @Before public void setUp() throws Exception { - encoder = new ListResponseEncoder(mock(ImapEncoder.class)); + encoder = new ListResponseEncoder(); } @Test public void encoderShouldAcceptListResponse() { - assertThat(encoder.isAcceptable(new ListResponse(MailboxMetaData.Children.HAS_CHILDREN, MailboxMetaData.Selectability.NONE, "name", '.'))) - .isTrue(); - } - - @Test - public void encoderShouldNotAcceptLsubResponse() { - assertThat(encoder.isAcceptable(new LSubResponse("name", true, '.'))).isFalse(); - assertThat(encoder.isAcceptable(mock(ImapMessage.class))).isFalse(); - assertThat(encoder.isAcceptable(null)).isFalse(); - } - - @Test - public void encoderShouldNotAcceptImapMessage() { - assertThat(encoder.isAcceptable(mock(ImapMessage.class))).isFalse(); - } - - @Test - public void encoderShouldNotAcceptNull() { - assertThat(encoder.isAcceptable(null)).isFalse(); + assertThat(encoder.acceptableMessages()).isEqualTo(ListResponse.class); } @Test diff --git a/protocols/imap/src/test/java/org/apache/james/imap/encode/MailboxStatusResponseEncoderTest.java b/protocols/imap/src/test/java/org/apache/james/imap/encode/MailboxStatusResponseEncoderTest.java index 35f06da..af6d0cb 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/encode/MailboxStatusResponseEncoderTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/encode/MailboxStatusResponseEncoderTest.java @@ -20,9 +20,7 @@ package org.apache.james.imap.encode; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.encode.base.ByteImapResponseWriter; import org.apache.james.imap.encode.base.ImapResponseComposerImpl; import org.apache.james.imap.message.response.MailboxStatusResponse; @@ -34,23 +32,17 @@ public class MailboxStatusResponseEncoderTest { MailboxStatusResponseEncoder encoder; - ImapEncoder mockNextEncoder; - ByteImapResponseWriter writer = new ByteImapResponseWriter(); ImapResponseComposer composer = new ImapResponseComposerImpl(writer); @Before public void setUp() throws Exception { - mockNextEncoder = mock(ImapEncoder.class); - encoder = new MailboxStatusResponseEncoder(mockNextEncoder); + encoder = new MailboxStatusResponseEncoder(); } @Test - public void testIsAcceptable() { - assertThat(encoder.isAcceptable(new MailboxStatusResponse(null, null, null, - null, null, null, "mailbox"))).isTrue(); - assertThat(encoder.isAcceptable(mock(ImapMessage.class))).isFalse(); - assertThat(encoder.isAcceptable(null)).isFalse(); + public void acceptableMessagesShouldReturnMailboxStatusResponseClass() { + assertThat(encoder.acceptableMessages()).isEqualTo(MailboxStatusResponse.class); } @Test diff --git a/protocols/imap/src/test/java/org/apache/james/imap/encode/NamespaceResponseEncoderTest.java b/protocols/imap/src/test/java/org/apache/james/imap/encode/NamespaceResponseEncoderTest.java index 0226d68..6a79a05 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/encode/NamespaceResponseEncoderTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/encode/NamespaceResponseEncoderTest.java @@ -26,7 +26,6 @@ import java.util.ArrayList; import java.util.List; import org.apache.james.imap.api.ImapConstants; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.message.response.NamespaceResponse; import org.junit.Before; @@ -35,18 +34,14 @@ import org.mockito.InOrder; import org.mockito.Mockito; public class NamespaceResponseEncoderTest { - ImapSession dummySession; - ImapResponseComposer mockComposer; - NamespaceResponseEncoder subject; @Before public void setUp() throws Exception { dummySession = new FakeImapSession(); - final ImapEncoder stubNextEncoderInChain = mock(ImapEncoder.class); - subject = new NamespaceResponseEncoder(stubNextEncoderInChain); + subject = new NamespaceResponseEncoder(); mockComposer = mock(ImapResponseComposer.class); } @@ -59,7 +54,7 @@ public class NamespaceResponseEncoderTest { List<NamespaceResponse.Namespace> namespaces = new ArrayList<>(); namespaces.add(new NamespaceResponse.Namespace(aPrefix, aDeliminator .charAt(0))); - subject.doEncode(new NamespaceResponse(null, null, namespaces), + subject.encode(new NamespaceResponse(null, null, namespaces), mockComposer, dummySession); InOrder inOrder = Mockito.inOrder(mockComposer); @@ -82,7 +77,7 @@ public class NamespaceResponseEncoderTest { List<NamespaceResponse.Namespace> namespaces = new ArrayList<>(); namespaces.add(new NamespaceResponse.Namespace(aPrefix, aDeliminator .charAt(0))); - subject.doEncode(new NamespaceResponse(null, namespaces, null), + subject.encode(new NamespaceResponse(null, namespaces, null), mockComposer, dummySession); InOrder inOrder = Mockito.inOrder(mockComposer); @@ -106,7 +101,7 @@ public class NamespaceResponseEncoderTest { List<NamespaceResponse.Namespace> namespaces = new ArrayList<>(); namespaces.add(new NamespaceResponse.Namespace(aPrefix, aDeliminator .charAt(0))); - subject.doEncode(new NamespaceResponse(namespaces, null, null), + subject.encode(new NamespaceResponse(namespaces, null, null), mockComposer, dummySession); InOrder inOrder = Mockito.inOrder(mockComposer); @@ -133,7 +128,7 @@ public class NamespaceResponseEncoderTest { .charAt(0))); namespaces.add(new NamespaceResponse.Namespace(anotherPrefix, anotherDeliminator.charAt(0))); - subject.doEncode(new NamespaceResponse(namespaces, null, null), + subject.encode(new NamespaceResponse(namespaces, null, null), mockComposer, dummySession); InOrder inOrder = Mockito.inOrder(mockComposer); @@ -154,7 +149,7 @@ public class NamespaceResponseEncoderTest { @Test public void testAllNullShouldWriteAllNIL() throws Exception { - subject.doEncode(new NamespaceResponse(null, null, null), mockComposer, + subject.encode(new NamespaceResponse(null, null, null), mockComposer, dummySession); InOrder inOrder = Mockito.inOrder(mockComposer); @@ -166,9 +161,7 @@ public class NamespaceResponseEncoderTest { @Test public void testNamespaceResponseIsAcceptable() { - assertThat(subject.isAcceptable(mock(ImapMessage.class))).isFalse(); - assertThat(subject - .isAcceptable(new NamespaceResponse(null, null, null))).isTrue(); + assertThat(subject.acceptableMessages()).isEqualTo(NamespaceResponse.class); } } diff --git a/protocols/imap/src/test/java/org/apache/james/imap/encode/QuotaResponseEncoderTest.java b/protocols/imap/src/test/java/org/apache/james/imap/encode/QuotaResponseEncoderTest.java index a4518c5..a946324 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/encode/QuotaResponseEncoderTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/encode/QuotaResponseEncoderTest.java @@ -26,7 +26,6 @@ import org.apache.james.core.quota.QuotaCountUsage; import org.apache.james.core.quota.QuotaSizeLimit; import org.apache.james.core.quota.QuotaSizeUsage; import org.apache.james.imap.encode.base.ByteImapResponseWriter; -import org.apache.james.imap.encode.base.EndImapEncoder; import org.apache.james.imap.encode.base.ImapResponseComposerImpl; import org.apache.james.imap.message.response.QuotaResponse; import org.apache.james.mailbox.model.Quota; @@ -43,7 +42,7 @@ public class QuotaResponseEncoderTest { Quota.<QuotaCountLimit, QuotaCountUsage>builder().used(QuotaCountUsage.count(231)).computedLimit(QuotaCountLimit.count(1024)).build()); ByteImapResponseWriter byteImapResponseWriter = new ByteImapResponseWriter(); ImapResponseComposer composer = new ImapResponseComposerImpl(byteImapResponseWriter, 1024); - QuotaResponseEncoder encoder = new QuotaResponseEncoder(new EndImapEncoder()); + QuotaResponseEncoder encoder = new QuotaResponseEncoder(); encoder.encode(response, composer, null); String responseString = byteImapResponseWriter.getString(); assertThat(responseString).isEqualTo("* QUOTA root (MESSAGE 231 1024)\r\n"); @@ -55,7 +54,7 @@ public class QuotaResponseEncoderTest { Quota.<QuotaSizeLimit, QuotaSizeUsage>builder().used(QuotaSizeUsage.size(231 * 1024)).computedLimit(QuotaSizeLimit.size(1024 * 1024)).build()); ByteImapResponseWriter byteImapResponseWriter = new ByteImapResponseWriter(); ImapResponseComposer composer = new ImapResponseComposerImpl(byteImapResponseWriter, 1024); - QuotaResponseEncoder encoder = new QuotaResponseEncoder(new EndImapEncoder()); + QuotaResponseEncoder encoder = new QuotaResponseEncoder(); encoder.encode(response, composer, null); String responseString = byteImapResponseWriter.getString(); assertThat(responseString).isEqualTo("* QUOTA root (STORAGE 231 1024)\r\n"); diff --git a/protocols/imap/src/test/java/org/apache/james/imap/encode/QuotaRootResponseEncoderTest.java b/protocols/imap/src/test/java/org/apache/james/imap/encode/QuotaRootResponseEncoderTest.java index a61190e..a95d0a0 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/encode/QuotaRootResponseEncoderTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/encode/QuotaRootResponseEncoderTest.java @@ -22,7 +22,6 @@ package org.apache.james.imap.encode; import static org.assertj.core.api.Assertions.assertThat; import org.apache.james.imap.encode.base.ByteImapResponseWriter; -import org.apache.james.imap.encode.base.EndImapEncoder; import org.apache.james.imap.encode.base.ImapResponseComposerImpl; import org.apache.james.imap.message.response.QuotaRootResponse; import org.junit.Test; @@ -37,7 +36,7 @@ public class QuotaRootResponseEncoderTest { QuotaRootResponse response = new QuotaRootResponse("INBOX", "root"); ByteImapResponseWriter byteImapResponseWriter = new ByteImapResponseWriter(); ImapResponseComposer composer = new ImapResponseComposerImpl(byteImapResponseWriter, 1024); - QuotaRootResponseEncoder encoder = new QuotaRootResponseEncoder(new EndImapEncoder()); + QuotaRootResponseEncoder encoder = new QuotaRootResponseEncoder(); encoder.encode(response, composer, null); String responseString = byteImapResponseWriter.getString(); assertThat(responseString).isEqualTo("* QUOTAROOT \"INBOX\" root\r\n"); diff --git a/protocols/imap/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java b/protocols/imap/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java index 10b83af..baa0b07 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java @@ -20,12 +20,9 @@ package org.apache.james.imap.encode; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.encode.base.ByteImapResponseWriter; import org.apache.james.imap.encode.base.ImapResponseComposerImpl; -import org.apache.james.imap.message.response.LSubResponse; import org.apache.james.imap.message.response.SearchResponse; import org.junit.Before; import org.junit.Test; @@ -35,27 +32,19 @@ public class SearchResponseEncoderTest { private static final long[] IDS = { 1, 4, 9, 16 }; private SearchResponse response; - private SearchResponseEncoder encoder; - - private ImapEncoder mockNextEncoder; - private ByteImapResponseWriter writer = new ByteImapResponseWriter(); private ImapResponseComposer composer = new ImapResponseComposerImpl(writer); @Before public void setUp() throws Exception { - mockNextEncoder = mock(ImapEncoder.class); response = new SearchResponse(IDS, null); - encoder = new SearchResponseEncoder(mockNextEncoder); + encoder = new SearchResponseEncoder(); } @Test - public void testIsAcceptable() { - assertThat(encoder.isAcceptable(response)).isTrue(); - assertThat(encoder.isAcceptable(new LSubResponse("name", true, '.'))).isFalse(); - assertThat(encoder.isAcceptable(mock(ImapMessage.class))).isFalse(); - assertThat(encoder.isAcceptable(null)).isFalse(); + public void acceptableMessagesShouldReturnSearchResponseClass() { + assertThat(encoder.acceptableMessages()).isEqualTo(SearchResponse.class); } @Test diff --git a/protocols/imap/src/test/java/org/apache/james/imap/encode/XListResponseEncoderTest.java b/protocols/imap/src/test/java/org/apache/james/imap/encode/XListResponseEncoderTest.java index d7280e7..43d5dd3 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/encode/XListResponseEncoderTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/encode/XListResponseEncoderTest.java @@ -20,13 +20,10 @@ package org.apache.james.imap.encode; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.process.MailboxType; import org.apache.james.imap.encode.base.ByteImapResponseWriter; import org.apache.james.imap.encode.base.ImapResponseComposerImpl; -import org.apache.james.imap.message.response.LSubResponse; import org.apache.james.imap.message.response.XListResponse; import org.apache.james.mailbox.model.MailboxMetaData; import org.junit.Before; @@ -41,36 +38,12 @@ public class XListResponseEncoderTest { @Before public void setUp() throws Exception { - encoder = new XListResponseEncoder(mock(ImapEncoder.class)); + encoder = new XListResponseEncoder(); } @Test public void encoderShouldAcceptXListResponse() { - assertThat(encoder.isAcceptable( - new XListResponse( - MailboxMetaData.Children.HAS_CHILDREN, - MailboxMetaData.Selectability.NONE, - "name", - '.', - MailboxType.INBOX))) - .isTrue(); - } - - @Test - public void encoderShouldNotAcceptLsubResponse() { - assertThat(encoder.isAcceptable(new LSubResponse("name", true, '.'))).isFalse(); - assertThat(encoder.isAcceptable(mock(ImapMessage.class))).isFalse(); - assertThat(encoder.isAcceptable(null)).isFalse(); - } - - @Test - public void encoderShouldNotAcceptImapMessage() { - assertThat(encoder.isAcceptable(mock(ImapMessage.class))).isFalse(); - } - - @Test - public void encoderShouldNotAcceptNull() { - assertThat(encoder.isAcceptable(null)).isFalse(); + assertThat(encoder.acceptableMessages()).isEqualTo(XListResponse.class); } @Test --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
