You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2016/05/18 13:10:00 UTC
[2/2] incubator-tinkerpop git commit: Frame up for GraphSON 2.0
Frame up for GraphSON 2.0
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/4ab69c30
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/4ab69c30
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/4ab69c30
Branch: refs/heads/TINKERPOP-1274
Commit: 4ab69c3019d63ac9f6fa5ac5ee2a98ad2247135e
Parents: efe0360
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed May 18 08:41:26 2016 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed May 18 08:41:26 2016 -0400
----------------------------------------------------------------------
.../structure/io/graphson/GraphSONMapper.java | 20 +-
.../structure/io/graphson/GraphSONModule.java | 141 ++++--
.../io/graphson/GraphSONSerializers.java | 465 -------------------
.../io/graphson/GraphSONSerializersV1d0.java | 465 +++++++++++++++++++
.../structure/io/graphson/GraphSONVersion.java | 3 +-
.../io/graphson/JavaTimeSerializers.java | 326 -------------
.../io/graphson/JavaTimeSerializersV1d0.java | 326 +++++++++++++
.../io/graphson/JavaUtilSerializers.java | 86 ----
.../io/graphson/JavaUtilSerializersV1d0.java | 86 ++++
9 files changed, 997 insertions(+), 921 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4ab69c30/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
index 73e9552..be5377a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONMapper.java
@@ -75,12 +75,18 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
final ObjectMapper om = new ObjectMapper();
om.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
- if (embedTypes) {
- final TypeResolverBuilder<?> typer = new StdTypeResolverBuilder()
- .init(JsonTypeInfo.Id.CLASS, null)
- .inclusion(JsonTypeInfo.As.PROPERTY)
- .typeProperty(GraphSONTokens.CLASS);
- om.setDefaultTyping(typer);
+ if (version == GraphSONVersion.V1_0) {
+ if (embedTypes) {
+ final TypeResolverBuilder<?> typer = new StdTypeResolverBuilder()
+ .init(JsonTypeInfo.Id.CLASS, null)
+ .inclusion(JsonTypeInfo.As.PROPERTY)
+ .typeProperty(GraphSONTokens.CLASS);
+ om.setDefaultTyping(typer);
+ }
+ } else if (version == GraphSONVersion.V2_0) {
+
+ } else {
+ throw new IllegalStateException("Unknown GraphSONVersion");
}
if (normalize)
@@ -88,7 +94,7 @@ public class GraphSONMapper implements Mapper<ObjectMapper> {
// this provider toStrings all unknown classes and converts keys in Map objects that are Object to String.
final DefaultSerializerProvider provider = new GraphSONSerializerProvider();
- provider.setDefaultKeySerializer(new GraphSONSerializers.GraphSONKeySerializer());
+ provider.setDefaultKeySerializer(new GraphSONSerializersV1d0.GraphSONKeySerializer());
om.setSerializerProvider(provider);
om.registerModule(version.getBuilder().create(normalize));
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4ab69c30/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
index 7cc6c91..639e90d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONModule.java
@@ -61,6 +61,75 @@ abstract class GraphSONModule extends SimpleModule {
}
/**
+ * Version 2.0 of GraphSON.
+ */
+ static final class GraphSONModuleV2d0 extends GraphSONModule {
+
+ /**
+ * Constructs a new object.
+ */
+ protected GraphSONModuleV2d0(final boolean normalize) {
+ super("graphson-2.0");
+ // graph
+ addSerializer(Edge.class, new GraphSONSerializersV1d0.EdgeJacksonSerializer(normalize));
+ addSerializer(Vertex.class, new GraphSONSerializersV1d0.VertexJacksonSerializer(normalize));
+ addSerializer(VertexProperty.class, new GraphSONSerializersV1d0.VertexPropertyJacksonSerializer(normalize));
+ addSerializer(Property.class, new GraphSONSerializersV1d0.PropertyJacksonSerializer());
+ addSerializer(TraversalMetrics.class, new GraphSONSerializersV1d0.TraversalMetricsJacksonSerializer());
+ addSerializer(TraversalExplanation.class, new GraphSONSerializersV1d0.TraversalExplanationJacksonSerializer());
+ addSerializer(Path.class, new GraphSONSerializersV1d0.PathJacksonSerializer());
+ addSerializer(StarGraphGraphSONSerializer.DirectionalStarGraph.class, new StarGraphGraphSONSerializer(normalize));
+ addSerializer(Tree.class, new GraphSONSerializersV1d0.TreeJacksonSerializer());
+
+ // java.util
+ addSerializer(Map.Entry.class, new JavaUtilSerializersV1d0.MapEntryJacksonSerializer());
+
+ // java.time
+ addSerializer(Duration.class, new JavaTimeSerializersV1d0.DurationJacksonSerializer());
+ addSerializer(Instant.class, new JavaTimeSerializersV1d0.InstantJacksonSerializer());
+ addSerializer(LocalDate.class, new JavaTimeSerializersV1d0.LocalDateJacksonSerializer());
+ addSerializer(LocalDateTime.class, new JavaTimeSerializersV1d0.LocalDateTimeJacksonSerializer());
+ addSerializer(LocalTime.class, new JavaTimeSerializersV1d0.LocalTimeJacksonSerializer());
+ addSerializer(MonthDay.class, new JavaTimeSerializersV1d0.MonthDayJacksonSerializer());
+ addSerializer(OffsetDateTime.class, new JavaTimeSerializersV1d0.OffsetDateTimeJacksonSerializer());
+ addSerializer(OffsetTime.class, new JavaTimeSerializersV1d0.OffsetTimeJacksonSerializer());
+ addSerializer(Period.class, new JavaTimeSerializersV1d0.PeriodJacksonSerializer());
+ addSerializer(Year.class, new JavaTimeSerializersV1d0.YearJacksonSerializer());
+ addSerializer(YearMonth.class, new JavaTimeSerializersV1d0.YearMonthJacksonSerializer());
+ addSerializer(ZonedDateTime.class, new JavaTimeSerializersV1d0.ZonedDateTimeJacksonSerializer());
+ addSerializer(ZoneOffset.class, new JavaTimeSerializersV1d0.ZoneOffsetJacksonSerializer());
+
+ addDeserializer(Duration.class, new JavaTimeSerializersV1d0.DurationJacksonDeserializer());
+ addDeserializer(Instant.class, new JavaTimeSerializersV1d0.InstantJacksonDeserializer());
+ addDeserializer(LocalDate.class, new JavaTimeSerializersV1d0.LocalDateJacksonDeserializer());
+ addDeserializer(LocalDateTime.class, new JavaTimeSerializersV1d0.LocalDateTimeJacksonDeserializer());
+ addDeserializer(LocalTime.class, new JavaTimeSerializersV1d0.LocalTimeJacksonDeserializer());
+ addDeserializer(MonthDay.class, new JavaTimeSerializersV1d0.MonthDayJacksonDeserializer());
+ addDeserializer(OffsetDateTime.class, new JavaTimeSerializersV1d0.OffsetDateTimeJacksonDeserializer());
+ addDeserializer(OffsetTime.class, new JavaTimeSerializersV1d0.OffsetTimeJacksonDeserializer());
+ addDeserializer(Period.class, new JavaTimeSerializersV1d0.PeriodJacksonDeserializer());
+ addDeserializer(Year.class, new JavaTimeSerializersV1d0.YearJacksonDeserializer());
+ addDeserializer(YearMonth.class, new JavaTimeSerializersV1d0.YearMonthJacksonDeserializer());
+ addDeserializer(ZonedDateTime.class, new JavaTimeSerializersV1d0.ZonedDateTimeJacksonDeserializer());
+ addDeserializer(ZoneOffset.class, new JavaTimeSerializersV1d0.ZoneOffsetJacksonDeserializer());
+ }
+
+ public static Builder build() {
+ return new Builder();
+ }
+
+ static final class Builder implements GraphSONModuleBuilder {
+
+ private Builder() {}
+
+ @Override
+ public GraphSONModule create(final boolean normalize) {
+ return new GraphSONModuleV2d0(normalize);
+ }
+ }
+ }
+
+ /**
* Version 1.0 of GraphSON.
*/
static final class GraphSONModuleV1d0 extends GraphSONModule {
@@ -71,47 +140,47 @@ abstract class GraphSONModule extends SimpleModule {
protected GraphSONModuleV1d0(final boolean normalize) {
super("graphson-1.0");
// graph
- addSerializer(Edge.class, new GraphSONSerializers.EdgeJacksonSerializer(normalize));
- addSerializer(Vertex.class, new GraphSONSerializers.VertexJacksonSerializer(normalize));
- addSerializer(VertexProperty.class, new GraphSONSerializers.VertexPropertyJacksonSerializer(normalize));
- addSerializer(Property.class, new GraphSONSerializers.PropertyJacksonSerializer());
- addSerializer(TraversalMetrics.class, new GraphSONSerializers.TraversalMetricsJacksonSerializer());
- addSerializer(TraversalExplanation.class, new GraphSONSerializers.TraversalExplanationJacksonSerializer());
- addSerializer(Path.class, new GraphSONSerializers.PathJacksonSerializer());
+ addSerializer(Edge.class, new GraphSONSerializersV1d0.EdgeJacksonSerializer(normalize));
+ addSerializer(Vertex.class, new GraphSONSerializersV1d0.VertexJacksonSerializer(normalize));
+ addSerializer(VertexProperty.class, new GraphSONSerializersV1d0.VertexPropertyJacksonSerializer(normalize));
+ addSerializer(Property.class, new GraphSONSerializersV1d0.PropertyJacksonSerializer());
+ addSerializer(TraversalMetrics.class, new GraphSONSerializersV1d0.TraversalMetricsJacksonSerializer());
+ addSerializer(TraversalExplanation.class, new GraphSONSerializersV1d0.TraversalExplanationJacksonSerializer());
+ addSerializer(Path.class, new GraphSONSerializersV1d0.PathJacksonSerializer());
addSerializer(StarGraphGraphSONSerializer.DirectionalStarGraph.class, new StarGraphGraphSONSerializer(normalize));
- addSerializer(Tree.class, new GraphSONSerializers.TreeJacksonSerializer());
+ addSerializer(Tree.class, new GraphSONSerializersV1d0.TreeJacksonSerializer());
// java.util
- addSerializer(Map.Entry.class, new JavaUtilSerializers.MapEntryJacksonSerializer());
+ addSerializer(Map.Entry.class, new JavaUtilSerializersV1d0.MapEntryJacksonSerializer());
// java.time
- addSerializer(Duration.class, new JavaTimeSerializers.DurationJacksonSerializer());
- addSerializer(Instant.class, new JavaTimeSerializers.InstantJacksonSerializer());
- addSerializer(LocalDate.class, new JavaTimeSerializers.LocalDateJacksonSerializer());
- addSerializer(LocalDateTime.class, new JavaTimeSerializers.LocalDateTimeJacksonSerializer());
- addSerializer(LocalTime.class, new JavaTimeSerializers.LocalTimeJacksonSerializer());
- addSerializer(MonthDay.class, new JavaTimeSerializers.MonthDayJacksonSerializer());
- addSerializer(OffsetDateTime.class, new JavaTimeSerializers.OffsetDateTimeJacksonSerializer());
- addSerializer(OffsetTime.class, new JavaTimeSerializers.OffsetTimeJacksonSerializer());
- addSerializer(Period.class, new JavaTimeSerializers.PeriodJacksonSerializer());
- addSerializer(Year.class, new JavaTimeSerializers.YearJacksonSerializer());
- addSerializer(YearMonth.class, new JavaTimeSerializers.YearMonthJacksonSerializer());
- addSerializer(ZonedDateTime.class, new JavaTimeSerializers.ZonedDateTimeJacksonSerializer());
- addSerializer(ZoneOffset.class, new JavaTimeSerializers.ZoneOffsetJacksonSerializer());
-
- addDeserializer(Duration.class, new JavaTimeSerializers.DurationJacksonDeserializer());
- addDeserializer(Instant.class, new JavaTimeSerializers.InstantJacksonDeserializer());
- addDeserializer(LocalDate.class, new JavaTimeSerializers.LocalDateJacksonDeserializer());
- addDeserializer(LocalDateTime.class, new JavaTimeSerializers.LocalDateTimeJacksonDeserializer());
- addDeserializer(LocalTime.class, new JavaTimeSerializers.LocalTimeJacksonDeserializer());
- addDeserializer(MonthDay.class, new JavaTimeSerializers.MonthDayJacksonDeserializer());
- addDeserializer(OffsetDateTime.class, new JavaTimeSerializers.OffsetDateTimeJacksonDeserializer());
- addDeserializer(OffsetTime.class, new JavaTimeSerializers.OffsetTimeJacksonDeserializer());
- addDeserializer(Period.class, new JavaTimeSerializers.PeriodJacksonDeserializer());
- addDeserializer(Year.class, new JavaTimeSerializers.YearJacksonDeserializer());
- addDeserializer(YearMonth.class, new JavaTimeSerializers.YearMonthJacksonDeserializer());
- addDeserializer(ZonedDateTime.class, new JavaTimeSerializers.ZonedDateTimeJacksonDeserializer());
- addDeserializer(ZoneOffset.class, new JavaTimeSerializers.ZoneOffsetJacksonDeserializer());
+ addSerializer(Duration.class, new JavaTimeSerializersV1d0.DurationJacksonSerializer());
+ addSerializer(Instant.class, new JavaTimeSerializersV1d0.InstantJacksonSerializer());
+ addSerializer(LocalDate.class, new JavaTimeSerializersV1d0.LocalDateJacksonSerializer());
+ addSerializer(LocalDateTime.class, new JavaTimeSerializersV1d0.LocalDateTimeJacksonSerializer());
+ addSerializer(LocalTime.class, new JavaTimeSerializersV1d0.LocalTimeJacksonSerializer());
+ addSerializer(MonthDay.class, new JavaTimeSerializersV1d0.MonthDayJacksonSerializer());
+ addSerializer(OffsetDateTime.class, new JavaTimeSerializersV1d0.OffsetDateTimeJacksonSerializer());
+ addSerializer(OffsetTime.class, new JavaTimeSerializersV1d0.OffsetTimeJacksonSerializer());
+ addSerializer(Period.class, new JavaTimeSerializersV1d0.PeriodJacksonSerializer());
+ addSerializer(Year.class, new JavaTimeSerializersV1d0.YearJacksonSerializer());
+ addSerializer(YearMonth.class, new JavaTimeSerializersV1d0.YearMonthJacksonSerializer());
+ addSerializer(ZonedDateTime.class, new JavaTimeSerializersV1d0.ZonedDateTimeJacksonSerializer());
+ addSerializer(ZoneOffset.class, new JavaTimeSerializersV1d0.ZoneOffsetJacksonSerializer());
+
+ addDeserializer(Duration.class, new JavaTimeSerializersV1d0.DurationJacksonDeserializer());
+ addDeserializer(Instant.class, new JavaTimeSerializersV1d0.InstantJacksonDeserializer());
+ addDeserializer(LocalDate.class, new JavaTimeSerializersV1d0.LocalDateJacksonDeserializer());
+ addDeserializer(LocalDateTime.class, new JavaTimeSerializersV1d0.LocalDateTimeJacksonDeserializer());
+ addDeserializer(LocalTime.class, new JavaTimeSerializersV1d0.LocalTimeJacksonDeserializer());
+ addDeserializer(MonthDay.class, new JavaTimeSerializersV1d0.MonthDayJacksonDeserializer());
+ addDeserializer(OffsetDateTime.class, new JavaTimeSerializersV1d0.OffsetDateTimeJacksonDeserializer());
+ addDeserializer(OffsetTime.class, new JavaTimeSerializersV1d0.OffsetTimeJacksonDeserializer());
+ addDeserializer(Period.class, new JavaTimeSerializersV1d0.PeriodJacksonDeserializer());
+ addDeserializer(Year.class, new JavaTimeSerializersV1d0.YearJacksonDeserializer());
+ addDeserializer(YearMonth.class, new JavaTimeSerializersV1d0.YearMonthJacksonDeserializer());
+ addDeserializer(ZonedDateTime.class, new JavaTimeSerializersV1d0.ZonedDateTimeJacksonDeserializer());
+ addDeserializer(ZoneOffset.class, new JavaTimeSerializersV1d0.ZoneOffsetJacksonDeserializer());
}
public static Builder build() {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4ab69c30/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
deleted file mode 100644
index aaca316..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializers.java
+++ /dev/null
@@ -1,465 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.structure.io.graphson;
-
-import org.apache.tinkerpop.gremlin.process.traversal.Path;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
-import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.structure.Element;
-import org.apache.tinkerpop.gremlin.structure.Property;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.VertexProperty;
-import org.apache.tinkerpop.gremlin.structure.util.Comparators;
-import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
-import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
-import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
-import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
-import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdKeySerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
-import org.javatuples.Pair;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
-
-/**
- * GraphSON serializers for graph-based objects such as vertices, edges, properties, and paths. These serializers
- * present a generalized way to serialize the implementations of core interfaces.
- *
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-final class GraphSONSerializers {
-
- private GraphSONSerializers() {}
-
- final static class VertexPropertyJacksonSerializer extends StdSerializer<VertexProperty> {
-
- private final boolean normalize;
-
- public VertexPropertyJacksonSerializer(final boolean normalize) {
- super(VertexProperty.class);
- this.normalize = normalize;
- }
-
- @Override
- public void serialize(final VertexProperty property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
- throws IOException {
- serializerVertexProperty(property, jsonGenerator, serializerProvider, null, normalize, true);
- }
-
- @Override
- public void serializeWithType(final VertexProperty property, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- serializerVertexProperty(property, jsonGenerator, serializerProvider, typeSerializer, normalize, true);
- }
- }
-
- final static class PropertyJacksonSerializer extends StdSerializer<Property> {
-
- public PropertyJacksonSerializer() {
- super(Property.class);
- }
-
- @Override
- public void serialize(final Property property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
- throws IOException {
- ser(property, jsonGenerator, serializerProvider, null);
- }
- @Override
- public void serializeWithType(final Property property, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- ser(property, jsonGenerator, serializerProvider, typeSerializer);
- }
-
- private static void ser(final Property property, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- jsonGenerator.writeStartObject();
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- serializerProvider.defaultSerializeField(GraphSONTokens.KEY, property.key(), jsonGenerator);
- serializerProvider.defaultSerializeField(GraphSONTokens.VALUE, property.value(), jsonGenerator);
- jsonGenerator.writeEndObject();
- }
- }
-
- final static class EdgeJacksonSerializer extends StdSerializer<Edge> {
-
- private final boolean normalize;
-
- public EdgeJacksonSerializer(final boolean normalize) {
- super(Edge.class);
- this.normalize = normalize;
- }
-
-
- @Override
- public void serialize(final Edge edge, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
- throws IOException {
- ser(edge, jsonGenerator, serializerProvider, null);
- }
- @Override
- public void serializeWithType(final Edge edge, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- ser(edge, jsonGenerator, serializerProvider, typeSerializer);
- }
-
- private void ser(final Edge edge, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- jsonGenerator.writeStartObject();
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- GraphSONUtil.writeWithType(GraphSONTokens.ID, edge.id(), jsonGenerator, serializerProvider, typeSerializer);
-
- jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label());
- jsonGenerator.writeStringField(GraphSONTokens.TYPE, GraphSONTokens.EDGE);
- jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, edge.inVertex().label());
- jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, edge.outVertex().label());
- GraphSONUtil.writeWithType(GraphSONTokens.IN, edge.inVertex().id(), jsonGenerator, serializerProvider, typeSerializer);
- GraphSONUtil.writeWithType(GraphSONTokens.OUT, edge.outVertex().id(), jsonGenerator, serializerProvider, typeSerializer);
- writeProperties(edge, jsonGenerator, serializerProvider, typeSerializer);
- jsonGenerator.writeEndObject();
- }
-
- private void writeProperties(final Edge edge, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider,
- final TypeSerializer typeSerializer) throws IOException {
- final Iterator<Property<Object>> elementProperties = normalize ?
- IteratorUtils.list(edge.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : edge.properties();
- if (elementProperties.hasNext()) {
- jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- while (elementProperties.hasNext()) {
- final Property<Object> elementProperty = elementProperties.next();
- GraphSONUtil.writeWithType(elementProperty.key(), elementProperty.value(), jsonGenerator, serializerProvider, typeSerializer);
- }
- jsonGenerator.writeEndObject();
- }
- }
-
- }
-
- final static class VertexJacksonSerializer extends StdSerializer<Vertex> {
-
- private final boolean normalize;
-
- public VertexJacksonSerializer(final boolean normalize) {
- super(Vertex.class);
- this.normalize = normalize;
- }
-
- @Override
- public void serialize(final Vertex vertex, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
- throws IOException {
- ser(vertex, jsonGenerator, serializerProvider, null);
- }
-
- @Override
- public void serializeWithType(final Vertex vertex, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- ser(vertex, jsonGenerator, serializerProvider, typeSerializer);
-
- }
-
- private void ser(final Vertex vertex, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
- throws IOException {
- jsonGenerator.writeStartObject();
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- GraphSONUtil.writeWithType(GraphSONTokens.ID, vertex.id(), jsonGenerator, serializerProvider, typeSerializer);
- jsonGenerator.writeStringField(GraphSONTokens.LABEL, vertex.label());
- jsonGenerator.writeStringField(GraphSONTokens.TYPE, GraphSONTokens.VERTEX);
- writeProperties(vertex, jsonGenerator, serializerProvider, typeSerializer);
- jsonGenerator.writeEndObject();
- }
-
- private void writeProperties(final Vertex vertex, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-
- final List<String> keys = normalize ?
- IteratorUtils.list(vertex.keys().iterator(), Comparator.naturalOrder()) : new ArrayList<>(vertex.keys());
- for (String key : keys) {
- final Iterator<VertexProperty<Object>> vertexProperties = normalize ?
- IteratorUtils.list(vertex.properties(key), Comparators.PROPERTY_COMPARATOR).iterator() : vertex.properties(key);
-
- if (vertexProperties.hasNext()) {
- jsonGenerator.writeArrayFieldStart(key);
- if (typeSerializer != null) {
- jsonGenerator.writeString(ArrayList.class.getName());
- jsonGenerator.writeStartArray();
- }
-
- while (vertexProperties.hasNext()) {
- serializerVertexProperty(vertexProperties.next(), jsonGenerator, serializerProvider, typeSerializer, normalize, false);
- }
-
- jsonGenerator.writeEndArray();
- if (typeSerializer != null) jsonGenerator.writeEndArray();
- }
- }
-
- jsonGenerator.writeEndObject();
- }
-
- }
-
- final static class PathJacksonSerializer extends StdSerializer<Path> {
-
- public PathJacksonSerializer() {
- super(Path.class);
- }
- @Override
- public void serialize(final Path path, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
- throws IOException, JsonGenerationException {
- ser(path, jsonGenerator, null);
- }
-
- @Override
- public void serializeWithType(final Path path, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
- throws IOException, JsonProcessingException {
- ser(path, jsonGenerator, typeSerializer);
- }
- private static void ser(final Path path, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer)
- throws IOException {
- jsonGenerator.writeStartObject();
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- jsonGenerator.writeObjectField(GraphSONTokens.LABELS, path.labels());
- jsonGenerator.writeObjectField(GraphSONTokens.OBJECTS, path.objects());
- jsonGenerator.writeEndObject();
- }
-
- }
-
- final static class TreeJacksonSerializer extends StdSerializer<Tree> {
-
- public TreeJacksonSerializer() {
- super(Tree.class);
- }
-
- @Override
- public void serialize(final Tree tree, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
- ser(tree, jsonGenerator, null);
- }
-
- @Override
- public void serializeWithType(final Tree tree, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
- throws IOException, JsonProcessingException {
- ser(tree, jsonGenerator, typeSerializer);
- }
-
- private static void ser(final Tree tree, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer)
- throws IOException {
- jsonGenerator.writeStartObject();
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
-
- Set<Map.Entry<Element, Tree>> set = tree.entrySet();
- for(Map.Entry<Element, Tree> entry : set)
- {
- jsonGenerator.writeObjectFieldStart(entry.getKey().id().toString());
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- jsonGenerator.writeObjectField(GraphSONTokens.KEY, entry.getKey());
- jsonGenerator.writeObjectField(GraphSONTokens.VALUE, entry.getValue());
- jsonGenerator.writeEndObject();
- }
- jsonGenerator.writeEndObject();
- }
- }
-
- /**
- * Maps in the JVM can have {@link Object} as a key, but in JSON they must be a {@link String}.
- */
- final static class GraphSONKeySerializer extends StdKeySerializer {
-
- @Override
- public void serialize(final Object o, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException {
- ser(o, jsonGenerator, serializerProvider);
- }
- @Override
- public void serializeWithType(final Object o, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- ser(o, jsonGenerator, serializerProvider);
- }
-
- private void ser(final Object o, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider) throws IOException {
- if (Element.class.isAssignableFrom(o.getClass()))
- jsonGenerator.writeFieldName((((Element) o).id()).toString());
- else
- super.serialize(o, jsonGenerator, serializerProvider);
- }
- }
-
- final static class TraversalExplanationJacksonSerializer extends StdSerializer<TraversalExplanation> {
- public TraversalExplanationJacksonSerializer() {
- super(TraversalExplanation.class);
- }
-
- @Override
- public void serialize(final TraversalExplanation traversalExplanation, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider) throws IOException {
- ser(traversalExplanation, jsonGenerator);
- }
-
- @Override
- public void serializeWithType(final TraversalExplanation value, final JsonGenerator gen,
- final SerializerProvider serializers, final TypeSerializer typeSer) throws IOException {
- ser(value, gen);
- }
-
- public void ser(final TraversalExplanation te, final JsonGenerator jsonGenerator) throws IOException {
- final Map<String, Object> m = new HashMap<>();
- m.put(GraphSONTokens.ORIGINAL, getStepsAsList(te.getOriginalTraversal()));
-
- final List<Pair<TraversalStrategy, Traversal.Admin<?,?>>> strategyTraversals = te.getStrategyTraversals();
-
- final List<Map<String,Object>> intermediates = new ArrayList<>();
- for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair : strategyTraversals) {
- final Map<String,Object> intermediate = new HashMap<>();
- intermediate.put(GraphSONTokens.STRATEGY, pair.getValue0().toString());
- intermediate.put(GraphSONTokens.CATEGORY, pair.getValue0().getTraversalCategory().getSimpleName());
- intermediate.put(GraphSONTokens.TRAVERSAL, getStepsAsList(pair.getValue1()));
- intermediates.add(intermediate);
- }
- m.put(GraphSONTokens.INTERMEDIATE, intermediates);
-
- if (strategyTraversals.isEmpty())
- m.put(GraphSONTokens.FINAL, getStepsAsList(te.getOriginalTraversal()));
- else
- m.put(GraphSONTokens.FINAL, getStepsAsList(strategyTraversals.get(strategyTraversals.size() - 1).getValue1()));
-
- jsonGenerator.writeObject(m);
- }
-
- private List<String> getStepsAsList(final Traversal.Admin<?,?> t) {
- final List<String> steps = new ArrayList<>();
- t.getSteps().iterator().forEachRemaining(s -> steps.add(s.toString()));
- return steps;
- }
- }
-
- final static class TraversalMetricsJacksonSerializer extends StdSerializer<TraversalMetrics> {
- public TraversalMetricsJacksonSerializer() {
- super(TraversalMetrics.class);
- }
-
- @Override
- public void serialize(final TraversalMetrics property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
- throws IOException {
- serializeInternal(property, jsonGenerator);
- }
-
- @Override
- public void serializeWithType(final TraversalMetrics property, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
- serializeInternal(property, jsonGenerator);
- }
-
- private static void serializeInternal(final TraversalMetrics traversalMetrics, final JsonGenerator jsonGenerator) throws IOException {
- // creation of the map enables all the fields to be properly written with their type if required
- final Map<String, Object> m = new HashMap<>();
- m.put(GraphSONTokens.DURATION, traversalMetrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
- final List<Map<String, Object>> metrics = new ArrayList<>();
- traversalMetrics.getMetrics().forEach(it -> metrics.add(metricsToMap(it)));
- m.put(GraphSONTokens.METRICS, metrics);
-
- jsonGenerator.writeObject(m);
- }
-
- private static Map<String, Object> metricsToMap(final Metrics metrics) {
- final Map<String, Object> m = new HashMap<>();
- m.put(GraphSONTokens.ID, metrics.getId());
- m.put(GraphSONTokens.NAME, metrics.getName());
- m.put(GraphSONTokens.COUNTS, metrics.getCounts());
- m.put(GraphSONTokens.DURATION, metrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
-
- if (!metrics.getAnnotations().isEmpty()) {
- m.put(GraphSONTokens.ANNOTATIONS, metrics.getAnnotations());
- }
-
- if (!metrics.getNested().isEmpty()) {
- final List<Map<String, Object>> nested = new ArrayList<>();
- metrics.getNested().forEach(it -> nested.add(metricsToMap(it)));
- m.put(GraphSONTokens.METRICS, nested);
- }
- return m;
- }
- }
-
- private static void serializerVertexProperty(final VertexProperty property, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider,
- final TypeSerializer typeSerializer, final boolean normalize,
- final boolean includeLabel) throws IOException {
- jsonGenerator.writeStartObject();
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- GraphSONUtil.writeWithType(GraphSONTokens.ID, property.id(), jsonGenerator, serializerProvider, typeSerializer);
- GraphSONUtil.writeWithType(GraphSONTokens.VALUE, property.value(), jsonGenerator, serializerProvider, typeSerializer);
- if (includeLabel) jsonGenerator.writeStringField(GraphSONTokens.LABEL, property.label());
- tryWriteMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
- jsonGenerator.writeEndObject();
- }
-
- private static void tryWriteMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider,
- final TypeSerializer typeSerializer, final boolean normalize) throws IOException {
- // when "detached" you can't check features of the graph it detached from so it has to be
- // treated differently from a regular VertexProperty implementation.
- if (property instanceof DetachedVertexProperty) {
- // only write meta properties key if they exist
- if (property.properties().hasNext()) {
- writeMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
- }
- } else {
- // still attached - so we can check the features to see if it's worth even trying to write the
- // meta properties key
- if (property.graph().features().vertex().supportsMetaProperties() && property.properties().hasNext()) {
- writeMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
- }
- }
- }
-
- private static void writeMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
- final SerializerProvider serializerProvider,
- final TypeSerializer typeSerializer, final boolean normalize) throws IOException {
- jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
- if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
- final Iterator<Property<Object>> metaProperties = normalize ?
- IteratorUtils.list(( Iterator<Property<Object>>) property.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : property.properties();
- while (metaProperties.hasNext()) {
- final Property<Object> metaProperty = metaProperties.next();
- GraphSONUtil.writeWithType(metaProperty.key(), metaProperty.value(), jsonGenerator, serializerProvider, typeSerializer);
- }
- jsonGenerator.writeEndObject();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4ab69c30/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1d0.java
new file mode 100644
index 0000000..2411d8f
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONSerializersV1d0.java
@@ -0,0 +1,465 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.structure.io.graphson;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalExplanation;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Element;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.util.Comparators;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerationException;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
+import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
+import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdKeySerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+import org.javatuples.Pair;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree;
+
+/**
+ * GraphSON serializers for graph-based objects such as vertices, edges, properties, and paths. These serializers
+ * present a generalized way to serialize the implementations of core interfaces.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+final class GraphSONSerializersV1d0 {
+
+ private GraphSONSerializersV1d0() {}
+
+ final static class VertexPropertyJacksonSerializer extends StdSerializer<VertexProperty> {
+
+ private final boolean normalize;
+
+ public VertexPropertyJacksonSerializer(final boolean normalize) {
+ super(VertexProperty.class);
+ this.normalize = normalize;
+ }
+
+ @Override
+ public void serialize(final VertexProperty property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ serializerVertexProperty(property, jsonGenerator, serializerProvider, null, normalize, true);
+ }
+
+ @Override
+ public void serializeWithType(final VertexProperty property, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ serializerVertexProperty(property, jsonGenerator, serializerProvider, typeSerializer, normalize, true);
+ }
+ }
+
+ final static class PropertyJacksonSerializer extends StdSerializer<Property> {
+
+ public PropertyJacksonSerializer() {
+ super(Property.class);
+ }
+
+ @Override
+ public void serialize(final Property property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ ser(property, jsonGenerator, serializerProvider, null);
+ }
+ @Override
+ public void serializeWithType(final Property property, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ ser(property, jsonGenerator, serializerProvider, typeSerializer);
+ }
+
+ private static void ser(final Property property, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ jsonGenerator.writeStartObject();
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ serializerProvider.defaultSerializeField(GraphSONTokens.KEY, property.key(), jsonGenerator);
+ serializerProvider.defaultSerializeField(GraphSONTokens.VALUE, property.value(), jsonGenerator);
+ jsonGenerator.writeEndObject();
+ }
+ }
+
+ final static class EdgeJacksonSerializer extends StdSerializer<Edge> {
+
+ private final boolean normalize;
+
+ public EdgeJacksonSerializer(final boolean normalize) {
+ super(Edge.class);
+ this.normalize = normalize;
+ }
+
+
+ @Override
+ public void serialize(final Edge edge, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ ser(edge, jsonGenerator, serializerProvider, null);
+ }
+ @Override
+ public void serializeWithType(final Edge edge, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ ser(edge, jsonGenerator, serializerProvider, typeSerializer);
+ }
+
+ private void ser(final Edge edge, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ jsonGenerator.writeStartObject();
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ GraphSONUtil.writeWithType(GraphSONTokens.ID, edge.id(), jsonGenerator, serializerProvider, typeSerializer);
+
+ jsonGenerator.writeStringField(GraphSONTokens.LABEL, edge.label());
+ jsonGenerator.writeStringField(GraphSONTokens.TYPE, GraphSONTokens.EDGE);
+ jsonGenerator.writeStringField(GraphSONTokens.IN_LABEL, edge.inVertex().label());
+ jsonGenerator.writeStringField(GraphSONTokens.OUT_LABEL, edge.outVertex().label());
+ GraphSONUtil.writeWithType(GraphSONTokens.IN, edge.inVertex().id(), jsonGenerator, serializerProvider, typeSerializer);
+ GraphSONUtil.writeWithType(GraphSONTokens.OUT, edge.outVertex().id(), jsonGenerator, serializerProvider, typeSerializer);
+ writeProperties(edge, jsonGenerator, serializerProvider, typeSerializer);
+ jsonGenerator.writeEndObject();
+ }
+
+ private void writeProperties(final Edge edge, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider,
+ final TypeSerializer typeSerializer) throws IOException {
+ final Iterator<Property<Object>> elementProperties = normalize ?
+ IteratorUtils.list(edge.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : edge.properties();
+ if (elementProperties.hasNext()) {
+ jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ while (elementProperties.hasNext()) {
+ final Property<Object> elementProperty = elementProperties.next();
+ GraphSONUtil.writeWithType(elementProperty.key(), elementProperty.value(), jsonGenerator, serializerProvider, typeSerializer);
+ }
+ jsonGenerator.writeEndObject();
+ }
+ }
+
+ }
+
+ final static class VertexJacksonSerializer extends StdSerializer<Vertex> {
+
+ private final boolean normalize;
+
+ public VertexJacksonSerializer(final boolean normalize) {
+ super(Vertex.class);
+ this.normalize = normalize;
+ }
+
+ @Override
+ public void serialize(final Vertex vertex, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ ser(vertex, jsonGenerator, serializerProvider, null);
+ }
+
+ @Override
+ public void serializeWithType(final Vertex vertex, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ ser(vertex, jsonGenerator, serializerProvider, typeSerializer);
+
+ }
+
+ private void ser(final Vertex vertex, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
+ throws IOException {
+ jsonGenerator.writeStartObject();
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ GraphSONUtil.writeWithType(GraphSONTokens.ID, vertex.id(), jsonGenerator, serializerProvider, typeSerializer);
+ jsonGenerator.writeStringField(GraphSONTokens.LABEL, vertex.label());
+ jsonGenerator.writeStringField(GraphSONTokens.TYPE, GraphSONTokens.VERTEX);
+ writeProperties(vertex, jsonGenerator, serializerProvider, typeSerializer);
+ jsonGenerator.writeEndObject();
+ }
+
+ private void writeProperties(final Vertex vertex, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+
+ final List<String> keys = normalize ?
+ IteratorUtils.list(vertex.keys().iterator(), Comparator.naturalOrder()) : new ArrayList<>(vertex.keys());
+ for (String key : keys) {
+ final Iterator<VertexProperty<Object>> vertexProperties = normalize ?
+ IteratorUtils.list(vertex.properties(key), Comparators.PROPERTY_COMPARATOR).iterator() : vertex.properties(key);
+
+ if (vertexProperties.hasNext()) {
+ jsonGenerator.writeArrayFieldStart(key);
+ if (typeSerializer != null) {
+ jsonGenerator.writeString(ArrayList.class.getName());
+ jsonGenerator.writeStartArray();
+ }
+
+ while (vertexProperties.hasNext()) {
+ serializerVertexProperty(vertexProperties.next(), jsonGenerator, serializerProvider, typeSerializer, normalize, false);
+ }
+
+ jsonGenerator.writeEndArray();
+ if (typeSerializer != null) jsonGenerator.writeEndArray();
+ }
+ }
+
+ jsonGenerator.writeEndObject();
+ }
+
+ }
+
+ final static class PathJacksonSerializer extends StdSerializer<Path> {
+
+ public PathJacksonSerializer() {
+ super(Path.class);
+ }
+ @Override
+ public void serialize(final Path path, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException, JsonGenerationException {
+ ser(path, jsonGenerator, null);
+ }
+
+ @Override
+ public void serializeWithType(final Path path, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
+ throws IOException, JsonProcessingException {
+ ser(path, jsonGenerator, typeSerializer);
+ }
+ private static void ser(final Path path, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer)
+ throws IOException {
+ jsonGenerator.writeStartObject();
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ jsonGenerator.writeObjectField(GraphSONTokens.LABELS, path.labels());
+ jsonGenerator.writeObjectField(GraphSONTokens.OBJECTS, path.objects());
+ jsonGenerator.writeEndObject();
+ }
+
+ }
+
+ final static class TreeJacksonSerializer extends StdSerializer<Tree> {
+
+ public TreeJacksonSerializer() {
+ super(Tree.class);
+ }
+
+ @Override
+ public void serialize(final Tree tree, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException, JsonGenerationException {
+ ser(tree, jsonGenerator, null);
+ }
+
+ @Override
+ public void serializeWithType(final Tree tree, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer)
+ throws IOException, JsonProcessingException {
+ ser(tree, jsonGenerator, typeSerializer);
+ }
+
+ private static void ser(final Tree tree, final JsonGenerator jsonGenerator, final TypeSerializer typeSerializer)
+ throws IOException {
+ jsonGenerator.writeStartObject();
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+
+ Set<Map.Entry<Element, Tree>> set = tree.entrySet();
+ for(Map.Entry<Element, Tree> entry : set)
+ {
+ jsonGenerator.writeObjectFieldStart(entry.getKey().id().toString());
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ jsonGenerator.writeObjectField(GraphSONTokens.KEY, entry.getKey());
+ jsonGenerator.writeObjectField(GraphSONTokens.VALUE, entry.getValue());
+ jsonGenerator.writeEndObject();
+ }
+ jsonGenerator.writeEndObject();
+ }
+ }
+
+ /**
+ * Maps in the JVM can have {@link Object} as a key, but in JSON they must be a {@link String}.
+ */
+ final static class GraphSONKeySerializer extends StdKeySerializer {
+
+ @Override
+ public void serialize(final Object o, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException {
+ ser(o, jsonGenerator, serializerProvider);
+ }
+ @Override
+ public void serializeWithType(final Object o, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ ser(o, jsonGenerator, serializerProvider);
+ }
+
+ private void ser(final Object o, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider) throws IOException {
+ if (Element.class.isAssignableFrom(o.getClass()))
+ jsonGenerator.writeFieldName((((Element) o).id()).toString());
+ else
+ super.serialize(o, jsonGenerator, serializerProvider);
+ }
+ }
+
+ final static class TraversalExplanationJacksonSerializer extends StdSerializer<TraversalExplanation> {
+ public TraversalExplanationJacksonSerializer() {
+ super(TraversalExplanation.class);
+ }
+
+ @Override
+ public void serialize(final TraversalExplanation traversalExplanation, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider) throws IOException {
+ ser(traversalExplanation, jsonGenerator);
+ }
+
+ @Override
+ public void serializeWithType(final TraversalExplanation value, final JsonGenerator gen,
+ final SerializerProvider serializers, final TypeSerializer typeSer) throws IOException {
+ ser(value, gen);
+ }
+
+ public void ser(final TraversalExplanation te, final JsonGenerator jsonGenerator) throws IOException {
+ final Map<String, Object> m = new HashMap<>();
+ m.put(GraphSONTokens.ORIGINAL, getStepsAsList(te.getOriginalTraversal()));
+
+ final List<Pair<TraversalStrategy, Traversal.Admin<?,?>>> strategyTraversals = te.getStrategyTraversals();
+
+ final List<Map<String,Object>> intermediates = new ArrayList<>();
+ for (final Pair<TraversalStrategy, Traversal.Admin<?, ?>> pair : strategyTraversals) {
+ final Map<String,Object> intermediate = new HashMap<>();
+ intermediate.put(GraphSONTokens.STRATEGY, pair.getValue0().toString());
+ intermediate.put(GraphSONTokens.CATEGORY, pair.getValue0().getTraversalCategory().getSimpleName());
+ intermediate.put(GraphSONTokens.TRAVERSAL, getStepsAsList(pair.getValue1()));
+ intermediates.add(intermediate);
+ }
+ m.put(GraphSONTokens.INTERMEDIATE, intermediates);
+
+ if (strategyTraversals.isEmpty())
+ m.put(GraphSONTokens.FINAL, getStepsAsList(te.getOriginalTraversal()));
+ else
+ m.put(GraphSONTokens.FINAL, getStepsAsList(strategyTraversals.get(strategyTraversals.size() - 1).getValue1()));
+
+ jsonGenerator.writeObject(m);
+ }
+
+ private List<String> getStepsAsList(final Traversal.Admin<?,?> t) {
+ final List<String> steps = new ArrayList<>();
+ t.getSteps().iterator().forEachRemaining(s -> steps.add(s.toString()));
+ return steps;
+ }
+ }
+
+ final static class TraversalMetricsJacksonSerializer extends StdSerializer<TraversalMetrics> {
+ public TraversalMetricsJacksonSerializer() {
+ super(TraversalMetrics.class);
+ }
+
+ @Override
+ public void serialize(final TraversalMetrics property, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+ throws IOException {
+ serializeInternal(property, jsonGenerator);
+ }
+
+ @Override
+ public void serializeWithType(final TraversalMetrics property, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException {
+ serializeInternal(property, jsonGenerator);
+ }
+
+ private static void serializeInternal(final TraversalMetrics traversalMetrics, final JsonGenerator jsonGenerator) throws IOException {
+ // creation of the map enables all the fields to be properly written with their type if required
+ final Map<String, Object> m = new HashMap<>();
+ m.put(GraphSONTokens.DURATION, traversalMetrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
+ final List<Map<String, Object>> metrics = new ArrayList<>();
+ traversalMetrics.getMetrics().forEach(it -> metrics.add(metricsToMap(it)));
+ m.put(GraphSONTokens.METRICS, metrics);
+
+ jsonGenerator.writeObject(m);
+ }
+
+ private static Map<String, Object> metricsToMap(final Metrics metrics) {
+ final Map<String, Object> m = new HashMap<>();
+ m.put(GraphSONTokens.ID, metrics.getId());
+ m.put(GraphSONTokens.NAME, metrics.getName());
+ m.put(GraphSONTokens.COUNTS, metrics.getCounts());
+ m.put(GraphSONTokens.DURATION, metrics.getDuration(TimeUnit.NANOSECONDS) / 1000000d);
+
+ if (!metrics.getAnnotations().isEmpty()) {
+ m.put(GraphSONTokens.ANNOTATIONS, metrics.getAnnotations());
+ }
+
+ if (!metrics.getNested().isEmpty()) {
+ final List<Map<String, Object>> nested = new ArrayList<>();
+ metrics.getNested().forEach(it -> nested.add(metricsToMap(it)));
+ m.put(GraphSONTokens.METRICS, nested);
+ }
+ return m;
+ }
+ }
+
+ private static void serializerVertexProperty(final VertexProperty property, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider,
+ final TypeSerializer typeSerializer, final boolean normalize,
+ final boolean includeLabel) throws IOException {
+ jsonGenerator.writeStartObject();
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ GraphSONUtil.writeWithType(GraphSONTokens.ID, property.id(), jsonGenerator, serializerProvider, typeSerializer);
+ GraphSONUtil.writeWithType(GraphSONTokens.VALUE, property.value(), jsonGenerator, serializerProvider, typeSerializer);
+ if (includeLabel) jsonGenerator.writeStringField(GraphSONTokens.LABEL, property.label());
+ tryWriteMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
+ jsonGenerator.writeEndObject();
+ }
+
+ private static void tryWriteMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider,
+ final TypeSerializer typeSerializer, final boolean normalize) throws IOException {
+ // when "detached" you can't check features of the graph it detached from so it has to be
+ // treated differently from a regular VertexProperty implementation.
+ if (property instanceof DetachedVertexProperty) {
+ // only write meta properties key if they exist
+ if (property.properties().hasNext()) {
+ writeMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
+ }
+ } else {
+ // still attached - so we can check the features to see if it's worth even trying to write the
+ // meta properties key
+ if (property.graph().features().vertex().supportsMetaProperties() && property.properties().hasNext()) {
+ writeMetaProperties(property, jsonGenerator, serializerProvider, typeSerializer, normalize);
+ }
+ }
+ }
+
+ private static void writeMetaProperties(final VertexProperty property, final JsonGenerator jsonGenerator,
+ final SerializerProvider serializerProvider,
+ final TypeSerializer typeSerializer, final boolean normalize) throws IOException {
+ jsonGenerator.writeObjectFieldStart(GraphSONTokens.PROPERTIES);
+ if (typeSerializer != null) jsonGenerator.writeStringField(GraphSONTokens.CLASS, HashMap.class.getName());
+ final Iterator<Property<Object>> metaProperties = normalize ?
+ IteratorUtils.list(( Iterator<Property<Object>>) property.properties(), Comparators.PROPERTY_COMPARATOR).iterator() : property.properties();
+ while (metaProperties.hasNext()) {
+ final Property<Object> metaProperty = metaProperties.next();
+ GraphSONUtil.writeWithType(metaProperty.key(), metaProperty.value(), jsonGenerator, serializerProvider, typeSerializer);
+ }
+ jsonGenerator.writeEndObject();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4ab69c30/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONVersion.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONVersion.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONVersion.java
index 628ea22..7740b06 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONVersion.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONVersion.java
@@ -24,7 +24,8 @@ package org.apache.tinkerpop.gremlin.structure.io.graphson;
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
public enum GraphSONVersion {
- V1_0(GraphSONModule.GraphSONModuleV1d0.build(), "1.0");
+ V1_0(GraphSONModule.GraphSONModuleV1d0.build(), "1.0"),
+ V2_0(GraphSONModule.GraphSONModuleV2d0.build(), "2.0");
private final GraphSONModule.GraphSONModuleBuilder builder;
private final String versionNumber;
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4ab69c30/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializers.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializers.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializers.java
deleted file mode 100644
index 7ceae94..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/JavaTimeSerializers.java
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.structure.io.graphson;
-
-import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
-import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
-import org.apache.tinkerpop.shaded.jackson.databind.DeserializationContext;
-import org.apache.tinkerpop.shaded.jackson.databind.SerializerProvider;
-import org.apache.tinkerpop.shaded.jackson.databind.deser.std.StdDeserializer;
-import org.apache.tinkerpop.shaded.jackson.databind.jsontype.TypeSerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
-
-import java.io.IOException;
-import java.time.Duration;
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.LocalTime;
-import java.time.MonthDay;
-import java.time.OffsetDateTime;
-import java.time.OffsetTime;
-import java.time.Period;
-import java.time.Year;
-import java.time.YearMonth;
-import java.time.ZoneOffset;
-import java.time.ZonedDateTime;
-
-/**
- * GraphSON serializers for classes in {@code java.time.*}.
- */
-final class JavaTimeSerializers {
-
- private JavaTimeSerializers() {}
-
- /**
- * Base class for serializing the {@code java.time.*} to ISO-8061 formats.
- */
- static abstract class AbstractJavaTimeSerializer<T> extends StdSerializer<T> {
-
- public AbstractJavaTimeSerializer(final Class<T> clazz) {
- super(clazz);
- }
-
- @Override
- public void serialize(final T value, final JsonGenerator gen,
- final SerializerProvider serializerProvider) throws IOException {
- gen.writeString(value.toString());
- }
-
- @Override
- public void serializeWithType(final T value, final JsonGenerator gen,
- final SerializerProvider serializers, final TypeSerializer typeSer) throws IOException {
- typeSer.writeTypePrefixForObject(value, gen);
- gen.writeStringField(GraphSONTokens.VALUE, value.toString());
- typeSer.writeTypeSuffixForObject(value, gen);
- }
- }
- /**
- * Base class for serializing the {@code java.time.*} from ISO-8061 formats.
- */
- abstract static class AbstractJavaTimeJacksonDeserializer<T> extends StdDeserializer<T> {
- public AbstractJavaTimeJacksonDeserializer(final Class<T> clazz) {
- super(clazz);
- }
-
- public abstract T parse(final String val);
-
- @Override
- public T deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException {
- if (!jsonParser.getText().equals(GraphSONTokens.VALUE))
- throw new IOException(String.format("Invalid format for %s - expecting '%s' with a text value in ISO-8061 format", _valueClass.getSimpleName(), GraphSONTokens.VALUE));
-
- return parse(jsonParser.nextTextValue());
- }
- }
-
- final static class DurationJacksonSerializer extends AbstractJavaTimeSerializer<Duration> {
-
- public DurationJacksonSerializer() {
- super(Duration.class);
- }
- }
-
- final static class DurationJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Duration> {
- public DurationJacksonDeserializer() {
- super(Duration.class);
- }
-
- @Override
- public Duration parse(final String val) {
- return Duration.parse(val);
- }
- }
-
- final static class InstantJacksonSerializer extends AbstractJavaTimeSerializer<Instant> {
-
- public InstantJacksonSerializer() {
- super(Instant.class);
- }
- }
-
- final static class InstantJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Instant> {
- public InstantJacksonDeserializer() {
- super(Instant.class);
- }
-
- @Override
- public Instant parse(final String val) {
- return Instant.parse(val);
- }
- }
-
- final static class LocalDateJacksonSerializer extends AbstractJavaTimeSerializer<LocalDate> {
-
- public LocalDateJacksonSerializer() {
- super(LocalDate.class);
- }
- }
-
- final static class LocalDateJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalDate> {
- public LocalDateJacksonDeserializer() {
- super(LocalDate.class);
- }
-
- @Override
- public LocalDate parse(final String val) {
- return LocalDate.parse(val);
- }
- }
-
- final static class LocalDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<LocalDateTime> {
-
- public LocalDateTimeJacksonSerializer() {
- super(LocalDateTime.class);
- }
- }
-
- final static class LocalDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalDateTime> {
- public LocalDateTimeJacksonDeserializer() {
- super(LocalDateTime.class);
- }
-
- @Override
- public LocalDateTime parse(final String val) {
- return LocalDateTime.parse(val);
- }
- }
-
- final static class LocalTimeJacksonSerializer extends AbstractJavaTimeSerializer<LocalTime> {
-
- public LocalTimeJacksonSerializer() {
- super(LocalTime.class);
- }
- }
-
- final static class LocalTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<LocalTime> {
- public LocalTimeJacksonDeserializer() {
- super(LocalTime.class);
- }
-
- @Override
- public LocalTime parse(final String val) {
- return LocalTime.parse(val);
- }
- }
-
- final static class MonthDayJacksonSerializer extends AbstractJavaTimeSerializer<MonthDay> {
-
- public MonthDayJacksonSerializer() {
- super(MonthDay.class);
- }
- }
-
- final static class MonthDayJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<MonthDay> {
- public MonthDayJacksonDeserializer() {
- super(MonthDay.class);
- }
-
- @Override
- public MonthDay parse(final String val) {
- return MonthDay.parse(val);
- }
- }
-
- final static class OffsetDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<OffsetDateTime> {
-
- public OffsetDateTimeJacksonSerializer() {
- super(OffsetDateTime.class);
- }
- }
-
- final static class OffsetDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<OffsetDateTime> {
- public OffsetDateTimeJacksonDeserializer() {
- super(OffsetDateTime.class);
- }
-
- @Override
- public OffsetDateTime parse(final String val) {
- return OffsetDateTime.parse(val);
- }
- }
-
- final static class OffsetTimeJacksonSerializer extends AbstractJavaTimeSerializer<OffsetTime> {
-
- public OffsetTimeJacksonSerializer() {
- super(OffsetTime.class);
- }
- }
-
- final static class OffsetTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<OffsetTime> {
- public OffsetTimeJacksonDeserializer() {
- super(OffsetTime.class);
- }
-
- @Override
- public OffsetTime parse(final String val) {
- return OffsetTime.parse(val);
- }
- }
-
- final static class PeriodJacksonSerializer extends AbstractJavaTimeSerializer<Period> {
-
- public PeriodJacksonSerializer() {
- super(Period.class);
- }
- }
-
- final static class PeriodJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Period> {
- public PeriodJacksonDeserializer() {
- super(Period.class);
- }
-
- @Override
- public Period parse(final String val) {
- return Period.parse(val);
- }
- }
-
- final static class YearJacksonSerializer extends AbstractJavaTimeSerializer<Year> {
-
- public YearJacksonSerializer() {
- super(Year.class);
- }
- }
-
- final static class YearJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<Year> {
- public YearJacksonDeserializer() {
- super(Year.class);
- }
-
- @Override
- public Year parse(final String val) {
- return Year.parse(val);
- }
- }
-
- final static class YearMonthJacksonSerializer extends AbstractJavaTimeSerializer<YearMonth> {
-
- public YearMonthJacksonSerializer() {
- super(YearMonth.class);
- }
- }
-
- final static class YearMonthJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<YearMonth> {
- public YearMonthJacksonDeserializer() {
- super(YearMonth.class);
- }
-
- @Override
- public YearMonth parse(final String val) {
- return YearMonth.parse(val);
- }
- }
-
- final static class ZonedDateTimeJacksonSerializer extends AbstractJavaTimeSerializer<ZonedDateTime> {
-
- public ZonedDateTimeJacksonSerializer() {
- super(ZonedDateTime.class);
- }
- }
-
- final static class ZonedDateTimeJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<ZonedDateTime> {
- public ZonedDateTimeJacksonDeserializer() {
- super(ZonedDateTime.class);
- }
-
- @Override
- public ZonedDateTime parse(final String val) {
- return ZonedDateTime.parse(val);
- }
- }
-
- final static class ZoneOffsetJacksonSerializer extends AbstractJavaTimeSerializer<ZoneOffset> {
-
- public ZoneOffsetJacksonSerializer() {
- super(ZoneOffset.class);
- }
- }
-
- final static class ZoneOffsetJacksonDeserializer extends AbstractJavaTimeJacksonDeserializer<ZoneOffset> {
- public ZoneOffsetJacksonDeserializer() {
- super(ZoneOffset.class);
- }
-
- @Override
- public ZoneOffset parse(final String val) {
- return ZoneOffset.of(val);
- }
- }
-}