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 2009/04/08 06:10:04 UTC

svn commit: r762688 - in /james/imap/trunk: api/src/main/java/org/apache/james/imap/api/ message/src/main/java/org/apache/james/imap/encode/ message/src/main/java/org/apache/james/imap/message/response/ message/src/test/java/org/apache/james/imap/encod...

Author: rdonkin
Date: Tue Apr  7 11:03:51 2009
New Revision: 762688

URL: http://svn.apache.org/viewvc?rev=762688&view=rev
Log:
Encode LIST responses with HasChildren HasNoChildren IMAP-73 https://issues.apache.org/jira/browse/IMAP-73

Modified:
    james/imap/trunk/api/src/main/java/org/apache/james/imap/api/ImapConstants.java
    james/imap/trunk/message/src/main/java/org/apache/james/imap/encode/ListingEncodingUtils.java
    james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/AbstractListingResponse.java
    james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/LSubResponse.java
    james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/ListResponse.java
    james/imap/trunk/message/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java
    james/imap/trunk/message/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java
    james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/ListProcessor.java
    james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/ListProcessorTest.java

Modified: james/imap/trunk/api/src/main/java/org/apache/james/imap/api/ImapConstants.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/api/src/main/java/org/apache/james/imap/api/ImapConstants.java?rev=762688&r1=762687&r2=762688&view=diff
==============================================================================
--- james/imap/trunk/api/src/main/java/org/apache/james/imap/api/ImapConstants.java (original)
+++ james/imap/trunk/api/src/main/java/org/apache/james/imap/api/ImapConstants.java Tue Apr  7 11:03:51 2009
@@ -147,6 +147,10 @@
 
     public String RFC822_MESSAGE_ID = "Message-ID";
 
+    public String NAME_ATTRIBUTE_HAS_CHILDREN = "\\HasChildren";
+
+    public String NAME_ATTRIBUTE_HAS_NO_CHILDREN = "\\HasNoChildren";
+
     public static final String NAMESPACE_COMMAND_NAME = "NAMESPACE";
 
     public static final char BACK_SLASH = '\\';

Modified: james/imap/trunk/message/src/main/java/org/apache/james/imap/encode/ListingEncodingUtils.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/message/src/main/java/org/apache/james/imap/encode/ListingEncodingUtils.java?rev=762688&r1=762687&r2=762688&view=diff
==============================================================================
--- james/imap/trunk/message/src/main/java/org/apache/james/imap/encode/ListingEncodingUtils.java (original)
+++ james/imap/trunk/message/src/main/java/org/apache/james/imap/encode/ListingEncodingUtils.java Tue Apr  7 11:03:51 2009
@@ -26,6 +26,9 @@
 import org.apache.james.imap.api.ImapConstants;
 import org.apache.james.imap.message.response.AbstractListingResponse;
 
+/**
+ * Utilities for encoding LIST and LSUB responses.
+ */
 public class ListingEncodingUtils {
 
     public static void encodeListingResponse(final String responseTypeName,
@@ -40,10 +43,10 @@
                 name);
     }
 
