DATAGRAPH-1466 - Add support for storing java.util.Timezone and java.time.ZoneId.

This commit is contained in:
Michael Simons
2020-12-18 13:58:11 +01:00
parent 810af7b9fe
commit 483a6027e0
3 changed files with 40 additions and 1 deletions

View File

@@ -22,6 +22,7 @@ import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAmount;
@@ -33,6 +34,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.TimeZone;
import java.util.UUID;
import org.neo4j.driver.Value;
@@ -94,10 +96,36 @@ final class AdditionalTypes {
hlp.add(ConverterBuilder.reading(Value.class, UUID.class, AdditionalTypes::asUUID).andWriting(AdditionalTypes::value));
hlp.add(ConverterBuilder.reading(Value.class, URL.class, AdditionalTypes::asURL).andWriting(AdditionalTypes::value));
hlp.add(ConverterBuilder.reading(Value.class, URI.class, AdditionalTypes::asURI).andWriting(AdditionalTypes::value));
hlp.add(ConverterBuilder.reading(Value.class, TimeZone.class, AdditionalTypes::asTimeZone).andWriting(AdditionalTypes::value));
hlp.add(ConverterBuilder.reading(Value.class, ZoneId.class, AdditionalTypes::asZoneId).andWriting(AdditionalTypes::value));
CONVERTERS = Collections.unmodifiableList(hlp);
}
static TimeZone asTimeZone(Value value) {
return TimeZone.getTimeZone(value.asString());
}
static Value value(TimeZone timeZone) {
if (timeZone == null) {
return Values.NULL;
}
return Values.value(timeZone.getID());
}
static ZoneId asZoneId(Value value) {
return ZoneId.of(value.asString());
}
static Value value(ZoneId zoneId) {
if (zoneId == null) {
return Values.NULL;
}
return Values.value(zoneId.getId());
}
static UUID asUUID(Value value) {
return UUID.fromString(value.asString());
}

View File

@@ -121,6 +121,8 @@ public abstract class Neo4jConversionsITBase {
hlp.put("anArrayOfEnums", new SomeEnum[] { SomeEnum.ValueA, SomeEnum.ValueB });
hlp.put("aCollectionOfEnums", Arrays.asList(SomeEnum.ValueC, SomeEnum.TheUsualMisfit));
hlp.put("listOfDoubles", Arrays.asList(1.0));
hlp.put("aTimeZone", TimeZone.getTimeZone("America/Los_Angeles"));
hlp.put("aZoneId", ZoneId.of("America/New_York"));
ADDITIONAL_TYPES = Collections.unmodifiableMap(hlp);
}
@@ -226,7 +228,10 @@ public abstract class Neo4jConversionsITBase {
+ " n.aURL = 'https://www.test.com',"
+ " n.aURI = 'urn:isbn:9783864905254',"
+ " n.anEnum = 'TheUsualMisfit'," + " n.anArrayOfEnums = ['ValueA', 'ValueB'],"
+ " n.aCollectionOfEnums = ['ValueC', 'TheUsualMisfit']" + " RETURN id(n) AS id", parameters)
+ " n.aCollectionOfEnums = ['ValueC', 'TheUsualMisfit'],"
+ " n.aTimeZone = 'America/Los_Angeles', "
+ " n.aZoneId = 'America/New_York'"
+ " RETURN id(n) AS id", parameters)
.single().get("id").asLong();
parameters = new HashMap<>();

View File

@@ -28,10 +28,12 @@ import java.net.URL;
import java.time.Duration;
import java.time.Instant;
import java.time.Period;
import java.time.ZoneId;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Set;
import java.util.TimeZone;
import java.util.UUID;
import org.springframework.data.neo4j.core.schema.GeneratedValue;
@@ -112,4 +114,8 @@ public class ThingWithAllAdditionalTypes {
private List<Double> listOfDoubles;
private List<SomeEnum> aCollectionOfEnums;
private TimeZone aTimeZone;
private ZoneId aZoneId;
}