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 no...@apache.org on 2011/10/01 19:40:40 UTC

svn commit: r1178048 - in /james/mailbox/trunk/api/src: main/java/org/apache/james/mailbox/MessageRange.java test/java/org/apache/james/mailbox/MessageRangeTest.java

Author: norman
Date: Sat Oct  1 17:40:40 2011
New Revision: 1178048

URL: http://svn.apache.org/viewvc?rev=1178048&view=rev
Log:
Add MessageRange.split(...) method which allows to split a MessageRange in a List of MessageRanges with a max amount of items. See MAILBOX-146

Modified:
    james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageRange.java
    james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/MessageRangeTest.java

Modified: james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageRange.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageRange.java?rev=1178048&r1=1178047&r2=1178048&view=diff
==============================================================================
--- james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageRange.java (original)
+++ james/mailbox/trunk/api/src/main/java/org/apache/james/mailbox/MessageRange.java Sat Oct  1 17:40:40 2011
@@ -43,7 +43,7 @@ public class MessageRange implements Ite
         RANGE
     }
 
-    private static final int NOT_A_UID = -1;
+    public static final int NOT_A_UID = -1;
 
 
     /**
@@ -261,4 +261,40 @@ public class MessageRange implements Ite
         }
         
     }
+    
+    
+    /**
+     * Tries to split the given {@link MessageRange} to a {@link List} of {@link MessageRange}'s which 
+     * select only a max amount of items. This only work for {@link MessageRange}'s with {@link Type} of 
+     * {@link Type#RANGE}.
+     * 
+     * @param range
+     * @param maxItems
+     * @return ranges
+     */
+    public List<MessageRange> split( int maxItems) {
+        List<MessageRange> ranges = new ArrayList<MessageRange>();
+        if (getType() == Type.RANGE) {
+            long from = getUidFrom();
+            long to = getUidTo();
+            long realTo = to;
+            while(from <= realTo) {
+                if (from + maxItems  -1 < realTo) {
+                    to = from + maxItems -1;
+                } else {
+                    to = realTo;
+                }
+                if (from == to) {
+                    ranges.add(MessageRange.one(from));
+                } else {
+                    ranges.add(MessageRange.range(from, to));
+                }
+                
+                from = to + 1;
+            }
+        } else {
+            ranges.add(this);
+        }
+        return ranges;
+    }
 }

Modified: james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/MessageRangeTest.java
URL: http://svn.apache.org/viewvc/james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/MessageRangeTest.java?rev=1178048&r1=1178047&r2=1178048&view=diff
==============================================================================
--- james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/MessageRangeTest.java (original)
+++ james/mailbox/trunk/api/src/test/java/org/apache/james/mailbox/MessageRangeTest.java Sat Oct  1 17:40:40 2011
@@ -57,4 +57,37 @@ public class MessageRangeTest {
         assertEquals(from, range.getUidFrom());
         assertEquals(to, range.getUidTo());
     }
+    
+    @Test
+    public void testSplitOne() {
+        MessageRange one = MessageRange.one(1);
+        List<MessageRange> ranges = one.split(2);
+        assertEquals(1, ranges.size());
+        checkRange(1, 1, ranges.get(0));
+        assertEquals(MessageRange.Type.ONE, ranges.get(0).getType());
+    }
+    
+    @Test
+    public void testSplitFrom() {
+        MessageRange from = MessageRange.from(1);
+        List<MessageRange> ranges = from.split(2);
+        assertEquals(1, ranges.size());
+        checkRange(1, MessageRange.NOT_A_UID, ranges.get(0));
+        assertEquals(MessageRange.Type.FROM, ranges.get(0).getType());
+    }
+    
+    @Test
+    public void testSplitRange() {
+        MessageRange range = MessageRange.range(1,10);
+        List<MessageRange> ranges = range.split(3);
+        assertEquals(4, ranges.size());
+        checkRange(1, 3, ranges.get(0));
+        assertEquals(MessageRange.Type.RANGE, ranges.get(0).getType());
+        checkRange(4, 6, ranges.get(1));
+        assertEquals(MessageRange.Type.RANGE, ranges.get(1).getType());
+        checkRange(7, 9, ranges.get(2));
+        assertEquals(MessageRange.Type.RANGE, ranges.get(2).getType());
+        checkRange(10, 10, ranges.get(3));
+        assertEquals(MessageRange.Type.ONE, ranges.get(3).getType());
+    }
 }



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