-    private static List getNameAttributes(final AbstractListingResponse response) {
-        final List attributes;
+    private static List<String> getNameAttributes(final AbstractListingResponse response) {
+        final List<String> attributes;
         if (response.isNameAttributed()) {
-            attributes = new ArrayList();
+            attributes = new ArrayList<String>();
             if (response.isNoInferiors()) {
                 attributes.add(ImapConstants.NAME_ATTRIBUTE_NOINFERIORS);
             }
@@ -56,6 +59,12 @@
             if (response.isUnmarked()) {
                 attributes.add(ImapConstants.NAME_ATTRIBUTE_UNMARKED);
             }
+            if (response.hasChildren()) {
+                attributes.add(ImapConstants.NAME_ATTRIBUTE_HAS_CHILDREN);
+            }
+            if (response.hasNoChildren()) {
+                attributes.add(ImapConstants.NAME_ATTRIBUTE_HAS_NO_CHILDREN);
+            }
         } else {
             attributes = null;
         }

Modified: james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/AbstractListingResponse.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/AbstractListingResponse.java?rev=762688&r1=762687&r2=762688&view=diff
==============================================================================
--- james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/AbstractListingResponse.java (original)
+++ james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/AbstractListingResponse.java Tue Apr  7 11:03:51 2009
@@ -24,6 +24,10 @@
  */
 public abstract class AbstractListingResponse {
 
+    private final boolean children;
+    
+    private final boolean noChildren;
+    
     private final boolean noInferiors;
 
     private final boolean noSelect;
@@ -38,13 +42,15 @@
 
     public AbstractListingResponse(final boolean noInferiors,
             final boolean noSelect, final boolean marked,
-            final boolean unmarked, final String hierarchyDelimiter,
-            final String name) {
+            final boolean unmarked, boolean hasChildren,
+            boolean hasNoChildren, final String hierarchyDelimiter, final String name) {
         super();
         this.noInferiors = noInferiors;
         this.noSelect = noSelect;
         this.marked = marked;
         this.unmarked = unmarked;
+        this.children = hasChildren;
+        this.noChildren = hasNoChildren;
         this.hierarchyDelimiter = hierarchyDelimiter;
         this.name = name;
     }
@@ -103,6 +109,23 @@
         return unmarked;
     }
 
+    
+    /**
+     * Is the <code>HasNoChildren</code> name attribute set?
+     * @return true if <code>HasNoChildren</code>, false otherwise
+     */
+    public boolean hasNoChildren() {
+        return noChildren;
+    }
+    
+    /**
+     * Is the <code>HasChildren</code> name attribute set?
+     * @return true if <code>HasChildren</code>, false otherwise
+     */
+    public boolean hasChildren() {
+        return children;
+    }
+    
     /**
      * Are any name attributes set?
      * 
@@ -110,30 +133,25 @@
      *         {@link #isMarked()} or {@link #isUnmarked(){
      */
     public final boolean isNameAttributed() {
-        return noInferiors || noSelect || marked || unmarked;
+        return noInferiors || noSelect || marked || unmarked || children || noChildren;
     }
 
-    /**
-     * @see java.lang.Object#hashCode()
-     */
+    @Override
     public int hashCode() {
         final int PRIME = 31;
         int result = 1;
-        result = PRIME
-                * result
-                + ((hierarchyDelimiter == null) ? 0 : hierarchyDelimiter
-                        .hashCode());
+        result = PRIME * result + (children ? 1231 : 1237);
+        result = PRIME * result + ((hierarchyDelimiter == null) ? 0 : hierarchyDelimiter.hashCode());
         result = PRIME * result + (marked ? 1231 : 1237);
         result = PRIME * result + ((name == null) ? 0 : name.hashCode());
+        result = PRIME * result + (noChildren ? 1231 : 1237);
         result = PRIME * result + (noInferiors ? 1231 : 1237);
         result = PRIME * result + (noSelect ? 1231 : 1237);
         result = PRIME * result + (unmarked ? 1231 : 1237);
         return result;
     }
 
-    /**
-     * @see java.lang.Object#equals(java.lang.Object)
-     */
+    @Override
     public boolean equals(Object obj) {
         if (this == obj)
             return true;
@@ -142,6 +160,8 @@
         if (getClass() != obj.getClass())
             return false;
         final AbstractListingResponse other = (AbstractListingResponse) obj;
+        if (children != other.children)
+            return false;
         if (hierarchyDelimiter == null) {
             if (other.hierarchyDelimiter != null)
                 return false;
@@ -154,6 +174,8 @@
                 return false;
         } else if (!name.equals(other.name))
             return false;
+        if (noChildren != other.noChildren)
+            return false;
         if (noInferiors != other.noInferiors)
             return false;
         if (noSelect != other.noSelect)

Modified: james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/LSubResponse.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/LSubResponse.java?rev=762688&r1=762687&r2=762688&view=diff
==============================================================================
--- james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/LSubResponse.java (original)
+++ james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/LSubResponse.java Tue Apr  7 11:03:51 2009
@@ -27,6 +27,6 @@
         ImapResponseMessage {
     public LSubResponse(final String name, final String hierarchyDelimiter,
             final boolean noSelect) {
-        super(false, noSelect, false, false, hierarchyDelimiter, name);
+        super(false, noSelect, false, false, false, false, hierarchyDelimiter, name);
     }
 }

Modified: james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/ListResponse.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/ListResponse.java?rev=762688&r1=762687&r2=762688&view=diff
==============================================================================
--- james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/ListResponse.java (original)
+++ james/imap/trunk/message/src/main/java/org/apache/james/imap/message/response/ListResponse.java Tue Apr  7 11:03:51 2009
@@ -25,9 +25,10 @@
  */
 public final class ListResponse extends AbstractListingResponse implements
         ImapResponseMessage {
+    
     public ListResponse(final boolean noInferiors, final boolean noSelect,
             final boolean marked, final boolean unmarked,
-            final String hierarchyDelimiter, final String name) {
-        super(noInferiors, noSelect, marked, unmarked, hierarchyDelimiter, name);
+            boolean hasChildren, boolean hasNoChildren, final String hierarchyDelimiter, final String name) {
+        super(noInferiors, noSelect, marked, unmarked, hasChildren, hasNoChildren, hierarchyDelimiter, name);
     }
 }

Modified: james/imap/trunk/message/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/message/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java?rev=762688&r1=762687&r2=762688&view=diff
==============================================================================
--- james/imap/trunk/message/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java (original)
+++ james/imap/trunk/message/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java Tue Apr  7 11:03:51 2009
@@ -53,7 +53,7 @@
 
     public void testIsAcceptable() {
         assertFalse(encoder.isAcceptable(new ListResponse(true, true, true,
-                true, ".", "name")));
+                true, false, false, ".", "name")));
         assertTrue(encoder.isAcceptable(new LSubResponse("name", ".", true)));
         assertFalse(encoder.isAcceptable(mock(ImapMessage.class)));
         assertFalse(encoder.isAcceptable(null));

Modified: james/imap/trunk/message/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/message/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java?rev=762688&r1=762687&r2=762688&view=diff
==============================================================================
--- james/imap/trunk/message/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java (original)
+++ james/imap/trunk/message/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java Tue Apr  7 11:03:51 2009
@@ -53,7 +53,7 @@
 
     public void testIsAcceptable() {
         assertTrue(encoder.isAcceptable(new ListResponse(true, true, true,
-                true, ".", "name")));
+                true, false, false, ".", "name")));
         assertFalse(encoder.isAcceptable(new LSubResponse("name", ".", true)));
         assertFalse(encoder.isAcceptable(mock(ImapMessage.class)));
         assertFalse(encoder.isAcceptable(null));
