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 no...@apache.org on 2011/01/17 16:27:38 UTC

svn commit: r1059950 [1/3] - in /james/imap/branches/nio-refactoring: api/src/main/java/org/apache/james/imap/api/ api/src/main/java/org/apache/james/imap/api/message/response/ api/src/main/java/org/apache/james/imap/api/process/ message/src/main/java/...

Author: norman
Date: Mon Jan 17 15:27:34 2011
New Revision: 1059950

URL: http://svn.apache.org/viewvc?rev=1059950&view=rev
Log:
Some pending changes for imap-nio refactoring.. still work in progress

Added:
    james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/DecodingException.java
      - copied, changed from r1058707, james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/DecodingException.java
    james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/ImapLineHandler.java
    james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/ImapMessageCallback.java
    james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/ImapRequestLine.java
      - copied, changed from r1059123, james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapRequestLineReader.java
    james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/LineHandlerMessageCallback.java
    james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/message/response/ImapResponseComposer.java
      - copied, changed from r1059037, james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/ImapResponseComposer.java
    james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/message/response/Literal.java
      - copied, changed from r1058707, james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/message/response/Literal.java
    james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/process/ImapDecoder.java
      - copied, changed from r1058707, james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapDecoder.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/decode/MockImapMessageCallback.java
Removed:
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/DecodingException.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapDecoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapRequestLineReader.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/ImapResponseComposer.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/main/ImapSessionImpl.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/message/response/Literal.java
Modified:
    james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/process/ImapSession.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/DecoderUtils.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/FetchPartPathDecoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapDecoderFactory.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/base/AbstractImapCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/base/EolInputStream.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/main/DefaultImapDecoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/AbstractUidCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/AppendCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/AuthenticateCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CapabilityCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CheckCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CloseCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CopyCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CreateCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/DeleteCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/ExamineCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/ExpungeCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/FetchCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/IdleCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/ListCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/LoginCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/LogoutCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/NamespaceCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/NoopCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/RenameCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/SearchCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/SelectCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/StartTLSCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/StatusCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/StoreCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/SubscribeCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/UidCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/UnselectCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/UnsubscribeCommandParser.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/CapabilityResponseEncoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/ContinuationRequestEncoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/ContinuationResponseEncoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/ExistsResponseEncoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/ExpungeResponseEncoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/FetchResponseEncoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/FlagsResponseEncoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/ImapEncoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/LSubResponseEncoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/ListResponseEncoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/ListingEncodingUtils.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/MailboxStatusResponseEncoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/NamespaceResponseEncoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/RecentResponseEncoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/SearchResponseEncoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/StatusResponseEncoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/base/AbstractChainedImapEncoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/base/AbstractImapResponseComposer.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/base/ChannelImapResponseComposer.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/base/EndImapEncoder.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/main/AbstractImapRequestHandler.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/main/DefaultImapDecoderFactory.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/main/stream/ImapRequestStreamHandler.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/message/request/ContinuationRequest.java
    james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/message/response/FetchResponse.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/decode/DecoderUtilsTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/decode/FetchPartPathDecoderTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/decode/main/IdRangeParseTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/decode/parser/FetchCommandParserPartialFetchTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserAndParenthesesTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserCharsetTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserNotTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserOrTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserQuotedCharsetTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserSearchKeySequenceSetTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserSearchKeyTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserTopLevelAndTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/decode/parser/StoreCommandParserTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/encode/FakeImapSession.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderEnvelopeTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderNoExtensionsTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/encode/ImapResponseTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/encode/ListResponseEncoderTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/encode/ListingEncodingUtilsTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/encode/MailboxStatusResponseEncoderTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/encode/MockImapResponseComposer.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/encode/NamespaceResponseEncoderTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java
    james/imap/branches/nio-refactoring/message/src/test/java/org/apache/james/imap/encode/StatusResponseEncoderTest.java
    james/imap/branches/nio-refactoring/processor/src/main/java/org/apache/james/imap/processor/IdleProcessor.java

Copied: james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/DecodingException.java (from r1058707, james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/DecodingException.java)
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/DecodingException.java?p2=james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/DecodingException.java&p1=james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/DecodingException.java&r1=1058707&r2=1059950&rev=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/DecodingException.java (original)
+++ james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/DecodingException.java Mon Jan 17 15:27:34 2011
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.imap.decode;
+package org.apache.james.imap.api;
 
 import java.io.IOException;
 

Added: james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/ImapLineHandler.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/ImapLineHandler.java?rev=1059950&view=auto
==============================================================================
--- james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/ImapLineHandler.java (added)
+++ james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/ImapLineHandler.java Mon Jan 17 15:27:34 2011
@@ -0,0 +1,9 @@
+package org.apache.james.imap.api;
+
+import org.apache.james.imap.api.process.ImapSession;
+
+public interface ImapLineHandler {
+    
+    public void onLine(ImapSession session, byte data[], ImapMessageCallback callback);
+
+}

Added: james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/ImapMessageCallback.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/ImapMessageCallback.java?rev=1059950&view=auto
==============================================================================
--- james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/ImapMessageCallback.java (added)
+++ james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/ImapMessageCallback.java Mon Jan 17 15:27:34 2011
@@ -0,0 +1,9 @@
+package org.apache.james.imap.api;
+
+
+public interface ImapMessageCallback {
+
+    public void onMessage(ImapMessage message);
+    
+    public void onException(DecodingException ex);
+}

Copied: james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/ImapRequestLine.java (from r1059123, james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapRequestLineReader.java)
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/ImapRequestLine.java?p2=james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/ImapRequestLine.java&p1=james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapRequestLineReader.java&r1=1059123&r2=1059950&rev=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapRequestLineReader.java (original)
+++ james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/ImapRequestLine.java Mon Jan 17 15:27:34 2011
@@ -17,12 +17,12 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.imap.decode;
+package org.apache.james.imap.api;
 
 import java.io.IOException;
 
 import org.apache.james.imap.api.display.HumanReadableText;
-import org.apache.james.imap.encode.ImapResponseComposer;
+import org.apache.james.imap.api.message.response.ImapResponseComposer;
 
 /**
  * Wraps the client input reader with a bunch of convenience methods, allowing
@@ -31,7 +31,7 @@ import org.apache.james.imap.encode.Imap
  * 
  * @version $Revision: 109034 $
  */
