You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by rd...@apache.org on 2007/06/03 16:11:20 UTC

svn commit: r543901 [1/3] - in /james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src: main/java/org/apache/james/experimental/imapserver/ main/java/org/apache/james/experimental/imapserver/encode/ main/java/org/apache/james/experi...

Author: rdonkin
Date: Sun Jun  3 07:11:16 2007
New Revision: 543901

URL: http://svn.apache.org/viewvc?view=rev&rev=543901
Log:
Decoupled encoding from ImapSession.

Added:
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/ExistsResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/ExpungeResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/FetchResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/RecentResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/LegacyFetchResponseEncoder.java
      - copied, changed from r543869, james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/FetchResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/status/
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/status/UntaggedNoResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/base/
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/base/AbstractTaggedStatusResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/base/AbstractUntaggedStatusResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/imap4rev1/ExistsResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/imap4rev1/ExpungeResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/imap4rev1/FetchResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/imap4rev1/RecentResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/imap4rev1/status/
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/imap4rev1/status/ByeResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/imap4rev1/status/PreauthResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/imap4rev1/status/TaggedBadResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/imap4rev1/status/TaggedNoResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/imap4rev1/status/TaggedOkResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/imap4rev1/status/UntaggedBadResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/imap4rev1/status/UntaggedNoResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/imap4rev1/status/UntaggedOkResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/base/AbstractUnsolicitedResponsesAwareProcessor.java
Removed:
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/FetchResponseEncoder.java
Modified:
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapHandler.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapHandlerInterface.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapRequestHandler.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapSession.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapSessionImpl.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/ImapEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/ImapResponseComposer.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/base/AbstractChainedImapEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/base/EndImapEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/BadResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CapabilityResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CloseResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CommandCompleteResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CommandFailedResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/ErrorResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/ExamineAndSelectResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/ListResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/LogoutResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/SearchResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/StatusResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/StoreResponseEncoder.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/main/DefaultImapEncoderFactory.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/AbstractImapResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/imap4rev1/legacy/CommandCompleteResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/imap4rev1/legacy/FetchResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/imap4rev1/legacy/SearchResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/imap4rev1/legacy/StoreResponse.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/base/AbstractMailboxAwareProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/AbstractListingProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/AppendProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/CapabilityProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/CheckProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/CloseProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/CopyProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/CreateProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/DeleteProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/ExpungeProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/FetchProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/LoginProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/LogoutProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/NoopProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/RenameProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/SearchProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/StatusProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/StoreProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/SubscribeProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/processor/imap4rev1/UnsubscribeProcessor.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/test/java/org/apache/james/experimental/imapserver/MockImapSession.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/test/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/BadResponseEncodeTest.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/test/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CommandFailedResponseEncoderTest.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/test/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/ErrorResponseMessageTest.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/test/java/org/apache/james/experimental/imapserver/handler/commands/CreateCommandTest.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/test/java/org/apache/james/experimental/imapserver/handler/commands/SubscribeCommandTest.java
    james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/test/java/org/apache/james/experimental/imapserver/handler/commands/UnsubscribeCommandTest.java

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapHandler.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapHandler.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapHandler.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapHandler.java Sun Jun  3 07:11:16 2007
@@ -114,6 +114,8 @@
         }
         handlerIsUp = false;
         
