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/03/06 18:59:12 UTC

svn commit: r515230 [2/4] - in /james/server/sandbox/seda-imap/src: java/org/apache/james/imapserver/ java/org/apache/james/imapserver/commands/ java/org/apache/james/imapserver/decode/ java/org/apache/james/imapserver/encode/ java/org/apache/james/ima...

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/AuthenticateCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/AuthenticateCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/AuthenticateCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/AuthenticateCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/AuthenticateCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/AuthenticateCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/AuthenticateCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,21 +16,35 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
+import org.apache.james.imapserver.message.ImapMessageFactory;
 
-class AuthenticateCommandParser extends AbstractImapCommandParser {
+class AuthenticateCommandParser extends AbstractImapCommandParser implements InitialisableCommandFactory {
 
     public AuthenticateCommandParser() {
-        super(new AuthenticateCommand());
     }
+    
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getAuthenticate();
+        setCommand(command);
+    }
+
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
         String authType = astring( request );
         endLine( request );        
-        final AuthenticateCommandMessage result = new AuthenticateCommandMessage(command, authType, tag);
+        final ImapMessageFactory factory = getMessageFactory();
+        final ImapCommandMessage result = factory.createAuthenticateMessage(command, authType, tag);
         return result;
     }
     

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CapabilityCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/CapabilityCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CapabilityCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/CapabilityCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CapabilityCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/CapabilityCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CapabilityCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,20 +16,33 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
+import org.apache.james.imapserver.message.ImapMessageFactory;
 