-public class ImapRequestLineReader {
+public class ImapRequestLine {
     
 
     protected boolean nextSeen = false;
@@ -43,7 +43,7 @@ public class ImapRequestLineReader {
     private byte[] data;
     private int pos = 0;
 
-    public ImapRequestLineReader(byte [] data, ImapResponseComposer composer) {
+    public ImapRequestLine(byte [] data, ImapResponseComposer composer) {
         this.composer = composer;
         this.data = data;
     }

Added: james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/LineHandlerMessageCallback.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/LineHandlerMessageCallback.java?rev=1059950&view=auto
==============================================================================
--- james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/LineHandlerMessageCallback.java (added)
+++ james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/LineHandlerMessageCallback.java Mon Jan 17 15:27:34 2011
@@ -0,0 +1,33 @@
+package org.apache.james.imap.api;
+
+import org.apache.james.imap.api.process.ImapSession;
+
+public class LineHandlerMessageCallback implements ImapMessageCallback{
+
+    private ImapMessageCallback callback;
+    private ImapSession session;
+
+    public LineHandlerMessageCallback(ImapSession session, ImapMessageCallback callback) {
+        this.callback = callback;
+        this.session = session;
+    }
+    
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.imap.api.ImapMessageCallback#onMessage(org.apache.james.imap.api.ImapMessage)
+     */
+    public void onMessage(ImapMessage message) {
+        session.popImapLineHandler();
+        callback.onMessage(message);
+    }
+
+    /*
+     * (non-Javadoc)
+     * @see org.apache.james.imap.api.ImapMessageCallback#onException(org.apache.james.imap.api.DecodingException)
+     */
+    public void onException(DecodingException ex) {
+        session.popImapLineHandler();
+        callback.onException(ex);
+    }
+
+}

Copied: james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/message/response/ImapResponseComposer.java (from r1059037, james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/ImapResponseComposer.java)
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/message/response/ImapResponseComposer.java?p2=james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/message/response/ImapResponseComposer.java&p1=james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/ImapResponseComposer.java&r1=1059037&r2=1059950&rev=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/encode/ImapResponseComposer.java (original)
+++ james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/message/response/ImapResponseComposer.java Mon Jan 17 15:27:34 2011
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.imap.encode;
+package org.apache.james.imap.api.message.response;
 
 import java.io.IOException;
 import java.util.Collection;
@@ -26,7 +26,6 @@ import java.util.List;
 import javax.mail.Flags;
 
 import org.apache.james.imap.api.ImapCommand;
-import org.apache.james.imap.message.response.Literal;
 
 public interface ImapResponseComposer {
 

Copied: james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/message/response/Literal.java (from r1058707, james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/message/response/Literal.java)
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/message/response/Literal.java?p2=james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/message/response/Literal.java&p1=james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/message/response/Literal.java&r1=1058707&r2=1059950&rev=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/message/response/Literal.java (original)
+++ james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/message/response/Literal.java Mon Jan 17 15:27:34 2011
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.imap.message.response;
+package org.apache.james.imap.api.message.response;
 
 import java.io.IOException;
 import java.nio.channels.WritableByteChannel;

Copied: james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/process/ImapDecoder.java (from r1058707, james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapDecoder.java)
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/process/ImapDecoder.java?p2=james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/process/ImapDecoder.java&p1=james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapDecoder.java&r1=1058707&r2=1059950&rev=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapDecoder.java (original)
+++ james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/process/ImapDecoder.java Mon Jan 17 15:27:34 2011
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imap.decode;
+package org.apache.james.imap.api.process;
 
-import org.apache.james.imap.api.ImapMessage;
-import org.apache.james.imap.api.process.ImapSession;
+import org.apache.james.imap.api.ImapMessageCallback;
+import org.apache.james.imap.api.ImapRequestLine;
 
 public interface ImapDecoder {
-    public ImapMessage decode(final ImapRequestLineReader request,
-            ImapSession session);
+    public void decode(final ImapRequestLine request,
+            ImapSession session, ImapMessageCallback callback);
 }

Modified: james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/process/ImapSession.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/process/ImapSession.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/process/ImapSession.java (original)
+++ james/imap/branches/nio-refactoring/api/src/main/java/org/apache/james/imap/api/process/ImapSession.java Mon Jan 17 15:27:34 2011
@@ -20,6 +20,7 @@
 package org.apache.james.imap.api.process;
 
 import org.apache.commons.logging.Log;
+import org.apache.james.imap.api.ImapLineHandler;
 import org.apache.james.imap.api.ImapSessionState;
 
 /**
@@ -31,6 +32,9 @@ import org.apache.james.imap.api.ImapSes
  */
 public interface ImapSession {
     
+    ImapDecoder decoder = null;
+
+
     /**
      * Gets the context sensitive log for this session.
      * Understanding the context of a log message is an important
@@ -123,5 +127,7 @@ public interface ImapSession {
     public boolean supportStartTLS();
     
     
+    public void pushImapLineHandler(ImapLineHandler handler);
     
+    public void popImapLineHandler();
 }

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/DecoderUtils.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/DecoderUtils.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/DecoderUtils.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/DecoderUtils.java Mon Jan 17 15:27:34 2011
@@ -27,6 +27,7 @@ import java.util.TimeZone;
 
 import javax.mail.Flags;
 
+import org.apache.james.imap.api.DecodingException;
 import org.apache.james.imap.api.display.HumanReadableText;
 import org.apache.james.imap.api.message.MessageFlags;
 

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/FetchPartPathDecoder.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/FetchPartPathDecoder.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/FetchPartPathDecoder.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/FetchPartPathDecoder.java Mon Jan 17 15:27:34 2011
@@ -22,6 +22,7 @@ package org.apache.james.imap.decode;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.james.imap.api.DecodingException;
 import org.apache.james.imap.api.display.HumanReadableText;
 
 

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapCommandParser.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapCommandParser.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapCommandParser.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapCommandParser.java Mon Jan 17 15:27:34 2011
@@ -19,7 +19,8 @@
 
 package org.apache.james.imap.decode;
 
-import org.apache.james.imap.api.ImapMessage;
+import org.apache.james.imap.api.ImapMessageCallback;
+import org.apache.james.imap.api.ImapRequestLine;
 import org.apache.james.imap.api.process.ImapSession;
 
 /**
@@ -40,5 +41,5 @@ public interface ImapCommandParser {
      * @param session the {@link ImapSession}
      * @return <code>ImapCommandMessage</code>
      */
-    ImapMessage parse(ImapRequestLineReader request, String tag, ImapSession session);
+    void parse(ImapRequestLine request, String tag, ImapSession session, ImapMessageCallback callback);
 }

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapDecoderFactory.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapDecoderFactory.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapDecoderFactory.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/ImapDecoderFactory.java Mon Jan 17 15:27:34 2011
@@ -19,6 +19,8 @@
 
 package org.apache.james.imap.decode;
 
+import org.apache.james.imap.api.process.ImapDecoder;
+
 public interface ImapDecoderFactory {
 
     public ImapDecoder buildImapDecoder();

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/base/AbstractImapCommandParser.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/base/AbstractImapCommandParser.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/base/AbstractImapCommandParser.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/base/AbstractImapCommandParser.java Mon Jan 17 15:27:34 2011
@@ -35,18 +35,19 @@ import java.util.List;
 
 import javax.mail.Flags;
 
+import org.apache.james.imap.api.DecodingException;
 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.ImapMessageCallback;
+import org.apache.james.imap.api.ImapRequestLine;
 import org.apache.james.imap.api.display.HumanReadableText;
 import org.apache.james.imap.api.message.IdRange;
 import org.apache.james.imap.api.message.request.DayMonthYear;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
 import org.apache.james.imap.api.process.ImapSession;
 import org.apache.james.imap.decode.DecoderUtils;
-import org.apache.james.imap.decode.DecodingException;
 import org.apache.james.imap.decode.ImapCommandParser;
-import org.apache.james.imap.decode.ImapRequestLineReader;
 import org.apache.james.imap.decode.MessagingImapCommandParser;
 
 /**
@@ -91,21 +92,25 @@ public abstract class AbstractImapComman
      *            <code>ImapRequestLineReader</code>, not null
      * @return <code>ImapCommandMessage</code>, not null
      */
-    public final ImapMessage parse(ImapRequestLineReader request, String tag, ImapSession session) {
-        ImapMessage result;
+    public final void parse(ImapRequestLine request, final String tag, final ImapSession session, final ImapMessageCallback callback) {
         if (!command.validForState(session.getState())) {
-            result = statusResponseFactory.taggedNo(tag, command,
+            ImapMessage result = statusResponseFactory.taggedNo(tag, command,
                     HumanReadableText.INVALID_COMMAND);
+            callback.onMessage(result);
         } else {
-            try {
-           
-                result = decode(command, request, tag, session);
-            } catch (DecodingException e) {
-                session.getLog().debug("Cannot parse protocol ", e);
-                result = statusResponseFactory.taggedBad(tag, command, e.getKey());
-            }
+            decode(command, request, tag, session, new ImapMessageCallback() {
+                    
+                public void onMessage(ImapMessage message) {
+                    callback.onMessage(message);
+                }
+                    
+                public void onException(DecodingException ex) {
+                    session.getLog().debug("Cannot parse protocol ", ex);
+                    ImapMessage result = statusResponseFactory.taggedBad(tag, command, ex.getKey());
+                    onMessage(result);                        
+                }
+            });
         }
-        return result;
     }
 
  
@@ -122,14 +127,14 @@ public abstract class AbstractImapComman
      * @throws DecodingException
      *             if the request cannot be parsed
      */
-    protected abstract ImapMessage decode(ImapCommand command,
-            ImapRequestLineReader request, String tag, ImapSession session) throws DecodingException;
+    protected abstract void decode(ImapCommand command,
+            ImapRequestLine request, String tag, ImapSession session, ImapMessageCallback callback);
     
 
     /**
      * Reads an argument of type "atom" from the request.
      */
-    public static String atom(ImapRequestLineReader request)
+    public static String atom(ImapRequestLine request)
             throws DecodingException {
         return consumeWord(request, new ATOM_CHARValidator());
     }
@@ -137,7 +142,7 @@ public abstract class AbstractImapComman
     /**
      * Reads a command "tag" from the request.
      */
-    public static String tag(ImapRequestLineReader request)
+    public static String tag(ImapRequestLine request)
             throws DecodingException {
         CharacterValidator validator = new TagCharValidator();
         return consumeWord(request, validator);
@@ -146,7 +151,7 @@ public abstract class AbstractImapComman
     /**
      * Reads an argument of type "astring" from the request.
      */
-    public String astring(ImapRequestLineReader request)
+    public String astring(ImapRequestLine request)
             throws DecodingException {
         return astring(request, null);
     }
@@ -154,7 +159,7 @@ public abstract class AbstractImapComman
     /**
      * Reads an argument of type "astring" from the request.
      */
-    public String astring(ImapRequestLineReader request, Charset charset)
+    public String astring(ImapRequestLine request, Charset charset)
             throws DecodingException {
         char next = request.nextWordChar();
         switch (next) {
@@ -170,6 +175,7 @@ public abstract class AbstractImapComman
     /**
      * Reads an argument of type "nstring" from the request.
      */
+    /*
     public String nstring(ImapRequestLineReader request)
             throws DecodingException {
         char next = request.nextWordChar();
@@ -188,6 +194,7 @@ public abstract class AbstractImapComman
                 }
         }
     }
+    */
 
     /**
      * Reads a "mailbox" argument from the request. Not implemented *exactly* as
@@ -198,7 +205,7 @@ public abstract class AbstractImapComman
      * variants of ;; INBOX (e.g. "iNbOx") MUST be interpreted as INBOX ;; not
      * as an astring.
      */
-    public String mailbox(ImapRequestLineReader request)
+    public String mailbox(ImapRequestLine request)
             throws DecodingException {
         String mailbox = astring(request);
         if (mailbox.equalsIgnoreCase(ImapConstants.INBOX_NAME)) {
@@ -216,7 +223,7 @@ public abstract class AbstractImapComman
      * @return <code>DayMonthYear</code>, not null
      * @throws DecodingException
      */
-    public DayMonthYear date(ImapRequestLineReader request)
+    public DayMonthYear date(ImapRequestLine request)
             throws DecodingException {
 
         final char one = request.consume();
@@ -245,7 +252,7 @@ public abstract class AbstractImapComman
         return result;
     }
 
-    private void nextIsDash(ImapRequestLineReader request)
+    private void nextIsDash(ImapRequestLine request)
             throws DecodingException {
         final char next = request.consume();
         if (next != '-') {
@@ -256,7 +263,7 @@ public abstract class AbstractImapComman
     /**
      * Reads a "date-time" argument from the request.
      */
-    public Date dateTime(ImapRequestLineReader request)
+    public Date dateTime(ImapRequestLine request)
             throws DecodingException {
         char next = request.nextWordChar();
         String dateString;
@@ -274,7 +281,7 @@ public abstract class AbstractImapComman
      * the next SPACE. Characters are tested by the supplied CharacterValidator,
      * and an exception is thrown if invalid characters are encountered.
      */
-    protected static String consumeWord(ImapRequestLineReader request,
+    protected static String consumeWord(ImapRequestLine request,
             CharacterValidator validator) throws DecodingException {
         StringBuffer atom = new StringBuffer();
 
@@ -305,7 +312,7 @@ public abstract class AbstractImapComman
      * @param charset ,
      *            or null for <code>US-ASCII</code>
      */
-    protected String consumeLiteralLine(final ImapRequestLineReader request,
+    protected String consumeLiteralLine(final ImapRequestLine request,
             final Charset charset) throws DecodingException {
         if (charset == null) {
             return consumeLiteralLine(request, US_ASCII);
@@ -329,7 +336,7 @@ public abstract class AbstractImapComman
         }
     }
 
-    protected int consumeLiteralSize(final ImapRequestLineReader request) throws DecodingException {
+    protected int consumeLiteralSize(final ImapRequestLine request) throws DecodingException {
         // The 1st character must be '{'
         consumeChar(request, '{');
 
@@ -388,7 +395,7 @@ public abstract class AbstractImapComman
      * Consumes the next character in the request, checking that it matches the
      * expected one. This method should be used when the
      */
-    protected void consumeChar(ImapRequestLineReader request, char expected)
+    protected void consumeChar(ImapRequestLine request, char expected)
             throws DecodingException {
         char consumed = request.consume();
         if (consumed != expected) {
@@ -400,7 +407,7 @@ public abstract class AbstractImapComman
     /**
      * Reads a quoted string value from the request.
      */
-    protected String consumeQuoted(ImapRequestLineReader request)
+    protected String consumeQuoted(ImapRequestLine request)
             throws DecodingException {
         return consumeQuoted(request, null);
     }
@@ -408,7 +415,7 @@ public abstract class AbstractImapComman
     /**
      * Reads a quoted string value from the request.
      */
-    protected String consumeQuoted(ImapRequestLineReader request,
+    protected String consumeQuoted(ImapRequestLine request,
             Charset charset) throws DecodingException {
         if (charset == null) {
             return consumeQuoted(request, US_ASCII);
@@ -425,7 +432,7 @@ public abstract class AbstractImapComman
     /**
      * Reads a "flags" argument from the request.
      */
-    public Flags flagList(ImapRequestLineReader request)
+    public Flags flagList(ImapRequestLine request)
             throws DecodingException {
         Flags flags = new Flags();
         request.nextWordChar();
@@ -451,11 +458,11 @@ public abstract class AbstractImapComman
     /**
      * Reads an argument of type "number" from the request.
      */
-    public long number(ImapRequestLineReader request) throws DecodingException {
+    public long number(ImapRequestLine request) throws DecodingException {
         return readDigits(request, 0, 0, true);
     }
 
-    private long readDigits(final ImapRequestLineReader request, int add,
+    private long readDigits(final ImapRequestLine request, int add,
             final long total, final boolean first) throws DecodingException {
         final char next;
         if (first) {
@@ -504,7 +511,7 @@ public abstract class AbstractImapComman
      * as nzNumbers (although it's ok as a "number". I think the spec is a bit
      * shonky.)
      */
-    public long nzNumber(ImapRequestLineReader request)
+    public long nzNumber(ImapRequestLine request)
             throws DecodingException {
         long number = number(request);
         if (number == 0) {
@@ -533,7 +540,7 @@ public abstract class AbstractImapComman
      * @throws DecodingException
      *             If characters are encountered before the endLine.
      */
-    public void endLine(ImapRequestLineReader request) throws DecodingException {
+    public void endLine(ImapRequestLine request) throws DecodingException {
         request.eol();
     }
 
@@ -541,7 +548,7 @@ public abstract class AbstractImapComman
      * Reads a "message set" argument, and parses into an IdSet. Currently only
      * supports a single range of values.
      */
-    public IdRange[] parseIdRange(ImapRequestLineReader request)
+    public IdRange[] parseIdRange(ImapRequestLine request)
             throws DecodingException {
         CharacterValidator validator = new MessageSetCharValidator();
         String nextWord = consumeWord(request, validator);
@@ -682,7 +689,7 @@ public abstract class AbstractImapComman
             charBuffer = CharBuffer.allocate(QUOTED_BUFFER_INITIAL_CAPACITY);
         }
 
-        public String decode(ImapRequestLineReader request)
+        public String decode(ImapRequestLine request)
                 throws DecodingException {
             try {
                 decoder.reset();

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/base/EolInputStream.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/base/EolInputStream.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/base/EolInputStream.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/base/EolInputStream.java Mon Jan 17 15:27:34 2011
@@ -23,20 +23,20 @@ import java.io.FilterInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
-import org.apache.james.imap.decode.ImapRequestLineReader;
+import org.apache.james.imap.api.ImapRequestLine;
 
 /**
- * {@link FileInputStream} which call the eol() method of the {@link ImapRequestLineReader} when the end 
+ * {@link FileInputStream} which call the eol() method of the {@link ImapRequestLine} when the end 
  * of the wrapped {@link InputStream} is reached
  * 
  *
  */
 public class EolInputStream extends FilterInputStream{
 
-    private ImapRequestLineReader reader;
+    private ImapRequestLine reader;
     private boolean eolCalled = false;
     
-    public EolInputStream(ImapRequestLineReader reader, InputStream in) {
+    public EolInputStream(ImapRequestLine reader, InputStream in) {
         super(in);
         this.reader = reader;
     }

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/main/DefaultImapDecoder.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/main/DefaultImapDecoder.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/main/DefaultImapDecoder.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/main/DefaultImapDecoder.java Mon Jan 17 15:27:34 2011
@@ -19,16 +19,17 @@
 package org.apache.james.imap.decode.main;
 
 import org.apache.commons.logging.Log;
+import org.apache.james.imap.api.DecodingException;
 import org.apache.james.imap.api.ImapMessage;
+import org.apache.james.imap.api.ImapMessageCallback;
+import org.apache.james.imap.api.ImapRequestLine;
 import org.apache.james.imap.api.ImapSessionState;
 import org.apache.james.imap.api.display.HumanReadableText;
 import org.apache.james.imap.api.message.response.StatusResponseFactory;
+import org.apache.james.imap.api.process.ImapDecoder;
 import org.apache.james.imap.api.process.ImapSession;
 import org.apache.james.imap.decode.ImapCommandParser;
 import org.apache.james.imap.decode.ImapCommandParserFactory;
-import org.apache.james.imap.decode.ImapDecoder;
-import org.apache.james.imap.decode.ImapRequestLineReader;
-import org.apache.james.imap.decode.DecodingException;
 import org.apache.james.imap.decode.base.AbstractImapCommandParser;
 
 /**
@@ -52,42 +53,39 @@ public class DefaultImapDecoder implemen
      * (non-Javadoc)
      * @see org.apache.james.imap.decode.ImapDecoder#decode(org.apache.james.imap.decode.ImapRequestLineReader, org.apache.james.imap.api.process.ImapSession)
      */
-    public ImapMessage decode(ImapRequestLineReader request, ImapSession session) {
-        ImapMessage message;
+    public void decode(ImapRequestLine request, ImapSession session, ImapMessageCallback callback) {
         final Log logger = session.getLog();
-
         try {
             final String tag = AbstractImapCommandParser.tag(request);
-            message = decodeCommandTagged(request, tag, session);
+            decodeCommandTagged(request, tag, session, callback);
+
         } catch (DecodingException e) {
             logger.debug("Cannot parse tag", e);
 
             // When the tag cannot be read, there is something seriously wrong.
             // It is probably not possible to recover
             // and (since this may indicate an attack) wiser not to try
-            message = responseFactory.bye(HumanReadableText.ILLEGAL_TAG);
+            ImapMessage  message = responseFactory.bye(HumanReadableText.ILLEGAL_TAG);
+            callback.onMessage(message);
             session.logout();
         }
-        return message;
     }
 
     
-    private ImapMessage decodeCommandTagged(
-            final ImapRequestLineReader request, 
-            final String tag, final ImapSession session) {
-        ImapMessage message;
+    private void decodeCommandTagged(
+            final ImapRequestLine request, 
+            final String tag, final ImapSession session, ImapMessageCallback callback) {
         if (session.getLog().isDebugEnabled()) {
             session.getLog().debug("Got <tag>: " + tag);
         }
         try {
             final String commandName = AbstractImapCommandParser.atom(request);
-            message = decodeCommandNamed(request, tag, commandName,
-                    session);
+            decodeCommandNamed(request, tag, commandName,
+                    session, callback);
         } catch (DecodingException e) {
             session.getLog().debug("Error during initial request parsing", e);
-            message = unknownCommand(tag, session);
+            callback.onMessage(unknownCommand(tag, session));
         }
-        return message;
     }
 
     private ImapMessage unknownCommand(final String tag,
@@ -104,20 +102,18 @@ public class DefaultImapDecoder implemen
         return message;
     }
 
-    private ImapMessage decodeCommandNamed(final ImapRequestLineReader request,
+    private void decodeCommandNamed(final ImapRequestLine request,
             final String tag, String commandName,
-            final ImapSession session) {
-        ImapMessage message;
+            final ImapSession session, ImapMessageCallback callback) {
         if (session.getLog().isDebugEnabled()) {
             session.getLog().debug("Got <command>: " + commandName);
         }
         final ImapCommandParser command = imapCommands.getParser(commandName);
         if (command == null) {
             session.getLog().info("Missing command implementation.");
-            message = unknownCommand(tag, session);
+            callback.onMessage(unknownCommand(tag, session));
         } else {
-            message = command.parse(request, tag, session);
+            command.parse(request, tag, session, callback);
         }
-        return message;
     }
 }

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/AbstractUidCommandParser.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/AbstractUidCommandParser.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/AbstractUidCommandParser.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/AbstractUidCommandParser.java Mon Jan 17 15:27:34 2011
@@ -20,10 +20,9 @@
 package org.apache.james.imap.decode.parser;
 
 import org.apache.james.imap.api.ImapCommand;
-import org.apache.james.imap.api.ImapMessage;
+import org.apache.james.imap.api.ImapMessageCallback;
+import org.apache.james.imap.api.ImapRequestLine;
 import org.apache.james.imap.api.process.ImapSession;
-import org.apache.james.imap.decode.ImapRequestLineReader;
-import org.apache.james.imap.decode.DecodingException;
 import org.apache.james.imap.decode.base.AbstractImapCommandParser;
 
 abstract class AbstractUidCommandParser extends AbstractImapCommandParser {
@@ -32,20 +31,17 @@ abstract class AbstractUidCommandParser 
     	super(command);
     }
 
-    protected ImapMessage decode(ImapCommand command,
-            ImapRequestLineReader request, String tag, ImapSession session) throws DecodingException {
-        final ImapMessage result = decode(command, request, tag, false, session);
-        return result;
+    protected void decode(ImapCommand command,
+            ImapRequestLine request, String tag, ImapSession session, ImapMessageCallback callback) {
+        decode(command, request, tag, false, session, callback);
     }
 
-    public ImapMessage decode(ImapRequestLineReader request, String tag,
-            boolean useUids, ImapSession session) throws DecodingException {
+    public void decode(ImapRequestLine request, String tag,
+            boolean useUids, ImapSession session, ImapMessageCallback callback) {
         final ImapCommand command = getCommand();
-        final ImapMessage result = decode(command, request, tag, useUids, session);
-        return result;
+        decode(command, request, tag, useUids, session, callback);
     }
 
-    protected abstract ImapMessage decode(ImapCommand command,
-            ImapRequestLineReader request, String tag, boolean useUids, ImapSession session)
-            throws DecodingException;
+    protected abstract void decode(ImapCommand command,
+            ImapRequestLine request, String tag, boolean useUids, ImapSession session, ImapMessageCallback callback);
 }

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/AppendCommandParser.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/AppendCommandParser.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/AppendCommandParser.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/AppendCommandParser.java Mon Jan 17 15:27:34 2011
@@ -28,14 +28,15 @@ import java.util.Date;
 
 import javax.mail.Flags;
 
+import org.apache.james.imap.api.DecodingException;
 import org.apache.james.imap.api.ImapCommand;
 import org.apache.james.imap.api.ImapConstants;
+import org.apache.james.imap.api.ImapLineHandler;
 import org.apache.james.imap.api.ImapMessage;
+import org.apache.james.imap.api.ImapMessageCallback;
+import org.apache.james.imap.api.ImapRequestLine;
 import org.apache.james.imap.api.display.HumanReadableText;
 import org.apache.james.imap.api.process.ImapSession;
-import org.apache.james.imap.decode.ImapDecoder;
-import org.apache.james.imap.decode.ImapRequestLineReader;
-import org.apache.james.imap.decode.DecodingException;
 import org.apache.james.imap.decode.base.AbstractImapCommandParser;
 import org.apache.james.imap.message.request.AppendRequest;
 
@@ -56,7 +57,7 @@ public class AppendCommandParser extends
      * "flag_list" argument from the request. If not, returns a MessageFlags
      * with no flags set.
      */
-    public Flags optionalAppendFlags(ImapRequestLineReader request)
+    public Flags optionalAppendFlags(ImapRequestLine request)
             throws DecodingException {
         char next = request.nextWordChar();
         if (next == '(') {
@@ -70,7 +71,7 @@ public class AppendCommandParser extends
      * If the next character in the request is a '"', tries to read a DateTime
      * argument. If not, returns null.
      */
-    public Date optionalDateTime(ImapRequestLineReader request)
+    public Date optionalDateTime(ImapRequestLine request)
             throws DecodingException {
         char next = request.nextWordChar();
         if (next == '"') {
@@ -81,82 +82,7 @@ public class AppendCommandParser extends
     }
 
 
-    /*
-     * (non-Javadoc)
-     * @see org.apache.james.imap.decode.base.AbstractImapCommandParser#decode(org.apache.james.imap.api.ImapCommand, org.apache.james.imap.decode.ImapRequestLineReader, java.lang.String, org.apache.commons.logging.Log, org.apache.james.imap.api.process.ImapSession)
-     */
-    protected ImapMessage decode(final ImapCommand command,
-            ImapRequestLineReader request, final String tag, ImapSession session) throws DecodingException {
-        final String mailboxName = mailbox(request);
-        Flags flags = optionalAppendFlags(request);
-        if (flags == null) {
-            flags = new Flags();
-        }
-        final Flags f = flags;
-        
-        Date datetime = optionalDateTime(request);
-        if (datetime == null) {
-            datetime = new Date();
-        }
-        final Date dt = datetime;
-        request.nextWordChar();
-        
-        try {
-            final File file = File.createTempFile("imap-append", ".m64");
-            final FileOutputStream out = new FileOutputStream(file);
-            final int size = consumeLiteralSize(request);
-            session.setAttribute(BYTES_WRITTEN, 0);
-            
-            ImapDecoder nextDecoder = new ImapDecoder() {
-                
-                public ImapMessage decode(ImapRequestLineReader request, ImapSession session) {
-                    int bytes = (Integer)session.getAttribute(BYTES_WRITTEN);
-                    try {
-                        while(request.isConsumed() == false && bytes < size) {
-                            out.write((byte)request.consume());
-                            bytes++;
-                        }
-
-                        // as we push data without delimiters we need to put them in back
-                        if (bytes != size) {
-                            out.write('\r');
-                            bytes++;
-                        }
-                        
-                        if (bytes != size) {
-                            out.write('\n');
-                            bytes++;
-                        }
-                        
-                        if (bytes == size) {
-                            request.eol();
-                            session.setAttribute(ImapConstants.NEXT_DECODER, null);
-                            session.setAttribute(BYTES_WRITTEN, null);
-                            return new AppendRequest(command, mailboxName, f, dt, new DeleteOnCloseInputStream(new FileInputStream(file), file) , tag);
-                        } else {
-                            session.setAttribute(BYTES_WRITTEN, bytes);
-                        }
-                        
-                    } catch (DecodingException e) {
-                        e.printStackTrace();
-                    } catch (IOException e) {
-                        e.printStackTrace();
-                    }
-                    return null;
-                }
-            };
-            session.setAttribute(ImapConstants.NEXT_DECODER, nextDecoder);
-
-            
-            return null;
-            
-        } catch (IOException e1) {
-            e1.printStackTrace();
-            throw new DecodingException(HumanReadableText.GENERIC_FAILURE_DURING_PROCESSING,e1.getMessage());
-        }
 
-       
-    }
     
     private class DeleteOnCloseInputStream extends FilterInputStream {
 
@@ -174,4 +100,80 @@ public class AppendCommandParser extends
         }
         
     }
+
+    @Override
+    protected void decode(final ImapCommand command, ImapRequestLine request, final String tag, final ImapSession session, final ImapMessageCallback callback) {
+        try {
+            final String mailboxName = mailbox(request);
+            Flags flags = optionalAppendFlags(request);
+            if (flags == null) {
+                flags = new Flags();
+            }
+            final Flags f = flags;
+            
+            Date datetime = optionalDateTime(request);
+            if (datetime == null) {
+                datetime = new Date();
+            }
+            final Date dt = datetime;
+            request.nextWordChar();
+            
+            try {
+                final File file = File.createTempFile("imap-append", ".m64");
+                final FileOutputStream out = new FileOutputStream(file);
+                final int size = consumeLiteralSize(request);
+                session.setAttribute(BYTES_WRITTEN, 0);
+                session.pushImapLineHandler( new ImapLineHandler() {
+                    
+                    public void onLine(ImapSession session, byte[] data, ImapMessageCallback callback) {
+                        int bytes = (Integer)session.getAttribute(BYTES_WRITTEN);
+                        try {
+                            int left = size - bytes;
+                            if (left -2 > data.length) {
+                                out.write(data);
+                                bytes += data.length;
+                             
+                                // as we push data without delimiters we need to put them in back
+                                if (bytes != size) {
+                                    out.write("\r\n".getBytes());
+                                    bytes += 2;
+                                }
+                            } else {
+                                out.write(data, 0, left);
+                                bytes = size;
+                            }
+                            
+
+                            
+                            
+                            if (bytes == size) {
+                                session.popImapLineHandler();
+                                session.setAttribute(BYTES_WRITTEN, null);
+                                ImapMessage message =  new AppendRequest(command, mailboxName, f, dt, new DeleteOnCloseInputStream(new FileInputStream(file), file) , tag);
+                                callback.onMessage(message);
+                            } else {
+                                
+                                session.setAttribute(BYTES_WRITTEN, bytes);
+                            }
+                            
+                        } catch (DecodingException e) {
+                            session.popImapLineHandler();
+                            callback.onException(e);
+                        } catch (IOException e) {
+                            session.popImapLineHandler();
+                            callback.onException(new DecodingException(HumanReadableText.GENERIC_FAILURE_DURING_PROCESSING,e.getMessage()));
+                        }
+                    }
+                });
+                            
+            } catch (IOException e1) {            
+                callback.onException(new DecodingException(HumanReadableText.GENERIC_FAILURE_DURING_PROCESSING,e1.getMessage()));
+            }
+            
+        } catch (DecodingException e2) {
+            callback.onException(e2);
+
+        }
+        
+    }
 }

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/AuthenticateCommandParser.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/AuthenticateCommandParser.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/AuthenticateCommandParser.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/AuthenticateCommandParser.java Mon Jan 17 15:27:34 2011
@@ -18,12 +18,13 @@
  ****************************************************************/
 package org.apache.james.imap.decode.parser;
 
+import org.apache.james.imap.api.DecodingException;
 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.ImapMessageCallback;
+import org.apache.james.imap.api.ImapRequestLine;
 import org.apache.james.imap.api.process.ImapSession;
-import org.apache.james.imap.decode.ImapRequestLineReader;
-import org.apache.james.imap.decode.DecodingException;
 import org.apache.james.imap.decode.base.AbstractImapCommandParser;
 import org.apache.james.imap.message.request.AuthenticateRequest;
 
@@ -38,18 +39,17 @@ public class AuthenticateCommandParser e
     	super(ImapCommand.nonAuthenticatedStateCommand(ImapConstants.AUTHENTICATE_COMMAND_NAME));
     }
 
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.james.imap.decode.base.AbstractImapCommandParser#decode(org.apache.james.imap.api.ImapCommand, org.apache.james.imap.decode.ImapRequestLineReader, java.lang.String, org.apache.james.imap.api.process.ImapSession)
-     */
-    protected ImapMessage decode(ImapCommand command,
-            ImapRequestLineReader request, String tag, ImapSession session) throws DecodingException {
-        String authType = astring(request);
-        endLine(request);
-        final ImapMessage result = new AuthenticateRequest(command,
+    @Override
+    protected void decode(ImapCommand command, ImapRequestLine request, String tag, ImapSession session, ImapMessageCallback callback) {
+        try {
+            String authType = astring(request);
+            endLine(request);
+            final ImapMessage result = new AuthenticateRequest(command,
                 authType, tag);
-        return result;
+            callback.onMessage(result);
+        } catch (DecodingException e) {
+            callback.onException(e);
+        }
     }
 
 }

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CapabilityCommandParser.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CapabilityCommandParser.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CapabilityCommandParser.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CapabilityCommandParser.java Mon Jan 17 15:27:34 2011
@@ -18,12 +18,13 @@
  ****************************************************************/
 package org.apache.james.imap.decode.parser;
 
+import org.apache.james.imap.api.DecodingException;
 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.ImapMessageCallback;
+import org.apache.james.imap.api.ImapRequestLine;
 import org.apache.james.imap.api.process.ImapSession;
-import org.apache.james.imap.decode.ImapRequestLineReader;
-import org.apache.james.imap.decode.DecodingException;
 import org.apache.james.imap.decode.base.AbstractImapCommandParser;
 import org.apache.james.imap.message.request.CapabilityRequest;
 
@@ -37,16 +38,17 @@ public class CapabilityCommandParser ext
     	super(ImapCommand.anyStateCommand(ImapConstants.CAPABILITY_COMMAND_NAME));
     }
 
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.james.imap.decode.base.AbstractImapCommandParser#decode(org.apache.james.imap.api.ImapCommand, org.apache.james.imap.decode.ImapRequestLineReader, java.lang.String, org.apache.james.imap.api.process.ImapSession)
-     */
-    protected ImapMessage decode(ImapCommand command,
-            ImapRequestLineReader request, String tag, ImapSession session) throws DecodingException {
-        endLine(request);
-        final ImapMessage result = new CapabilityRequest(command, tag);
-        return result;
+    @Override
+    protected void decode(ImapCommand command, ImapRequestLine request, String tag, ImapSession session, ImapMessageCallback callback) {
+        try {
+            endLine(request);
+            final ImapMessage result = new CapabilityRequest(command, tag);
+            callback.onMessage(result);
+        } catch (DecodingException e) {
+            callback.onException(e);
+        }
     }
 
+
+
 }

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CheckCommandParser.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CheckCommandParser.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CheckCommandParser.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CheckCommandParser.java Mon Jan 17 15:27:34 2011
@@ -18,12 +18,13 @@
  ****************************************************************/
 package org.apache.james.imap.decode.parser;
 
+import org.apache.james.imap.api.DecodingException;
 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.ImapMessageCallback;
+import org.apache.james.imap.api.ImapRequestLine;
 import org.apache.james.imap.api.process.ImapSession;
-import org.apache.james.imap.decode.ImapRequestLineReader;
-import org.apache.james.imap.decode.DecodingException;
 import org.apache.james.imap.decode.base.AbstractImapCommandParser;
 import org.apache.james.imap.message.request.CheckRequest;
 
@@ -40,13 +41,16 @@ public class CheckCommandParser extends 
 
     /*
      * (non-Javadoc)
-     * @see org.apache.james.imap.decode.base.AbstractImapCommandParser#decode(org.apache.james.imap.api.ImapCommand, org.apache.james.imap.decode.ImapRequestLineReader, java.lang.String, org.apache.commons.logging.Log, org.apache.james.imap.api.process.ImapSession)
+     * @see org.apache.james.imap.decode.base.AbstractImapCommandParser#decode(org.apache.james.imap.api.ImapCommand, org.apache.james.imap.decode.ImapRequestLineReader, java.lang.String, org.apache.james.imap.api.process.ImapSession, org.apache.james.imap.api.ImapMessageCallback)
      */
-    protected ImapMessage decode(ImapCommand command,
-            ImapRequestLineReader request, String tag, ImapSession session) throws DecodingException {
-        endLine(request);
-        final ImapMessage result = new CheckRequest(command, tag);
-        return result;
+    protected void decode(ImapCommand command, ImapRequestLine request, String tag, ImapSession session, ImapMessageCallback callback) {
+        try {
+            endLine(request);
+            final ImapMessage result = new CheckRequest(command, tag);
+            callback.onMessage(result);
+        } catch (DecodingException e) {
+            callback.onException(e);
+        }
     }
 
 }

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CloseCommandParser.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CloseCommandParser.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CloseCommandParser.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CloseCommandParser.java Mon Jan 17 15:27:34 2011
@@ -18,12 +18,13 @@
  ****************************************************************/
 package org.apache.james.imap.decode.parser;
 
+import org.apache.james.imap.api.DecodingException;
 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.ImapMessageCallback;
+import org.apache.james.imap.api.ImapRequestLine;
 import org.apache.james.imap.api.process.ImapSession;
-import org.apache.james.imap.decode.ImapRequestLineReader;
-import org.apache.james.imap.decode.DecodingException;
 import org.apache.james.imap.decode.base.AbstractImapCommandParser;
 import org.apache.james.imap.message.request.CloseRequest;
 
@@ -38,15 +39,16 @@ class CloseCommandParser extends Abstrac
     	super(ImapCommand.selectedStateCommand(ImapConstants.CLOSE_COMMAND_NAME));
     }
 
-    /*
-     * (non-Javadoc)
-     * @see org.apache.james.imap.decode.base.AbstractImapCommandParser#decode(org.apache.james.imap.api.ImapCommand, org.apache.james.imap.decode.ImapRequestLineReader, java.lang.String, org.apache.james.imap.api.process.ImapSession)
-     */
-    protected ImapMessage decode(ImapCommand command,
-            ImapRequestLineReader request, String tag, ImapSession session) throws DecodingException {
-        endLine(request);
-        final ImapMessage result = new CloseRequest(command, tag);
-        return result;
+    @Override
+    protected void decode(ImapCommand command, ImapRequestLine request, String tag, ImapSession session, ImapMessageCallback callback) {
+        try {
+            endLine(request);
+            final ImapMessage result = new CloseRequest(command, tag);
+            callback.onMessage(result);
+        } catch (DecodingException e) {
+            callback.onException(e);
+        }
+
     }
 
 }

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CopyCommandParser.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CopyCommandParser.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CopyCommandParser.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CopyCommandParser.java Mon Jan 17 15:27:34 2011
@@ -18,13 +18,14 @@
  ****************************************************************/
 package org.apache.james.imap.decode.parser;
 
+import org.apache.james.imap.api.DecodingException;
 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.ImapMessageCallback;
+import org.apache.james.imap.api.ImapRequestLine;
 import org.apache.james.imap.api.message.IdRange;
 import org.apache.james.imap.api.process.ImapSession;
-import org.apache.james.imap.decode.ImapRequestLineReader;
-import org.apache.james.imap.decode.DecodingException;
 import org.apache.james.imap.message.request.CopyRequest;
 
 /**
@@ -39,17 +40,21 @@ public class CopyCommandParser extends A
 
     /*
      * (non-Javadoc)
-     * @see org.apache.james.imap.decode.parser.AbstractUidCommandParser#decode(org.apache.james.imap.api.ImapCommand, org.apache.james.imap.decode.ImapRequestLineReader, java.lang.String, boolean, org.apache.james.imap.api.process.ImapSession)
+     * @see org.apache.james.imap.decode.parser.AbstractUidCommandParser#decode(org.apache.james.imap.api.ImapCommand, org.apache.james.imap.decode.ImapRequestLineReader, java.lang.String, boolean, org.apache.james.imap.api.process.ImapSession, org.apache.james.imap.api.ImapMessageCallback)
      */
-    protected ImapMessage decode(ImapCommand command,
-            ImapRequestLineReader request, String tag, boolean useUids, ImapSession session)
-            throws DecodingException {
-        IdRange[] idSet = parseIdRange(request);
-        String mailboxName = mailbox(request);
-        endLine(request);
-        final ImapMessage result = new CopyRequest(
-                command, idSet, mailboxName, useUids, tag);
-        return result;
+    protected void decode(ImapCommand command,
+            ImapRequestLine request, String tag, boolean useUids, ImapSession session, ImapMessageCallback callback) {
+        try {
+            IdRange[] idSet = parseIdRange(request);
+            String mailboxName = mailbox(request);
+            endLine(request);
+            final ImapMessage result = new CopyRequest(
+                    command, idSet, mailboxName, useUids, tag);
+            callback.onMessage(result);
+        } catch (DecodingException e) {
+            callback.onException(e);
+        }
+       
     }
 
 }

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CreateCommandParser.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CreateCommandParser.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CreateCommandParser.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/CreateCommandParser.java Mon Jan 17 15:27:34 2011
@@ -18,13 +18,14 @@
  ****************************************************************/
 package org.apache.james.imap.decode.parser;
 
+import org.apache.james.imap.api.DecodingException;
 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.ImapMessageCallback;
+import org.apache.james.imap.api.ImapRequestLine;
 import org.apache.james.imap.api.ImapSessionUtils;
 import org.apache.james.imap.api.process.ImapSession;
-import org.apache.james.imap.decode.DecodingException;
-import org.apache.james.imap.decode.ImapRequestLineReader;
 import org.apache.james.imap.decode.base.AbstractImapCommandParser;
 import org.apache.james.imap.message.request.CreateRequest;
 import org.apache.james.mailbox.MailboxSession;
@@ -39,31 +40,32 @@ public class CreateCommandParser extends
         super(ImapCommand.authenticatedStateCommand(ImapConstants.CREATE_COMMAND_NAME));
     }
 
-
-    /*
-     * (non-Javadoc)
-     * @see org.apache.james.imap.decode.base.AbstractImapCommandParser#decode(org.apache.james.imap.api.ImapCommand, org.apache.james.imap.decode.ImapRequestLineReader, java.lang.String, org.apache.james.imap.api.process.ImapSession)
-     */
-    protected ImapMessage decode(ImapCommand command,
-            ImapRequestLineReader request, String tag, ImapSession session) throws DecodingException {
-        String mailboxName = mailbox(request);
-
-        
-        MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
-
-        // Check if we have an mailboxsession. This is a workaround for IMAP-240:
-        // https://issues.apache.org/jira/browse/IMAP-240
-        if (mailboxSession != null) {
-            // RFC3501@6.3.3p2
-            // When mailbox name is suffixed with hierarchy separator
-            // name created must remove tailing delimiter
-            if (mailboxName.endsWith(Character.toString(mailboxSession.getPathDelimiter()))) {
-                mailboxName = mailboxName.substring(0, mailboxName.length() -1);
+    @Override
+    protected void decode(ImapCommand command, ImapRequestLine request, String tag, ImapSession session, ImapMessageCallback callback) {
+        try {
+            String mailboxName = mailbox(request);
+
+            
+            MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
+
+            // Check if we have an mailboxsession. This is a workaround for IMAP-240:
+            // https://issues.apache.org/jira/browse/IMAP-240
+            if (mailboxSession != null) {
+                // RFC3501@6.3.3p2
+                // When mailbox name is suffixed with hierarchy separator
+                // name created must remove tailing delimiter
+                if (mailboxName.endsWith(Character.toString(mailboxSession.getPathDelimiter()))) {
+                    mailboxName = mailboxName.substring(0, mailboxName.length() -1);
+                }
             }
+            endLine(request);
+            final ImapMessage result = new CreateRequest(command, mailboxName, tag);
+            callback.onMessage(result);
+        } catch (DecodingException e) {
+            callback.onException(e);
         }
-        endLine(request);
-        final ImapMessage result = new CreateRequest(command, mailboxName, tag);
-        return result;
+
     }
 
+
 }

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/DeleteCommandParser.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/DeleteCommandParser.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/DeleteCommandParser.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/DeleteCommandParser.java Mon Jan 17 15:27:34 2011
@@ -18,12 +18,13 @@
  ****************************************************************/
 package org.apache.james.imap.decode.parser;
 
+import org.apache.james.imap.api.DecodingException;
 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.ImapMessageCallback;
+import org.apache.james.imap.api.ImapRequestLine;
 import org.apache.james.imap.api.process.ImapSession;
-import org.apache.james.imap.decode.ImapRequestLineReader;
-import org.apache.james.imap.decode.DecodingException;
 import org.apache.james.imap.decode.base.AbstractImapCommandParser;
 import org.apache.james.imap.message.request.DeleteRequest;
 
@@ -40,15 +41,17 @@ public class DeleteCommandParser extends
 
     /*
      * (non-Javadoc)
-     * @see org.apache.james.imap.decode.base.AbstractImapCommandParser#decode(org.apache.james.imap.api.ImapCommand, org.apache.james.imap.decode.ImapRequestLineReader, java.lang.String, org.apache.james.imap.api.process.ImapSession)
+     * @see org.apache.james.imap.decode.base.AbstractImapCommandParser#decode(org.apache.james.imap.api.ImapCommand, org.apache.james.imap.decode.ImapRequestLineReader, java.lang.String, org.apache.james.imap.api.process.ImapSession, org.apache.james.imap.api.ImapMessageCallback)
      */
-    protected ImapMessage decode(ImapCommand command,
-            ImapRequestLineReader request, String tag, ImapSession session) throws DecodingException {
-        String mailboxName = mailbox(request);
-        endLine(request);
-        final ImapMessage result = new DeleteRequest(command,
-                mailboxName, tag);
-        return result;
+    protected void decode(ImapCommand command, ImapRequestLine request, String tag, ImapSession session, ImapMessageCallback callback) {
+        try {
+            String mailboxName = mailbox(request);
+            endLine(request);
+            final ImapMessage result = new DeleteRequest(command, mailboxName, tag);
+            callback.onMessage(result);
+        } catch (DecodingException e) {
+            callback.onException(e);
+        }
     }
 
 }

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/ExamineCommandParser.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/ExamineCommandParser.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/ExamineCommandParser.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/ExamineCommandParser.java Mon Jan 17 15:27:34 2011
@@ -18,12 +18,13 @@
  ****************************************************************/
 package org.apache.james.imap.decode.parser;
 
+import org.apache.james.imap.api.DecodingException;
 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.ImapMessageCallback;
+import org.apache.james.imap.api.ImapRequestLine;
 import org.apache.james.imap.api.process.ImapSession;
-import org.apache.james.imap.decode.ImapRequestLineReader;
-import org.apache.james.imap.decode.DecodingException;
 import org.apache.james.imap.decode.base.AbstractImapCommandParser;
 import org.apache.james.imap.message.request.ExamineRequest;
 
@@ -41,12 +42,17 @@ public class ExamineCommandParser extend
      * (non-Javadoc)
      * @see org.apache.james.imap.decode.base.AbstractImapCommandParser#decode(org.apache.james.imap.api.ImapCommand, org.apache.james.imap.decode.ImapRequestLineReader, java.lang.String, org.apache.james.imap.api.process.ImapSession)
      */
-    protected ImapMessage decode(ImapCommand command,
-            ImapRequestLineReader request, String tag, ImapSession session) throws DecodingException {
-        final String mailboxName = mailbox(request);
-        endLine(request);
-        final ImapMessage result = new ExamineRequest(command, mailboxName, tag);
-        return result;
+    protected void decode(ImapCommand command,
+            ImapRequestLine request, String tag, ImapSession session, ImapMessageCallback callback) {
+        try {
+            String mailboxName = mailbox(request);
+            endLine(request);
+            final ImapMessage result = new ExamineRequest(command, mailboxName, tag);
+            callback.onMessage(result);
+        } catch (DecodingException e) {
+            callback.onException(e);
+        }
+       
     }
 
 }

Modified: james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/ExpungeCommandParser.java
URL: http://svn.apache.org/viewvc/james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/ExpungeCommandParser.java?rev=1059950&r1=1059949&r2=1059950&view=diff
==============================================================================
--- james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/ExpungeCommandParser.java (original)
+++ james/imap/branches/nio-refactoring/message/src/main/java/org/apache/james/imap/decode/parser/ExpungeCommandParser.java Mon Jan 17 15:27:34 2011
@@ -18,13 +18,14 @@
  ****************************************************************/
 package org.apache.james.imap.decode.parser;
 
+import org.apache.james.imap.api.DecodingException;
 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.ImapMessageCallback;
+import org.apache.james.imap.api.ImapRequestLine;
 import org.apache.james.imap.api.message.IdRange;
 import org.apache.james.imap.api.process.ImapSession;
-import org.apache.james.imap.decode.ImapRequestLineReader;
-import org.apache.james.imap.decode.DecodingException;
 import org.apache.james.imap.message.request.ExpungeRequest;
 
 /**
@@ -37,21 +38,23 @@ public class ExpungeCommandParser extend
         super(ImapCommand.selectedStateCommand(ImapConstants.EXPUNGE_COMMAND_NAME));
     }
 
-
-    
     /*
      * (non-Javadoc)
-     * @see org.apache.james.imap.decode.parser.AbstractUidCommandParser#decode(org.apache.james.imap.api.ImapCommand, org.apache.james.imap.decode.ImapRequestLineReader, java.lang.String, boolean, org.apache.james.imap.api.process.ImapSession)
+     * @see org.apache.james.imap.decode.parser.AbstractUidCommandParser#decode(org.apache.james.imap.api.ImapCommand, org.apache.james.imap.decode.ImapRequestLineReader, java.lang.String, boolean, org.apache.james.imap.api.process.ImapSession, org.apache.james.imap.api.ImapMessageCallback)
      */
-    protected ImapMessage decode(ImapCommand command, ImapRequestLineReader request, String tag, boolean useUids, ImapSession session) throws DecodingException {
-        IdRange[] uidSet = null;
-        if (useUids) {
-            uidSet = parseIdRange(request);
+    protected void decode(ImapCommand command, ImapRequestLine request, String tag, boolean useUids, ImapSession session, ImapMessageCallback callback) {
+        try {
+            IdRange[] uidSet = null;
+            if (useUids) {
+                uidSet = parseIdRange(request);
+            }
+            endLine(request);
+            final ImapMessage result = new ExpungeRequest(command, tag, uidSet);
+            callback.onMessage(result);
+        } catch (DecodingException ex) {
+            callback.onException(ex);
         }
-        endLine(request);
 
-        final ImapMessage result = new ExpungeRequest(command, tag, uidSet);
-        return result;
     }
 
 }



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