+        endSession();
+        
         // Clear user data
         try {
             if (session != null) {
@@ -157,7 +159,7 @@
             setupLogger(session);
 
             theWatchdog.start();
-            while ( handlerIsUp && !sessionEnded && requestHandler.handleRequest( in, outs, session ) ) {
+            while ( handlerIsUp && !sessionEnded && handleRequest() ) {
                 theWatchdog.reset();
             }
             theWatchdog.stop();
@@ -171,9 +173,18 @@
 
         }
         catch (ProtocolException e) {
+            // TODO: throwing a runtime seems wrong
             throw new RuntimeException(e.getMessage(),e);
         }
     }
+
+    private boolean handleRequest() throws ProtocolException {
+        final boolean continuing = requestHandler.handleRequest( in, outs, session );
+        if (!continuing) {
+            resetHandler();
+        }
+        return continuing;
+    }
     
     /**
      * Method which will be colled on error
@@ -202,8 +213,5 @@
         super.enableLogging(logger);
         setupLogger(requestHandler);
     }
-
-    
-    
 }
 

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapHandlerInterface.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapHandlerInterface.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapHandlerInterface.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapHandlerInterface.java Sun Jun  3 07:11:16 2007
@@ -1,10 +1,27 @@
+/****************************************************************
+ * 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.experimental.imapserver;
 
 public interface ImapHandlerInterface
 {
 
     void forceConnectionClose(String byeMessage);
-
-    void resetHandler();
 
 }

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapRequestHandler.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapRequestHandler.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapRequestHandler.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapRequestHandler.java Sun Jun  3 07:11:16 2007
@@ -25,6 +25,7 @@
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.james.api.imap.ImapMessage;
+import org.apache.james.api.imap.ImapSessionState;
 import org.apache.james.api.imap.ProtocolException;
 import org.apache.james.experimental.imapserver.encode.ImapEncoder;
 import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
@@ -93,7 +94,7 @@
         // to clean up after a protocol error.
         request.consumeLine();
 
-        return true;
+        return !(ImapSessionState.LOGOUT == session.getState());
     }
 
     private void doProcessRequest( ImapRequestLineReader request,
@@ -102,7 +103,7 @@
     {
         ImapMessage message = decoder.decode(request);
         ImapResponseMessage responseMessage = processor.process(message, session);
-        encoder.encode(responseMessage, response, session);
+        encoder.encode(responseMessage, response);
     }
 
 

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapSession.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapSession.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapSession.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapSession.java Sun Jun  3 07:11:16 2007
@@ -19,8 +19,9 @@
 
 package org.apache.james.experimental.imapserver;
 
+import java.util.List;
+
 import org.apache.james.api.imap.ImapSessionState;
-import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
 import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession;
 import org.apache.james.services.User;
@@ -38,15 +39,17 @@
     /**
      * Sends any unsolicited responses to the client, such as EXISTS and FLAGS
      * responses when the selected mailbox is modified by another user.
-     * TODO: this probably should not throw a MailboxException
-     * @param response The response to write to
+     * @return <code>List</code> of {@link ImapResponseMessage}'s
      */
-    void unsolicitedResponses( ImapResponseComposer response, boolean useUid );
+    List unsolicitedResponses( boolean useUid );
 
+    List unsolicitedResponses( boolean omitExpunged, boolean useUid);
+    
     /**
-     * Closes the connection for this session.
+     * Logs out the session.
+     * Marks the connection for closure;
      */
-    void closeConnection();
+    void logout();
 
     void closeConnection(String byeMessage);
 
@@ -101,8 +104,6 @@
      * @return the currently selected mailbox.
      */
     SelectedMailboxSession getSelected();
-
-    void unsolicitedResponses( ImapResponseComposer request, boolean omitExpunged, boolean useUid);
 
     /**
      * closes the Mailbox if needed

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapSessionImpl.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapSessionImpl.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapSessionImpl.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/ImapSessionImpl.java Sun Jun  3 07:11:16 2007
@@ -20,15 +20,22 @@
 package org.apache.james.experimental.imapserver;
 
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 import javax.mail.Flags;
 
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.commons.collections.ListUtils;
 import org.apache.james.api.imap.ImapConstants;
 import org.apache.james.api.imap.ImapSessionState;
 import org.apache.james.api.imap.message.MessageFlags;
-import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
+import org.apache.james.experimental.imapserver.message.response.imap4rev1.ExistsResponse;
+import org.apache.james.experimental.imapserver.message.response.imap4rev1.ExpungeResponse;
+import org.apache.james.experimental.imapserver.message.response.imap4rev1.FetchResponse;
+import org.apache.james.experimental.imapserver.message.response.imap4rev1.RecentResponse;
+import org.apache.james.experimental.imapserver.message.response.imap4rev1.status.UntaggedNoResponse;
 import org.apache.james.mailboxmanager.MailboxManagerException;
 import org.apache.james.mailboxmanager.MessageResult;
 import org.apache.james.mailboxmanager.mailbox.ImapMailboxSession;
@@ -62,49 +69,57 @@
         this.attributesByKey = new ConcurrentHashMap();
     }
 
-    public void unsolicitedResponses( ImapResponseComposer request, boolean useUid ) {
-        unsolicitedResponses(request, false, useUid);
+    public List unsolicitedResponses( boolean useUid ) {
+        return unsolicitedResponses(false, useUid);
     }
 
-    public void unsolicitedResponses(ImapResponseComposer response, boolean omitExpunged, boolean useUid) {
-        SelectedMailboxSession selected = getSelected();
-            if (selected != null) {
-                final ImapMailboxSession mailbox = selected.getMailbox();
-                // New message response
-                if (selected.isSizeChanged()) {
-                    selected.setSizeChanged(false);
-                    existsResponse(response, mailbox);
-                    recentResponse(response, mailbox);
-                }
+    public List unsolicitedResponses(boolean omitExpunged, boolean useUid) {
+        final List results;
+        final SelectedMailboxSession selected = getSelected();
+            if (selected == null) {
+            results = ListUtils.EMPTY_LIST;
+        } else {
+            results = new ArrayList();
+            final ImapMailboxSession mailbox = selected.getMailbox();
+            // New message response
+            if (selected.isSizeChanged()) {
+                selected.setSizeChanged(false);
+                addExistsResponses(results, mailbox);
+                addRecentResponses(results, mailbox);
+            }
 
-                // Message updates
-                // TODO: slow to check flags every time
-//              TODO: add conditional to selected mailbox
-                flagsResponse(response, useUid, mailbox);
+            // Message updates
+            // TODO: slow to check flags every time
+            // TODO: add conditional to selected mailbox
+            addFlagsResponses(results, useUid, mailbox);
 
-                // Expunged messages
-                if (!omitExpunged) {
-                    // TODO: slow to check flags every time
-                    // TODO: add conditional to selected mailbox
-                    expungedResponse(response, mailbox);
-                }
+            // Expunged messages
+            if (!omitExpunged) {
+                // TODO: slow to check flags every time
+                // TODO: add conditional to selected mailbox
+                addExpungedResponses(results, mailbox);
             }
+        }
+        return results;
     }
 
-    private void expungedResponse(ImapResponseComposer response, final ImapMailboxSession mailbox) {
+    private void addExpungedResponses(List responses, final ImapMailboxSession mailbox) {
         try {
             MessageResult[] expunged = mailbox.getExpungedEvents(true);
             for (int i = 0; i < expunged.length; i++) {
                 MessageResult mr = expunged[i];
-                response.expungeResponse(mr.getMsn());
+                final int msn = mr.getMsn();
+                // TODO: use factory
+                ExpungeResponse response = new ExpungeResponse(msn);
+                responses.add(response);
             }
         } catch (MailboxManagerException e) {
             final String message = "Failed to retrieve expunged count data";
-            handleResponseException(response, e, message);
+            handleResponseException(responses, e, message);
         }
     }
 
-    private void flagsResponse(ImapResponseComposer response, boolean useUid, final ImapMailboxSession mailbox) {
+    private void addFlagsResponses(final List responses, boolean useUid, final ImapMailboxSession mailbox) {
         try {
             MessageResult[] flagUpdates = mailbox.getFlagEvents(true);
                 for (int i = 0; i < flagUpdates.length; i++) {
@@ -118,38 +133,44 @@
                     out.append(mr.getUid());
                 }
                 // TODO: use CharSequence instead (avoid unnecessary string creation)
-                response.fetchResponse(msn, out.toString());
+                FetchResponse response = new FetchResponse(msn, out.toString());
+                responses.add(response);
             }
         } catch (MailboxManagerException e) {
             final String message = "Failed to retrieve flags data";
-            handleResponseException(response, e, message);
+            handleResponseException(responses, e, message);
         }
     }
 
-    private void recentResponse(ImapResponseComposer response, final ImapMailboxSession mailbox) {
+    private void addRecentResponses(final List responses, final ImapMailboxSession mailbox) {
         try {
             final int recentCount = mailbox.getRecentCount(true);
-            response.recentResponse(recentCount);
+            // TODO: use factory
+            RecentResponse response = new RecentResponse(recentCount);
+            responses.add(response);
         } catch (MailboxManagerException e) {
             final String message = "Failed to retrieve recent count data";
-            handleResponseException(response, e, message);
+            handleResponseException(responses, e, message);
         }
     }
 
-    private void handleResponseException(ImapResponseComposer response, MailboxManagerException e, final String message) {
+    private void handleResponseException(final List responses, MailboxManagerException e, final String message) {
         getLogger().info(message);
         getLogger().debug(message, e);
         // TODO: consider whether error message should be passed to the user
-        response.untaggedNoResponse(message, null);
+        UntaggedNoResponse response = new UntaggedNoResponse(message, null);
+        responses.add(response);
     }
 
-    private void existsResponse(ImapResponseComposer response, final ImapMailboxSession mailbox) {
+    private void addExistsResponses(final List responses, final ImapMailboxSession mailbox) {
             try {
                 final int messageCount = mailbox.getMessageCount();
-                response.existsResponse(messageCount);
+                // TODO: use factory
+                ExistsResponse response = new ExistsResponse(messageCount);
+                responses.add(response);
             } catch (MailboxManagerException e) {
                 final String message = "Failed to retrieve exists count data";
-                handleResponseException(response, e, message);
+                handleResponseException(responses, e, message);
             }
     }
     
@@ -158,10 +179,10 @@
         handler.forceConnectionClose(byeMessage);
     }
 
-    public void closeConnection()
+    public void logout()
     {
         closeMailbox();
-        handler.resetHandler();
+        state = ImapSessionState.LOGOUT;
     }
 
     public String getClientHostname()

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/ImapEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/ImapEncoder.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/ImapEncoder.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/ImapEncoder.java Sun Jun  3 07:11:16 2007
@@ -20,7 +20,6 @@
 package org.apache.james.experimental.imapserver.encode;
 
 import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.experimental.imapserver.ImapSession;
 
 /**
  * TODO: correct this API
@@ -34,7 +33,6 @@
      * TODO: pass in writer rather than composer
      * @param message <code>ImapMessage</code>, not null
      * @param composer <code>ImapResponseComposer</code>, not null
-     * @param session <code>ImapSession</code>, not null
      */
-    void encode( ImapMessage message, ImapResponseComposer composer, ImapSession session );
+    void encode( ImapMessage message, ImapResponseComposer composer );
 }

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/ImapResponseComposer.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/ImapResponseComposer.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/ImapResponseComposer.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/ImapResponseComposer.java Sun Jun  3 07:11:16 2007
@@ -168,7 +168,7 @@
             logger.info("BAD - " + message); 
         }
     }
