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 2008/01/05 19:35:49 UTC

svn commit: r609190 - in /james/server/trunk: experimental-seda-imap-function/src/test/resources/org/apache/james/test/functional/imap/scripts/ imap-codec-library/src/main/java/org/apache/james/imap/message/response/base/ imap-codec-library/src/main/ja...

Author: rdonkin
Date: Sat Jan  5 10:35:47 2008
New Revision: 609190

URL: http://svn.apache.org/viewvc?rev=609190&view=rev
Log:
Switch STATUS to use new architecture.

Added:
    james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/server/STATUSResponse.java
    james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/STATUSResponseEncoder.java
    james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/STATUSResponseEncoderTest.java
Removed:
    james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/legacy/StatusResponse.java
    james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/legacy/StatusCommandResponseEncoder.java
Modified:
    james/server/trunk/experimental-seda-imap-function/src/test/resources/org/apache/james/test/functional/imap/scripts/Status.test
    james/server/trunk/experimental-seda-imap-function/src/test/resources/org/apache/james/test/functional/imap/scripts/StringArgs.test
    james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/base/AbstractImapResponse.java
    james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/ImapResponseComposer.java
    james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImpl.java
    james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/SearchResponseEncoder.java
    james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/main/DefaultImapEncoderFactory.java
    james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/AbstractTestImapResponseComposer.java
    james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImplTest.java
    james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/AbstractMailboxAwareProcessor.java
    james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StatusProcessor.java

Modified: james/server/trunk/experimental-seda-imap-function/src/test/resources/org/apache/james/test/functional/imap/scripts/Status.test
URL: http://svn.apache.org/viewvc/james/server/trunk/experimental-seda-imap-function/src/test/resources/org/apache/james/test/functional/imap/scripts/Status.test?rev=609190&r1=609189&r2=609190&view=diff
==============================================================================
--- james/server/trunk/experimental-seda-imap-function/src/test/resources/org/apache/james/test/functional/imap/scripts/Status.test (original)
+++ james/server/trunk/experimental-seda-imap-function/src/test/resources/org/apache/james/test/functional/imap/scripts/Status.test Sat Jan  5 10:35:47 2008
@@ -21,19 +21,19 @@
 
 # Tests for the STATUS command
 C: a001 STATUS statustest (MESSAGES)
-S: \* STATUS statustest \(MESSAGES 0\)
+S: \* STATUS \"statustest\" \(MESSAGES 0\)
 S: a001 OK STATUS completed.
 
 C: a002 STATUS statustest (  MESSAGES  )
-S: \* STATUS statustest \(MESSAGES 0\)
+S: \* STATUS \"statustest\" \(MESSAGES 0\)
 S: a002 OK STATUS completed.
 
 C: a003 STATUS statustest (MESSAGES RECENT UIDNEXT UIDVALIDITY UNSEEN)
-S: \* STATUS statustest \(MESSAGES 0 RECENT 0 UIDNEXT \d+ UIDVALIDITY \d+ UNSEEN 0\)
+S: \* STATUS \"statustest\" \(MESSAGES 0 RECENT 0 UIDNEXT \d+ UIDVALIDITY \d+ UNSEEN 0\)
 S: a003 OK STATUS completed.
 
 C: a004 STATUS statustest (UNSEEN RECENT )
-S: \* STATUS statustest \(RECENT 0 UNSEEN 0\)
+S: \* STATUS \"statustest\" \(RECENT 0 UNSEEN 0\)
 S: a004 OK STATUS completed.
 
 C: A005 APPEND statustest {254+}
@@ -50,12 +50,12 @@
 S: A005 OK APPEND completed.
 
 C: a006 STATUS statustest (UNSEEN RECENT )
-S: \* STATUS statustest \(RECENT 1 UNSEEN 1\)
+S: \* STATUS \"statustest\" \(RECENT 1 UNSEEN 1\)
 S: a006 OK STATUS completed.
 
 # Make sure that the recent flag isn't unset
 C: a007 STATUS statustest (UNSEEN RECENT )
-S: \* STATUS statustest \(RECENT 1 UNSEEN 1\)
+S: \* STATUS \"statustest\" \(RECENT 1 UNSEEN 1\)
 S: a007 OK STATUS completed.
 
 # Cleanup

