]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-2807 fix support of period cleaner over multiple years
authorSimon Brandhof <simon.brandhof@gmail.com>
Mon, 30 Jan 2012 12:01:19 +0000 (13:01 +0100)
committerSimon Brandhof <simon.brandhof@gmail.com>
Mon, 30 Jan 2012 12:01:19 +0000 (13:01 +0100)
plugins/sonar-dbcleaner-plugin/src/main/java/org/sonar/plugins/dbcleaner/period/Interval.java
plugins/sonar-dbcleaner-plugin/src/test/java/org/sonar/plugins/dbcleaner/period/IntervalTest.java

index 40e422f9faf56de621a51601ce69ea95eafdec0c..e8c40e184ebe15bacb28e58ba348857a36923b31 100644 (file)
@@ -23,6 +23,7 @@ import com.google.common.collect.Lists;
 import org.apache.commons.lang.time.DateUtils;
 import org.sonar.core.purge.PurgeableSnapshotDto;
 
+import java.util.Calendar;
 import java.util.Date;
 import java.util.GregorianCalendar;
 import java.util.List;
@@ -46,6 +47,7 @@ final class Interval {
     List<Interval> intervals = Lists.newArrayList();
 
     GregorianCalendar calendar = new GregorianCalendar();
+    int lastYear = -1;
     int lastFieldValue = -1;
     Interval currentInterval = null;
 
@@ -54,11 +56,13 @@ final class Interval {
         (snapshot.getDate().before(end) || DateUtils.isSameDay(end, snapshot.getDate()))) {
         calendar.setTime(snapshot.getDate());
         int currentFieldValue = calendar.get(calendarField);
-        if (lastFieldValue != currentFieldValue) {
+        int currentYear = calendar.get(Calendar.YEAR);
+        if (lastYear!=currentYear || lastFieldValue != currentFieldValue) {
           currentInterval = new Interval();
           intervals.add(currentInterval);
         }
         lastFieldValue = currentFieldValue;
+        lastYear = currentYear;
         if (currentInterval != null) {
           currentInterval.add(snapshot);
         }
index b369383d1e33c6b106e5a95bca8f011352fa933e..99ca5a991cafb9d079c38192fbd4e74b5c05f6e4 100644 (file)
@@ -52,13 +52,32 @@ public class IntervalTest {
     assertThat(intervals.size(), is(3));
 
     assertThat(intervals.get(0).count(), is(1));
-    assertThat(month(intervals.get(0)), is(Calendar.APRIL));
+    assertThat(calendarField(intervals.get(0), Calendar.MONTH), is(Calendar.APRIL));
 
     assertThat(intervals.get(1).count(), is(2));
-    assertThat(month(intervals.get(1)), is(Calendar.MAY));
+    assertThat(calendarField(intervals.get(1), Calendar.MONTH), is(Calendar.MAY));
 
     assertThat(intervals.get(2).count(), is(2));
-    assertThat(month(intervals.get(2)), is(Calendar.JUNE));
+    assertThat(calendarField(intervals.get(2), Calendar.MONTH), is(Calendar.JUNE));
+  }
+
+  @Test
+  public void shouldNotJoinMonthsOfDifferentYears() {
+    List<PurgeableSnapshotDto> snapshots = Arrays.asList(
+      createSnapshotWithDate(1L, "2010-04-03"),
+      createSnapshotWithDate(2L, "2011-04-13")
+    );
+
+    List<Interval> intervals = Interval.group(snapshots, DateUtils.parseDate("2010-01-01"), DateUtils.parseDate("2011-12-31"), Calendar.MONTH);
+    assertThat(intervals.size(), is(2));
+
+    assertThat(intervals.get(0).count(), is(1));
+    assertThat(calendarField(intervals.get(0), Calendar.MONTH), is(Calendar.APRIL));
+    assertThat(calendarField(intervals.get(0), Calendar.YEAR), is(2010));
+
+    assertThat(intervals.get(1).count(), is(1));
+    assertThat(calendarField(intervals.get(1), Calendar.MONTH), is(Calendar.APRIL));
+    assertThat(calendarField(intervals.get(1), Calendar.YEAR), is(2011));
   }
 
   @Test
@@ -75,7 +94,7 @@ public class IntervalTest {
     assertThat(intervals.get(0).get().get(0).getSnapshotId(), is(2L));
   }
 
-  static int month(Interval interval) {
+  static int calendarField(Interval interval, int field) {
     if (interval.count() == 0) {
       return -1;
     }
@@ -83,6 +102,6 @@ public class IntervalTest {
     PurgeableSnapshotDto first = interval.get().iterator().next();
     GregorianCalendar cal = new GregorianCalendar();
     cal.setTime(first.getDate());
-    return cal.get(Calendar.MONTH);
+    return cal.get(field);
   }
 }