Author: michiel
Date: 2010-06-22 15:03:26 +0200 (Tue, 22 Jun 2010)
New Revision: 42650
Modified:
mmbase/trunk/contributions/calendar/src/main/java/org/mmbase/calendar/ItemsController.java
mmbase/trunk/contributions/calendar/src/test/java/org/mmbase/calendar/ItemsControllerTest.java
Log:
Modified:
mmbase/trunk/contributions/calendar/src/main/java/org/mmbase/calendar/ItemsController.java
===================================================================
---
mmbase/trunk/contributions/calendar/src/main/java/org/mmbase/calendar/ItemsController.java
2010-06-22 12:10:09 UTC (rev 42649)
+++
mmbase/trunk/contributions/calendar/src/main/java/org/mmbase/calendar/ItemsController.java
2010-06-22 13:03:26 UTC (rev 42650)
@@ -136,6 +136,16 @@
return newNode;
}
+ private static class NodeComparator implements Comparator<Node> {
+ public int compare(Node o1, Node o2) {
+ long diff = o1.getDateValue("start").getTime() -
o2.getDateValue("start").getTime();
+ return diff == 0L ? 0 : (diff > 0L ? 1 : -1);
+ }
+ public boolean equals(Object o) {
+ return o != null && o instanceof NodeComparator;
+ }
+ }
+
protected int addAndDelete(List<Node> periods) {
if (desiredValue) {
@@ -208,6 +218,7 @@
Queries.addToResult(query, newNode);
}
periods.add(newNode);
+ Collections.sort(periods, new NodeComparator());
return 2;
}
}
@@ -218,21 +229,23 @@
}
if (desiredValue) {
- LOG.debug("no matching period found, so creating one");
Node newNode = createNode();
newNode.setDateValue("start", start);
newNode.setDateValue("stop", stop);
newNode.commit();
+
if (query.getSteps().size() > 1) {
Queries.addToResult(query, newNode);
}
periods.add(newNode);
+ Collections.sort(periods, new NodeComparator());
return 1;
} else {
return 0;
}
}
+
protected int merge(List<Node> periods) {
int changes = 0;
for (int i = 0 ; i < periods.size() - 1; i++) {
Modified:
mmbase/trunk/contributions/calendar/src/test/java/org/mmbase/calendar/ItemsControllerTest.java
===================================================================
---
mmbase/trunk/contributions/calendar/src/test/java/org/mmbase/calendar/ItemsControllerTest.java
2010-06-22 12:10:09 UTC (rev 42649)
+++
mmbase/trunk/contributions/calendar/src/test/java/org/mmbase/calendar/ItemsControllerTest.java
2010-06-22 13:03:26 UTC (rev 42650)
@@ -78,7 +78,7 @@
}
- //@Test
+ @Test
public void addToEmpty() throws Exception {
assertNotNull(items);
setStartStop("today", "today + 1 day");
@@ -93,7 +93,7 @@
assertEquals(1, periods.size());
}
- //@Test
+ @Test
public void addToPeriod() throws Exception {
// Add one day more
setStartStop("today + 1 day", "today + 2 day");
@@ -105,7 +105,7 @@
assertEquals(DynamicDate.eval("today + 2 day"),
periods.get(0).getDateValue("stop"));
}
- //@Test
+ @Test
public void addWithGap() throws Exception {
// Yet another day, but leave a gap
setStartStop("today + 3 day", "today + 4 day");
@@ -124,7 +124,7 @@
}
- //@Test
+ @Test
public void removeAtBeginning() throws Exception {
// remove first day again
setStartStop("today", "today + 1 day", "toyear", "toyear + 1 year");
@@ -144,7 +144,7 @@
assertEquals(2, periods.size());
}
- //@Test
+ @Test
public void insertAtGap() throws Exception {
setStartStop("today + 2 day", "today + 3 day");
controller.setValue(true);
@@ -162,7 +162,7 @@
assertEquals(1, periods.size());
}
- //@Test
+ @Test
public void remove() throws Exception {
List<Node> periods = getPeriods(new String[] {"today + 1 day", "today
+ 4 day"});
setStartStop("today + 1 day", "today + 4 day");
@@ -172,6 +172,7 @@
assertEquals(0, controller.fix(periods));
assertEquals(0, periods.size());
}
+
@Test
public void makeGap() throws Exception {
List<Node> periods = getPeriods(new String[] {"today + 1 day", "today
+ 4 day"});
@@ -183,4 +184,18 @@
assertEquals(2, periods.size());
}
+
+ @Test
+ public void requireSorting() throws Exception {
+ List<Node> periods = getPeriods(new String[] {"2010-05-11",
"2010-06-01"}, new String[]{"2010-09-25", "2010-10-01"});
+ setStartStop("2010-05-01", "2010-05-02", "2010-04-27", "2010-11-04");
+ controller.setValue(true);
+ assertEquals(2, periods.size());
+ assertEquals(1, controller.fix(periods));
+ assertEquals(3, periods.size());
+ assertEquals(0, controller.fix(periods));
+ assertEquals(3, periods.size());
+
+ }
+
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs