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

Reply via email to