@Override public boolean isConsistent() { if (first == null && latest != null) { return false; } if (latest == null && first != null) { return false; } for (TimePartition hole : holes) { if (!hole.after(first) || !hole.before(latest)) { return false; } } return true; }
@Override public boolean isConsistent() { if (first == null && latest != null) { return false; } if (latest == null && first != null) { return false; } for (TimePartition hole : holes) { if (!hole.after(first) || !hole.before(latest)) { return false; } } return true; }
@Override public boolean exists(TimePartition toCheck) { return !isEmpty() && !toCheck.before(first) && !toCheck.after(latest) && !holes.contains(toCheck); }
@Override public boolean exists(TimePartition toCheck) { return !isEmpty() && !toCheck.before(first) && !toCheck.after(latest) && !holes.contains(toCheck); }
@Override public boolean hasNext() { return cur != null && getLatest() != null && !cur.after(getLatest()); }
@Override public boolean hasNext() { return cur != null && getLatest() != null && !cur.after(getLatest()); }
private int getStrictlyAfterIndex(TimePartition part) { int start = 0; int end = getRanges().size(); int mid; while (end - start > 0) { mid = (start + end) / 2; if (ranges.get(mid).getBegin().after(part)) { end = mid; } else { start = mid + 1; } } return end; }
private int getStrictlyAfterIndex(TimePartition part) { int start = 0; int end = getRanges().size(); int mid; while (end - start > 0) { mid = (start + end) / 2; if (ranges.get(mid).getBegin().after(part)) { end = mid; } else { start = mid + 1; } } return end; }
@Override public boolean add(@NonNull TimePartition partition) throws LensException { if (isEmpty()) { // First partition being added first = partition; latest = partition; return true; } if (partition.before(first)) { addHolesBetween(partition, first, partition.getUpdatePeriod()); first = partition; return true; } else if (partition.after(latest)) { addHolesBetween(latest, partition, partition.getUpdatePeriod()); latest = partition; return true; } else { return holes.remove(partition); } }
@Override public boolean add(@NonNull TimePartition partition) throws LensException { if (isEmpty()) { // First partition being added first = partition; latest = partition; return true; } if (partition.before(first)) { addHolesBetween(partition, first, partition.getUpdatePeriod()); first = partition; return true; } else if (partition.after(latest)) { addHolesBetween(latest, partition, partition.getUpdatePeriod()); latest = partition; return true; } else { return holes.remove(partition); } }
@Test(dataProvider = "update-periods") public void test(UpdatePeriod up) throws LensException { // Normal date object parsable String nowStr = up.format(NOW); // Create partition by date object or it's string representation -- both should be same. TimePartition nowPartition = TimePartition.of(up, NOW); TimePartition nowStrPartition = TimePartition.of(up, nowStr); assertEquals(nowPartition, nowStrPartition); // Test next and previous assertTrue(nowPartition.next().after(nowPartition)); assertTrue(nowPartition.previous().before(nowPartition)); // date parse failures should give lens exception assertEquals(getLensExceptionFromPartitionParsing(up, "garbage").getMessage(), TimePartition.getWrongUpdatePeriodMessage(up, "garbage")); getLensExceptionFromPartitionParsing(up, (Date) null); getLensExceptionFromPartitionParsing(up, (String) null); getLensExceptionFromPartitionParsing(up, ""); // parse with other update periods for (UpdatePeriod up2 : UpdatePeriod.values()) { // handles the equality case and the case where monthly-quarterly have same format strings. if (up.formatStr().equals(up2.formatStr())) { continue; } // Parsing a string representation with differnet update period should give lens exception. assertEquals(getLensExceptionFromPartitionParsing(up2, nowStr).getMessage(), TimePartition.getWrongUpdatePeriodMessage(up2, nowStr)); } }