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