Modified: james/server/trunk/experimental-seda-imap-function/src/test/resources/org/apache/james/test/functional/imap/scripts/StringArgs.test
URL: http://svn.apache.org/viewvc/james/server/trunk/experimental-seda-imap-function/src/test/resources/org/apache/james/test/functional/imap/scripts/StringArgs.test?rev=609190&r1=609189&r2=609190&view=diff
==============================================================================
--- james/server/trunk/experimental-seda-imap-function/src/test/resources/org/apache/james/test/functional/imap/scripts/StringArgs.test (original)
+++ james/server/trunk/experimental-seda-imap-function/src/test/resources/org/apache/james/test/functional/imap/scripts/StringArgs.test Sat Jan  5 10:35:47 2008
@@ -25,12 +25,12 @@
 
 # INBOX special case
 C: a001 STATUS INBOX (MESSAGES)
-S: \* STATUS INBOX \(MESSAGES \d+\)
+S: \* STATUS \"INBOX\" \(MESSAGES \d+\)
 S: a001 OK STATUS completed.
 
 # Case-insensitive inbox
 C: a001 STATUS InBoX (MESSAGES)
-S: \* STATUS INBOX \(MESSAGES \d+\)
+S: \* STATUS \"INBOX\" \(MESSAGES \d+\)
 S: a001 OK STATUS completed.
 
 # Tests with an atomic mailbox name.
@@ -39,25 +39,25 @@
 
 # atom
 C: a001 STATUS atomMailbox (MESSAGES)
-S: \* STATUS atomMailbox \(MESSAGES \d+\)
+S: \* STATUS \"atomMailbox\" \(MESSAGES \d+\)
 S: a001 OK STATUS completed.
 
 # quoted
 C: a001 STATUS "atomMailbox" (MESSAGES)
-S: \* STATUS atomMailbox \(MESSAGES \d+\)
+S: \* STATUS \"atomMailbox\" \(MESSAGES \d+\)
 S: a001 OK STATUS completed.
 
 # non-synchronized literal
 C: a001 STATUS {11}
 S: \+
 C: atomMailbox (MESSAGES)
-S: \* STATUS atomMailbox \(MESSAGES \d+\)
+S: \* STATUS \"atomMailbox\" \(MESSAGES \d+\)
 S: a001 OK STATUS completed.
 
 # synchronized literal
 C: a001 STATUS {11+}
 C: atomMailbox (MESSAGES)
-S: \* STATUS atomMailbox \(MESSAGES \d+\)
+S: \* STATUS \"atomMailbox\" \(MESSAGES \d+\)
 S: a001 OK STATUS completed.
 
 # Cleanup

Modified: james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/base/AbstractImapResponse.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/base/AbstractImapResponse.java?rev=609190&r1=609189&r2=609190&view=diff
==============================================================================
--- james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/base/AbstractImapResponse.java (original)
+++ james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/base/AbstractImapResponse.java Sat Jan  5 10:35:47 2008
@@ -27,6 +27,9 @@
 import org.apache.james.api.imap.ImapCommand;
 import org.apache.james.api.imap.message.response.ImapResponseMessage;
 
