use special enum for DateBucket units

Preparation step for having custom intervals.
This commit is contained in:
2020-09-27 17:06:27 +02:00
parent 78a0b7d70b
commit 10155f9cdb
9 changed files with 82 additions and 90 deletions

View File

@@ -6,9 +6,9 @@ import java.time.temporal.TemporalAdjuster;
public class BeginningOfNextInterval implements TemporalAdjuster {
private final ChronoUnit unit;
private final DateBucketUnit unit;
public BeginningOfNextInterval(final ChronoUnit unit) {
public BeginningOfNextInterval(final DateBucketUnit unit) {
this.unit = unit;
}
@@ -19,27 +19,27 @@ public class BeginningOfNextInterval implements TemporalAdjuster {
result = result.with(startOfInterval);
switch (unit) {
case MINUTES: {
case MINUTE: {
result = result.plus(1, ChronoUnit.MINUTES);
break;
}
case HOURS: {
case HOUR: {
result = result.plus(1, ChronoUnit.HOURS);
break;
}
case DAYS: {
case DAY: {
result = result.plus(1, ChronoUnit.DAYS);
break;
}
case WEEKS: {
case WEEK: {
result = result.plus(1, ChronoUnit.WEEKS);
break;
}
case MONTHS: {
case MONTH: {
result = result.plus(1, ChronoUnit.MONTHS);
break;
}
case YEARS: {
case YEAR: {
result = result.plus(1, ChronoUnit.YEARS);
break;
}

View File

@@ -0,0 +1,5 @@
package org.lucares.utils;
public enum DateBucketUnit {
MINUTE, HOUR, DAY, WEEK, MONTH, YEAR;
}

View File

@@ -6,9 +6,9 @@ import java.time.temporal.TemporalAdjuster;
public class EndOfInterval implements TemporalAdjuster {
private final ChronoUnit unit;
private final DateBucketUnit unit;
public EndOfInterval(final ChronoUnit unit) {
public EndOfInterval(final DateBucketUnit unit) {
this.unit = unit;
}

View File

@@ -4,7 +4,6 @@ import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
@@ -55,14 +54,14 @@ public class LongToDateBucket {
*/
private final DateTimeFormatter datePattern;
ChronoUnit chronoUnit;
DateBucketUnit chronoUnit;
// visible for test
final ConcurrentNavigableMap<Long, DatePrefixAndRange> datePrefixCache = new ConcurrentSkipListMap<>();
private final AtomicReference<DatePrefixAndRange> lastAccessed = new AtomicReference<>(null);
public LongToDateBucket(final String dateFormatPattern, final ChronoUnit chronoUnit) {
public LongToDateBucket(final String dateFormatPattern, final DateBucketUnit chronoUnit) {
this.chronoUnit = chronoUnit;
this.datePattern = DateTimeFormatter.ofPattern(dateFormatPattern);
}
@@ -118,7 +117,7 @@ public class LongToDateBucket {
* @return
*/
public List<String> toPartitionIds(final OffsetDateTime start, final OffsetDateTime end,
final ChronoUnit chronoUnit) {
final DateBucketUnit chronoUnit) {
final List<String> result = new ArrayList<>();
OffsetDateTime current = start;

View File

@@ -1,62 +1,50 @@
package org.lucares.utils;
import java.time.temporal.ChronoField;
import java.time.temporal.ChronoUnit;
import java.time.temporal.Temporal;
import java.time.temporal.TemporalAdjuster;
public class StartOfInterval implements TemporalAdjuster {
private final ChronoUnit unit;
private final DateBucketUnit unit;
public StartOfInterval(final ChronoUnit unit) {
public StartOfInterval(final DateBucketUnit unit) {
this.unit = unit;
}
@Override
public Temporal adjustInto(final Temporal temporal) {
Temporal result = temporal;
for (final ChronoUnit chronoUnit : ChronoUnit.values()) {
if (chronoUnit.compareTo(unit) >= 0) {
result = result.with(ChronoField.NANO_OF_SECOND, 0);
result = result.with(ChronoField.MICRO_OF_SECOND, 0);
result = result.with(ChronoField.MILLI_OF_SECOND, 0);
result = result.with(ChronoField.SECOND_OF_MINUTE, 0);
for (final DateBucketUnit dateBucketUnit : DateBucketUnit.values()) {
if (dateBucketUnit.compareTo(unit) >= 0) {
break;
}
switch (chronoUnit) {
case NANOS: {
result = result.with(ChronoField.NANO_OF_SECOND, 0);
break;
}
case MICROS: {
result = result.with(ChronoField.MICRO_OF_SECOND, 0);
break;
}
case MILLIS: {
result = result.with(ChronoField.MILLI_OF_SECOND, 0);
break;
}
case SECONDS: {
result = result.with(ChronoField.SECOND_OF_MINUTE, 0);
break;
}
case MINUTES: {
switch (dateBucketUnit) {
case MINUTE: {
result = result.with(ChronoField.MINUTE_OF_HOUR, 0);
break;
}
case HOURS: {
case HOUR: {
result = result.with(ChronoField.HOUR_OF_DAY, 0);
break;
}
case DAYS: {
case DAY: {
switch (unit) {
case WEEKS: {
case WEEK: {
result = result.with(ChronoField.DAY_OF_WEEK, 1);
break;
}
case MONTHS: {
case MONTH: {
result = result.with(ChronoField.DAY_OF_MONTH, 1);
break;
}
case YEARS: {
case YEAR: {
result = result.with(ChronoField.MONTH_OF_YEAR, 1);
break;
}
@@ -65,15 +53,14 @@ public class StartOfInterval implements TemporalAdjuster {
}
break;
}
case MONTHS: {
case MONTH: {
result = result.with(ChronoField.MONTH_OF_YEAR, 1);
break;
}
case HALF_DAYS:
case WEEKS:
case WEEK:
break;
default:
throw new IllegalArgumentException("Unexpected value: " + chronoUnit);
throw new IllegalArgumentException("Unexpected value: " + dateBucketUnit);
}
}