-
+    
     /**
      * Writes an untagged OK response, with the supplied response code,
      * and an optional message.

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/base/AbstractChainedImapEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/base/AbstractChainedImapEncoder.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/base/AbstractChainedImapEncoder.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/base/AbstractChainedImapEncoder.java Sun Jun  3 07:11:16 2007
@@ -19,10 +19,12 @@
 
 package org.apache.james.experimental.imapserver.encode.base;
 
+import java.util.Collection;
+import java.util.Iterator;
+
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.experimental.imapserver.ImapSession;
 import org.apache.james.experimental.imapserver.encode.ImapEncoder;
 import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
 
@@ -40,15 +42,25 @@
         setupLogger(next);
     }
     
-    public void encode(ImapMessage message, ImapResponseComposer composer,
-            ImapSession session) {
+    public void encode(ImapMessage message, ImapResponseComposer composer) {
         final boolean isAcceptable = isAcceptable(message);
         if (isAcceptable) {
-            doEncode(message, composer, session);
+            doEncode(message, composer);
         } else {
-            next.encode(message, composer, session);
+            chainEncode(message, composer);
+        }
+    }
+
+    protected void chainEncodeAll(final Collection messages, final ImapResponseComposer composer) {
+        for (Iterator iter = messages.iterator(); iter.hasNext();) {
+            ImapMessage message = (ImapMessage) iter.next();
+            chainEncode(message, composer);
         }
     }
+    
+    protected void chainEncode(ImapMessage message, ImapResponseComposer composer) {
+        next.encode(message, composer);
+    }
 
     /**
      * Is the given message acceptable?
@@ -66,9 +78,6 @@
      * @param acceptableMessage
      *            <code>ImapMessage</code>, not null
      * @param composer <code>ImapResponseComposer</code>, not null
-     * @param session
-     *            <code>ImapSession</code>, not null
      */