+/**
+ * @deprecated responses should correspond to specification
+ */
 abstract public class AbstractImapResponse extends AbstractLogEnabled implements ImapResponseMessage {
 
     private final ImapCommand command;

Added: james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/server/STATUSResponse.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/server/STATUSResponse.java?rev=609190&view=auto
==============================================================================
--- james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/server/STATUSResponse.java (added)
+++ james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imap/message/response/imap4rev1/server/STATUSResponse.java Sat Jan  5 10:35:47 2008
@@ -0,0 +1,113 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.imap.message.response.imap4rev1.server;
+
+import org.apache.james.api.imap.message.response.ImapResponseMessage;
+
+/**
+ * Represents a <code>STATUS</code> response.
+ * See <code>RFC3501 7.2.4</code>.
+ */
+public class STATUSResponse implements ImapResponseMessage {
+
+    private final Long messages;
+    private final Long recent;
+    private final Long uidNext;
+    private final Long uidValidity;
+    private final Long unseen;
+    private final String mailbox;
+    
+    public STATUSResponse(final Long messages, final Long recent, final Long uidNext, 
+            final Long uidValidity, final Long unseen, final String mailbox) {
+        super();
+        this.messages = messages;
+        this.recent = recent;
+        this.uidNext = uidNext;
+        this.uidValidity = uidValidity;
+        this.unseen = unseen;
+        this.mailbox = mailbox;
+    }
+    
+    /**
+     * Gets the <code>MESSAGES</code> 
+     * count for the mailbox.
+     * @return the message count for the mailbox (if requested)
+     * or null (if not)
+     */
+    public final Long getMessages() {
+        return messages;
+    }
+    
+    /**
+     * Gets the <code>RECENT</code>
+     * count for the mailbox.
+     * @return the recent count (if requested)
+     * or null (if not)
+     */
+    public final Long getRecent() {
+        return recent;
+    }
+    
+    /**
+     * Gets the mailbox <code>UIDNEXT</code>.
+     * @return the mailbox uidNext (if requested)
+     * or null (if not)
+     */
+    public final Long getUidNext() {
+        return uidNext;
+    }
+    
+    /**
+     * Gets the mailbox <code>UIDVALIDITY</code>.
+     * @return the mailbox uidValidity (if requested)
+     * or null (if not)
+     */
+    public final Long getUidValidity() {
+        return uidValidity;
+    }
+    
+    /**
+     * Gets the <code>UNSEEN</code> count 
+     * for the mailbox.
+     * @return the unseen count (if requested)
+     * or null (if not)
+     */
+    public final Long getUnseen() {
+        return unseen;
+    }
+
+    /**
+     * Gets the mailbox name.
+     * @return the mailbox name, not null
+     */
+    public final String getMailbox() {
+        return mailbox;
+    }
+
+    public String toString() {
+        return "Status response[mailbox='"
+            + mailbox + "' messages=" + messages
+            + " recent=" + recent
+            + " uidnext=" + uidNext
+            + " uidvalidity=" + uidValidity
+            + " unseen=" + unseen
+            + "]";
+    }
+}

Modified: james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/ImapResponseComposer.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/ImapResponseComposer.java?rev=609190&r1=609189&r2=609190&view=diff
==============================================================================
--- james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/ImapResponseComposer.java (original)
+++ james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/ImapResponseComposer.java Sat Jan  5 10:35:47 2008
@@ -227,6 +227,9 @@
     public abstract void statusResponse(String tag, ImapCommand command,
             String type, String responseCode, String text) throws IOException;
     
+    public abstract void statusResponse(Long messages, Long recent,
+            Long uidNext, Long uidValidity, Long unseen, String mailboxName) throws IOException;
+    
     public void quote(String message) throws IOException;
 
     public void literal(Literal literal) throws IOException;

Modified: james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImpl.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImpl.java?rev=609190&r1=609189&r2=609190&view=diff
==============================================================================
--- james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImpl.java (original)
+++ james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImpl.java Sat Jan  5 10:35:47 2008
@@ -31,7 +31,6 @@
 import org.apache.james.api.imap.ImapConstants;
 import org.apache.james.api.imap.message.MessageFlags;
 import org.apache.james.imap.message.response.imap4rev1.Literal;
-import org.apache.james.imap.message.response.imap4rev1.FetchResponse.BodyElement;
 import org.apache.james.imapserver.codec.encode.ImapResponseComposer;
 import org.apache.james.imapserver.codec.encode.ImapResponseWriter;
 
@@ -360,6 +359,50 @@
         if (text != null) {
             message(text);
         }
+        end();
+    }
+    
+    /**
+     * @throws IOException 
+     * @see org.apache.james.imapserver.codec.encode.ImapResponseComposer#statusResponse(Long, Long, Long, Long, Long, String)
+     */
+    public void statusResponse(Long messages, Long recent, Long uidNext, Long uidValidity, Long unseen, String mailboxName) throws IOException {
+        untagged();
+        message(STATUS_COMMAND_NAME);
+        quote(mailboxName);
+        openParen();
+        
+        if (messages != null) {
+            message(STATUS_MESSAGES);
+            final long messagesValue = messages.longValue();
+            message(messagesValue);
+        }
+        
+        if (recent != null) {
+            message(STATUS_RECENT);
+            final long recentValue = recent.longValue();
+            message(recentValue);
+        }
+            
+        if (uidNext != null) {
+            message(STATUS_UIDNEXT);
+            final long uidNextValue = uidNext.longValue();
+            message(uidNextValue);
+        }
+
+        if (uidValidity != null) {
+            message(STATUS_UIDVALIDITY);
+            final long uidValidityValue = uidValidity.longValue();
+            message(uidValidityValue);
+        }
+        
+        if (unseen != null) {
+            message(STATUS_UNSEEN);
+            final long unseenValue = unseen.longValue();
+            message(unseenValue);
+        }
+        
+        closeParen();
         end();
     }
 

