Skip to content

Commit fd414ba

Browse files
DATAGRAPH-1466 - Add support for storing java.util.Timezone and java.time.ZoneId.
1 parent 1ea1c32 commit fd414ba

File tree

3 files changed

+40
-1
lines changed

3 files changed

+40
-1
lines changed

src/main/java/org/springframework/data/neo4j/core/convert/AdditionalTypes.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.net.URI;
2323
import java.net.URL;
2424
import java.time.Instant;
25+
import java.time.ZoneId;
2526
import java.time.ZoneOffset;
2627
import java.time.format.DateTimeFormatter;
2728
import java.time.temporal.TemporalAmount;
@@ -33,6 +34,7 @@
3334
import java.util.List;
3435
import java.util.Locale;
3536
import java.util.Set;
37+
import java.util.TimeZone;
3638
import java.util.UUID;
3739

3840
import org.neo4j.driver.Value;
@@ -94,10 +96,36 @@ final class AdditionalTypes {
9496
hlp.add(ConverterBuilder.reading(Value.class, UUID.class, AdditionalTypes::asUUID).andWriting(AdditionalTypes::value));
9597
hlp.add(ConverterBuilder.reading(Value.class, URL.class, AdditionalTypes::asURL).andWriting(AdditionalTypes::value));
9698
hlp.add(ConverterBuilder.reading(Value.class, URI.class, AdditionalTypes::asURI).andWriting(AdditionalTypes::value));
99+
hlp.add(ConverterBuilder.reading(Value.class, TimeZone.class, AdditionalTypes::asTimeZone).andWriting(AdditionalTypes::value));
100+
hlp.add(ConverterBuilder.reading(Value.class, ZoneId.class, AdditionalTypes::asZoneId).andWriting(AdditionalTypes::value));
97101

98102
CONVERTERS = Collections.unmodifiableList(hlp);
99103
}
100104

105+
static TimeZone asTimeZone(Value value) {
106+
return TimeZone.getTimeZone(value.asString());
107+
}
108+
109+
static Value value(TimeZone timeZone) {
110+
if (timeZone == null) {
111+
return Values.NULL;
112+
}
113+
114+
return Values.value(timeZone.getID());
115+
}
116+
117+
static ZoneId asZoneId(Value value) {
118+
return ZoneId.of(value.asString());
119+
}
120+
121+
static Value value(ZoneId zoneId) {
122+
if (zoneId == null) {
123+
return Values.NULL;
124+
}
125+
126+
return Values.value(zoneId.getId());
127+
}
128+
101129
static UUID asUUID(Value value) {
102130
return UUID.fromString(value.asString());
103131
}

src/test/java/org/springframework/data/neo4j/integration/shared/conversion/Neo4jConversionsITBase.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,8 @@ public abstract class Neo4jConversionsITBase {
121121
hlp.put("anArrayOfEnums", new SomeEnum[] { SomeEnum.ValueA, SomeEnum.ValueB });
122122
hlp.put("aCollectionOfEnums", Arrays.asList(SomeEnum.ValueC, SomeEnum.TheUsualMisfit));
123123
hlp.put("listOfDoubles", Arrays.asList(1.0));
124+
hlp.put("aTimeZone", TimeZone.getTimeZone("America/Los_Angeles"));
125+
hlp.put("aZoneId", ZoneId.of("America/New_York"));
124126
ADDITIONAL_TYPES = Collections.unmodifiableMap(hlp);
125127
}
126128

@@ -226,7 +228,10 @@ static void prepareData() {
226228
+ " n.aURL = 'https://www.test.com',"
227229
+ " n.aURI = 'urn:isbn:9783864905254',"
228230
+ " n.anEnum = 'TheUsualMisfit'," + " n.anArrayOfEnums = ['ValueA', 'ValueB'],"
229-
+ " n.aCollectionOfEnums = ['ValueC', 'TheUsualMisfit']" + " RETURN id(n) AS id", parameters)
231+
+ " n.aCollectionOfEnums = ['ValueC', 'TheUsualMisfit'],"
232+
+ " n.aTimeZone = 'America/Los_Angeles', "
233+
+ " n.aZoneId = 'America/New_York'"
234+
+ " RETURN id(n) AS id", parameters)
230235
.single().get("id").asLong();
231236

232237
parameters = new HashMap<>();

src/test/java/org/springframework/data/neo4j/integration/shared/conversion/ThingWithAllAdditionalTypes.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,12 @@
2828
import java.time.Duration;
2929
import java.time.Instant;
3030
import java.time.Period;
31+
import java.time.ZoneId;
3132
import java.util.Date;
3233
import java.util.List;
3334
import java.util.Locale;
3435
import java.util.Set;
36+
import java.util.TimeZone;
3537
import java.util.UUID;
3638

3739
import org.springframework.data.neo4j.core.schema.GeneratedValue;
@@ -112,4 +114,8 @@ enum SomeEnum {
112114
private List<Double> listOfDoubles;
113115

114116
private List<SomeEnum> aCollectionOfEnums;
117+
118+
private TimeZone aTimeZone;
119+
120+
private ZoneId aZoneId;
115121
}

0 commit comments

Comments
 (0)