-class CapabilityCommandParser extends AbstractImapCommandParser {
+class CapabilityCommandParser extends AbstractImapCommandParser  implements InitialisableCommandFactory {
 
     public CapabilityCommandParser() {
-        super(new CapabilityCommand());
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getCapability();
+        setCommand(command);
+    }
+    
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
         endLine( request );
-        final CapabilityCommandMessage result = new CapabilityCommandMessage(command, tag);
+        final ImapMessageFactory factory = getMessageFactory();
+        final ImapCommandMessage result = factory.createCapabilityMessage(command, tag);
         return result;
     }
     

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CheckCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/CheckCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CheckCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/CheckCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CheckCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/CheckCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CheckCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,20 +16,31 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
 
-class CheckCommandParser extends AbstractImapCommandParser {
+class CheckCommandParser extends AbstractImapCommandParser  implements InitialisableCommandFactory {
 
     public CheckCommandParser() {
-        super(new CheckCommand());
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getCheck();
+        setCommand(command);
+    }
+    
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
         endLine( request );
-        final CompleteCommandMessage result = new CompleteCommandMessage(command, false, tag);
+        final ImapCommandMessage result = getMessageFactory().createCompleteMessage(command, false, tag);
         return result;
     }
     

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CloseCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/CloseCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CloseCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/CloseCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CloseCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/CloseCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CloseCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,20 +16,33 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
+import org.apache.james.imapserver.message.ImapMessageFactory;
 
-class CloseCommandParser extends AbstractImapCommandParser {
+class CloseCommandParser extends AbstractImapCommandParser  implements InitialisableCommandFactory {
 
     public CloseCommandParser() {
-        super(new CloseCommand());
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getClose();
+        setCommand(command);
+    }
+    
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
         endLine( request );
-        final CloseCommandMessage result = new CloseCommandMessage(command, tag);
+        final ImapMessageFactory factory = getMessageFactory();
+        final ImapCommandMessage result = factory.createCloseMessage(command, tag);
         return result;
     }
     

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CopyCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/CopyCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CopyCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/CopyCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CopyCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/CopyCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CopyCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,24 +16,35 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.IdRange;
+import org.apache.james.imapserver.message.ImapCommandMessage;
 
-class CopyCommandParser extends AbstractUidCommandParser {
+class CopyCommandParser extends AbstractUidCommandParser  implements InitialisableCommandFactory {
 
     public CopyCommandParser() {
-        super(new CopyCommand());
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, 
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getCopy();
+        setCommand(command);
+    }
+    
+    protected ImapCommandMessage decode(ImapCommand command, 
             ImapRequestLineReader request, String tag, boolean useUids) throws ProtocolException {
         IdRange[] idSet = parseIdRange( request );
         String mailboxName = mailbox( request );
         endLine( request );
-        final CopyCommandMessage result = 
-            new CopyCommandMessage(command, idSet, mailboxName, useUids, tag);
+        final ImapCommandMessage result = getMessageFactory().createCopyMessage(command, idSet, mailboxName, useUids, tag);
         return result;
     }
     

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CreateCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/CreateCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CreateCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/CreateCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CreateCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/CreateCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/CreateCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,21 +16,35 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
+import org.apache.james.imapserver.message.ImapMessageFactory;
 
-class CreateCommandParser extends AbstractImapCommandParser {
+class CreateCommandParser extends AbstractImapCommandParser  implements InitialisableCommandFactory {
 
     public CreateCommandParser() {
-        super(new CreateCommand());
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getCreate();
+        setCommand(command);
+    }
+    
+    
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
         String mailboxName = mailbox( request );
         endLine( request );
-        final CreateCommandMessage result = new CreateCommandMessage(command, mailboxName, tag);
+        final ImapMessageFactory factory = getMessageFactory();
+        final ImapCommandMessage result = factory.createCreateMessage(command, mailboxName, tag);
         return result;
     }
     

Added: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/DelegatingImapCommandParser.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/DelegatingImapCommandParser.java?view=auto&rev=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/DelegatingImapCommandParser.java (added)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/DelegatingImapCommandParser.java Tue Mar  6 09:59:02 2007
@@ -0,0 +1,28 @@
+/****************************************************************
+ * 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.imapserver.decode;
+
+interface DelegatingImapCommandParser {
+
+    public abstract ImapCommandParserFactory getParserFactory();
+
+    public abstract void setParserFactory(
+            ImapCommandParserFactory imapCommandFactory);
+
+}

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/DeleteCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/DeleteCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/DeleteCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/DeleteCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/DeleteCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/DeleteCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/DeleteCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,22 +16,34 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
+import org.apache.james.imapserver.message.ImapMessageFactory;
 
-class DeleteCommandParser extends AbstractImapCommandParser {
+class DeleteCommandParser extends AbstractImapCommandParser  implements InitialisableCommandFactory {
 
     public DeleteCommandParser() {
-        super(new DeleteCommand());
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getDelete();
+        setCommand(command);
+    }
+    
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
         String mailboxName = mailbox( request );
         endLine( request );
-        final DeleteCommandMessage result = 
-            new DeleteCommandMessage( command, mailboxName, tag );
+        final ImapMessageFactory factory = getMessageFactory();
+        final ImapCommandMessage result = factory.createDeleteMessage( command, mailboxName, tag );
         return result;
     }
     

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ExamineCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/ExamineCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ExamineCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/ExamineCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ExamineCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/ExamineCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ExamineCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,21 +16,32 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
 
-class ExamineCommandParser extends AbstractImapCommandParser {
+class ExamineCommandParser extends AbstractImapCommandParser  implements InitialisableCommandFactory {
     
     public ExamineCommandParser() {
-        super(new ExamineCommand());
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getExamine();
+        setCommand(command);
+    }
+    
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
         final String mailboxName = mailbox( request );
         endLine( request );
-        final SelectCommandMessage result = new SelectCommandMessage(command, mailboxName, true, tag);
+        final ImapCommandMessage result = getMessageFactory().createExamineMessage(command, mailboxName, tag);
         return result;
     }
     

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ExpungeCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/ExpungeCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ExpungeCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/ExpungeCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ExpungeCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/ExpungeCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ExpungeCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,20 +16,33 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
+import org.apache.james.imapserver.message.ImapMessageFactory;
 
-class ExpungeCommandParser extends AbstractImapCommandParser {
+class ExpungeCommandParser extends AbstractImapCommandParser  implements InitialisableCommandFactory {
 
     public ExpungeCommandParser() {
-        super(new ExpungeCommand());
+    }
+    
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getExpunge();
+        setCommand(command);
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
         endLine( request );
-        final ExpungeCommandMessage result = new ExpungeCommandMessage(command, tag);
+        final ImapMessageFactory factory = getMessageFactory();
+        final ImapCommandMessage result = factory.createExpungeMessage(command, tag);
         return result;
     }
     

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/FetchCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/FetchCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/FetchCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/FetchCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/FetchCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/FetchCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/FetchCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,17 +16,32 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.BodyFetchElement;
+import org.apache.james.imapserver.message.FetchRequest;
+import org.apache.james.imapserver.message.IdRange;
+import org.apache.james.imapserver.message.ImapCommandMessage;
+import org.apache.james.imapserver.message.ImapMessageFactory;
 
-class FetchCommandParser extends AbstractUidCommandParser
+class FetchCommandParser extends AbstractUidCommandParser  implements InitialisableCommandFactory
 {
     public FetchCommandParser() {
-        super(new FetchCommand());
     }
 
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getFetch();
+        setCommand(command);
+    }
+    
     public FetchRequest fetchRequest( ImapRequestLineReader request )
             throws ProtocolException
     {
@@ -69,34 +84,34 @@
             //if ( next == ' ' || next == ')'  || next == '\n' || next == '\r') {
             if (next != '[') {
                 if ( "FAST".equalsIgnoreCase( name ) ) {
-                    fetch.flags = true;
-                    fetch.internalDate = true;
-                    fetch.size = true;
+                    fetch.setFlags(true);
+                    fetch.setInternalDate(true);
+                    fetch.setSize(true);
                 } else if ("FULL".equalsIgnoreCase(name)) {
-                    fetch.flags = true;
-                    fetch.internalDate = true;
-                    fetch.size = true;
-                    fetch.envelope = true;
-                    fetch.body = true;
+                    fetch.setFlags(true);
+                    fetch.setInternalDate(true);
+                    fetch.setSize(true);
+                    fetch.setEnvelope(true);
+                    fetch.setBody(true);
                 } else if ("ALL".equalsIgnoreCase(name)) {
-                    fetch.flags = true;
-                    fetch.internalDate = true;
-                    fetch.size = true;
-                    fetch.envelope = true;
+                    fetch.setFlags(true);
+                    fetch.setInternalDate(true);
+                    fetch.setSize(true);
+                    fetch.setEnvelope(true);
                 } else if ("FLAGS".equalsIgnoreCase(name)) {
-                    fetch.flags = true;
+                    fetch.setFlags(true);
                 } else if ("RFC822.SIZE".equalsIgnoreCase(name)) {
-                    fetch.size = true;
+                    fetch.setSize(true);
                 } else if ("ENVELOPE".equalsIgnoreCase(name)) {
-                    fetch.envelope = true;
+                    fetch.setEnvelope(true);
                 } else if ("INTERNALDATE".equalsIgnoreCase(name)) {
-                    fetch.internalDate = true;
+                    fetch.setInternalDate(true);
                 } else if ("BODY".equalsIgnoreCase(name)) {
-                    fetch.body = true;
+                    fetch.setBody(true);
                 } else if ("BODYSTRUCTURE".equalsIgnoreCase(name)) {
-                    fetch.bodyStructure = true;
+                    fetch.setBodyStructure(true);
                 } else if ("UID".equalsIgnoreCase(name)) {
-                    fetch.uid = true;
+                    fetch.setUid(true);
                 } else if ("RFC822".equalsIgnoreCase(name)) {
                     fetch.add(new BodyFetchElement("RFC822", ""), false);
                 } else if ("RFC822.HEADER".equalsIgnoreCase(name)) {
@@ -156,13 +171,13 @@
         return next;
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag, boolean useUids) throws ProtocolException {
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag, boolean useUids) throws ProtocolException {
         IdRange[] idSet = parseIdRange( request );
         FetchRequest fetch = fetchRequest( request );
         endLine( request );
         
-        final FetchCommandMessage result 
-            = new FetchCommandMessage(command, useUids, idSet, fetch, tag);
+        final ImapMessageFactory factory = getMessageFactory();
+        final ImapCommandMessage result  = factory.createFetchMessage(command, useUids, idSet, fetch, tag);
         return result;
     }
 

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ImapCommandParser.java (from r514100, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/ImapCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ImapCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/ImapCommandParser.java&r1=514100&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ImapCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/ImapCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ImapCommandParser.java Tue Mar  6 09:59:02 2007
@@ -17,9 +17,10 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
+import org.apache.james.imapserver.message.ImapCommandMessage;
 
 /**
  * <p>

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ImapCommandParserFactory.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/ImapCommandParserFactory.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ImapCommandParserFactory.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/ImapCommandParserFactory.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ImapCommandParserFactory.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/ImapCommandParserFactory.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ImapCommandParserFactory.java Tue Mar  6 09:59:02 2007
@@ -17,7 +17,7 @@
  * under the License.                                           *
  ****************************************************************/
 
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -25,6 +25,9 @@
 import org.apache.avalon.framework.CascadingRuntimeException;
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
 import org.apache.avalon.framework.logger.Logger;
+import org.apache.james.imapserver.ImapConstants;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapMessageFactory;
 
 /**
  * A factory for ImapCommand instances, provided based on the command name.
@@ -32,39 +35,42 @@
  *
  * @version $Revision: 109034 $
  */
-public class ImapCommandParserFactory
-        extends AbstractLogEnabled
+class ImapCommandParserFactory extends AbstractLogEnabled
 {
     private Map _imapCommands;
-
-    public ImapCommandParserFactory()
+    private final ImapMessageFactory messageFactory;
+    private final ImapCommandFactory commandFactory;
+    
+    public ImapCommandParserFactory(final ImapMessageFactory messageFactory, final ImapCommandFactory commandFactory)
     {
+        this.messageFactory = messageFactory;
+        this.commandFactory = commandFactory;
         _imapCommands = new HashMap();
 
         // Commands valid in any state
         // CAPABILITY, NOOP, and LOGOUT
-        _imapCommands.put( CapabilityCommand.NAME, CapabilityCommandParser.class );
-        _imapCommands.put( NoopCommand.NAME, NoopCommandParser.class );
-        _imapCommands.put( LogoutCommand.NAME, LogoutCommandParser.class );
+        _imapCommands.put( ImapConstants.CAPABILITY_COMMAND_NAME, CapabilityCommandParser.class );
+        _imapCommands.put( ImapConstants.NOOP_COMMAND_NAME, NoopCommandParser.class );
+        _imapCommands.put( ImapConstants.LOGOUT_COMMAND_NAME, LogoutCommandParser.class );
 
         // Commands valid in NON_AUTHENTICATED state.
         // AUTHENTICATE and LOGIN
-        _imapCommands.put( AuthenticateCommand.NAME, AuthenticateCommandParser.class );
-        _imapCommands.put( LoginCommand.NAME, LoginCommandParser.class );
+        _imapCommands.put( ImapConstants.AUTHENTICATE_COMMAND_NAME, AuthenticateCommandParser.class );
+        _imapCommands.put( ImapConstants.LOGIN_COMMAND_NAME, LoginCommandParser.class );
 
         // Commands valid in AUTHENTICATED or SELECTED state.
         // RFC2060: SELECT, EXAMINE, CREATE, DELETE, RENAME, SUBSCRIBE, UNSUBSCRIBE, LIST, LSUB, STATUS, and APPEND
-        _imapCommands.put( SelectCommand.NAME, SelectCommandParser.class );
-        _imapCommands.put( ExamineCommand.NAME, ExamineCommandParser.class );
-        _imapCommands.put( CreateCommand.NAME, CreateCommandParser.class );
-        _imapCommands.put( DeleteCommand.NAME, DeleteCommandParser.class );
-        _imapCommands.put( RenameCommand.NAME, RenameCommandParser.class );
-        _imapCommands.put( SubscribeCommand.NAME, SubscribeCommandParser.class );
-        _imapCommands.put( UnsubscribeCommand.NAME, UnsubscribeCommandParser.class );
-        _imapCommands.put( ListCommand.NAME, ListCommandParser.class );
-        _imapCommands.put( LsubCommand.NAME, LsubCommandParser.class );
-        _imapCommands.put( StatusCommand.NAME, StatusCommandParser.class );
-        _imapCommands.put( AppendCommand.NAME, AppendCommandParser.class );
+        _imapCommands.put( ImapConstants.SELECT_COMMAND_NAME, SelectCommandParser.class );
+        _imapCommands.put( ImapConstants.EXAMINE_COMMAND_NAME, ExamineCommandParser.class );
+        _imapCommands.put( ImapConstants.CREATE_COMMAND_NAME, CreateCommandParser.class );
+        _imapCommands.put( ImapConstants.DELETE_COMMAND_NAME, DeleteCommandParser.class );
+        _imapCommands.put( ImapConstants.RENAME_COMMAND_NAME, RenameCommandParser.class );
+        _imapCommands.put( ImapConstants.SUBSCRIBE_COMMAND_NAME, SubscribeCommandParser.class );
+        _imapCommands.put( ImapConstants.UNSUBSCRIBE_COMMAND_NAME, UnsubscribeCommandParser.class );
+        _imapCommands.put( ImapConstants.LIST_COMMAND_NAME, ListCommandParser.class );
+        _imapCommands.put( ImapConstants.LSUB_COMMAND_NAME, LsubCommandParser.class );
+        _imapCommands.put( ImapConstants.STATUS_COMMAND_NAME, StatusCommandParser.class );
+        _imapCommands.put( ImapConstants.APPEND_COMMAND_NAME, AppendCommandParser.class );
 
 //        // RFC2342 NAMESPACE
 //        _imapCommands.put( "NAMESPACE", NamespaceCommand.class );
@@ -79,14 +85,14 @@
 
         // Commands only valid in SELECTED state.
         // CHECK, CLOSE, EXPUNGE, SEARCH, FETCH, STORE, COPY, and UID
-        _imapCommands.put( CheckCommand.NAME, CheckCommandParser.class );
-        _imapCommands.put( CloseCommand.NAME, CloseCommandParser.class );
-        _imapCommands.put( ExpungeCommand.NAME, ExpungeCommandParser.class );
-        _imapCommands.put( CopyCommand.NAME, CopyCommandParser.class );
-        _imapCommands.put( SearchCommand.NAME, SearchCommandParser.class );
-        _imapCommands.put( FetchCommand.NAME, FetchCommandParser.class );
-        _imapCommands.put( StoreCommand.NAME, StoreCommandParser.class );
-        _imapCommands.put( UidCommand.NAME, UidCommandParser.class );
+        _imapCommands.put( ImapConstants.CHECK_COMMAND_NAME, CheckCommandParser.class );
+        _imapCommands.put( ImapConstants.CLOSE_COMMAND_NAME, CloseCommandParser.class );
+        _imapCommands.put( ImapConstants.EXPUNGE_COMMAND_NAME, ExpungeCommandParser.class );
+        _imapCommands.put( ImapConstants.COPY_COMMAND_NAME, CopyCommandParser.class );
+        _imapCommands.put( ImapConstants.SEARCH_COMMAND_NAME, SearchCommandParser.class );
+        _imapCommands.put( ImapConstants.FETCH_COMMAND_NAME, FetchCommandParser.class );
+        _imapCommands.put( ImapConstants.STORE_COMMAND_NAME, StoreCommandParser.class );
+        _imapCommands.put( ImapConstants.UID_COMMAND_NAME, UidCommandParser.class );
     }
 
     public ImapCommandParser getParser( String commandName )
@@ -106,21 +112,35 @@
         final Logger logger = getLogger(); 
         try {
             ImapCommandParser cmd = ( ImapCommandParser ) commandClass.newInstance();
-            setupLogger(cmd);
-            if (logger.isDebugEnabled()) {
-                logger.debug("Created command " + commandClass); 
-            }
-            // TODO: introduce interface
-            if ( cmd instanceof UidCommandParser ) {
-                ( ( UidCommandParser) cmd ).setCommandFactory( this );
-            }
+            initialiseParser(commandClass, logger, cmd);
             return cmd;
         }
         catch ( Exception e ) {
             if (logger.isWarnEnabled()) {
                 logger.warn("Create command instance failed: ", e);
             }
+            // TODO: would probably be better to manage this in protocol
+            // TODO: this runtime will produce a nasty disconnect for the client
             throw new CascadingRuntimeException( "Could not create command instance: " + commandClass.getName(), e );
+        }
+    }
+
+    protected void initialiseParser(Class commandClass, final Logger logger, ImapCommandParser cmd) {
+        setupLogger(cmd);
+        if (logger.isDebugEnabled()) {
+            logger.debug("Created command " + commandClass); 
+        }
+        
+        if ( cmd instanceof DelegatingImapCommandParser ) {
+            ( ( DelegatingImapCommandParser) cmd ).setParserFactory( this );
+        }
+        
+        if (cmd instanceof MessagingImapCommandParser) {
+            ((MessagingImapCommandParser) cmd).setMessageFactory(messageFactory);
+        }
+        
+        if (cmd instanceof InitialisableCommandFactory) {
+            ((InitialisableCommandFactory) cmd).init(commandFactory);
         }
     }
 

Added: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/InitialisableCommandFactory.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/InitialisableCommandFactory.java?view=auto&rev=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/InitialisableCommandFactory.java (added)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/InitialisableCommandFactory.java Tue Mar  6 09:59:02 2007
@@ -0,0 +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.imapserver.decode;
+
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+
+interface InitialisableCommandFactory {
+
+    public abstract void init(ImapCommandFactory factory);
+
+}

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ListCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/ListCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ListCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/ListCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ListCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/ListCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/ListCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,20 +16,28 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
-class ListCommandParser extends AbstractUidCommandParser
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
+import org.apache.james.imapserver.message.ImapMessageFactory;
+class ListCommandParser extends AbstractUidCommandParser  implements InitialisableCommandFactory
 {
     public ListCommandParser() {
-        super(new ListCommand());
     }
 
-    ListCommandParser(ImapCommand command) {
-        super(command);
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getList();
+        setCommand(command);
     }
-
+    
     /**
      * Reads an argument of type "list_mailbox" from the request, which is
      * the second argument for a LIST or LSUB command. Valid values are a "string"
@@ -60,17 +68,18 @@
         }
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag, boolean useUids) throws ProtocolException {
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag, boolean useUids) throws ProtocolException {
         String referenceName = mailbox( request );
         String mailboxPattern = listMailbox( request );
         endLine( request );
-        final ListCommandMessage result = createMessage(command, referenceName, mailboxPattern, tag);
+        final ImapCommandMessage result = createMessage(command, referenceName, mailboxPattern, tag);
         return result;
     }
     
-    protected ListCommandMessage createMessage(ImapCommand command, final String referenceName, final String mailboxPattern, final String tag) 
+    protected ImapCommandMessage createMessage(ImapCommand command, final String referenceName, final String mailboxPattern, final String tag) 
     {
-        final ListCommandMessage result = new ListCommandMessage(command, referenceName, mailboxPattern, tag);
+        final ImapMessageFactory factory = getMessageFactory();
+        final ImapCommandMessage result = factory.createListMessage(command, referenceName, mailboxPattern, tag);
         return result;
     }
 }

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/LoginCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/LoginCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/LoginCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/LoginCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/LoginCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/LoginCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/LoginCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,22 +16,33 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
 
-class LoginCommandParser extends AbstractImapCommandParser {
+class LoginCommandParser extends AbstractImapCommandParser  implements InitialisableCommandFactory {
 
     public LoginCommandParser() {
-        super(new LoginCommand());
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getLogin();
+        setCommand(command);
+    }
+    
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
         final String userid = astring( request );
         final String password = astring( request );
         endLine( request );
-        final LoginCommandMessage result = new LoginCommandMessage(command, userid, password, tag);
+        final ImapCommandMessage result = getMessageFactory().createLoginMessage(command, userid, password, tag);
         return result;
     }
     

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/LogoutCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/LogoutCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/LogoutCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/LogoutCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/LogoutCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/LogoutCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/LogoutCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,20 +16,31 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
 
-class LogoutCommandParser extends AbstractImapCommandParser {
+class LogoutCommandParser extends AbstractImapCommandParser  implements InitialisableCommandFactory {
 
     public LogoutCommandParser() {
-        super(new LogoutCommand());
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getLogout();
+        setCommand(command);
+    }
+    
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
         endLine( request );
-        final LogoutCommandMessage result = new LogoutCommandMessage(command, tag);
+        final ImapCommandMessage result = getMessageFactory().createLogoutMessage(command, tag);
         return result;
     }
     

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/LsubCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/LsubCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/LsubCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/LsubCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/LsubCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/LsubCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/LsubCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,16 +16,28 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
-class LsubCommandParser extends ListCommandParser {
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
+
+class LsubCommandParser extends ListCommandParser  implements InitialisableCommandFactory {
 
     public LsubCommandParser() {
-        super(new LsubCommand());
     }
 
-    protected ListCommandMessage createMessage(ImapCommand command, String referenceName, String mailboxPattern, String tag) {
-        final LsubListCommandMessage result = new LsubListCommandMessage(command, referenceName, mailboxPattern, tag);
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getLsub();
+        setCommand(command);
+    }
+    
+    protected ImapCommandMessage createMessage(ImapCommand command, String referenceName, String mailboxPattern, String tag) {
+        final ImapCommandMessage result = getMessageFactory().createLsubMessage(command, referenceName, mailboxPattern, tag);
         return result;
     }
 }

Added: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/MessagingImapCommandParser.java
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/MessagingImapCommandParser.java?view=auto&rev=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/MessagingImapCommandParser.java (added)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/MessagingImapCommandParser.java Tue Mar  6 09:59:02 2007
@@ -0,0 +1,29 @@
+/****************************************************************
+ * 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.imapserver.decode;
+
+import org.apache.james.imapserver.message.ImapMessageFactory;
+
+interface MessagingImapCommandParser {
+
+    public abstract ImapMessageFactory getMessageFactory();
+
+    public abstract void setMessageFactory(ImapMessageFactory messageFactory);
+
+}

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/NoopCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/NoopCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/NoopCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/NoopCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/NoopCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/NoopCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/NoopCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,20 +16,31 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
 
-class NoopCommandParser extends AbstractImapCommandParser {
+class NoopCommandParser extends AbstractImapCommandParser  implements InitialisableCommandFactory {
 
     public NoopCommandParser() {
-        super(new NoopCommand());
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getNoop();
+        setCommand(command);
+    }
+    
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
         endLine( request );
-        final CompleteCommandMessage result = new CompleteCommandMessage(command, false, tag);
+        final ImapCommandMessage result = getMessageFactory().createCompleteMessage(command, false, tag);
         return result;
     }
     

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/RenameCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/RenameCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/RenameCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/RenameCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/RenameCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/RenameCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/RenameCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,22 +16,34 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
 
-class RenameCommandParser extends AbstractImapCommandParser {
+class RenameCommandParser extends AbstractImapCommandParser implements InitialisableCommandFactory {
 
     public RenameCommandParser() {
-        super(new RenameCommand());
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getRename();
+        setCommand(command);
+    }
+    
+    
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
         final String existingName = mailbox( request );
         final String newName = mailbox( request );
         endLine( request );
-        final RenameCommandMessage result = new RenameCommandMessage(command, existingName, newName, tag);
+        final ImapCommandMessage result = getMessageFactory().createRenameMessage(command, existingName, newName, tag);
         return result;
     }
     

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/SearchCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/SearchCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/SearchCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/SearchCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/SearchCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/SearchCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/SearchCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,21 +16,32 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import javax.mail.Message;
 import javax.mail.search.SearchTerm;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
 
-class SearchCommandParser extends AbstractUidCommandParser
+class SearchCommandParser extends AbstractUidCommandParser implements InitialisableCommandFactory
 {
     public SearchCommandParser() {
-        super(new SearchCommand());
     }
 
     /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getSearch();
+        setCommand(command);
+    }
+    
+    /**
      * Parses the request argument into a valid search term.
      * Not yet implemented - all searches will return everything for now.
      * TODO implement search
@@ -58,12 +69,11 @@
         };
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag, boolean useUids) throws ProtocolException {
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag, boolean useUids) throws ProtocolException {
         // Parse the search term from the request
         final SearchTerm searchTerm = searchTerm( request );
         endLine( request );
-        final SearchImapCommand result 
-            = new SearchImapCommand(command, searchTerm, useUids, tag);
+        final ImapCommandMessage result = getMessageFactory().createSearchImapMessage(command, searchTerm, useUids, tag);
         return result;
     }
 

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/SelectCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/SelectCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/SelectCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/SelectCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/SelectCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/SelectCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/SelectCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,21 +16,32 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
 
-class SelectCommandParser extends AbstractImapCommandParser {
+class SelectCommandParser extends AbstractImapCommandParser implements InitialisableCommandFactory {
     
     public SelectCommandParser() {
-        super(new SelectCommand());
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getSelect();
+        setCommand(command);
+    }
+    
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
         final String mailboxName = mailbox( request );
         endLine( request );
-        final SelectCommandMessage result = new SelectCommandMessage(command, mailboxName, false, tag);
+        final ImapCommandMessage result = getMessageFactory().createSelectMessage(command, mailboxName, tag);
         return result;
     }
     

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/StandardImapDecoder.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/StandardImapDecoder.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/StandardImapDecoder.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/StandardImapDecoder.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/StandardImapDecoder.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/StandardImapDecoder.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/StandardImapDecoder.java Tue Mar  6 09:59:02 2007
@@ -16,19 +16,26 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/ 
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.avalon.framework.logger.AbstractLogEnabled;
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.james.imapserver.ImapDecoder;
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.commands.StandardImapCommandFactory;
+import org.apache.james.imapserver.message.BaseImapMessageFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
+import org.apache.james.imapserver.message.ImapMessageFactory;
 
 public class StandardImapDecoder extends AbstractLogEnabled implements ImapDecoder {
 
     private static final String INVALID_COMMAND = "Invalid command.";
     // TODO: inject dependency
-    private final ImapCommandParserFactory imapCommands = new ImapCommandParserFactory();
+    private final ImapMessageFactory messageFactory = new BaseImapMessageFactory();
+    private final ImapCommandFactory commandFactory = new StandardImapCommandFactory();
+    private final ImapCommandParserFactory imapCommands = new ImapCommandParserFactory(messageFactory, commandFactory);
     private static final String REQUEST_SYNTAX = "Protocol Error: Was expecting <tag SPACE command [arguments]>";
 
     /**
@@ -49,7 +56,7 @@
         }
         catch ( ProtocolException e ) {
             logger.debug("error parsing request", e);
-            message = new BadResponseMessage( REQUEST_SYNTAX );
+            message = messageFactory.createBadRequestMessage( REQUEST_SYNTAX );
         }
         return message;
     }
@@ -65,7 +72,7 @@
         }
         catch ( ProtocolException e ) {
             logger.debug("Error during initial request parsing", e);            
-            message = new ErrorResponseMessage(REQUEST_SYNTAX , tag);
+            message = messageFactory.createErrorMessage(REQUEST_SYNTAX , tag);
         }
         return message;
     }
@@ -79,7 +86,7 @@
         final ImapCommandParser command = imapCommands.getParser( commandName );
         if ( command == null ) {
             logger.info("Missing command implementation.");
-            message = new ErrorResponseMessage(INVALID_COMMAND, tag);
+            message = messageFactory.createErrorMessage(INVALID_COMMAND, tag);
         } else {
             message = command.parse( request, tag );
         }

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/StatusCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/StatusCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/StatusCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/StatusCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/StatusCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/StatusCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/StatusCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,17 +16,31 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
+import org.apache.james.imapserver.ImapConstants;
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
+import org.apache.james.imapserver.message.ImapMessageFactory;
+import org.apache.james.imapserver.message.StatusDataItems;
 
-class StatusCommandParser extends AbstractImapCommandParser
+class StatusCommandParser extends AbstractImapCommandParser implements InitialisableCommandFactory
 {
     public StatusCommandParser() {
-        super(new StatusCommand());
     }
 
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getStatus();
+        setCommand(command);
+    }
+    
     StatusDataItems statusDataItems( ImapRequestLineReader request )
             throws ProtocolException
     {
@@ -51,32 +65,32 @@
     private void addItem( String nextWord, StatusDataItems items )
             throws ProtocolException
     {
-        if ( nextWord.equals( StatusCommand.MESSAGES ) ) {
-            items.messages = true;
+        if ( nextWord.equals( ImapConstants.STATUS_MESSAGES ) ) {
+            items.setMessages(true);
         }
-        else if ( nextWord.equals( StatusCommand.RECENT ) ) {
-            items.recent = true;
+        else if ( nextWord.equals( ImapConstants.STATUS_RECENT ) ) {
+            items.setRecent(true);
         }
-        else if ( nextWord.equals( StatusCommand.UIDNEXT ) ) {
-            items.uidNext = true;
+        else if ( nextWord.equals( ImapConstants.STATUS_UIDNEXT ) ) {
+            items.setUidNext(true);
         }
-        else if ( nextWord.equals( StatusCommand.UIDVALIDITY ) ) {
-            items.uidValidity = true;
+        else if ( nextWord.equals( ImapConstants.STATUS_UIDVALIDITY ) ) {
+            items.setUidValidity(true);
         }
-        else if ( nextWord.equals( StatusCommand.UNSEEN ) ) {
-            items.unseen = true;
+        else if ( nextWord.equals( ImapConstants.STATUS_UNSEEN ) ) {
+            items.setUnseen(true);
         }
         else {
             throw new ProtocolException( "Unknown status item: '" + nextWord + "'" );
         }
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
         final String mailboxName = mailbox( request );
         final StatusDataItems statusDataItems = statusDataItems( request );
         endLine( request );
-        final StatusCommandMessage result = 
-            new StatusCommandMessage(command, mailboxName, statusDataItems, tag);
+        final ImapMessageFactory factory = getMessageFactory();
+        final ImapCommandMessage result = factory.createStatusMessage(command, mailboxName, statusDataItems, tag);
         return result;
     }
 }

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/StoreCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/StoreCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/StoreCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/StoreCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/StoreCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/StoreCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/StoreCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,19 +16,32 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import javax.mail.Flags;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.IdRange;
+import org.apache.james.imapserver.message.ImapCommandMessage;
+import org.apache.james.imapserver.message.StoreDirective;
 
-class StoreCommandParser extends AbstractUidCommandParser
+class StoreCommandParser extends AbstractUidCommandParser implements InitialisableCommandFactory
 {
     public StoreCommandParser() {
-        super(new StoreCommand());
     }
 
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getStore();
+        setCommand(command);
+    }
+    
     StoreDirective storeDirective( ImapRequestLineReader request ) throws ProtocolException
     {
         int sign = 0;
@@ -60,13 +73,12 @@
         return new StoreDirective( sign, silent );
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag, boolean useUids) throws ProtocolException {
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag, boolean useUids) throws ProtocolException {
         final IdRange[] idSet = parseIdRange( request );
         final StoreDirective directive = storeDirective( request );
         final Flags flags = flagList( request );
         endLine( request );
-        final StoreCommandMessage result = 
-            new StoreCommandMessage(command, idSet, directive, flags, useUids, tag);
+        final ImapCommandMessage result = getMessageFactory().createStoreMessage(command, idSet, directive, flags, useUids, tag);
         return result;
     }
 }

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/SubscribeCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/SubscribeCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/SubscribeCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/SubscribeCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/SubscribeCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/SubscribeCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/SubscribeCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,23 +16,33 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
 
-class SubscribeCommandParser extends AbstractImapCommandParser {
+class SubscribeCommandParser extends AbstractImapCommandParser implements InitialisableCommandFactory {
 
     public SubscribeCommandParser() {
-        super(new SubscribeCommand());
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
+    {
+        final ImapCommand command = factory.getSubscribe();
+        setCommand(command);
+    }
+    
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
         final String mailboxName = mailbox( request );
         endLine( request );
         
-        final SubscribeCommandMessage result = 
-            new SubscribeCommandMessage(command, mailboxName, tag);
+        final ImapCommandMessage result = getMessageFactory().createSubscribeMessage(command, mailboxName, tag);
         return result;
     }
     

Copied: james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/UidCommandParser.java (from r514102, james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/UidCommandParser.java)
URL: http://svn.apache.org/viewvc/james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/UidCommandParser.java?view=diff&rev=515230&p1=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/UidCommandParser.java&r1=514102&p2=james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/UidCommandParser.java&r2=515230
==============================================================================
--- james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/commands/UidCommandParser.java (original)
+++ james/server/sandbox/seda-imap/src/java/org/apache/james/imapserver/decode/UidCommandParser.java Tue Mar  6 09:59:02 2007
@@ -16,38 +16,59 @@
  * specific language governing permissions and limitations      *
  * under the License.                                           *
  ****************************************************************/
-package org.apache.james.imapserver.commands;
+package org.apache.james.imapserver.decode;
 
 import org.apache.james.imapserver.ImapRequestLineReader;
 import org.apache.james.imapserver.ProtocolException;
+import org.apache.james.imapserver.commands.ImapCommand;
+import org.apache.james.imapserver.commands.ImapCommandFactory;
+import org.apache.james.imapserver.message.ImapCommandMessage;
 
-class UidCommandParser extends AbstractImapCommandParser {
-    private ImapCommandParserFactory commandFactory;
+class UidCommandParser extends AbstractImapCommandParser implements DelegatingImapCommandParser,InitialisableCommandFactory {
+    private ImapCommandParserFactory parserFactory;
 
     public UidCommandParser() {
-        super(new UidCommand());
     }
     
-    public void setCommandFactory( ImapCommandParserFactory imapCommandFactory )
+    /**
+     * @see org.apache.james.imapserver.decode.InitialisableCommandFactory#init(org.apache.james.imapserver.commands.ImapCommandFactory)
+     */
+    public void init(ImapCommandFactory factory)
     {
-        this.commandFactory = imapCommandFactory;
+        final ImapCommand command = factory.getUid();
+        setCommand(command);
+    }
+    
+    /**
+     * @see org.apache.james.imapserver.decode.DelegatingImapCommandParser#getParserFactory()
+     */
+    public ImapCommandParserFactory getParserFactory() {
+        return parserFactory;
+    }
+
+    /**
+     * @see org.apache.james.imapserver.decode.DelegatingImapCommandParser#setParserFactory(org.apache.james.imapserver.decode.ImapCommandParserFactory)
+     */
+    public void setParserFactory( ImapCommandParserFactory imapCommandFactory )
+    {
+        this.parserFactory = imapCommandFactory;
     }
 
-    protected AbstractImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
+    protected ImapCommandMessage decode(ImapCommand command, ImapRequestLineReader request, String tag) throws ProtocolException {
         // TODO: check the logic against the specification:
         // TODO: suspect that it is now bust
         // TODO: the command written may be wrong
         // TODO: this will be easier to fix a little later
         // TODO: also not sure whether the old implementation shares this flaw 
         String commandName = atom( request );
-        ImapCommandParser helperCommand = commandFactory.getParser( commandName );
+        ImapCommandParser helperCommand = parserFactory.getParser( commandName );
         // TODO: replace abstract class with interface
         if ( helperCommand == null ||
              ! (helperCommand instanceof AbstractUidCommandParser ) ) {
             throw new ProtocolException("Invalid UID command: '" + commandName + "'" );
         }
         final AbstractUidCommandParser uidEnabled = (AbstractUidCommandParser) helperCommand;
-        final AbstractImapCommandMessage result = uidEnabled.decode( request, tag, true );
+        final ImapCommandMessage result = uidEnabled.decode( request, tag, true );
         return result;
     }
     



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