Added: james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/STATUSResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/STATUSResponseEncoder.java?rev=609190&view=auto
==============================================================================
--- james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/STATUSResponseEncoder.java (added)
+++ james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/STATUSResponseEncoder.java Sat Jan  5 10:35:47 2008
@@ -0,0 +1,52 @@
+/****************************************************************
+ * 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.codec.encode.imap4rev1.server;
+
+import java.io.IOException;
+
+import org.apache.james.api.imap.ImapMessage;
+import org.apache.james.imap.message.response.imap4rev1.server.STATUSResponse;
+import org.apache.james.imapserver.codec.encode.ImapEncoder;
+import org.apache.james.imapserver.codec.encode.ImapResponseComposer;
+import org.apache.james.imapserver.codec.encode.base.AbstractChainedImapEncoder;
+
+/**
+ * Encodes <code>STATUS</code> responses.
+ */
+public class STATUSResponseEncoder extends AbstractChainedImapEncoder {
+
+    public STATUSResponseEncoder(ImapEncoder next) {
+        super(next);
+    }
+
+    protected void doEncode(ImapMessage acceptableMessage,
+            ImapResponseComposer composer) throws IOException {
+        STATUSResponse response = (STATUSResponse) acceptableMessage;
+        composer.statusResponse(response.getMessages(), response.getRecent(), 
+                response.getUidNext(), response.getUidValidity(), response.getUnseen(), 
+                response.getMailbox());
+
+    }
+
+    protected boolean isAcceptable(ImapMessage message) {
+        return message != null && message instanceof STATUSResponse;
+    }
+
+}

Modified: james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/SearchResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/SearchResponseEncoder.java?rev=609190&r1=609189&r2=609190&view=diff
==============================================================================
--- james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/SearchResponseEncoder.java (original)
+++ james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/SearchResponseEncoder.java Sat Jan  5 10:35:47 2008
@@ -19,9 +19,7 @@
 package org.apache.james.imapserver.codec.encode.imap4rev1.server;
 
 import java.io.IOException;
-import java.util.List;
 
-import org.apache.james.api.imap.ImapCommand;
 import org.apache.james.api.imap.ImapMessage;
 import org.apache.james.imap.message.response.imap4rev1.server.SearchResponse;
 import org.apache.james.imapserver.codec.encode.ImapEncoder;

Modified: james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/main/DefaultImapEncoderFactory.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/main/DefaultImapEncoderFactory.java?rev=609190&r1=609189&r2=609190&view=diff
==============================================================================
--- james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/main/DefaultImapEncoderFactory.java (original)
+++ james/server/trunk/imap-codec-library/src/main/java/org/apache/james/imapserver/codec/encode/main/DefaultImapEncoderFactory.java Sat Jan  5 10:35:47 2008
@@ -33,7 +33,7 @@
 import org.apache.james.imapserver.codec.encode.imap4rev1.legacy.ErrorResponseEncoder;
 import org.apache.james.imapserver.codec.encode.imap4rev1.legacy.ExamineAndSelectResponseEncoder;
 import org.apache.james.imapserver.codec.encode.imap4rev1.legacy.LogoutResponseEncoder;
