Author: norman
Date: Thu Aug 19 11:22:58 2010
New Revision: 987130
URL: http://svn.apache.org/viewvc?rev=987130&view=rev
Log:
Allow easier implementating of new capabilities (IMAP-170)
Added:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CapabilityImplementingProcessor.java
Modified:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CapabilityProcessor.java
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StartTLSProcessor.java
Added:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CapabilityImplementingProcessor.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CapabilityImplementingProcessor.java?rev=987130&view=auto
==============================================================================
---
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CapabilityImplementingProcessor.java
(added)
+++
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CapabilityImplementingProcessor.java
Thu Aug 19 11:22:58 2010
@@ -0,0 +1,42 @@
+/****************************************************************
+ * 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.processor;
+
+import java.util.List;
+
+import org.apache.james.imap.api.process.ImapProcessor;
+import org.apache.james.imap.api.process.ImapSession;
+
+/**
+ * {...@link ImapProcessor} which implements one ore more Capabilities
+ *
+ *
+ */
+public interface CapabilityImplementingProcessor extends ImapProcessor{
+
+
+ /**
+ * Return a list of all Capabilities that are implemented by the Processor
+ *
+ * @param session
+ * @return list not null
+ */
+ public List<String> getImplementedCapabilities(ImapSession session);
+}
Modified:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CapabilityProcessor.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CapabilityProcessor.java?rev=987130&r1=987129&r2=987130&view=diff
==============================================================================
---
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CapabilityProcessor.java
(original)
+++
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/CapabilityProcessor.java
Thu Aug 19 11:22:58 2010
@@ -19,11 +19,14 @@
package org.apache.james.imap.processor;
+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.util.ArrayList;
import java.util.List;
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.message.request.ImapRequest;
import org.apache.james.imap.api.message.response.ImapResponseMessage;
@@ -34,16 +37,23 @@ import org.apache.james.imap.mailbox.Mai
import org.apache.james.imap.message.request.CapabilityRequest;
import org.apache.james.imap.message.response.CapabilityResponse;
-public class CapabilityProcessor extends AbstractMailboxProcessor {
+public class CapabilityProcessor extends AbstractMailboxProcessor implements
CapabilityImplementingProcessor {
- private final List<String> capabilities;
+ private final List<CapabilityImplementingProcessor> capabilities = new
ArrayList<CapabilityImplementingProcessor>();
public CapabilityProcessor(final ImapProcessor next, final MailboxManager
mailboxManager,
- final StatusResponseFactory factory, final List<String>
capabilities) {
- super(next, mailboxManager, factory);
- this.capabilities = capabilities;
+ final StatusResponseFactory factory, final
List<CapabilityImplementingProcessor> capabilities) {
+ this(next, mailboxManager, factory);
+ this.capabilities.addAll(capabilities);
+
}
+ public CapabilityProcessor(final ImapProcessor next, final MailboxManager
mailboxManager,
+ final StatusResponseFactory factory) {
+ super(next, mailboxManager, factory);
+ this.capabilities.add(this);
+
+ }
protected boolean isAcceptable(ImapMessage message) {
return (message instanceof CapabilityRequest);
}
@@ -60,11 +70,34 @@ public class CapabilityProcessor extends
private ImapResponseMessage doProcess(CapabilityRequest request,
ImapSession session, String tag, ImapCommand command) {
- List<String> caps = new ArrayList<String>(capabilities);
- if (session.supportStartTLS()) {
- caps.add(ImapConstants.STARTTLS);
+ List<String> caps = new ArrayList<String>();
+ for (int i = 0; i < capabilities.size(); i++) {
+
caps.addAll(capabilities.get(i).getImplementedCapabilities(session));
}
final CapabilityResponse result = new CapabilityResponse(caps);
return result;
}
+
+ /**
+ * Add a {...@link CapabilityImplementor} which will get queried for
implemented capabilities
+ *
+ * @param implementor
+ */
+ public void addProcessor(CapabilityImplementingProcessor implementor) {
+ capabilities.add(implementor);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see
org.apache.james.imap.processor.CapabilityImplementingProcessor#getImplementedCapabilities(org.apache.james.imap.api.process.ImapSession)
+ */
+ public List<String> getImplementedCapabilities(ImapSession session) {
+ final List<String> capabilities = new ArrayList<String>();
+ capabilities.add(VERSION);
+ capabilities.add(SUPPORTS_LITERAL_PLUS);
+ capabilities.add(SUPPORTS_RFC3348);
+ return capabilities;
+ }
+
+
}
Modified:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java?rev=987130&r1=987129&r2=987130&view=diff
==============================================================================
---
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java
(original)
+++
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/DefaultProcessorChain.java
Thu Aug 19 11:22:58 2010
@@ -19,10 +19,6 @@
package org.apache.james.imap.processor;
-import static org.apache.james.imap.api.ImapConstants.*;
-
-import java.util.ArrayList;
-import java.util.List;
import org.apache.james.imap.api.message.response.StatusResponseFactory;
import org.apache.james.imap.api.process.ImapProcessor;
@@ -42,13 +38,8 @@ public class DefaultProcessorChain {
final LogoutProcessor logoutProcessor = new LogoutProcessor(
systemProcessor, mailboxManager, statusResponseFactory);
- final List<String> capabilities = new ArrayList<String>();
- capabilities.add(VERSION);
- capabilities.add(SUPPORTS_LITERAL_PLUS);
- capabilities.add(SUPPORTS_NAMESPACES);
- capabilities.add(SUPPORTS_RFC3348);
final CapabilityProcessor capabilityProcessor = new
CapabilityProcessor(
- logoutProcessor, mailboxManager, statusResponseFactory,
capabilities);
+ logoutProcessor, mailboxManager, statusResponseFactory);
final CheckProcessor checkProcessor = new CheckProcessor(
capabilityProcessor, mailboxManager, statusResponseFactory);
final LoginProcessor loginProcessor = new LoginProcessor(
@@ -94,9 +85,13 @@ public class DefaultProcessorChain {
searchProcessor, mailboxManager, statusResponseFactory);
final NamespaceProcessor namespaceProcessor = new NamespaceProcessor(
selectProcessor, mailboxManager, statusResponseFactory);
+
+ capabilityProcessor.addProcessor(namespaceProcessor);
+
final ImapProcessor fetchProcessor = new
FetchProcessor(namespaceProcessor,
mailboxManager, statusResponseFactory);
- final ImapProcessor startTLSProcessor = new
StartTLSProcessor(fetchProcessor, statusResponseFactory);
+ final StartTLSProcessor startTLSProcessor = new
StartTLSProcessor(fetchProcessor, statusResponseFactory);
+ capabilityProcessor.addProcessor(startTLSProcessor);
return startTLSProcessor;
}
Modified:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java?rev=987130&r1=987129&r2=987130&view=diff
==============================================================================
---
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java
(original)
+++
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java
Thu Aug 19 11:22:58 2010
@@ -18,7 +18,10 @@
****************************************************************/
package org.apache.james.imap.processor;
+import static org.apache.james.imap.api.ImapConstants.SUPPORTS_NAMESPACES;
+
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collection;
import java.util.List;
@@ -38,7 +41,7 @@ import org.apache.james.imap.processor.b
/**
* Processes a NAMESPACE command into a suitable set of responses.
*/
-public class NamespaceProcessor extends AbstractMailboxProcessor {
+public class NamespaceProcessor extends AbstractMailboxProcessor implements
CapabilityImplementingProcessor{
public NamespaceProcessor(ImapProcessor next,
MailboxManager mailboxManager,
@@ -99,4 +102,13 @@ public class NamespaceProcessor extends
return message instanceof NamespaceRequest;
}
+
+ /*
+ * (non-Javadoc)
+ * @see
org.apache.james.imap.processor.CapabilityImplementingProcessor#getImplementedCapabilities(org.apache.james.imap.api.process.ImapSession)
+ */
+ public List<String> getImplementedCapabilities(ImapSession session) {
+ return Arrays.asList(SUPPORTS_NAMESPACES);
+ }
+
}
Modified:
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StartTLSProcessor.java
URL:
http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StartTLSProcessor.java?rev=987130&r1=987129&r2=987130&view=diff
==============================================================================
---
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StartTLSProcessor.java
(original)
+++
james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/StartTLSProcessor.java
Thu Aug 19 11:22:58 2010
@@ -18,6 +18,11 @@
****************************************************************/
package org.apache.james.imap.processor;
+import java.util.ArrayList;
+import java.util.Arrays;
+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.request.ImapRequest;
@@ -32,7 +37,7 @@ import org.apache.james.imap.processor.b
* Processing STARTLS commands
*
*/
-public class StartTLSProcessor extends AbstractChainedProcessor{
+public class StartTLSProcessor extends AbstractChainedProcessor implements
CapabilityImplementingProcessor{
private StatusResponseFactory factory;
@@ -59,4 +64,17 @@ public class StartTLSProcessor extends A
return message instanceof StartTLSRequest;
}
+
+ /*
+ * (non-Javadoc)
+ * @see
org.apache.james.imap.processor.CapabilityImplementingProcessor#getImplementedCapabilities(org.apache.james.imap.api.process.ImapSession)
+ */
+ public List<String> getImplementedCapabilities(ImapSession session) {
+ if (session.supportStartTLS()) {
+ return Arrays.asList(ImapConstants.SUPPORTS_STARTTLS);
+ } else {
+ return new ArrayList<String>();
+ }
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]