@@ -67,7 +67,7 @@
                             with(same(".")), 
                             with(same("INBOX.name")));
         }});
-        encoder.encode(new ListResponse(false, false, false, false, ".", "INBOX.name"), composer, new FakeImapSession());
+        encoder.encode(new ListResponse(false, false, false, false, false, false, ".", "INBOX.name"), composer, new FakeImapSession());
     }
 
     public void testDelimiter() throws Exception {
@@ -78,7 +78,7 @@
                             with(same("@")), 
                             with(same("INBOX.name")));
         }});
-        encoder.encode(new ListResponse(false, false, false, false, "@", "INBOX.name"), composer, new FakeImapSession());
+        encoder.encode(new ListResponse(false, false, false, false, false, false, "@", "INBOX.name"), composer, new FakeImapSession());
     }
 
     public void testNoDelimiter() throws Exception {
@@ -89,7 +89,7 @@
                             with(aNull(String.class)), 
                             with(same("INBOX.name")));
         }});
-        encoder.encode(new ListResponse(false, false, false, false, null, "INBOX.name"), composer, new FakeImapSession());
+        encoder.encode(new ListResponse(false, false, false, false, false, false, null, "INBOX.name"), composer, new FakeImapSession());
     }
 
     public void testAllAttributes() throws Exception {
@@ -104,7 +104,7 @@
                             with(same(".")), 
                             with(same("INBOX.name")));
         }});
