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 7c5c8835fc5f4e057cd2f5c1219e89515c2b8e91 Author: Benoit Tellier <btell...@linagora.com> AuthorDate: Wed Dec 11 09:39:48 2019 +0700 [Refactoring] Strong typing for IMAP capabilities --- .../apache/james/imap/api/ImapConfiguration.java | 10 ++-- .../org/apache/james/imap/api/ImapConstants.java | 42 +++++++++------ .../message/Capability.java} | 62 +++++++++++++--------- .../parser/AbstractSelectionCommandParser.java | 7 +-- .../imap/decode/parser/EnableCommandParser.java | 10 ++-- .../imap/encode/CapabilityResponseEncoder.java | 5 +- .../james/imap/encode/EnableResponseEncoder.java | 7 +-- .../james/imap/message/request/EnableRequest.java | 7 +-- .../imap/message/response/CapabilityResponse.java | 8 +-- .../imap/message/response/EnableResponse.java | 4 +- .../imap/processor/AbstractMailboxProcessor.java | 3 +- .../imap/processor/AbstractSelectionProcessor.java | 13 ++--- .../imap/processor/AuthenticateProcessor.java | 9 ++-- .../processor/CapabilityImplementingProcessor.java | 3 +- .../james/imap/processor/CapabilityProcessor.java | 15 +++--- .../james/imap/processor/CompressProcessor.java | 5 +- .../james/imap/processor/DeleteACLProcessor.java | 5 +- .../james/imap/processor/EnableProcessor.java | 19 +++---- .../james/imap/processor/ExpungeProcessor.java | 7 ++- .../james/imap/processor/GetACLProcessor.java | 5 +- .../imap/processor/GetAnnotationProcessor.java | 3 +- .../james/imap/processor/GetQuotaProcessor.java | 5 +- .../imap/processor/GetQuotaRootProcessor.java | 5 +- .../apache/james/imap/processor/IdleProcessor.java | 5 +- .../james/imap/processor/ListRightsProcessor.java | 5 +- .../james/imap/processor/LoginProcessor.java | 5 +- .../apache/james/imap/processor/MoveProcessor.java | 5 +- .../james/imap/processor/MyRightsProcessor.java | 5 +- .../james/imap/processor/NamespaceProcessor.java | 10 ++-- .../processor/PermitEnableCapabilityProcessor.java | 5 +- .../james/imap/processor/SearchProcessor.java | 5 +- .../james/imap/processor/SetACLProcessor.java | 8 +-- .../imap/processor/SetAnnotationProcessor.java | 3 +- .../james/imap/processor/SetQuotaProcessor.java | 16 +++--- .../james/imap/processor/StartTLSProcessor.java | 5 +- .../james/imap/processor/StoreProcessor.java | 3 +- .../james/imap/processor/UnselectProcessor.java | 12 +++-- .../james/imap/processor/XListProcessor.java | 5 +- .../james/imap/api/ImapConfigurationTest.java | 11 ++-- .../james/imap/api/message/CapabilityTest.java} | 46 +++++++++------- .../imap/processor/CapabilityProcessorTest.java | 5 +- .../james/imap/processor/MoveProcessorTest.java | 2 +- 42 files changed, 244 insertions(+), 176 deletions(-) diff --git a/protocols/imap/src/main/java/org/apache/james/imap/api/ImapConfiguration.java b/protocols/imap/src/main/java/org/apache/james/imap/api/ImapConfiguration.java index 6b3e81e..2bd613e 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/api/ImapConfiguration.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/api/ImapConfiguration.java @@ -23,6 +23,7 @@ import java.util.Optional; import java.util.concurrent.TimeUnit; import org.apache.commons.lang3.StringUtils; +import org.apache.james.imap.api.message.Capability; import com.github.steveash.guavate.Guavate; import com.google.common.base.MoreObjects; @@ -97,9 +98,10 @@ public class ImapConfiguration { } public ImapConfiguration build() { - ImmutableSet<String> normalizeDisableCaps = disabledCaps.stream() + ImmutableSet<Capability> normalizeDisableCaps = disabledCaps.stream() .filter(Builder::noBlankString) .map(StringUtils::normalizeSpace) + .map(Capability::of) .collect(Guavate.toImmutableSet()); return new ImapConfiguration( enableIdle.orElse(DEFAULT_ENABLE_IDLE), @@ -112,11 +114,11 @@ public class ImapConfiguration { private final long idleTimeInterval; private final TimeUnit idleTimeIntervalUnit; - private final ImmutableSet<String> disabledCaps; + private final ImmutableSet<Capability> disabledCaps; private final boolean enableIdle; private final boolean isCondstoreEnable; - private ImapConfiguration(boolean enableIdle, long idleTimeInterval, TimeUnit idleTimeIntervalUnit, ImmutableSet<String> disabledCaps, boolean isCondstoreEnable) { + private ImapConfiguration(boolean enableIdle, long idleTimeInterval, TimeUnit idleTimeIntervalUnit, ImmutableSet<Capability> disabledCaps, boolean isCondstoreEnable) { this.enableIdle = enableIdle; this.idleTimeInterval = idleTimeInterval; this.idleTimeIntervalUnit = idleTimeIntervalUnit; @@ -132,7 +134,7 @@ public class ImapConfiguration { return idleTimeIntervalUnit; } - public ImmutableSet<String> getDisabledCaps() { + public ImmutableSet<Capability> getDisabledCaps() { return disabledCaps; } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/api/ImapConstants.java b/protocols/imap/src/main/java/org/apache/james/imap/api/ImapConstants.java index 0d9ef2f..17162f3 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/api/ImapConstants.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/api/ImapConstants.java @@ -19,6 +19,8 @@ package org.apache.james.imap.api; +import org.apache.james.imap.api.message.Capability; + public interface ImapConstants { // Basic response types String OK = "OK"; @@ -81,33 +83,41 @@ public interface ImapConstants { String VERSION = "IMAP4rev1"; - String SUPPORTS_LITERAL_PLUS = "LITERAL+"; + Capability BASIC_CAPABILITIES = Capability.of(VERSION); + + Capability SUPPORTS_LITERAL_PLUS = Capability.of("LITERAL+"); - String SUPPORTS_RFC3348 = "CHILDREN"; + Capability SUPPORTS_RFC3348 = Capability.of("CHILDREN"); String UTF8 = "UTF-8"; - - String SUPPORTS_I18NLEVEL_1 = "I18NLEVEL=1"; - String SUPPORTS_NAMESPACES = "NAMESPACE"; + Capability SUPPORTS_I18NLEVEL_1 = Capability.of("I18NLEVEL=1"); - String SUPPORTS_STARTTLS = "STARTTLS"; + Capability SUPPORTS_NAMESPACES = Capability.of("NAMESPACE"); - String SUPPORTS_IDLE = "IDLE"; + Capability SUPPORTS_STARTTLS = Capability.of("STARTTLS"); - String SUPPORTS_XLIST = "XLIST"; + Capability SUPPORTS_IDLE = Capability.of("IDLE"); - String SUPPORTS_ENABLE = "ENABLE"; - - String SUPPORTS_CONDSTORE = "CONDSTORE"; - - String SUPPORTS_QRESYNC = "QRESYNC"; + Capability SUPPORTS_XLIST = Capability.of("XLIST"); + + Capability SUPPORTS_ENABLE = Capability.of("ENABLE"); + + Capability SUPPORTS_CONDSTORE = Capability.of("CONDSTORE"); + + Capability SUPPORTS_UNSELECT = Capability.of("UNSELECT"); + + Capability SUPPORTS_QRESYNC = Capability.of("QRESYNC"); + + Capability SUPPORTS_ACL = Capability.of("ACL"); + + Capability SUPPORTS_QUOTA = Capability.of("QUOTA"); - String SUPPORTS_ACL = "ACL"; + Capability SUPPORTS_MOVE = Capability.of("MOVE"); - String SUPPORTS_QUOTA = "QUOTA"; + Capability SUPPORTS_UIDPLUS = Capability.of("UIDPLUS"); - String SUPPORTS_ANNOTATION = "ANNOTATION"; + Capability SUPPORTS_ANNOTATION = Capability.of("ANNOTATION"); String INBOX_NAME = "INBOX"; 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/api/message/Capability.java similarity index 52% copy from protocols/imap/src/main/java/org/apache/james/imap/encode/EnableResponseEncoder.java copy to protocols/imap/src/main/java/org/apache/james/imap/api/message/Capability.java index 09e52f8..0b10c02 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/encode/EnableResponseEncoder.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/api/message/Capability.java @@ -16,40 +16,52 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ -package org.apache.james.imap.encode; -import java.io.IOException; -import java.util.Set; +package org.apache.james.imap.api.message; -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.EnableResponse; +import java.util.Locale; +import java.util.Objects; -/** - * Encodes <code>Enable</code> response. - */ -public class EnableResponseEncoder extends AbstractChainedImapEncoder { +import com.google.common.base.MoreObjects; +import com.google.common.base.Preconditions; - public EnableResponseEncoder(ImapEncoder next) { - super(next); +public class Capability { + public static Capability of(String value) { + Preconditions.checkNotNull(value, "'value' can not be null"); + Preconditions.checkArgument(!value.isEmpty(), "'value' can not be empty"); + + return new Capability(value.toUpperCase(Locale.US)); + } + + private final String value; + + private Capability(String value) { + this.value = value; + } + + public String asString() { + return value; } @Override - protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { - final EnableResponse response = (EnableResponse) acceptableMessage; - Set<String> capabilities = response.getCapabilities(); - composer.untagged(); - // Return ENABLED capabilities. See IMAP-323 - composer.message("ENABLED"); - for (String capability : capabilities) { - composer.message(capability); + public final boolean equals(Object o) { + if (o instanceof Capability) { + Capability that = (Capability) o; + + return Objects.equals(this.value, that.value); } - composer.end(); + return false; } - + + @Override + public final int hashCode() { + return Objects.hash(value); + } + @Override - protected boolean isAcceptable(ImapMessage message) { - return (message instanceof EnableResponse); + public String toString() { + return MoreObjects.toStringHelper(this) + .add("value", value) + .toString(); } } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AbstractSelectionCommandParser.java b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AbstractSelectionCommandParser.java index 4376179..4224e5a 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AbstractSelectionCommandParser.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AbstractSelectionCommandParser.java @@ -34,16 +34,13 @@ import org.apache.james.imap.message.request.AbstractMailboxSelectionRequest; import org.apache.james.mailbox.MessageUid; public abstract class AbstractSelectionCommandParser extends AbstractImapCommandParser { - private static final byte[] CONDSTORE = ImapConstants.SUPPORTS_CONDSTORE.getBytes(); - private static final byte[] QRESYNC = ImapConstants.SUPPORTS_QRESYNC.getBytes(); + private static final byte[] CONDSTORE = ImapConstants.SUPPORTS_CONDSTORE.asString().getBytes(); + private static final byte[] QRESYNC = ImapConstants.SUPPORTS_QRESYNC.asString().getBytes(); public AbstractSelectionCommandParser(ImapCommand command) { super(command); } - - - @Override protected ImapMessage decode(ImapCommand command, ImapRequestLineReader request, Tag tag, ImapSession session) throws DecodingException { final String mailboxName = request.mailbox(); diff --git a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/EnableCommandParser.java b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/EnableCommandParser.java index b4a9880..256713a 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/EnableCommandParser.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/decode/parser/EnableCommandParser.java @@ -20,12 +20,12 @@ package org.apache.james.imap.decode.parser; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.Tag; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.process.ImapSession; import org.apache.james.imap.decode.DecodingException; import org.apache.james.imap.decode.ImapRequestLineReader; @@ -40,13 +40,11 @@ public class EnableCommandParser extends AbstractImapCommandParser { @Override protected ImapMessage decode(ImapCommand command, ImapRequestLineReader request, Tag tag, ImapSession session) throws DecodingException { - List<String> caps = new ArrayList<>(); - String cap = request.astring(); - caps.add(cap.toUpperCase(Locale.US)); + List<Capability> caps = new ArrayList<>(); + caps.add(Capability.of(request.astring())); while (request.nextChar() == ' ') { request.consume(); - cap = request.astring(); - caps.add(cap.toUpperCase(Locale.US)); + caps.add(Capability.of(request.astring())); } request.eol(); return new EnableRequest(tag, command, caps); 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 df7f96c..90eee64 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 @@ -23,6 +23,7 @@ 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; @@ -41,11 +42,11 @@ public class CapabilityResponseEncoder extends AbstractChainedImapEncoder { @Override protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { final CapabilityResponse response = (CapabilityResponse) acceptableMessage; - Iterator<String> capabilities = response.getCapabilities().iterator(); + Iterator<Capability> capabilities = response.getCapabilities().iterator(); composer.untagged(); composer.message(ImapConstants.CAPABILITY_COMMAND_NAME); while (capabilities.hasNext()) { - composer.message(capabilities.next()); + composer.message(capabilities.next().asString()); } composer.end(); } 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 09e52f8..d9ca32f 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 @@ -22,6 +22,7 @@ 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; @@ -38,12 +39,12 @@ public class EnableResponseEncoder extends AbstractChainedImapEncoder { @Override protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException { final EnableResponse response = (EnableResponse) acceptableMessage; - Set<String> capabilities = response.getCapabilities(); + Set<Capability> capabilities = response.getCapabilities(); composer.untagged(); // Return ENABLED capabilities. See IMAP-323 composer.message("ENABLED"); - for (String capability : capabilities) { - composer.message(capability); + for (Capability capability : capabilities) { + composer.message(capability.asString()); } composer.end(); } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/message/request/EnableRequest.java b/protocols/imap/src/main/java/org/apache/james/imap/message/request/EnableRequest.java index e285d27..d05be83 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/message/request/EnableRequest.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/message/request/EnableRequest.java @@ -22,12 +22,13 @@ import java.util.List; import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.Tag; +import org.apache.james.imap.api.message.Capability; public class EnableRequest extends AbstractImapRequest { - private final List<String> capabilities; + private final List<Capability> capabilities; - public EnableRequest(Tag tag, ImapCommand command, List<String> capabilities) { + public EnableRequest(Tag tag, ImapCommand command, List<Capability> capabilities) { super(tag, command); this.capabilities = capabilities; } @@ -37,7 +38,7 @@ public class EnableRequest extends AbstractImapRequest { * * @return caps */ - public List<String> getCapabilities() { + public List<Capability> getCapabilities() { return capabilities; } } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/message/response/CapabilityResponse.java b/protocols/imap/src/main/java/org/apache/james/imap/message/response/CapabilityResponse.java index cf933fa..3da1b76 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/message/response/CapabilityResponse.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/message/response/CapabilityResponse.java @@ -20,6 +20,7 @@ package org.apache.james.imap.message.response; import java.util.Set; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.ImapResponseMessage; /** @@ -29,7 +30,7 @@ import org.apache.james.imap.api.message.response.ImapResponseMessage; */ public class CapabilityResponse implements ImapResponseMessage { - private final Set<String> capabilities; + private final Set<Capability> capabilities; /** * Constructs a response based on the given capabilities. @@ -37,8 +38,7 @@ public class CapabilityResponse implements ImapResponseMessage { * @param capabilities * not null */ - public CapabilityResponse(Set<String> capabilities) { - super(); + public CapabilityResponse(Set<Capability> capabilities) { this.capabilities = capabilities; } @@ -47,7 +47,7 @@ public class CapabilityResponse implements ImapResponseMessage { * * @return not null */ - public Set<String> getCapabilities() { + public Set<Capability> getCapabilities() { return capabilities; } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/message/response/EnableResponse.java b/protocols/imap/src/main/java/org/apache/james/imap/message/response/EnableResponse.java index d3dd4ac..ac0b715 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/message/response/EnableResponse.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/message/response/EnableResponse.java @@ -20,9 +20,11 @@ package org.apache.james.imap.message.response; import java.util.Set; +import org.apache.james.imap.api.message.Capability; + public class EnableResponse extends CapabilityResponse { - public EnableResponse(Set<String> capabilities) { + public EnableResponse(Set<Capability> capabilities) { super(capabilities); } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java index 7eff975..5380767 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java @@ -30,6 +30,7 @@ import javax.mail.Flags; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.UidRange; import org.apache.james.imap.api.message.request.ImapRequest; @@ -278,7 +279,7 @@ public abstract class AbstractMailboxProcessor<R extends ImapRequest> extends Ab } protected void condstoreEnablingCommand(ImapSession session, Responder responder, MetaData metaData, boolean sendHighestModSeq) { - Set<String> enabled = EnableProcessor.getEnabledCapabilities(session); + Set<Capability> enabled = EnableProcessor.getEnabledCapabilities(session); if (!enabled.contains(ImapConstants.SUPPORTS_CONDSTORE)) { if (sendHighestModSeq) { if (metaData.isModSeqPermanent()) { diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java index a532b9e..e7a1184 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java @@ -25,6 +25,7 @@ import java.util.List; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.ImapMessage; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.UidRange; import org.apache.james.imap.api.message.request.ImapRequest; @@ -61,7 +62,7 @@ import com.google.common.collect.ImmutableList; abstract class AbstractSelectionProcessor<R extends AbstractMailboxSelectionRequest> extends AbstractMailboxProcessor<R> implements PermitEnableCapabilityProcessor { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractSelectionProcessor.class); - private static final List<String> CAPS = ImmutableList.of(ImapConstants.SUPPORTS_QRESYNC, ImapConstants.SUPPORTS_CONDSTORE); + private static final List<Capability> CAPS = ImmutableList.of(ImapConstants.SUPPORTS_QRESYNC, ImapConstants.SUPPORTS_CONDSTORE); private final StatusResponseFactory statusResponseFactory; private final boolean openReadOnly; @@ -418,17 +419,17 @@ abstract class AbstractSelectionProcessor<R extends AbstractMailboxSelectionRequ } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { return CAPS; } @Override - public List<String> getPermitEnableCapabilities(ImapSession session) { + public List<Capability> getPermitEnableCapabilities(ImapSession session) { return CAPS; } @Override - public void enable(ImapMessage message, Responder responder, ImapSession session, String capability) throws EnableException { + public void enable(ImapMessage message, Responder responder, ImapSession session, Capability capability) throws EnableException { if (EnableProcessor.getEnabledCapabilities(session).contains(capability) == false) { SelectedMailbox sm = session.getSelected(); @@ -436,7 +437,7 @@ abstract class AbstractSelectionProcessor<R extends AbstractMailboxSelectionRequ // QRESYNC or CONDSTORE // // See http://www.dovecot.org/list/dovecot/2008-March/029561.html - if (capability.equalsIgnoreCase(ImapConstants.SUPPORTS_CONDSTORE) || capability.equalsIgnoreCase(ImapConstants.SUPPORTS_QRESYNC)) { + if (capability.equals(ImapConstants.SUPPORTS_CONDSTORE) || capability.equals(ImapConstants.SUPPORTS_QRESYNC)) { try { MetaData metaData = null; boolean send = false; @@ -447,7 +448,7 @@ abstract class AbstractSelectionProcessor<R extends AbstractMailboxSelectionRequ } condstoreEnablingCommand(session, responder, metaData, send); } catch (MailboxException e) { - throw new EnableException("Unable to enable " + capability, e); + throw new EnableException("Unable to enable " + capability.asString(), e); } } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java index 6a92f7c..24620b9 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java @@ -28,6 +28,7 @@ import java.util.StringTokenizer; import org.apache.james.core.Username; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; @@ -134,15 +135,15 @@ public class AuthenticateProcessor extends AbstractAuthProcessor<AuthenticateReq } @Override - public List<String> getImplementedCapabilities(ImapSession session) { - List<String> caps = new ArrayList<>(); + public List<Capability> getImplementedCapabilities(ImapSession session) { + List<Capability> caps = new ArrayList<>(); // Only ounce AUTH=PLAIN if the session does allow plain auth or TLS is active. // See IMAP-304 if (session.isPlainAuthDisallowed() == false || session.isTLSActive()) { - caps.add("AUTH=PLAIN"); + caps.add(Capability.of("AUTH=PLAIN")); } // Support for SASL-IR. See RFC4959 - caps.add("SASL-IR"); + caps.add(Capability.of("SASL-IR")); return ImmutableList.copyOf(caps); } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/CapabilityImplementingProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/CapabilityImplementingProcessor.java index 042bf2f..a336a78 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/CapabilityImplementingProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/CapabilityImplementingProcessor.java @@ -21,6 +21,7 @@ package org.apache.james.imap.processor; import java.util.List; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; @@ -34,5 +35,5 @@ public interface CapabilityImplementingProcessor extends ImapProcessor { * * @return list not null */ - List<String> getImplementedCapabilities(ImapSession session); + List<Capability> getImplementedCapabilities(ImapSession session); } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/CapabilityProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/CapabilityProcessor.java index d82f129..03f3a93 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/CapabilityProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/CapabilityProcessor.java @@ -19,11 +19,11 @@ package org.apache.james.imap.processor; +import static org.apache.james.imap.api.ImapConstants.BASIC_CAPABILITIES; import static org.apache.james.imap.api.ImapConstants.SUPPORTS_CONDSTORE; import static org.apache.james.imap.api.ImapConstants.SUPPORTS_I18NLEVEL_1; import static org.apache.james.imap.api.ImapConstants.SUPPORTS_LITERAL_PLUS; import static org.apache.james.imap.api.ImapConstants.SUPPORTS_RFC3348; -import static org.apache.james.imap.api.ImapConstants.VERSION; import java.io.Closeable; import java.util.ArrayList; @@ -32,6 +32,7 @@ import java.util.List; import java.util.Set; import org.apache.james.imap.api.ImapConfiguration; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; @@ -45,15 +46,15 @@ import com.google.common.collect.ImmutableList; public class CapabilityProcessor extends AbstractMailboxProcessor<CapabilityRequest> implements CapabilityImplementingProcessor { - private static final List<String> CAPS = ImmutableList.of( - VERSION, + private static final List<Capability> CAPS = ImmutableList.of( + BASIC_CAPABILITIES, SUPPORTS_LITERAL_PLUS, SUPPORTS_RFC3348, SUPPORTS_I18NLEVEL_1, SUPPORTS_CONDSTORE); private final List<CapabilityImplementingProcessor> capabilities = new ArrayList<>(); - private final Set<String> disabledCaps = new HashSet<>(); + private final Set<Capability> disabledCaps = new HashSet<>(); public CapabilityProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory) { @@ -96,7 +97,7 @@ public class CapabilityProcessor extends AbstractMailboxProcessor<CapabilityRequ } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { return CAPS; } @@ -106,8 +107,8 @@ public class CapabilityProcessor extends AbstractMailboxProcessor<CapabilityRequ * @param session * @return supported */ - public Set<String> getSupportedCapabilities(ImapSession session) { - Set<String> caps = new HashSet<>(); + public Set<Capability> getSupportedCapabilities(ImapSession session) { + Set<Capability> caps = new HashSet<>(); for (CapabilityImplementingProcessor capability : capabilities) { caps.addAll(capability.getImplementedCapabilities(session)); } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/CompressProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/CompressProcessor.java index c9331ae..5109058 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/CompressProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/CompressProcessor.java @@ -24,6 +24,7 @@ import java.util.List; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; @@ -35,7 +36,7 @@ import com.google.common.collect.ImmutableList; public class CompressProcessor extends AbstractChainedProcessor<CompressRequest> implements CapabilityImplementingProcessor { private static final String ALGO = "DEFLATE"; - private static final List<String> CAPA = ImmutableList.of(ImapConstants.COMPRESS_COMMAND_NAME + "=" + ALGO); + private static final List<Capability> CAPA = ImmutableList.of(Capability.of(ImapConstants.COMPRESS_COMMAND_NAME + "=" + ALGO)); private final StatusResponseFactory factory; private static final String COMPRESSED = "COMPRESSED"; @@ -67,7 +68,7 @@ public class CompressProcessor extends AbstractChainedProcessor<CompressRequest> } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { if (session.isCompressionSupported()) { return CAPA; } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java index 722eb09..0db8646 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java @@ -24,6 +24,7 @@ import java.util.List; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; @@ -50,7 +51,7 @@ import com.google.common.collect.ImmutableList; public class DeleteACLProcessor extends AbstractMailboxProcessor<DeleteACLRequest> implements CapabilityImplementingProcessor { private static final Logger LOGGER = LoggerFactory.getLogger(DeleteACLProcessor.class); - private static final List<String> CAPABILITIES = ImmutableList.of(ImapConstants.SUPPORTS_ACL); + private static final List<Capability> CAPABILITIES = ImmutableList.of(ImapConstants.SUPPORTS_ACL); public DeleteACLProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory) { @@ -134,7 +135,7 @@ public class DeleteACLProcessor extends AbstractMailboxProcessor<DeleteACLReques } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { return CAPABILITIES; } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/EnableProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/EnableProcessor.java index 74b8982..33e650d 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/EnableProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/EnableProcessor.java @@ -29,6 +29,7 @@ import java.util.List; import java.util.Set; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; @@ -49,7 +50,7 @@ public class EnableProcessor extends AbstractMailboxProcessor<EnableRequest> imp private static final List<PermitEnableCapabilityProcessor> capabilities = new ArrayList<>(); public static final String ENABLED_CAPABILITIES = "ENABLED_CAPABILITIES"; - private static final List<String> CAPS = ImmutableList.of(SUPPORTS_ENABLE); + private static final List<Capability> CAPS = ImmutableList.of(SUPPORTS_ENABLE); private final CapabilityProcessor capabilityProcessor; public EnableProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory factory, List<PermitEnableCapabilityProcessor> capabilities, @@ -70,8 +71,8 @@ public class EnableProcessor extends AbstractMailboxProcessor<EnableRequest> imp protected void processRequest(EnableRequest request, ImapSession session, Responder responder) { try { - List<String> caps = request.getCapabilities(); - Set<String> enabledCaps = enable(request, responder, session, caps.iterator()); + List<Capability> caps = request.getCapabilities(); + Set<Capability> enabledCaps = enable(request, responder, session, caps.iterator()); responder.respond(new EnableResponse(enabledCaps)); unsolicitedResponses(session, responder, false); @@ -82,10 +83,10 @@ public class EnableProcessor extends AbstractMailboxProcessor<EnableRequest> imp } } - public Set<String> enable(ImapRequest request, Responder responder, ImapSession session, Iterator<String> caps) throws EnableException { - Set<String> enabledCaps = new HashSet<>(); + public Set<Capability> enable(ImapRequest request, Responder responder, ImapSession session, Iterator<Capability> caps) throws EnableException { + Set<Capability> enabledCaps = new HashSet<>(); while (caps.hasNext()) { - String cap = caps.next(); + Capability cap = caps.next(); // Check if the CAPABILITY is supported at all if (capabilityProcessor.getSupportedCapabilities(session).contains(cap)) { for (PermitEnableCapabilityProcessor enableProcessor : capabilities) { @@ -111,8 +112,8 @@ public class EnableProcessor extends AbstractMailboxProcessor<EnableRequest> imp * Return all enabled <code>CAPABILITIES</code> for this {@link ImapSession} */ @SuppressWarnings("unchecked") - public static Set<String> getEnabledCapabilities(ImapSession session) { - Set<String> caps = (Set<String>) session.getAttribute(ENABLED_CAPABILITIES); + public static Set<Capability> getEnabledCapabilities(ImapSession session) { + Set<Capability> caps = (Set<Capability>) session.getAttribute(ENABLED_CAPABILITIES); if (caps == null) { caps = new HashSet<>(); @@ -122,7 +123,7 @@ public class EnableProcessor extends AbstractMailboxProcessor<EnableRequest> imp } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { return CAPS; } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java index 431aad7..fd45881 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java @@ -19,12 +19,15 @@ package org.apache.james.imap.processor; +import static org.apache.james.imap.api.ImapConstants.SUPPORTS_UIDPLUS; + import java.io.Closeable; import java.util.Iterator; import java.util.List; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.response.StatusResponse.ResponseCode; import org.apache.james.imap.api.message.response.StatusResponseFactory; @@ -51,7 +54,7 @@ import com.google.common.collect.ImmutableList; public class ExpungeProcessor extends AbstractMailboxProcessor<ExpungeRequest> implements CapabilityImplementingProcessor { private static final Logger LOGGER = LoggerFactory.getLogger(ExpungeProcessor.class); - private static final List<String> UIDPLUS = ImmutableList.of("UIDPLUS"); + private static final List<Capability> UIDPLUS = ImmutableList.of(SUPPORTS_UIDPLUS); public ExpungeProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory) { @@ -121,7 +124,7 @@ public class ExpungeProcessor extends AbstractMailboxProcessor<ExpungeRequest> i } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { return UIDPLUS; } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java index 06148c1..b17250b 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java @@ -24,6 +24,7 @@ import java.util.List; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; @@ -52,7 +53,7 @@ import com.google.common.collect.ImmutableList; public class GetACLProcessor extends AbstractMailboxProcessor<GetACLRequest> implements CapabilityImplementingProcessor { private static final Logger LOGGER = LoggerFactory.getLogger(GetACLProcessor.class); - private static final List<String> CAPABILITIES = ImmutableList.of(ImapConstants.SUPPORTS_ACL); + private static final List<Capability> CAPABILITIES = ImmutableList.of(ImapConstants.SUPPORTS_ACL); public GetACLProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory) { @@ -109,7 +110,7 @@ public class GetACLProcessor extends AbstractMailboxProcessor<GetACLRequest> imp } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { return CAPABILITIES; } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetAnnotationProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetAnnotationProcessor.java index 14f697e..8cd15c9 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetAnnotationProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetAnnotationProcessor.java @@ -29,6 +29,7 @@ import java.util.function.Predicate; import org.apache.commons.lang3.NotImplementedException; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.request.ImapRequest; import org.apache.james.imap.api.message.response.StatusResponse.ResponseCode; import org.apache.james.imap.api.message.response.StatusResponseFactory; @@ -62,7 +63,7 @@ public class GetAnnotationProcessor extends AbstractMailboxProcessor<GetAnnotati } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { return ImmutableList.of(ImapConstants.SUPPORTS_ANNOTATION); } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaProcessor.java index 20976cf..1f9e2bf 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaProcessor.java @@ -28,6 +28,7 @@ import org.apache.james.core.quota.QuotaSizeLimit; import org.apache.james.core.quota.QuotaSizeUsage; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; @@ -52,7 +53,7 @@ import com.google.common.collect.ImmutableList; */ public class GetQuotaProcessor extends AbstractMailboxProcessor<GetQuotaRequest> implements CapabilityImplementingProcessor { - private static final List<String> CAPABILITIES = ImmutableList.of(ImapConstants.SUPPORTS_QUOTA); + private static final List<Capability> CAPABILITIES = ImmutableList.of(ImapConstants.SUPPORTS_QUOTA); private final QuotaManager quotaManager; private final QuotaRootResolver quotaRootResolver; @@ -65,7 +66,7 @@ public class GetQuotaProcessor extends AbstractMailboxProcessor<GetQuotaRequest> } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { return CAPABILITIES; } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java index c9a4db3..d794b03 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java @@ -28,6 +28,7 @@ import org.apache.james.core.quota.QuotaSizeLimit; import org.apache.james.core.quota.QuotaSizeUsage; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; @@ -54,7 +55,7 @@ import com.google.common.collect.ImmutableList; */ public class GetQuotaRootProcessor extends AbstractMailboxProcessor<GetQuotaRootRequest> implements CapabilityImplementingProcessor { - private static final List<String> CAPABILITIES = ImmutableList.of(ImapConstants.SUPPORTS_QUOTA); + private static final List<Capability> CAPABILITIES = ImmutableList.of(ImapConstants.SUPPORTS_QUOTA); private final QuotaRootResolver quotaRootResolver; private final QuotaManager quotaManager; @@ -66,7 +67,7 @@ public class GetQuotaRootProcessor extends AbstractMailboxProcessor<GetQuotaRoot } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { return CAPABILITIES; } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java index f1dbe51..2af0936 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java @@ -33,6 +33,7 @@ import java.util.concurrent.atomic.AtomicBoolean; import org.apache.james.imap.api.ImapConfiguration; import org.apache.james.imap.api.ImapSessionState; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponse; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapLineHandler; @@ -54,7 +55,7 @@ import org.apache.james.util.concurrent.NamedThreadFactory; import com.google.common.collect.ImmutableList; public class IdleProcessor extends AbstractMailboxProcessor<IdleRequest> implements CapabilityImplementingProcessor { - private static final List<String> CAPS = ImmutableList.of(SUPPORTS_IDLE); + private static final List<Capability> CAPS = ImmutableList.of(SUPPORTS_IDLE); public static final int DEFAULT_SCHEDULED_POOL_CORE_SIZE = 5; private static final String DONE = "DONE"; @@ -154,7 +155,7 @@ public class IdleProcessor extends AbstractMailboxProcessor<IdleRequest> impleme } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { return CAPS; } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java index 850d800..4c7a147 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java @@ -24,6 +24,7 @@ import java.util.List; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; @@ -51,7 +52,7 @@ import com.google.common.collect.ImmutableList; public class ListRightsProcessor extends AbstractMailboxProcessor<ListRightsRequest> implements CapabilityImplementingProcessor { private static final Logger LOGGER = LoggerFactory.getLogger(ListRightsProcessor.class); - private static final List<String> CAPABILITIES = ImmutableList.of(ImapConstants.SUPPORTS_ACL); + private static final List<Capability> CAPABILITIES = ImmutableList.of(ImapConstants.SUPPORTS_ACL); public ListRightsProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory) { @@ -123,7 +124,7 @@ public class ListRightsProcessor extends AbstractMailboxProcessor<ListRightsRequ } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { return CAPABILITIES; } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java index 3faa59f..568a245 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java @@ -24,6 +24,7 @@ import java.util.Collections; import java.util.List; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; @@ -39,7 +40,7 @@ import com.google.common.collect.ImmutableList; */ public class LoginProcessor extends AbstractAuthProcessor<LoginRequest> implements CapabilityImplementingProcessor { - private static final List<String> LOGINDISABLED_CAPS = ImmutableList.of("LOGINDISABLED"); + private static final List<Capability> LOGINDISABLED_CAPS = ImmutableList.of(Capability.of("LOGINDISABLED")); public LoginProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory) { @@ -58,7 +59,7 @@ public class LoginProcessor extends AbstractAuthProcessor<LoginRequest> implemen } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { // Announce LOGINDISABLED if plain auth / login is deactivated and the session is not using // TLS. See IMAP-304 if (session.isPlainAuthDisallowed() && session.isTLSActive() == false) { diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java index 129251c..bbe1cc4 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java @@ -23,6 +23,7 @@ import java.io.Closeable; import java.util.List; import org.apache.james.imap.api.ImapConstants; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; @@ -61,9 +62,9 @@ public class MoveProcessor extends AbstractMessageRangeProcessor<MoveRequest> im } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { if (moveCapabilitySupported) { - return ImmutableList.of(ImapConstants.MOVE_COMMAND_NAME); + return ImmutableList.of(ImapConstants.SUPPORTS_MOVE); } else { return ImmutableList.of(); } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java index 5e9ac7e..63f5138 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java @@ -25,6 +25,7 @@ import java.util.List; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; @@ -49,7 +50,7 @@ import org.slf4j.LoggerFactory; public class MyRightsProcessor extends AbstractMailboxProcessor<MyRightsRequest> implements CapabilityImplementingProcessor { private static final Logger LOGGER = LoggerFactory.getLogger(MyRightsProcessor.class); - private static final List<String> CAPABILITIES = Collections.singletonList(ImapConstants.SUPPORTS_ACL); + private static final List<Capability> CAPABILITIES = Collections.singletonList(ImapConstants.SUPPORTS_ACL); public MyRightsProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory) { @@ -106,7 +107,7 @@ public class MyRightsProcessor extends AbstractMailboxProcessor<MyRightsRequest> } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { return CAPABILITIES; } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java index afbd533..eb2e8c5 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java @@ -22,11 +22,10 @@ import static org.apache.james.imap.api.ImapConstants.SUPPORTS_NAMESPACES; import java.io.Closeable; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.List; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; @@ -37,12 +36,13 @@ import org.apache.james.mailbox.MailboxSession; import org.apache.james.metrics.api.MetricFactory; import org.apache.james.util.MDCBuilder; +import com.google.common.collect.ImmutableList; + /** * Processes a NAMESPACE command into a suitable set of responses. */ public class NamespaceProcessor extends AbstractMailboxProcessor<NamespaceRequest> implements CapabilityImplementingProcessor { - private static final List<String> CAPS = Collections.unmodifiableList(Arrays.asList(SUPPORTS_NAMESPACES)); - + private static final List<Capability> CAPS = ImmutableList.of(SUPPORTS_NAMESPACES); public NamespaceProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory) { @@ -103,7 +103,7 @@ public class NamespaceProcessor extends AbstractMailboxProcessor<NamespaceReques } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { return CAPS; } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/PermitEnableCapabilityProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/PermitEnableCapabilityProcessor.java index 52e6242..8416e43 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/PermitEnableCapabilityProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/PermitEnableCapabilityProcessor.java @@ -21,6 +21,7 @@ package org.apache.james.imap.processor; import java.util.List; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.process.ImapSession; /** @@ -33,12 +34,12 @@ public interface PermitEnableCapabilityProcessor extends CapabilityImplementingP * * Be sure that these are also returned by {@link #getImplementedCapabilities(ImapSession)} */ - List<String> getPermitEnableCapabilities(ImapSession session); + List<Capability> getPermitEnableCapabilities(ImapSession session); /** * Callback which is used when a ENABLED command was used to enable on of the CAPABILITIES which is managed by this implementation */ - void enable(ImapMessage message, Responder responder, ImapSession session, String capability) throws EnableException; + void enable(ImapMessage message, Responder responder, ImapSession session, Capability capability) throws EnableException; /** * Exception which should get thrown if for whatever reason its not possible to enable a capability diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java index c124234..b28216d 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java @@ -31,6 +31,7 @@ import javax.mail.Flags.Flag; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.UidRange; import org.apache.james.imap.api.message.request.DayMonthYear; @@ -73,7 +74,7 @@ public class SearchProcessor extends AbstractMailboxProcessor<SearchRequest> imp private static final Logger LOGGER = LoggerFactory.getLogger(SearchProcessor.class); protected static final String SEARCH_MODSEQ = "SEARCH_MODSEQ"; - private static final List<String> CAPS = ImmutableList.of("WITHIN", "ESEARCH", "SEARCHRES"); + private static final List<Capability> CAPS = ImmutableList.of(Capability.of("WITHIN"), Capability.of("ESEARCH"), Capability.of("SEARCHRES")); public SearchProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory) { @@ -498,7 +499,7 @@ public class SearchProcessor extends AbstractMailboxProcessor<SearchRequest> imp } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { return CAPS; } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java index 708ae15..afba088 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java @@ -20,11 +20,11 @@ package org.apache.james.imap.processor; import java.io.Closeable; -import java.util.Collections; import java.util.List; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; @@ -45,13 +45,15 @@ import org.apache.james.util.MDCBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.collect.ImmutableList; + /** * SETACL Processor. */ public class SetACLProcessor extends AbstractMailboxProcessor<SetACLRequest> implements CapabilityImplementingProcessor { private static final Logger LOGGER = LoggerFactory.getLogger(SetACLProcessor.class); - private static final List<String> CAPABILITIES = Collections.singletonList(ImapConstants.SUPPORTS_ACL); + private static final List<Capability> CAPABILITIES = ImmutableList.of(ImapConstants.SUPPORTS_ACL); public SetACLProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory) { @@ -151,7 +153,7 @@ public class SetACLProcessor extends AbstractMailboxProcessor<SetACLRequest> imp } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { return CAPABILITIES; } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetAnnotationProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetAnnotationProcessor.java index 94e84e3..12209a0 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetAnnotationProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetAnnotationProcessor.java @@ -24,6 +24,7 @@ import java.util.List; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponse; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; @@ -52,7 +53,7 @@ public class SetAnnotationProcessor extends AbstractMailboxProcessor<SetAnnotati } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { return ImmutableList.of(ImapConstants.SUPPORTS_ANNOTATION); } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetQuotaProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetQuotaProcessor.java index 3601b64..3f0e443 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/SetQuotaProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/SetQuotaProcessor.java @@ -20,11 +20,11 @@ package org.apache.james.imap.processor; import java.io.Closeable; -import java.util.Collections; import java.util.List; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; @@ -33,16 +33,13 @@ import org.apache.james.mailbox.MailboxManager; import org.apache.james.metrics.api.MetricFactory; import org.apache.james.util.MDCBuilder; +import com.google.common.collect.ImmutableList; + /** * SETQUOTA processor */ public class SetQuotaProcessor extends AbstractMailboxProcessor<SetQuotaRequest> implements CapabilityImplementingProcessor { - private static final List<String> CAPABILITIES = Collections.singletonList(ImapConstants.SUPPORTS_QUOTA); - - @Override - public List<String> getImplementedCapabilities(ImapSession session) { - return CAPABILITIES; - } + private static final List<Capability> CAPABILITIES = ImmutableList.of(ImapConstants.SUPPORTS_QUOTA); public SetQuotaProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory) { @@ -50,6 +47,11 @@ public class SetQuotaProcessor extends AbstractMailboxProcessor<SetQuotaRequest> } @Override + public List<Capability> getImplementedCapabilities(ImapSession session) { + return CAPABILITIES; + } + + @Override protected void processRequest(SetQuotaRequest request, ImapSession session, Responder responder) { Object[] params = new Object[]{ "Full admin rights", diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/StartTLSProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/StartTLSProcessor.java index 60cb5e6..65977f9 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/StartTLSProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/StartTLSProcessor.java @@ -24,6 +24,7 @@ import java.util.List; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; @@ -37,7 +38,7 @@ import com.google.common.collect.ImmutableList; * Processing STARTLS commands */ public class StartTLSProcessor extends AbstractChainedProcessor<StartTLSRequest> implements CapabilityImplementingProcessor { - private static final List<String> STARTTLS_CAP = ImmutableList.of(ImapConstants.SUPPORTS_STARTTLS); + private static final List<Capability> STARTTLS_CAP = ImmutableList.of(ImapConstants.SUPPORTS_STARTTLS); private final StatusResponseFactory factory; public StartTLSProcessor(ImapProcessor next, StatusResponseFactory factory) { @@ -58,7 +59,7 @@ public class StartTLSProcessor extends AbstractChainedProcessor<StartTLSRequest> } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { if (session.supportStartTLS()) { return STARTTLS_CAP; } else { diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java index 4f6695d..cbba9d4 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java @@ -32,6 +32,7 @@ import javax.mail.Flags; import org.apache.james.imap.api.ImapCommand; import org.apache.james.imap.api.ImapConstants; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.IdRange; import org.apache.james.imap.api.message.UidRange; import org.apache.james.imap.api.message.response.StatusResponse; @@ -247,7 +248,7 @@ public class StoreProcessor extends AbstractMailboxProcessor<StoreRequest> { selected.resetNewApplicableFlags(); } - Set<String> enabled = EnableProcessor.getEnabledCapabilities(session); + Set<Capability> enabled = EnableProcessor.getEnabledCapabilities(session); boolean qresyncEnabled = enabled.contains(ImapConstants.SUPPORTS_QRESYNC); boolean condstoreEnabled = enabled.contains(ImapConstants.SUPPORTS_CONDSTORE); diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/UnselectProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/UnselectProcessor.java index 5253f33..64176c1 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/UnselectProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/UnselectProcessor.java @@ -18,12 +18,13 @@ ****************************************************************/ package org.apache.james.imap.processor; +import static org.apache.james.imap.api.ImapConstants.SUPPORTS_UNSELECT; + import java.io.Closeable; -import java.util.Arrays; -import java.util.Collections; import java.util.List; import org.apache.james.imap.api.display.HumanReadableText; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.api.process.ImapSession; @@ -32,14 +33,15 @@ import org.apache.james.mailbox.MailboxManager; import org.apache.james.metrics.api.MetricFactory; import org.apache.james.util.MDCBuilder; +import com.google.common.collect.ImmutableList; + /** * Processor which implements the UNSELECT extension. * * See RFC3691 */ public class UnselectProcessor extends AbstractMailboxProcessor<UnselectRequest> implements CapabilityImplementingProcessor { - - private static final List<String> UNSELECT = Collections.unmodifiableList(Arrays.asList("UNSELECT")); + private static final List<Capability> UNSELECT = ImmutableList.of(SUPPORTS_UNSELECT); public UnselectProcessor(ImapProcessor next, MailboxManager mailboxManager, StatusResponseFactory factory, MetricFactory metricFactory) { @@ -58,7 +60,7 @@ public class UnselectProcessor extends AbstractMailboxProcessor<UnselectRequest> } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { return UNSELECT; } diff --git a/protocols/imap/src/main/java/org/apache/james/imap/processor/XListProcessor.java b/protocols/imap/src/main/java/org/apache/james/imap/processor/XListProcessor.java index 381ae28..a7d4a6d 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/processor/XListProcessor.java +++ b/protocols/imap/src/main/java/org/apache/james/imap/processor/XListProcessor.java @@ -24,6 +24,7 @@ import java.util.Collections; import java.util.List; import org.apache.james.imap.api.ImapMessage; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.ImapResponseMessage; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; @@ -44,7 +45,7 @@ import com.google.common.collect.ImmutableList; */ public class XListProcessor extends ListProcessor implements CapabilityImplementingProcessor { - private static final List<String> XLIST_CAPS = ImmutableList.of(SUPPORTS_XLIST); + private static final List<Capability> XLIST_CAPS = ImmutableList.of(SUPPORTS_XLIST); private final MailboxTyper mailboxTyper; // some interface @@ -55,7 +56,7 @@ public class XListProcessor extends ListProcessor implements CapabilityImplement } @Override - public List<String> getImplementedCapabilities(ImapSession session) { + public List<Capability> getImplementedCapabilities(ImapSession session) { // if there's no mailboxTyper, do not annnoyce XLIST capability if (mailboxTyper == null) { return Collections.emptyList(); diff --git a/protocols/imap/src/test/java/org/apache/james/imap/api/ImapConfigurationTest.java b/protocols/imap/src/test/java/org/apache/james/imap/api/ImapConfigurationTest.java index b8697d7..ab589f2 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/api/ImapConfigurationTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/api/ImapConfigurationTest.java @@ -23,6 +23,7 @@ import static org.assertj.core.api.Assertions.assertThat; import java.util.concurrent.TimeUnit; +import org.apache.james.imap.api.message.Capability; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -105,7 +106,7 @@ public class ImapConfigurationTest { .disabledCaps(ImmutableSet.of("AnyValue")) .build(); - assertThat(imapConfiguration.getDisabledCaps()).containsExactly("AnyValue"); + assertThat(imapConfiguration.getDisabledCaps()).containsExactly(Capability.of("AnyValue")); } @Test @@ -114,7 +115,7 @@ public class ImapConfigurationTest { .disabledCaps(ImmutableSet.of("AnyValue", "OtherValue")) .build(); - assertThat(imapConfiguration.getDisabledCaps()).containsExactly("AnyValue", "OtherValue"); + assertThat(imapConfiguration.getDisabledCaps()).containsExactly(Capability.of("AnyValue"), Capability.of("OtherValue")); } @Test @@ -123,7 +124,7 @@ public class ImapConfigurationTest { .disabledCaps(ImmutableSet.of(" AnyValue ", " OtherValue ")) .build(); - assertThat(imapConfiguration.getDisabledCaps()).containsExactly("AnyValue", "OtherValue"); + assertThat(imapConfiguration.getDisabledCaps()).containsExactly(Capability.of("AnyValue"), Capability.of("OtherValue")); } @Test @@ -132,7 +133,7 @@ public class ImapConfigurationTest { .disabledCaps(" AnyValue ", " OtherValue ") .build(); - assertThat(imapConfiguration.getDisabledCaps()).containsExactly("AnyValue", "OtherValue"); + assertThat(imapConfiguration.getDisabledCaps()).containsExactly(Capability.of("AnyValue"), Capability.of("OtherValue")); } @Test @@ -141,7 +142,7 @@ public class ImapConfigurationTest { .disabledCap(" AnyValue ") .build(); - assertThat(imapConfiguration.getDisabledCaps()).containsExactly("AnyValue"); + assertThat(imapConfiguration.getDisabledCaps()).containsExactly(Capability.of("AnyValue")); } @Test diff --git a/protocols/imap/src/main/java/org/apache/james/imap/message/request/EnableRequest.java b/protocols/imap/src/test/java/org/apache/james/imap/api/message/CapabilityTest.java similarity index 58% copy from protocols/imap/src/main/java/org/apache/james/imap/message/request/EnableRequest.java copy to protocols/imap/src/test/java/org/apache/james/imap/api/message/CapabilityTest.java index e285d27..f84a98a 100644 --- a/protocols/imap/src/main/java/org/apache/james/imap/message/request/EnableRequest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/api/message/CapabilityTest.java @@ -16,28 +16,38 @@ * specific language governing permissions and limitations * * under the License. * ****************************************************************/ -package org.apache.james.imap.message.request; -import java.util.List; +package org.apache.james.imap.api.message; -import org.apache.james.imap.api.ImapCommand; -import org.apache.james.imap.api.Tag; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; -public class EnableRequest extends AbstractImapRequest { +import org.junit.jupiter.api.Test; - private final List<String> capabilities; +import nl.jqno.equalsverifier.EqualsVerifier; - public EnableRequest(Tag tag, ImapCommand command, List<String> capabilities) { - super(tag, command); - this.capabilities = capabilities; +class CapabilityTest { + @Test + void shouldMatchBeanContract() { + EqualsVerifier.forClass(Capability.class) + .verify(); } - - /** - * Return a List of <code>CAPABILITIES</code>. All these must be uppercase - * - * @return caps - */ - public List<String> getCapabilities() { - return capabilities; + + @Test + void ofShouldThrowWhenNull() { + assertThatThrownBy(() -> Capability.of(null)) + .isInstanceOf(NullPointerException.class); + } + + @Test + void ofShouldThrowWhenEmpty() { + assertThatThrownBy(() -> Capability.of("")) + .isInstanceOf(IllegalArgumentException.class); + } + + @Test + void ofShouldNormalizeCase() { + assertThat(Capability.of("a")) + .isEqualTo(Capability.of("A")); } -} +} \ No newline at end of file diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/CapabilityProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/CapabilityProcessorTest.java index cfebddf..cefb8eb 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/CapabilityProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/CapabilityProcessorTest.java @@ -24,6 +24,7 @@ import java.util.Set; import org.apache.james.imap.api.ImapConfiguration; import org.apache.james.imap.api.ImapConstants; +import org.apache.james.imap.api.message.Capability; import org.apache.james.imap.api.message.response.StatusResponseFactory; import org.apache.james.imap.api.process.ImapProcessor; import org.apache.james.imap.processor.base.UnknownRequestProcessor; @@ -49,7 +50,7 @@ public class CapabilityProcessorTest { public void condstoreShouldBeSupportedWhenSelectedFor() { testee.configure(ImapConfiguration.builder().isCondstoreEnable(true).build()); - Set<String> supportedCapabilities = testee.getSupportedCapabilities(null); + Set<Capability> supportedCapabilities = testee.getSupportedCapabilities(null); assertThat(supportedCapabilities).contains(ImapConstants.SUPPORTS_CONDSTORE); } @@ -57,7 +58,7 @@ public class CapabilityProcessorTest { public void condstoreShouldBeNotSupportedByDefault() { testee.configure(ImapConfiguration.builder().build()); - Set<String> supportedCapabilities = testee.getSupportedCapabilities(null); + Set<Capability> supportedCapabilities = testee.getSupportedCapabilities(null); assertThat(supportedCapabilities).doesNotContain(ImapConstants.SUPPORTS_CONDSTORE); } } diff --git a/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java b/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java index 4bbbf83..6f2dd62 100644 --- a/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java +++ b/protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java @@ -90,7 +90,7 @@ public class MoveProcessorTest { @Test public void getImplementedCapabilitiesShouldContainMoveWhenSupportedByMailboxManager() { - assertThat(testee.getImplementedCapabilities(null)).containsExactly(ImapConstants.MOVE_COMMAND_NAME); + assertThat(testee.getImplementedCapabilities(null)).containsExactly(ImapConstants.SUPPORTS_MOVE); } @Test --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org