From ae93ceb4447f76c719a743669f29873d20ddd8e8 Mon Sep 17 00:00:00 2001 From: Satia Herfert Date: Fri, 2 Mar 2018 09:15:52 +0100 Subject: [PATCH] Extract common code and change error message. --- .../neo4j/values/storable/DateTimeValue.java | 24 ++++--------------- .../values/storable/LocalDateTimeValue.java | 22 ++++------------- .../values/storable/Neo4JTemporalField.java | 5 ++-- .../neo4j/values/storable/TemporalValue.java | 24 +++++++++++++++++++ 4 files changed, 34 insertions(+), 41 deletions(-) diff --git a/community/values/src/main/java/org/neo4j/values/storable/DateTimeValue.java b/community/values/src/main/java/org/neo4j/values/storable/DateTimeValue.java index eeb13b8527282..c3886732ad37c 100644 --- a/community/values/src/main/java/org/neo4j/values/storable/DateTimeValue.java +++ b/community/values/src/main/java/org/neo4j/values/storable/DateTimeValue.java @@ -156,27 +156,12 @@ public static DateTimeValue truncate( MapValue fields, Supplier defaultZone ) { - if ( unit.isTimeBased() && !(input instanceof DateTimeValue || input instanceof LocalDateTimeValue) ) - { - throw new IllegalArgumentException( "Cannot truncate " + input + " to date time with a time based unit." ); - } - LocalDate localDate = input.getDatePart(); - LocalTime localTime = input.hasTime() ? input.getLocalTimePart() : LocalTimeValue.DEFAULT_LOCAL_TIME; - ZoneId zoneId = input.hasTimeZone() ? input.getZoneId( defaultZone ) : defaultZone.get(); + Pair pair = getTruncatedDateAndTime( unit, input, "date time" ); - LocalTime truncatedTime; - LocalDate truncatedDate; - if ( unit.isDateBased() ) - { - truncatedDate = DateValue.truncateTo( localDate, unit ); - truncatedTime = LocalTimeValue.DEFAULT_LOCAL_TIME; - } - else - { - truncatedDate = localDate; - truncatedTime = localTime.truncatedTo( unit ); - } + LocalDate truncatedDate = pair.first(); + LocalTime truncatedTime = pair.other(); + ZoneId zoneId = input.hasTimeZone() ? input.getZoneId( defaultZone ) : defaultZone.get(); ZonedDateTime truncatedZDT = ZonedDateTime.of( truncatedDate, truncatedTime, zoneId ); if ( fields.size() == 0 ) @@ -200,7 +185,6 @@ public static DateTimeValue truncate( } truncatedZDT = updateFieldMapWithConflictingSubseconds( updatedFields, unit, truncatedZDT ); - if ( updatedFields.size() == 0 ) { return datetime( truncatedZDT ); diff --git a/community/values/src/main/java/org/neo4j/values/storable/LocalDateTimeValue.java b/community/values/src/main/java/org/neo4j/values/storable/LocalDateTimeValue.java index ea936fb2ce1ed..171abfeb46677 100644 --- a/community/values/src/main/java/org/neo4j/values/storable/LocalDateTimeValue.java +++ b/community/values/src/main/java/org/neo4j/values/storable/LocalDateTimeValue.java @@ -119,27 +119,13 @@ public static LocalDateTimeValue truncate( MapValue fields, Supplier defaultZone ) { - if ( unit.isTimeBased() && !(input instanceof DateTimeValue || input instanceof LocalDateTimeValue) ) - { - throw new IllegalArgumentException( "Cannot truncate " + input + " to local date time with a time based unit." ); - } - LocalTime localTime = input.hasTime() ? input.getLocalTimePart() : LocalTimeValue.DEFAULT_LOCAL_TIME; - LocalDate localDate = input.getDatePart(); + Pair pair = getTruncatedDateAndTime( unit, input, "local date time" ); - LocalTime truncatedTime; - LocalDate truncatedDate; - if ( unit.isDateBased() ) - { - truncatedDate = DateValue.truncateTo( localDate, unit ); - truncatedTime = LocalTimeValue.DEFAULT_LOCAL_TIME; - } - else - { - truncatedDate = localDate; - truncatedTime = localTime.truncatedTo( unit ); - } + LocalDate truncatedDate = pair.first(); + LocalTime truncatedTime = pair.other(); LocalDateTime truncatedLDT = LocalDateTime.of( truncatedDate, truncatedTime ); + if ( fields.size() == 0 ) { return localDateTime( truncatedLDT ); diff --git a/community/values/src/main/java/org/neo4j/values/storable/Neo4JTemporalField.java b/community/values/src/main/java/org/neo4j/values/storable/Neo4JTemporalField.java index 2b274983e01bc..63c33ccaabb96 100644 --- a/community/values/src/main/java/org/neo4j/values/storable/Neo4JTemporalField.java +++ b/community/values/src/main/java/org/neo4j/values/storable/Neo4JTemporalField.java @@ -35,9 +35,8 @@ import static java.time.temporal.ChronoUnit.MILLENNIA; import static java.time.temporal.ChronoUnit.YEARS; -public enum Neo4JTemporalField implements TemporalField +enum Neo4JTemporalField implements TemporalField { - YEAR_OF_DECADE( "Year of decade", YEARS, DECADES, 10 ), YEAR_OF_CENTURY( "Year of century", YEARS, CENTURIES, 100 ), YEAR_OF_MILLENNIUM( "Millennium", YEARS, MILLENNIA, 1000 ); @@ -109,7 +108,7 @@ public ValueRange rangeRefinedBy( TemporalAccessor temporal ) @Override public long getFrom( TemporalAccessor temporal ) { - throw new UnsupportedTemporalTypeException( "We don't support anything." ); + throw new UnsupportedOperationException( "Getting a " + this.name + " from temporal values is not supported." ); } @SuppressWarnings( "unchecked" ) diff --git a/community/values/src/main/java/org/neo4j/values/storable/TemporalValue.java b/community/values/src/main/java/org/neo4j/values/storable/TemporalValue.java index 60ed8ae0c51dc..a0f1d08133b58 100644 --- a/community/values/src/main/java/org/neo4j/values/storable/TemporalValue.java +++ b/community/values/src/main/java/org/neo4j/values/storable/TemporalValue.java @@ -1144,4 +1144,28 @@ else if ( conflictingMicroSeconds ) } return truncated; } + + static Pair getTruncatedDateAndTime( TemporalUnit unit, TemporalValue input, String type ) + { + if ( unit.isTimeBased() && !(input instanceof DateTimeValue || input instanceof LocalDateTimeValue) ) + { + throw new IllegalArgumentException( String.format( "Cannot truncate %s to %s with a time based unit.", input, type ) ); + } + LocalDate localDate = input.getDatePart(); + LocalTime localTime = input.hasTime() ? input.getLocalTimePart() : LocalTimeValue.DEFAULT_LOCAL_TIME; + + LocalTime truncatedTime; + LocalDate truncatedDate; + if ( unit.isDateBased() ) + { + truncatedDate = DateValue.truncateTo( localDate, unit ); + truncatedTime = LocalTimeValue.DEFAULT_LOCAL_TIME; + } + else + { + truncatedDate = localDate; + truncatedTime = localTime.truncatedTo( unit ); + } + return Pair.of( truncatedDate, truncatedTime ); + } }