-import org.apache.james.imapserver.codec.encode.imap4rev1.legacy.StatusCommandResponseEncoder;
+import org.apache.james.imapserver.codec.encode.imap4rev1.server.STATUSResponseEncoder;
 import org.apache.james.imapserver.codec.encode.imap4rev1.server.LSubResponseEncoder;
 import org.apache.james.imapserver.codec.encode.imap4rev1.server.ListResponseEncoder;
 import org.apache.james.imapserver.codec.encode.imap4rev1.server.SearchResponseEncoder;
@@ -52,7 +52,7 @@
         final FetchResponseEncoder fetchResponseEncoder = new FetchResponseEncoder(recentResponseEncoder);
         final ExpungeResponseEncoder expungeResponseEncoder = new ExpungeResponseEncoder(fetchResponseEncoder);
         final ExistsResponseEncoder existsResponseEncoder = new ExistsResponseEncoder(expungeResponseEncoder);
-        final StatusCommandResponseEncoder statusCommandResponseEncoder = new StatusCommandResponseEncoder(existsResponseEncoder);
+        final STATUSResponseEncoder statusCommandResponseEncoder = new STATUSResponseEncoder(existsResponseEncoder);
         final SearchResponseEncoder searchResponseEncoder = new SearchResponseEncoder(statusCommandResponseEncoder);
         final LogoutResponseEncoder logoutResponseEncoder = new LogoutResponseEncoder(searchResponseEncoder);
         final LSubResponseEncoder lsubResponseEncoder = new LSubResponseEncoder(logoutResponseEncoder);

Modified: james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/AbstractTestImapResponseComposer.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/AbstractTestImapResponseComposer.java?rev=609190&r1=609189&r2=609190&view=diff
==============================================================================
--- james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/AbstractTestImapResponseComposer.java (original)
+++ james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/AbstractTestImapResponseComposer.java Sat Jan  5 10:35:47 2008
@@ -84,6 +84,15 @@
         checkListResponseEncode("* LIST (\\one \\two \\three \\four) \".\" \"#INBOX\"\r\n", "LIST", attributes, ".", "#INBOX");
     }
     
+    public void testEncodeStatus() throws Exception {
+        checkStatusResponseEncode("* STATUS \"#INBOX.\\\"sub directory\\\".what\" (MESSAGES 3 RECENT 5 UIDNEXT 7 UIDVALIDITY 11 UNSEEN 13)\r\n", new Long(3), new Long(5), new Long(7), new Long(11), new Long(13), "#INBOX.\"sub directory\".what");
+        checkStatusResponseEncode("* STATUS \"#INBOX\" (MESSAGES 42)\r\n", new Long(42), null, null, null, null, "#INBOX");
+        checkStatusResponseEncode("* STATUS \"#INBOX\" (RECENT 42)\r\n", null, new Long(42), null, null, null, "#INBOX");
+        checkStatusResponseEncode("* STATUS \"#INBOX\" (UIDNEXT 42)\r\n", null, null, new Long(42), null, null, "#INBOX");
+        checkStatusResponseEncode("* STATUS \"#INBOX\" (UIDVALIDITY 42)\r\n", null, null, null, new Long(42), null, "#INBOX");
+        checkStatusResponseEncode("* STATUS \"#INBOX\" (UNSEEN 42)\r\n", null, null, null, null, new Long(42), "#INBOX");
+    }
+    
     public void testShouldEncodeFlagsCorrectly() throws Exception {
         checkFlagsEncode(" FLAGS (\\Seen)", new Flags(Flags.Flag.SEEN));
         checkFlagsEncode(" FLAGS (\\Recent)", new Flags(Flags.Flag.RECENT));
@@ -139,6 +148,20 @@
     
     protected abstract byte[] encodeListResponse(String typeName, List attributes, 
             String hierarchyDelimiter, String name) throws Exception;
+    
+    private void checkStatusResponseEncode(String expected, Long messages, Long recent,
+            Long uidNext, Long uidValidity, Long unseen, String mailbox) throws Exception {
+        StringBuffer buffer = new StringBuffer();
+        byte[] output = encodeStatusResponse(messages, recent, uidNext, uidValidity, unseen, mailbox);
+        for (int i=0;i<output.length;i++) {
+            buffer.append((char) output[i]);
+        }
+        assertEquals(expected, buffer.toString());
+        clear();
+    }
+    
+    protected abstract byte[] encodeStatusResponse(Long messages, Long recent,
+            Long uidNext, Long uidValidity, Long unseen, String mailbox) throws Exception;
     
     protected abstract void clear() throws Exception;
 }

