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: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to