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