-        encoder.encode(new ListResponse(true, true, true, true, ".", "INBOX.name"), composer, new FakeImapSession());
+        encoder.encode(new ListResponse(true, true, true, true, false, false, ".", "INBOX.name"), composer, new FakeImapSession());
     }
 
     public void testNoInferiors() throws Exception {
@@ -116,7 +116,7 @@
                             with(same(".")), 
                             with(same("INBOX.name")));
         }});
-        encoder.encode(new ListResponse(true, false, false, false, ".", "INBOX.name"), composer, new FakeImapSession());
+        encoder.encode(new ListResponse(true, false, false, false, false, false, ".", "INBOX.name"), composer, new FakeImapSession());
     }
 
     public void testNoSelect() throws Exception {
@@ -128,7 +128,7 @@
                             with(same(".")), 
                             with(same("INBOX.name")));
         }});
-        encoder.encode(new ListResponse(false, true, false, false, ".", "INBOX.name"), composer, new FakeImapSession());
+        encoder.encode(new ListResponse(false, true, false, false, false, false, ".", "INBOX.name"), composer, new FakeImapSession());
     }
 
     public void testMarked() throws Exception {
@@ -140,7 +140,7 @@
                             with(same(".")), 
                             with(same("INBOX.name")));
         }});
-        encoder.encode(new ListResponse(false, false, true, false, ".", "INBOX.name"), composer, new FakeImapSession());
+        encoder.encode(new ListResponse(false, false, true, false, false, false, ".", "INBOX.name"), composer, new FakeImapSession());
     }
 
     public void testUnmarked() throws Exception {
@@ -152,6 +152,6 @@
                             with(same(".")), 
                             with(same("INBOX.name")));
         }});
-        encoder.encode(new ListResponse(false, false, false, true, ".", "INBOX.name"), composer, new FakeImapSession());
+        encoder.encode(new ListResponse(false, false, false, true, false, false, ".", "INBOX.name"), composer, new FakeImapSession());
     }
 }

Modified: james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/ListProcessor.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/ListProcessor.java?rev=762688&r1=762687&r2=762688&view=diff
==============================================================================
--- james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/ListProcessor.java (original)
+++ james/imap/trunk/processor/src/main/java/org/apache/james/imap/processor/ListProcessor.java Tue Apr  7 11:03:51 2009
@@ -65,7 +65,7 @@
             boolean noSelect, boolean marked, boolean unmarked,
             String hierarchyDelimiter, String mailboxName) {
         return new ListResponse(noInferior, noSelect, marked, unmarked,
-                hierarchyDelimiter, mailboxName);
+                false, false, hierarchyDelimiter, mailboxName);
     }
 
     protected final void doProcess(final String baseReferenceName,

Modified: james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/ListProcessorTest.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/ListProcessorTest.java?rev=762688&r1=762687&r2=762688&view=diff
==============================================================================
--- james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/ListProcessorTest.java (original)
+++ james/imap/trunk/processor/src/test/java/org/apache/james/imap/processor/ListProcessorTest.java Tue Apr  7 11:03:51 2009
@@ -72,7 +72,7 @@
             boolean marked, boolean unmarked, String hierarchyDelimiter,
             String mailboxName) {
         return new ListResponse(noinferior, noselect, marked, unmarked,
-                hierarchyDelimiter, mailboxName);
+                false, false, hierarchyDelimiter, mailboxName);
     }
 
     void setUpResult(final boolean isNoinferiors, final MailboxMetaData.Selectability selectability,



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