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 bt...@apache.org on 2015/09/22 12:42:38 UTC

svn commit: r1704568 - in /james/protocols/trunk/imap/src: main/java/org/apache/james/imap/encode/ main/java/org/apache/james/imap/encode/main/ test/java/org/apache/james/imap/encode/

Author: btellier
Date: Tue Sep 22 10:42:34 2015
New Revision: 1704568

URL: http://svn.apache.org/viewvc?rev=1704568&view=rev
Log:
PROTOCOLS-108 Adding Quota responses encoders

Added:
    james/protocols/trunk/imap/src/main/java/org/apache/james/imap/encode/QuotaResponseEncoder.java
    james/protocols/trunk/imap/src/main/java/org/apache/james/imap/encode/QuotaRootResponseEncoder.java
    james/protocols/trunk/imap/src/test/java/org/apache/james/imap/encode/QuotaResponseEncoderTest.java
    james/protocols/trunk/imap/src/test/java/org/apache/james/imap/encode/QuotaRootResponseEncoderTest.java
Modified:
    james/protocols/trunk/imap/src/main/java/org/apache/james/imap/encode/main/DefaultImapEncoderFactory.java

Added: james/protocols/trunk/imap/src/main/java/org/apache/james/imap/encode/QuotaResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/imap/src/main/java/org/apache/james/imap/encode/QuotaResponseEncoder.java?rev=1704568&view=auto
==============================================================================
--- james/protocols/trunk/imap/src/main/java/org/apache/james/imap/encode/QuotaResponseEncoder.java (added)
+++ james/protocols/trunk/imap/src/main/java/org/apache/james/imap/encode/QuotaResponseEncoder.java Tue Sep 22 10:42:34 2015
@@ -0,0 +1,76 @@
+/****************************************************************
+ * 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.encode;
+
+import org.apache.james.imap.api.ImapConstants;
+import org.apache.james.imap.api.ImapMessage;
+import org.apache.james.imap.api.process.ImapSession;
+import org.apache.james.imap.encode.base.AbstractChainedImapEncoder;
+import org.apache.james.imap.message.response.QuotaResponse;
+import org.apache.james.mailbox.model.Quota;
+
+import java.io.IOException;
+
+/**
+ * Quota response encoder
+ */
+public class QuotaResponseEncoder extends AbstractChainedImapEncoder {
+
+    public QuotaResponseEncoder(ImapEncoder next) {
+        super(next);
+    }
+
+    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException {
+
+        QuotaResponse quotaResponse = (QuotaResponse) acceptableMessage;
+
+        String quotaRoot = quotaResponse.getQuotaRoot();
+        Quota quota = quotaResponse.getQuota();
+
+        composer.untagged();
+        composer.commandName(ImapConstants.QUOTA_RESPONSE_NAME);
+        composer.message(quotaRoot == null ? "" : quotaRoot);
+        composer.openParen();
+        composer.message(quotaResponse.getResourceName());
+        // See RFC 2087 : response for STORAGE should be in KB. For more accuracy, we stores B, so conversion should be made
+        if (quotaResponse.getResourceName().equalsIgnoreCase(ImapConstants.STORAGE_QUOTA_RESOURCE)) {
+            composer.message(quota.getUsed()/1024);
+            composer.message(quota.getMax()/1024);
+        } else {
+            composer.message(quota.getUsed());
+            composer.message(quota.getMax());
+        }
+        composer.closeParen();
+
+        composer.end();
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.apache.james.imap.encode.base.AbstractChainedImapEncoder#isAcceptable
+     * (org.apache.james.imap.api.ImapMessage)
+     */
+    public boolean isAcceptable(ImapMessage message) {
+        return message instanceof QuotaResponse;
+    }
+
+}

Added: james/protocols/trunk/imap/src/main/java/org/apache/james/imap/encode/QuotaRootResponseEncoder.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/imap/src/main/java/org/apache/james/imap/encode/QuotaRootResponseEncoder.java?rev=1704568&view=auto
==============================================================================
--- james/protocols/trunk/imap/src/main/java/org/apache/james/imap/encode/QuotaRootResponseEncoder.java (added)
+++ james/protocols/trunk/imap/src/main/java/org/apache/james/imap/encode/QuotaRootResponseEncoder.java Tue Sep 22 10:42:34 2015
@@ -0,0 +1,65 @@
+/****************************************************************
+ * 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.encode;
+
+import org.apache.james.imap.api.ImapConstants;
+import org.apache.james.imap.api.ImapMessage;
+import org.apache.james.imap.api.process.ImapSession;
+import org.apache.james.imap.encode.base.AbstractChainedImapEncoder;
+import org.apache.james.imap.message.response.QuotaRootResponse;
+
+import java.io.IOException;
+
+/**
+ * QUOTAROOT response encoder
+ */
+public class QuotaRootResponseEncoder extends AbstractChainedImapEncoder {
+
+    public QuotaRootResponseEncoder(ImapEncoder next) {
+        super(next);
+    }
+
+    protected void doEncode(ImapMessage acceptableMessage, ImapResponseComposer composer, ImapSession session) throws IOException {
+
+        QuotaRootResponse quotaRootResponse = (QuotaRootResponse) acceptableMessage;
+
+        String quotaRoot = quotaRootResponse.getQuotaRoot();
+        String mailbox = quotaRootResponse.getMailboxName();
+
+
+        composer.untagged();
+        composer.commandName(ImapConstants.QUOTAROOT_RESPONSE_NAME);
+        composer.mailbox(mailbox == null ? "" : mailbox);
+        composer.message(quotaRoot == null ? "" : quotaRoot);
+        composer.end();
+    }
+
+    /*
+     * (non-Javadoc)
+     *
+     * @see
+     * org.apache.james.imap.encode.base.AbstractChainedImapEncoder#isAcceptable
+     * (org.apache.james.imap.api.ImapMessage)
+     */
+    public boolean isAcceptable(ImapMessage message) {
+        return message instanceof QuotaRootResponse;
+    }
+
+}
\ No newline at end of file

Modified: james/protocols/trunk/imap/src/main/java/org/apache/james/imap/encode/main/DefaultImapEncoderFactory.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/imap/src/main/java/org/apache/james/imap/encode/main/DefaultImapEncoderFactory.java?rev=1704568&r1=1704567&r2=1704568&view=diff
==============================================================================
--- james/protocols/trunk/imap/src/main/java/org/apache/james/imap/encode/main/DefaultImapEncoderFactory.java (original)
+++ james/protocols/trunk/imap/src/main/java/org/apache/james/imap/encode/main/DefaultImapEncoderFactory.java Tue Sep 22 10:42:34 2015
@@ -43,6 +43,8 @@ import org.apache.james.imap.encode.Sear
 import org.apache.james.imap.encode.StatusResponseEncoder;
 import org.apache.james.imap.encode.VanishedResponseEncoder;
 import org.apache.james.imap.encode.XListResponseEncoder;
+import org.apache.james.imap.encode.QuotaResponseEncoder;
+import org.apache.james.imap.encode.QuotaRootResponseEncoder;
 import org.apache.james.imap.encode.base.EndImapEncoder;
 
 /**
@@ -84,7 +86,9 @@ public class DefaultImapEncoderFactory i
         final AuthenticateResponseEncoder authResponseEncoder = new AuthenticateResponseEncoder(continuationResponseEncoder);
         final ESearchResponseEncoder esearchResponseEncoder = new ESearchResponseEncoder(authResponseEncoder);
         final VanishedResponseEncoder vanishedResponseEncoder = new VanishedResponseEncoder(esearchResponseEncoder);
-        return vanishedResponseEncoder;
+        final QuotaResponseEncoder quotaResponseEncoder = new QuotaResponseEncoder(vanishedResponseEncoder);
+        final QuotaRootResponseEncoder quotaRootResponseEncoder = new QuotaRootResponseEncoder(quotaResponseEncoder);
+        return quotaRootResponseEncoder;
     }
 
     private final Localizer localizer;

Added: james/protocols/trunk/imap/src/test/java/org/apache/james/imap/encode/QuotaResponseEncoderTest.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/imap/src/test/java/org/apache/james/imap/encode/QuotaResponseEncoderTest.java?rev=1704568&view=auto
==============================================================================
--- james/protocols/trunk/imap/src/test/java/org/apache/james/imap/encode/QuotaResponseEncoderTest.java (added)
+++ james/protocols/trunk/imap/src/test/java/org/apache/james/imap/encode/QuotaResponseEncoderTest.java Tue Sep 22 10:42:34 2015
@@ -0,0 +1,58 @@
+/****************************************************************
+ * 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.encode;
+
+import org.apache.james.imap.encode.base.ByteImapResponseWriter;
+import org.apache.james.imap.encode.base.EndImapEncoder;
+import org.apache.james.imap.encode.base.ImapResponseComposerImpl;
+import org.apache.james.imap.message.response.QuotaResponse;
+import org.apache.james.mailbox.store.quota.QuotaImpl;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * QUOTA Response encoder test
+ */
+public class QuotaResponseEncoderTest {
+
+    @Test
+    public void quotaMessageResponseShouldBeWellFormatted() throws Exception {
+        QuotaResponse response = new QuotaResponse("MESSAGE", "root", QuotaImpl.quota(231, 1024));
+        ByteImapResponseWriter byteImapResponseWriter = new ByteImapResponseWriter();
+        ImapResponseComposer composer = new ImapResponseComposerImpl(byteImapResponseWriter, 1024);
+        QuotaResponseEncoder encoder = new QuotaResponseEncoder(new EndImapEncoder());
+        encoder.encode(response, composer, null);
+        String responseString = byteImapResponseWriter.getString();
+        assertEquals("* QUOTA root (MESSAGE 231 1024)\r\n", responseString);
+    }
+
+    @Test
+    public void quotaStorageResponseShouldBeWellFormatted() throws Exception {
+        QuotaResponse response = new QuotaResponse("STORAGE", "root", QuotaImpl.quota(231*1024, 1024*1024));
+        ByteImapResponseWriter byteImapResponseWriter = new ByteImapResponseWriter();
+        ImapResponseComposer composer = new ImapResponseComposerImpl(byteImapResponseWriter, 1024);
+        QuotaResponseEncoder encoder = new QuotaResponseEncoder(new EndImapEncoder());
+        encoder.encode(response, composer, null);
+        String responseString = byteImapResponseWriter.getString();
+        assertEquals("* QUOTA root (STORAGE 231 1024)\r\n", responseString);
+    }
+
+}

Added: james/protocols/trunk/imap/src/test/java/org/apache/james/imap/encode/QuotaRootResponseEncoderTest.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/imap/src/test/java/org/apache/james/imap/encode/QuotaRootResponseEncoderTest.java?rev=1704568&view=auto
==============================================================================
--- james/protocols/trunk/imap/src/test/java/org/apache/james/imap/encode/QuotaRootResponseEncoderTest.java (added)
+++ james/protocols/trunk/imap/src/test/java/org/apache/james/imap/encode/QuotaRootResponseEncoderTest.java Tue Sep 22 10:42:34 2015
@@ -0,0 +1,46 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.imap.encode;
+
+import org.apache.james.imap.encode.base.ByteImapResponseWriter;
+import org.apache.james.imap.encode.base.EndImapEncoder;
+import org.apache.james.imap.encode.base.ImapResponseComposerImpl;
+import org.apache.james.imap.message.response.QuotaRootResponse;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * QUOTAROOT response encoder
+ */
+public class QuotaRootResponseEncoderTest {
+
+    @Test
+    public void test() throws Exception {
+        QuotaRootResponse response = new QuotaRootResponse("INBOX", "root");
+        ByteImapResponseWriter byteImapResponseWriter = new ByteImapResponseWriter();
+        ImapResponseComposer composer = new ImapResponseComposerImpl(byteImapResponseWriter, 1024);
+        QuotaRootResponseEncoder encoder = new QuotaRootResponseEncoder(new EndImapEncoder());
+        encoder.encode(response, composer, null);
+        String responseString = byteImapResponseWriter.getString();
+        assertEquals("* QUOTAROOT \"INBOX\" root\r\n", responseString);
+    }
+
+}



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