-    abstract protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer,
-            ImapSession session);
+    abstract protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer);
 }

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/base/EndImapEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/base/EndImapEncoder.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/base/EndImapEncoder.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/base/EndImapEncoder.java Sun Jun  3 07:11:16 2007
@@ -22,13 +22,12 @@
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.experimental.imapserver.ImapSession;
 import org.apache.james.experimental.imapserver.encode.ImapEncoder;
 import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
 
 public class EndImapEncoder extends AbstractLogEnabled implements ImapEncoder {
 
-    public void encode(ImapMessage message, ImapResponseComposer composer, ImapSession session) {
+    public void encode(ImapMessage message, ImapResponseComposer composer) {
         final Logger logger = getLogger();
         logger.warn("Unknown message");
         if (logger.isDebugEnabled()) {

Added: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/ExistsResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/ExistsResponseEncoder.java?view=auto&rev=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/ExistsResponseEncoder.java (added)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/ExistsResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -0,0 +1,44 @@
+/****************************************************************
+ * 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.experimental.imapserver.encode.imap4rev1;
+
+import org.apache.james.api.imap.ImapMessage;
+import org.apache.james.experimental.imapserver.encode.ImapEncoder;
+import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
+import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
+import org.apache.james.experimental.imapserver.message.response.imap4rev1.ExistsResponse;
+
+public class ExistsResponseEncoder extends AbstractChainedImapEncoder {
+
+    public ExistsResponseEncoder(ImapEncoder next) {
+        super(next);
+    }
+
+    public boolean isAcceptable(ImapMessage message) {
+        return message instanceof ExistsResponse;
+    }
+
+    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer) {
+        final ExistsResponse existsResponse = (ExistsResponse) acceptableMessage;
+        final int numberOfMessages = existsResponse.getNumberOfMessages();
+        composer.existsResponse(numberOfMessages);
+        
+    }
+}

Added: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/ExpungeResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/ExpungeResponseEncoder.java?view=auto&rev=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/ExpungeResponseEncoder.java (added)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/ExpungeResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -0,0 +1,24 @@
+package org.apache.james.experimental.imapserver.encode.imap4rev1;
+
+import org.apache.james.api.imap.ImapMessage;
+import org.apache.james.experimental.imapserver.encode.ImapEncoder;
+import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
+import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
+import org.apache.james.experimental.imapserver.message.response.imap4rev1.ExpungeResponse;
+
+public class ExpungeResponseEncoder extends AbstractChainedImapEncoder {
+
+    public ExpungeResponseEncoder(final ImapEncoder next) {
+        super(next);
+    }
+
+    public boolean isAcceptable(ImapMessage message) {
+        return (message instanceof ExpungeResponse);
+    }
+
+    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer) {
+        final ExpungeResponse expungeResponse = (ExpungeResponse) acceptableMessage;
+        final int messageSequenceNumber = expungeResponse.getMessageSequenceNumber();
+        composer.expungeResponse(messageSequenceNumber);
+    }
+}

Added: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/FetchResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/FetchResponseEncoder.java?view=auto&rev=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/FetchResponseEncoder.java (added)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/FetchResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -0,0 +1,27 @@
+package org.apache.james.experimental.imapserver.encode.imap4rev1;
+
+import org.apache.james.api.imap.ImapMessage;
+import org.apache.james.experimental.imapserver.encode.ImapEncoder;
+import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
+import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
+import org.apache.james.experimental.imapserver.message.response.imap4rev1.FetchResponse;
+
+public class FetchResponseEncoder extends AbstractChainedImapEncoder {
+
+    public FetchResponseEncoder(final ImapEncoder next) {
+        super(next);
+    }
+
+    public boolean isAcceptable(final ImapMessage message) {
+        return (message instanceof FetchResponse);
+    }
+
+    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer) {
+        final FetchResponse fetchResponse = (FetchResponse) acceptableMessage;
+        // TODO: this is inefficient
+        final String data = fetchResponse.getData();
+        final int number = fetchResponse.getNumber();
+        composer.fetchResponse(number, data);
+    }
+
+}

Added: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/RecentResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/RecentResponseEncoder.java?view=auto&rev=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/RecentResponseEncoder.java (added)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/RecentResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -0,0 +1,44 @@
+/****************************************************************
+ * 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.experimental.imapserver.encode.imap4rev1;
+
+import org.apache.james.api.imap.ImapMessage;
+import org.apache.james.experimental.imapserver.encode.ImapEncoder;
+import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
+import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
+import org.apache.james.experimental.imapserver.message.response.imap4rev1.RecentResponse;
+
+public class RecentResponseEncoder extends AbstractChainedImapEncoder {
+
+    public RecentResponseEncoder(ImapEncoder next) {
+        super(next);
+    }
+
+    public boolean isAcceptable(final ImapMessage message) {
+        return (message instanceof RecentResponse);
+    }
+
+    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer) {        // TODO Auto-generated method stub
+        final RecentResponse recentResponse = (RecentResponse) acceptableMessage;
+        final int numberFlaggedRecent = recentResponse.getNumberFlaggedRecent();
+        composer.recentResponse(numberFlaggedRecent);
+    }
+
+}

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/BadResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/BadResponseEncoder.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/BadResponseEncoder.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/BadResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -20,7 +20,6 @@
 package org.apache.james.experimental.imapserver.encode.imap4rev1.legacy;
 
 import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.experimental.imapserver.ImapSession;
 import org.apache.james.experimental.imapserver.encode.ImapEncoder;
 import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
 import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
@@ -36,7 +35,7 @@
         super(next);
     }
 
-    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) {
+    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer) {
         BadResponse response = (BadResponse) acceptableMessage;
         String tag = response.getTag();
         String message = response.getMessage();

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CapabilityResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CapabilityResponseEncoder.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CapabilityResponseEncoder.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CapabilityResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -18,15 +18,15 @@
  ****************************************************************/
 package org.apache.james.experimental.imapserver.encode.imap4rev1.legacy;
 
+import java.util.List;
+
 import org.apache.james.api.imap.ImapCommand;
 import org.apache.james.api.imap.ImapConstants;
 import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.experimental.imapserver.ImapSession;
 import org.apache.james.experimental.imapserver.encode.ImapEncoder;
 import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
 import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
 import org.apache.james.experimental.imapserver.message.response.imap4rev1.legacy.CapabilityResponse;
-import org.apache.james.imapserver.store.MailboxException;
 
 /**
  * @deprecated use specification model
@@ -37,15 +37,12 @@
         super(next);
     }
 
-    protected void doEncode(ImapResponseComposer response, ImapSession session, ImapCommand command, String tag) throws MailboxException {
-            
-    }
-
-    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) {
+    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer) {
         CapabilityResponse response = (CapabilityResponse) acceptableMessage;
         // TODO: inject capability text
         composer.untaggedResponse( ImapConstants.CAPABILITY_RESPONSE );
-        session.unsolicitedResponses( composer, false);
+        List unsolicitedResponses = response.getUnsolicatedResponses();
+        chainEncodeAll(unsolicitedResponses, composer);
         String tag = response.getTag();
         ImapCommand command = response.getCommand();
         composer.commandComplete( command , tag ); 

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CloseResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CloseResponseEncoder.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CloseResponseEncoder.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CloseResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -18,9 +18,10 @@
  ****************************************************************/
 package org.apache.james.experimental.imapserver.encode.imap4rev1.legacy;
 
+import java.util.List;
+
 import org.apache.james.api.imap.ImapCommand;
 import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.experimental.imapserver.ImapSession;
 import org.apache.james.experimental.imapserver.encode.ImapEncoder;
 import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
 import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
@@ -36,13 +37,10 @@
     }
 
     protected void doEncode(ImapMessage acceptableMessage,
-            ImapResponseComposer composer, ImapSession session) {
+            ImapResponseComposer composer) {
         CloseResponse response = (CloseResponse) acceptableMessage;
-        //TODO: the following comment was present in the code before refactoring
-        //TODO: doesn't seem to match the implementation
-        //TODO: check that implementation is correct
-        //          Don't send unsolicited responses on close.
-        session.unsolicitedResponses(composer, false);
+        List unsolicitedResponses = response.getUnsolicatedResponses();
+        chainEncodeAll(unsolicitedResponses, composer);
         final String tag = response.getTag();
         final ImapCommand command = response.getCommand();
         composer.commandComplete(command, tag);

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CommandCompleteResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CommandCompleteResponseEncoder.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CommandCompleteResponseEncoder.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CommandCompleteResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -19,9 +19,10 @@
 
 package org.apache.james.experimental.imapserver.encode.imap4rev1.legacy;
 
+import java.util.List;
+
 import org.apache.james.api.imap.ImapCommand;
 import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.experimental.imapserver.ImapSession;
 import org.apache.james.experimental.imapserver.encode.ImapEncoder;
 import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
 import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
@@ -36,14 +37,12 @@
         super(next);
     }
 
-    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) {
+    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer) {
         CommandCompleteResponse response = (CommandCompleteResponse) acceptableMessage;
         
-        final boolean writeUnsolicited = response.isWriteUnsolicited();
-        if (writeUnsolicited) {
-            final boolean useUids = response.isUseUids();
-            session.unsolicitedResponses( composer, useUids);
-        }
+        List unsolicitedResponses = response.getUnsolicatedResponses();
+        chainEncodeAll(unsolicitedResponses, composer);
+        
         final ImapCommand command = response.getCommand();
         final String tag = response.getTag();
         composer.commandComplete( command , tag);

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CommandFailedResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CommandFailedResponseEncoder.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CommandFailedResponseEncoder.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/CommandFailedResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -21,7 +21,6 @@
 
 import org.apache.james.api.imap.ImapCommand;
 import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.experimental.imapserver.ImapSession;
 import org.apache.james.experimental.imapserver.encode.ImapEncoder;
 import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
 import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
@@ -37,7 +36,7 @@
     }
 
 
-    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) {
+    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer) {
         CommandFailedResponse response = (CommandFailedResponse) acceptableMessage;
         final String responseCode = response.getResponseCode();
         final ImapCommand command = response.getCommand();

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/ErrorResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/ErrorResponseEncoder.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/ErrorResponseEncoder.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/ErrorResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -20,7 +20,6 @@
 package org.apache.james.experimental.imapserver.encode.imap4rev1.legacy;
 
 import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.experimental.imapserver.ImapSession;
 import org.apache.james.experimental.imapserver.encode.ImapEncoder;
 import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
 import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
@@ -38,7 +37,7 @@
         super(next);
     }
     
-    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) {
+    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer) {
         ErrorResponse response = (ErrorResponse) acceptableMessage;
         final String message = response.getMessage();
         final String tag = response.getTag();

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/ExamineAndSelectResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/ExamineAndSelectResponseEncoder.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/ExamineAndSelectResponseEncoder.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/ExamineAndSelectResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -22,12 +22,10 @@
 
 import org.apache.james.api.imap.ImapCommand;
 import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.experimental.imapserver.ImapSession;
 import org.apache.james.experimental.imapserver.encode.ImapEncoder;
 import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
 import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
 import org.apache.james.experimental.imapserver.message.response.imap4rev1.legacy.ExamineAndSelectResponse;
-import org.apache.james.mailboxmanager.MessageResult;
 
 /**
  * @deprecated responses should correspond directly to the specification
@@ -39,7 +37,7 @@
         super(next);
     }
 
-    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) {
+    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer) {
         ExamineAndSelectResponse response = (ExamineAndSelectResponse) acceptableMessage;
         final Flags permanentFlags = response.getPermanentFlags();
         composer.flagsResponse(permanentFlags);

Copied: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/LegacyFetchResponseEncoder.java (from r543869, james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/FetchResponseEncoder.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/LegacyFetchResponseEncoder.java?view=diff&rev=543901&p1=james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/FetchResponseEncoder.java&r1=543869&p2=james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/LegacyFetchResponseEncoder.java&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/FetchResponseEncoder.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/LegacyFetchResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -23,7 +23,6 @@
 
 import org.apache.james.api.imap.ImapCommand;
 import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.experimental.imapserver.ImapSession;
 import org.apache.james.experimental.imapserver.encode.ImapEncoder;
 import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
 import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
@@ -32,14 +31,14 @@
 /**
  * @deprecated responses should correspond directly to the specification
  */
-public class FetchResponseEncoder extends AbstractChainedImapEncoder {
+public class LegacyFetchResponseEncoder extends AbstractChainedImapEncoder {
 
-    public FetchResponseEncoder(ImapEncoder next) {
+    public LegacyFetchResponseEncoder(ImapEncoder next) {
         super(next);
     }
 
         protected void doEncode(ImapMessage acceptableMessage,
-            ImapResponseComposer composer, ImapSession session) {
+            ImapResponseComposer composer) {
         FetchResponse response = (FetchResponse) acceptableMessage;
         final List messageData = response.getMessageData();
         for (final Iterator it = messageData.iterator(); it.hasNext();) {
@@ -48,13 +47,11 @@
             final String content = data.getData();
             composer.fetchResponse(number, content);
         }
-        final boolean useUids = response.isUseUids();
-        boolean omitExpunged = (!useUids);
-        session.unsolicitedResponses(composer, omitExpunged, useUids);
+        List unsolicitedResponses = response.getUnsolicatedResponses();
+        chainEncodeAll(unsolicitedResponses, composer);
         final ImapCommand command = response.getCommand();
         final String tag = response.getTag();
         composer.commandComplete(command, tag);
-
     }
 
     protected boolean isAcceptable(ImapMessage message) {

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/ListResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/ListResponseEncoder.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/ListResponseEncoder.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/ListResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -23,7 +23,6 @@
 
 import org.apache.james.api.imap.ImapCommand;
 import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.experimental.imapserver.ImapSession;
 import org.apache.james.experimental.imapserver.encode.ImapEncoder;
 import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
 import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
@@ -38,7 +37,7 @@
     public ListResponseEncoder(ImapEncoder next) {
         super(next);
     }
-    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) {
+    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer) {
         ListResponse response = (ListResponse) acceptableMessage;
         final List messages = response.getMessages();
         final ImapCommand command = response.getCommand();
@@ -47,7 +46,8 @@
             
             composer.commandResponse(command, message);
         }
-        session.unsolicitedResponses( composer, false );
+        List unsolicitedResponses = response.getUnsolicatedResponses();
+        chainEncodeAll(unsolicitedResponses, composer);
         final String tag = response.getTag();
         composer.commandComplete( command, tag );        
     }

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/LogoutResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/LogoutResponseEncoder.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/LogoutResponseEncoder.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/LogoutResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -20,7 +20,6 @@
 
 import org.apache.james.api.imap.ImapCommand;
 import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.experimental.imapserver.ImapSession;
 import org.apache.james.experimental.imapserver.encode.ImapEncoder;
 import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
 import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
@@ -35,16 +34,14 @@
         super(next);
     }
     
-    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) {
+    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer) {
         LogoutResponse response = (LogoutResponse) acceptableMessage;
         
         final String message = response.getMessage();
         composer.byeResponse( message );
         final ImapCommand command = response.getCommand();
         final String tag = response.getTag();
-        composer.commandComplete( command, tag );
-        // TODO: think about how this will work with SEDA
-        session.closeConnection();            
+        composer.commandComplete( command, tag );          
         
     }
 

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/SearchResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/SearchResponseEncoder.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/SearchResponseEncoder.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/SearchResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -18,9 +18,10 @@
  ****************************************************************/
 package org.apache.james.experimental.imapserver.encode.imap4rev1.legacy;
 
+import java.util.List;
+
 import org.apache.james.api.imap.ImapCommand;
 import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.experimental.imapserver.ImapSession;
 import org.apache.james.experimental.imapserver.encode.ImapEncoder;
 import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
 import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
@@ -35,14 +36,15 @@
         super(next);
     }
 