Modified: james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImplTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImplTest.java?rev=609190&r1=609189&r2=609190&view=diff
==============================================================================
--- james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImplTest.java (original)
+++ james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/base/ImapResponseComposerImplTest.java Sat Jan  5 10:35:47 2008
@@ -60,4 +60,9 @@
         return writer.getBytes();
     }
 
+    protected byte[] encodeStatusResponse(Long messages, Long recent, Long uidNext, Long uidValidity, Long unseen, String mailbox) throws Exception {
+        composer.statusResponse(messages, recent, uidNext, uidValidity, unseen, mailbox);
+        return writer.getBytes();
+    }
+
 }

Added: james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/STATUSResponseEncoderTest.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/STATUSResponseEncoderTest.java?rev=609190&view=auto
==============================================================================
--- james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/STATUSResponseEncoderTest.java (added)
+++ james/server/trunk/imap-codec-library/src/test/java/org/apache/james/imapserver/codec/encode/imap4rev1/server/STATUSResponseEncoderTest.java Sat Jan  5 10:35:47 2008
@@ -0,0 +1,67 @@
+/****************************************************************
+ * 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.codec.encode.imap4rev1.server;
+
+import org.apache.james.api.imap.ImapMessage;
+import org.apache.james.imap.message.response.imap4rev1.server.STATUSResponse;
+import org.apache.james.imapserver.codec.encode.ImapEncoder;
+import org.apache.james.imapserver.codec.encode.ImapResponseComposer;
+import org.jmock.Mock;
+import org.jmock.MockObjectTestCase;
+import org.jmock.core.Constraint;
+
+public class STATUSResponseEncoderTest extends MockObjectTestCase{
+
+    STATUSResponseEncoder encoder;
+    Mock mockNextEncoder;
+    Mock composer;
+    
+    protected void setUp() throws Exception {
+        super.setUp();
+        mockNextEncoder = mock(ImapEncoder.class);
+        composer = mock(ImapResponseComposer.class);    
+        encoder = new STATUSResponseEncoder((ImapEncoder) mockNextEncoder.proxy());
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+    }
+    
+    public void testIsAcceptable() throws Exception {
+        assertTrue(encoder.isAcceptable(new STATUSResponse(null, null, null, null, null,"mailbox")));
+        assertFalse(encoder.isAcceptable((ImapMessage) mock(ImapMessage.class).proxy()));
+        assertFalse(encoder.isAcceptable(null));
+    }
+    
+    public void testDoEncode() throws Exception {
+        Long messages = new Long(2);
+        Long recent = new Long(3);
+        Long uidNext = new Long(5);
+        Long uidValidity = new Long(7);
+        Long unseen = new Long(11);
+        String mailbox = "A mailbox named desire";
+        Constraint[] args = {same(messages), same(recent), same(uidNext), 
+                same(uidValidity), same(unseen), same(mailbox)};
+        
+        composer.expects(once()).method("statusResponse").with(args);
+        encoder.encode(new STATUSResponse(messages, recent, uidNext, uidValidity, unseen, mailbox),
+                (ImapResponseComposer) composer.proxy());
+    }
+}

Modified: james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/AbstractMailboxAwareProcessor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/AbstractMailboxAwareProcessor.java?rev=609190&r1=609189&r2=609190&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/AbstractMailboxAwareProcessor.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/base/AbstractMailboxAwareProcessor.java Sat Jan  5 10:35:47 2008
@@ -27,11 +27,8 @@
 import org.apache.james.mailboxmanager.manager.MailboxManagerProvider;
 import org.apache.james.services.User;
 
-abstract public class AbstractMailboxAwareProcessor extends AbstractImapRequestProcessor{
+abstract public class AbstractMailboxAwareProcessor extends AbstractImapRequestProcessor {
 
-    // TODO: move into ImapConstants
-
-    
     private final MailboxManagerProvider mailboxManagerProvider;
     
     public AbstractMailboxAwareProcessor(final ImapProcessor next, 

Modified: james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StatusProcessor.java
URL: http://svn.apache.org/viewvc/james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StatusProcessor.java?rev=609190&r1=609189&r2=609190&view=diff
==============================================================================
--- james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StatusProcessor.java (original)
+++ james/server/trunk/imap-mailbox-processor-function/src/main/java/org/apache/james/imapserver/processor/imap4rev1/StatusProcessor.java Sat Jan  5 10:35:47 2008
@@ -21,18 +21,15 @@
 
 import org.apache.avalon.framework.logger.Logger;
 import org.apache.james.api.imap.ImapCommand;
-import org.apache.james.api.imap.ImapConstants;
 import org.apache.james.api.imap.ImapMessage;
 import org.apache.james.api.imap.ProtocolException;
 import org.apache.james.api.imap.message.StatusDataItems;
 import org.apache.james.api.imap.message.request.ImapRequest;
-import org.apache.james.api.imap.message.response.ImapResponseMessage;
 import org.apache.james.api.imap.message.response.imap4rev1.StatusResponseFactory;
 import org.apache.james.api.imap.process.ImapProcessor;
 import org.apache.james.api.imap.process.ImapSession;
-import org.apache.james.api.imap.process.ImapProcessor.Responder;
 import org.apache.james.imap.message.request.imap4rev1.StatusRequest;
-import org.apache.james.imap.message.response.imap4rev1.legacy.StatusResponse;
+import org.apache.james.imap.message.response.imap4rev1.server.STATUSResponse;
 import org.apache.james.imapserver.processor.base.AbstractMailboxAwareProcessor;
 import org.apache.james.imapserver.processor.base.AuthorizationException;
 import org.apache.james.imapserver.processor.base.ImapSessionUtils;
@@ -58,32 +55,11 @@
             ImapSession session, String tag, ImapCommand command, Responder responder)
             throws MailboxException, AuthorizationException, ProtocolException {
         final StatusRequest request = (StatusRequest) message;
-        final ImapResponseMessage result = doProcess(request, session, tag,
-                command);
-        responder.respond(result);
-    }
-
-    private ImapResponseMessage doProcess(StatusRequest request,
-            ImapSession session, String tag, ImapCommand command)
-            throws MailboxException, AuthorizationException, ProtocolException {
         final String mailboxName = request.getMailboxName();
         final StatusDataItems statusDataItems = request.getStatusDataItems();
-        final ImapResponseMessage result = doProcess(mailboxName,
-                statusDataItems, session, tag, command);
-        return result;
-    }
-
-    private ImapResponseMessage doProcess(final String mailboxName,
-            final StatusDataItems statusDataItems, ImapSession session,
-            String tag, ImapCommand command) throws MailboxException,
-            AuthorizationException, ProtocolException {
         final Logger logger = getLogger();
         final MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
-        // TODO: response should not be prepared in process
-        // TODO: return a transfer object
-        StringBuffer buffer = new StringBuffer(mailboxName);
-        buffer.append(ImapConstants.SP);
-        buffer.append("(");
+        
         try {
             String fullMailboxName = buildFullName(session, mailboxName);
 
@@ -95,56 +71,79 @@
             final MailboxManager mailboxManager = getMailboxManager(session);
             final ImapMailbox mailbox = mailboxManager
                     .getImapMailbox(fullMailboxName, false);
-
-            if (statusDataItems.isMessages()) {
-                buffer.append(ImapConstants.STATUS_MESSAGES);
-                buffer.append(ImapConstants.SP);
-
-                buffer.append(mailbox.getMessageCount(mailboxSession));
-
-                buffer.append(ImapConstants.SP);
-            }
-
-            if (statusDataItems.isRecent()) {
-                buffer.append(ImapConstants.STATUS_RECENT);
-                buffer.append(ImapConstants.SP);
-                buffer.append(mailbox.getRecentCount(false, mailboxSession));
-                buffer.append(ImapConstants.SP);
-            }
-
-            if (statusDataItems.isUidNext()) {
-                buffer.append(ImapConstants.STATUS_UIDNEXT);
-                buffer.append(ImapConstants.SP);
-                buffer.append(mailbox.getUidNext(mailboxSession));
-                buffer.append(ImapConstants.SP);
-            }
-
-            if (statusDataItems.isUidValidity()) {
-                buffer.append(ImapConstants.STATUS_UIDVALIDITY);
-                buffer.append(ImapConstants.SP);
-                buffer.append(mailbox.getUidValidity(mailboxSession));
-                buffer.append(ImapConstants.SP);
-            }
-
-            if (statusDataItems.isUnseen()) {
-                buffer.append(ImapConstants.STATUS_UNSEEN);
-                buffer.append(ImapConstants.SP);
-                buffer.append(mailbox.getUnseenCount(mailboxSession));
-                buffer.append(ImapConstants.SP);
-            }
+            
+            final Long messages = messages(statusDataItems, mailboxSession, mailbox);
+            final Long recent = recent(statusDataItems, mailboxSession, mailbox);
+            final Long uidNext = uidNext(statusDataItems, mailboxSession, mailbox);
+            final Long uidValidity = uidValidity(statusDataItems, mailboxSession, mailbox);
+            final Long unseen = unseen(statusDataItems, mailboxSession, mailbox);
+            
+            final STATUSResponse response = new STATUSResponse(messages, recent, uidNext, uidValidity, unseen, mailboxName);
+            responder.respond(response);
+            
         } catch (MailboxManagerException e) {
             if (logger != null && logger.isDebugEnabled()) {
                 logger.debug("STATUS command failed: ", e);
             }
             throw new MailboxException(e);
         }
-        if (buffer.charAt(buffer.length() - 1) == ' ') {
-            buffer.setLength(buffer.length() - 1);
+        
+        unsolicitedResponses(session, responder, false);
+        okComplete(command, tag, responder);
+    }
+
+    private Long unseen(final StatusDataItems statusDataItems, final MailboxSession mailboxSession, final ImapMailbox mailbox) throws MailboxManagerException {
+        final Long unseen;
+        if (statusDataItems.isUnseen()) {
+            final int unseenCountValue = mailbox.getUnseenCount(mailboxSession);
+            unseen = new Long(unseenCountValue);
+        } else {
+            unseen = null;
+        }
+        return unseen;
+    }
+
+    private Long uidValidity(final StatusDataItems statusDataItems, final MailboxSession mailboxSession, final ImapMailbox mailbox) throws MailboxManagerException {
+        final Long uidValidity;
+        if (statusDataItems.isUidValidity()) {
+            final long uidValidityValue = mailbox.getUidValidity(mailboxSession);
+            uidValidity = new Long(uidValidityValue);
+        } else {
+            uidValidity = null;
+        }
+        return uidValidity;
+    }
+
+    private Long uidNext(final StatusDataItems statusDataItems, final MailboxSession mailboxSession, final ImapMailbox mailbox) throws MailboxManagerException {
+        final Long uidNext;
+        if (statusDataItems.isUidNext()) {
+            final long uidNextValue = mailbox.getUidNext(mailboxSession);
+            uidNext = new Long(uidNextValue);
+        } else {
+            uidNext = null;
+        }
+        return uidNext;
+    }
+
+    private Long recent(final StatusDataItems statusDataItems, final MailboxSession mailboxSession, final ImapMailbox mailbox) throws MailboxManagerException {
+        final Long recent;
+        if (statusDataItems.isRecent()) {
+            final int recentCount = mailbox.getRecentCount(false, mailboxSession);
+            recent = new Long(recentCount);
+        } else {
+            recent = null;
+        }
+        return recent;
+    }
+
+    private Long messages(final StatusDataItems statusDataItems, final MailboxSession mailboxSession, final ImapMailbox mailbox) throws MailboxManagerException {
+        final Long messages;
+        if (statusDataItems.isMessages()) {
+            final int messageCount = mailbox.getMessageCount(mailboxSession);
+            messages = new Long(messageCount);
+        } else {
+            messages = null;
         }
-        buffer.append(')');
-        final StatusResponse result = new StatusResponse(command, buffer
-                .toString(), tag);
-        ImapSessionUtils.addUnsolicitedResponses(result, session, false);
-        return result;
+        return messages;
     }
 }



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