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: [email protected]
For additional commands, e-mail: [email protected]