-    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) {
+    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer) {
         SearchResponse response = (SearchResponse) acceptableMessage;
         final ImapCommand command = response.getCommand();
         final String idList = response.getIdList();
         composer.commandResponse( command, idList );
-        final boolean useUids = response.isUseUids();
-        boolean omitExpunged = (!useUids);
-        session.unsolicitedResponses( composer, omitExpunged, useUids );
+
+        List unsolicitedResponses = response.getUnsolicatedResponses();
+        chainEncodeAll(unsolicitedResponses, composer);
+        
         final String tag = response.getTag();
         composer.commandComplete( command, tag );  
         

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/StatusResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/StatusResponseEncoder.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/StatusResponseEncoder.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/StatusResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -18,9 +18,10 @@
  ****************************************************************/
 package org.apache.james.experimental.imapserver.encode.imap4rev1.legacy;
 
+import java.util.List;
+
 import org.apache.james.api.imap.ImapCommand;
 import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.experimental.imapserver.ImapSession;
 import org.apache.james.experimental.imapserver.encode.ImapEncoder;
 import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
 import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
@@ -35,12 +36,15 @@
         super(next);
     }
 
-    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) {
+    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer) {
         StatusResponse response = (StatusResponse) acceptableMessage;
         final ImapCommand command = response.getCommand();
         final String message = response.getMessage();
         composer.commandResponse( command, message);
-        session.unsolicitedResponses( composer, false );
+        
+        List unsolicitedResponses = response.getUnsolicatedResponses();
+        chainEncodeAll(unsolicitedResponses, composer);
+        
         final String tag = response.getTag();
         composer.commandComplete( command, tag );
     }

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/StoreResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/StoreResponseEncoder.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/StoreResponseEncoder.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/legacy/StoreResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -18,9 +18,10 @@
  ****************************************************************/
 package org.apache.james.experimental.imapserver.encode.imap4rev1.legacy;
 
