diff --git a/src/main/java/com/metamx/common/guava/Comparators.java b/src/main/java/com/metamx/common/guava/Comparators.java index 0a4b9fda..1de3f86f 100644 --- a/src/main/java/com/metamx/common/guava/Comparators.java +++ b/src/main/java/com/metamx/common/guava/Comparators.java @@ -64,7 +64,7 @@ public int compare(T t, T t1) }; } - private static final Comparator INTERVAL_COMPARATOR = new Comparator() + private static final Comparator INTERVAL_BY_START_THEN_END = new Comparator() { private final DateTimeComparator dateTimeComp = DateTimeComparator.getInstance(); @@ -79,6 +79,21 @@ public int compare(Interval lhs, Interval rhs) } }; + private static final Comparator INTERVAL_BY_END_THEN_START = new Comparator() + { + private final DateTimeComparator dateTimeComp = DateTimeComparator.getInstance(); + + @Override + public int compare(Interval lhs, Interval rhs) + { + int retVal = dateTimeComp.compare(lhs.getEnd(), rhs.getEnd()); + if (retVal == 0) { + retVal = dateTimeComp.compare(lhs.getStart(), rhs.getStart()); + } + return retVal; + } + }; + @Deprecated public static Comparator intervals() { @@ -87,6 +102,12 @@ public static Comparator intervals() public static Comparator intervalsByStartThenEnd() { - return INTERVAL_COMPARATOR; + return INTERVAL_BY_START_THEN_END; } + + public static Comparator intervalsByEndThenStart() + { + return INTERVAL_BY_END_THEN_START; + } + } diff --git a/src/test/java/com/metamx/common/guava/ComparatorsTest.java b/src/test/java/com/metamx/common/guava/ComparatorsTest.java index 2b8d189f..8afd92e3 100644 --- a/src/test/java/com/metamx/common/guava/ComparatorsTest.java +++ b/src/test/java/com/metamx/common/guava/ComparatorsTest.java @@ -42,9 +42,9 @@ public void testInverse() throws Exception } @Test - public void testIntervals() throws Exception + public void testIntervalsByStartThenEnd() throws Exception { - Comparator comp = Comparators.intervals(); + Comparator comp = Comparators.intervalsByStartThenEnd(); Assert.assertEquals(0, comp.compare(new Interval("P1d/2011-04-02"), new Interval("2011-04-01/2011-04-02"))); Assert.assertEquals(-1, comp.compare(new Interval("2011-03-31/2011-04-02"), new Interval("2011-04-01/2011-04-02"))); @@ -76,4 +76,40 @@ public void testIntervals() throws Exception intervals ); } + + @Test + public void testIntervalsByEndThenStart() throws Exception + { + Comparator comp = Comparators.intervalsByEndThenStart(); + + Assert.assertEquals(0, comp.compare(new Interval("P1d/2011-04-02"), new Interval("2011-04-01/2011-04-02"))); + Assert.assertEquals(-1, comp.compare(new Interval("2011-04-01/2011-04-03"), new Interval("2011-04-01/2011-04-04"))); + Assert.assertEquals(1, comp.compare(new Interval("2011-04-01/2011-04-02"), new Interval("2011-04-01/2011-04-01"))); + Assert.assertEquals(-1, comp.compare(new Interval("2011-04-01/2011-04-03"), new Interval("2011-04-02/2011-04-03"))); + Assert.assertEquals(1, comp.compare(new Interval("2011-04-01/2011-04-03"), new Interval("2011-03-31/2011-04-03"))); + + Interval[] intervals = new Interval[]{ + new Interval("2011-04-01T18/2011-04-02T13"), + new Interval("2011-04-01/2011-04-03"), + new Interval("2011-04-01/2011-04-04"), + new Interval("2011-04-02/2011-04-04"), + new Interval("2011-04-01/2011-04-02"), + new Interval("2011-04-02/2011-04-03"), + new Interval("2011-04-02/2011-04-03T06") + }; + Arrays.sort(intervals, comp); + + Assert.assertArrayEquals( + new Interval[]{ + new Interval("2011-04-01/2011-04-02"), + new Interval("2011-04-01T18/2011-04-02T13"), + new Interval("2011-04-01/2011-04-03"), + new Interval("2011-04-02/2011-04-03"), + new Interval("2011-04-02/2011-04-03T06"), + new Interval("2011-04-01/2011-04-04"), + new Interval("2011-04-02/2011-04-04") + }, + intervals + ); + } }