+import java.util.List;
+
 import org.apache.james.api.imap.ImapCommand;
 import org.apache.james.api.imap.ImapMessage;
-import org.apache.james.experimental.imapserver.ImapSession;
 import org.apache.james.experimental.imapserver.encode.ImapEncoder;
 import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
 import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
@@ -36,11 +37,12 @@
         super(next);
     }
 
-    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) {
+    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer) {
         StoreResponse response = (StoreResponse) acceptableMessage;
-        final boolean useUids = response.isUseUids();
-        boolean omitExpunged = (!useUids);
-        session.unsolicitedResponses( composer, omitExpunged , useUids);
+        
+        List unsolicitedResponses = response.getUnsolicatedResponses();
+        chainEncodeAll(unsolicitedResponses, composer);
+        
         final ImapCommand command = response.getCommand();
         final String tag = response.getTag();
         composer.commandComplete( command, tag );            

Added: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/status/UntaggedNoResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/status/UntaggedNoResponseEncoder.java?view=auto&rev=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/status/UntaggedNoResponseEncoder.java (added)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/imap4rev1/status/UntaggedNoResponseEncoder.java Sun Jun  3 07:11:16 2007
@@ -0,0 +1,46 @@
+/****************************************************************
+ * 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.experimental.imapserver.encode.imap4rev1.status;
+
+import org.apache.james.api.imap.ImapMessage;
+import org.apache.james.experimental.imapserver.encode.ImapEncoder;
+import org.apache.james.experimental.imapserver.encode.ImapResponseComposer;
+import org.apache.james.experimental.imapserver.encode.base.AbstractChainedImapEncoder;
+import org.apache.james.experimental.imapserver.message.response.imap4rev1.status.UntaggedNoResponse;
+
+public class UntaggedNoResponseEncoder extends AbstractChainedImapEncoder {
+
+    public UntaggedNoResponseEncoder(ImapEncoder next) {
+        super(next);
+    }
+
+    protected void doEncode(ImapMessage acceptableMessage,
+            ImapResponseComposer composer) {
+        UntaggedNoResponse response = (UntaggedNoResponse) acceptableMessage;
+        final String displayText = response.getDisplayText();
+        final String responseCode = response.getResponseCode();
+        composer.untaggedNoResponse(displayText, responseCode);
+    }
+
+    protected boolean isAcceptable(ImapMessage message) {
+        return (message instanceof UntaggedNoResponse);
+    }
+
+}

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/main/DefaultImapEncoderFactory.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/main/DefaultImapEncoderFactory.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/main/DefaultImapEncoderFactory.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/encode/main/DefaultImapEncoderFactory.java Sun Jun  3 07:11:16 2007
@@ -21,6 +21,8 @@
 
 import org.apache.james.experimental.imapserver.encode.ImapEncoder;
 import org.apache.james.experimental.imapserver.encode.base.EndImapEncoder;
+import org.apache.james.experimental.imapserver.encode.imap4rev1.*;
+import org.apache.james.experimental.imapserver.encode.imap4rev1.status.*;
 import org.apache.james.experimental.imapserver.encode.imap4rev1.legacy.*;
 
 /**
@@ -29,15 +31,19 @@
 public class DefaultImapEncoderFactory {
     
     public static final ImapEncoder createDefaultEncoder() {
-     
         final EndImapEncoder endImapEncoder = new EndImapEncoder();
-        final StoreResponseEncoder storeResponseEncoder = new StoreResponseEncoder(endImapEncoder);
+        final UntaggedNoResponseEncoder untaggedNoResponseEncoder = new UntaggedNoResponseEncoder(endImapEncoder);
+        final RecentResponseEncoder recentResponseEncoder = new RecentResponseEncoder(untaggedNoResponseEncoder);
+        final FetchResponseEncoder fetchResponseEncoder = new FetchResponseEncoder(recentResponseEncoder);
+        final ExpungeResponseEncoder expungeResponseEncoder = new ExpungeResponseEncoder(fetchResponseEncoder);
+        final ExistsResponseEncoder existsResponseEncoder = new ExistsResponseEncoder(expungeResponseEncoder);
+        final StoreResponseEncoder storeResponseEncoder = new StoreResponseEncoder(existsResponseEncoder);
         final StatusResponseEncoder statusResponseEncoder = new StatusResponseEncoder(storeResponseEncoder);
         final SearchResponseEncoder searchResponseEncoder = new SearchResponseEncoder(statusResponseEncoder);
         final LogoutResponseEncoder logoutResponseEncoder = new LogoutResponseEncoder(searchResponseEncoder);
         final ListResponseEncoder listResponseEncoder = new ListResponseEncoder(logoutResponseEncoder);
-        final FetchResponseEncoder fetchResponseEncoder = new FetchResponseEncoder(listResponseEncoder);
-        final ExamineAndSelectResponseEncoder examineAndSelectResponseEncoder = new ExamineAndSelectResponseEncoder(fetchResponseEncoder);
+        final LegacyFetchResponseEncoder legacyFetchResponseEncoder = new LegacyFetchResponseEncoder(listResponseEncoder);
+        final ExamineAndSelectResponseEncoder examineAndSelectResponseEncoder = new ExamineAndSelectResponseEncoder(legacyFetchResponseEncoder);
         final ErrorResponseEncoder errorResponseEncoder = new ErrorResponseEncoder(examineAndSelectResponseEncoder);
         final CommandFailedResponseEncoder commandFailedResponseEncoder = new CommandFailedResponseEncoder(errorResponseEncoder);
         final CommandCompleteResponseEncoder commandCompleteResponseEncoder = new CommandCompleteResponseEncoder(commandFailedResponseEncoder);

Modified: james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/AbstractImapResponse.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/AbstractImapResponse.java?view=diff&rev=543901&r1=543900&r2=543901
==============================================================================
--- james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/AbstractImapResponse.java (original)
+++ james/server/sandbox/seda-imap-modular/experimental-seda-imap-function/src/main/java/org/apache/james/experimental/imapserver/message/response/AbstractImapResponse.java Sun Jun  3 07:11:16 2007
@@ -19,6 +19,10 @@
 
 package org.apache.james.experimental.imapserver.message.response;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.james.api.imap.ImapCommand;
@@ -30,11 +34,13 @@
 
     private final ImapCommand command;
     private final String tag;
-
+    private final List unsolicatedResponses;
+    
     public AbstractImapResponse(final ImapCommand command, final String tag) {
         super();
         this.command = command;
         this.tag = tag;
+        unsolicatedResponses = new ArrayList();
     }
     
     public final String getTag() {
@@ -43,5 +49,17 @@
 
     public ImapCommand getCommand() {
         return command;
+    }
+    
+    public void addUnsolicitedResponses(List responses) {
+        unsolicatedResponses.addAll(responses);
+    }
+    
+    public void addUnsolicitedResponses(ImapResponseMessage response) {
+        unsolicatedResponses.add(response);
+    }
+    
+    public List getUnsolicatedResponses() {
+        return Collections.unmodifiableList(unsolicatedResponses);
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org