Renamed GraphSONTraversalSerializersV2d0 for consistency

This is a non-breaking change as the class is not public. CTR


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/97cc07de
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/97cc07de
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/97cc07de

Branch: refs/heads/TINKERPOP-1602
Commit: 97cc07de91918bf0886f5f217a762ce2fffcc201
Parents: 28e1d93
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed Jan 18 13:22:00 2017 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed Jan 18 13:22:00 2017 -0500

----------------------------------------------------------------------
 .../structure/io/graphson/GraphSONModule.java   |  30 +-
 .../GraphSONTraversalSerializersV2d0.java       | 390 -------------------
 .../io/graphson/TraversalSerializersV2d0.java   | 390 +++++++++++++++++++
 3 files changed, 405 insertions(+), 405 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/97cc07de/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 7d65f9c..a061d1c 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
@@ -207,8 +207,8 @@ abstract class GraphSONModule extends 
TinkerPopJacksonModule {
             addSerializer(Double.class, new 
GraphSONSerializersV2d0.DoubleGraphSONSerializer());
 
             // traversal
-            addSerializer(Traversal.class, new 
GraphSONTraversalSerializersV2d0.TraversalJacksonSerializer());
-            addSerializer(Bytecode.class, new 
GraphSONTraversalSerializersV2d0.BytecodeJacksonSerializer());
+            addSerializer(Traversal.class, new 
TraversalSerializersV2d0.TraversalJacksonSerializer());
+            addSerializer(Bytecode.class, new 
TraversalSerializersV2d0.BytecodeJacksonSerializer());
             Stream.of(VertexProperty.Cardinality.class,
                     Column.class,
                     Direction.class,
@@ -218,12 +218,12 @@ abstract class GraphSONModule extends 
TinkerPopJacksonModule {
                     SackFunctions.Barrier.class,
                     Scope.class,
                     TraversalOptionParent.Pick.class,
-                    T.class).forEach(e -> addSerializer(e, new 
GraphSONTraversalSerializersV2d0.EnumJacksonSerializer()));
-            addSerializer(P.class, new 
GraphSONTraversalSerializersV2d0.PJacksonSerializer());
-            addSerializer(Lambda.class, new 
GraphSONTraversalSerializersV2d0.LambdaJacksonSerializer());
-            addSerializer(Bytecode.Binding.class, new 
GraphSONTraversalSerializersV2d0.BindingJacksonSerializer());
-            addSerializer(Traverser.class, new 
GraphSONTraversalSerializersV2d0.TraverserJacksonSerializer());
-            addSerializer(TraversalStrategy.class, new 
GraphSONTraversalSerializersV2d0.TraversalStrategyJacksonSerializer());
+                    T.class).forEach(e -> addSerializer(e, new 
TraversalSerializersV2d0.EnumJacksonSerializer()));
+            addSerializer(P.class, new 
TraversalSerializersV2d0.PJacksonSerializer());
+            addSerializer(Lambda.class, new 
TraversalSerializersV2d0.LambdaJacksonSerializer());
+            addSerializer(Bytecode.Binding.class, new 
TraversalSerializersV2d0.BindingJacksonSerializer());
+            addSerializer(Traverser.class, new 
TraversalSerializersV2d0.TraverserJacksonSerializer());
+            addSerializer(TraversalStrategy.class, new 
TraversalSerializersV2d0.TraversalStrategyJacksonSerializer());
 
             /////////////////////// DESERIALIZERS ////////////////////////////
 
@@ -242,8 +242,8 @@ abstract class GraphSONModule extends 
TinkerPopJacksonModule {
             addDeserializer(Double.class, new 
GraphSONSerializersV2d0.DoubleJackonsDeserializer());
 
             // traversal
-            addDeserializer(Bytecode.class, new 
GraphSONTraversalSerializersV2d0.BytecodeJacksonDeserializer());
-            addDeserializer(Bytecode.Binding.class, new 
GraphSONTraversalSerializersV2d0.BindingJacksonDeserializer());
+            addDeserializer(Bytecode.class, new 
TraversalSerializersV2d0.BytecodeJacksonDeserializer());
+            addDeserializer(Bytecode.Binding.class, new 
TraversalSerializersV2d0.BindingJacksonDeserializer());
             Stream.of(VertexProperty.Cardinality.values(),
                     Column.values(),
                     Direction.values(),
@@ -253,10 +253,10 @@ abstract class GraphSONModule extends 
TinkerPopJacksonModule {
                     SackFunctions.Barrier.values(),
                     Scope.values(),
                     TraversalOptionParent.Pick.values(),
-                    T.values()).flatMap(Stream::of).forEach(e -> 
addDeserializer(e.getClass(), new 
GraphSONTraversalSerializersV2d0.EnumJacksonDeserializer(e.getDeclaringClass())));
-            addDeserializer(P.class, new 
GraphSONTraversalSerializersV2d0.PJacksonDeserializer());
-            addDeserializer(Lambda.class, new 
GraphSONTraversalSerializersV2d0.LambdaJacksonDeserializer());
-            addDeserializer(Traverser.class, new 
GraphSONTraversalSerializersV2d0.TraverserJacksonDeserializer());
+                    T.values()).flatMap(Stream::of).forEach(e -> 
addDeserializer(e.getClass(), new 
TraversalSerializersV2d0.EnumJacksonDeserializer(e.getDeclaringClass())));
+            addDeserializer(P.class, new 
TraversalSerializersV2d0.PJacksonDeserializer());
+            addDeserializer(Lambda.class, new 
TraversalSerializersV2d0.LambdaJacksonDeserializer());
+            addDeserializer(Traverser.class, new 
TraversalSerializersV2d0.TraverserJacksonDeserializer());
             Arrays.asList(
                     ConnectiveStrategy.class,
                     ElementIdStrategy.class,
@@ -284,7 +284,7 @@ abstract class GraphSONModule extends 
TinkerPopJacksonModule {
                     //
                     GraphFilterStrategy.class,
                     VertexProgramStrategy.class
-            ).forEach(strategy -> addDeserializer(strategy, new 
GraphSONTraversalSerializersV2d0.TraversalStrategyProxyJacksonDeserializer(strategy)));
+            ).forEach(strategy -> addDeserializer(strategy, new 
TraversalSerializersV2d0.TraversalStrategyProxyJacksonDeserializer(strategy)));
         }
 
         public static Builder build() {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/97cc07de/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializersV2d0.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializersV2d0.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializersV2d0.java
deleted file mode 100644
index 267f8cb..0000000
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/GraphSONTraversalSerializersV2d0.java
+++ /dev/null
@@ -1,390 +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.commons.configuration.ConfigurationConverter;
-import org.apache.commons.configuration.MapConfiguration;
-import 
org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
-import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
-import org.apache.tinkerpop.gremlin.process.traversal.P;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
-import org.apache.tinkerpop.gremlin.process.traversal.util.AndP;
-import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
-import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
-import org.apache.tinkerpop.gremlin.util.function.Lambda;
-import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
-import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
-import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
-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.StdScalarSerializer;
-import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
-
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-final class GraphSONTraversalSerializersV2d0 {
-
-    private GraphSONTraversalSerializersV2d0() {
-    }
-
-    /////////////////
-    // SERIALIZERS //
-    ////////////////
-
-    final static class TraversalJacksonSerializer extends 
StdSerializer<Traversal> {
-
-        public TraversalJacksonSerializer() {
-            super(Traversal.class);
-        }
-
-        @Override
-        public void serialize(final Traversal traversal, final JsonGenerator 
jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException {
-            jsonGenerator.writeObject(traversal.asAdmin().getBytecode());
-        }
-
-        @Override
-        public void serializeWithType(final Traversal traversal, final 
JsonGenerator jsonGenerator, final SerializerProvider serializerProvider, final 
TypeSerializer typeSerializer)
-                throws IOException {
-            serialize(traversal, jsonGenerator, serializerProvider);
-        }
-
-    }
-
-    final static class BytecodeJacksonSerializer extends 
StdScalarSerializer<Bytecode> {
-
-        public BytecodeJacksonSerializer() {
-            super(Bytecode.class);
-        }
-
-        @Override
-        public void serialize(final Bytecode bytecode, final JsonGenerator 
jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException {
-            jsonGenerator.writeStartObject();
-            if (bytecode.getSourceInstructions().iterator().hasNext()) {
-                jsonGenerator.writeArrayFieldStart(GraphSONTokens.SOURCE);
-                for (final Bytecode.Instruction instruction : 
bytecode.getSourceInstructions()) {
-                    jsonGenerator.writeStartArray();
-                    jsonGenerator.writeString(instruction.getOperator());
-                    for (final Object argument : instruction.getArguments()) {
-                        jsonGenerator.writeObject(argument);
-                    }
-                    jsonGenerator.writeEndArray();
-                }
-                jsonGenerator.writeEndArray();
-            }
-            if (bytecode.getStepInstructions().iterator().hasNext()) {
-                jsonGenerator.writeArrayFieldStart(GraphSONTokens.STEP);
-                for (final Bytecode.Instruction instruction : 
bytecode.getStepInstructions()) {
-                    jsonGenerator.writeStartArray();
-                    jsonGenerator.writeString(instruction.getOperator());
-                    for (final Object argument : instruction.getArguments()) {
-                        jsonGenerator.writeObject(argument);
-                    }
-                    jsonGenerator.writeEndArray();
-                }
-                jsonGenerator.writeEndArray();
-            }
-
-            jsonGenerator.writeEndObject();
-        }
-    }
-
-    static class EnumJacksonSerializer extends StdScalarSerializer<Enum> {
-
-        public EnumJacksonSerializer() {
-            super(Enum.class);
-        }
-
-        @Override
-        public void serialize(final Enum enumInstance, final JsonGenerator 
jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException {
-            jsonGenerator.writeString(enumInstance.name());
-        }
-
-    }
-
-    final static class PJacksonSerializer extends StdScalarSerializer<P> {
-
-        public PJacksonSerializer() {
-            super(P.class);
-        }
-
-        @Override
-        public void serialize(final P p, final JsonGenerator jsonGenerator, 
final SerializerProvider serializerProvider)
-                throws IOException {
-            jsonGenerator.writeStartObject();
-            jsonGenerator.writeStringField(GraphSONTokens.PREDICATE,
-                    p instanceof ConnectiveP ?
-                            p instanceof AndP ?
-                                    GraphSONTokens.AND :
-                                    GraphSONTokens.OR :
-                            p.getBiPredicate().toString());
-            if (p instanceof ConnectiveP) {
-                jsonGenerator.writeArrayFieldStart(GraphSONTokens.VALUE);
-                for (final P<?> predicate : ((ConnectiveP<?>) 
p).getPredicates()) {
-                    jsonGenerator.writeObject(predicate);
-                }
-                jsonGenerator.writeEndArray();
-            } else {
-                if (p.getValue() instanceof Collection) {
-                    jsonGenerator.writeArrayFieldStart(GraphSONTokens.VALUE);
-                    for (final Object object : (Collection) p.getValue()) {
-                        jsonGenerator.writeObject(object);
-                    }
-                    jsonGenerator.writeEndArray();
-                } else
-                    jsonGenerator.writeObjectField(GraphSONTokens.VALUE, 
p.getValue());
-            }
-            jsonGenerator.writeEndObject();
-        }
-
-    }
-
-    final static class LambdaJacksonSerializer extends 
StdScalarSerializer<Lambda> {
-
-        public LambdaJacksonSerializer() {
-            super(Lambda.class);
-        }
-
-        @Override
-        public void serialize(final Lambda lambda, final JsonGenerator 
jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException {
-            jsonGenerator.writeStartObject();
-            jsonGenerator.writeStringField(GraphSONTokens.SCRIPT, 
lambda.getLambdaScript());
-            jsonGenerator.writeStringField(GraphSONTokens.LANGUAGE, 
lambda.getLambdaLanguage());
-            jsonGenerator.writeNumberField(GraphSONTokens.ARGUMENTS, 
lambda.getLambdaArguments());
-            jsonGenerator.writeEndObject();
-        }
-
-    }
-
-    final static class BindingJacksonSerializer extends 
StdScalarSerializer<Bytecode.Binding> {
-
-        public BindingJacksonSerializer() {
-            super(Bytecode.Binding.class);
-        }
-
-        @Override
-        public void serialize(final Bytecode.Binding binding, final 
JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException {
-            jsonGenerator.writeStartObject();
-            jsonGenerator.writeStringField(GraphSONTokens.KEY, 
binding.variable());
-            jsonGenerator.writeObjectField(GraphSONTokens.VALUE, 
binding.value());
-            jsonGenerator.writeEndObject();
-        }
-
-    }
-
-    final static class TraverserJacksonSerializer extends 
StdScalarSerializer<Traverser> {
-
-        public TraverserJacksonSerializer() {
-            super(Traverser.class);
-        }
-
-        @Override
-        public void serialize(final Traverser traverserInstance, final 
JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException {
-            jsonGenerator.writeStartObject();
-            jsonGenerator.writeObjectField(GraphSONTokens.BULK, 
traverserInstance.bulk());
-            jsonGenerator.writeObjectField(GraphSONTokens.VALUE, 
traverserInstance.get());
-            jsonGenerator.writeEndObject();
-        }
-    }
-
-    final static class TraversalStrategyJacksonSerializer extends 
StdScalarSerializer<TraversalStrategy> {
-
-        public TraversalStrategyJacksonSerializer() {
-            super(TraversalStrategy.class);
-        }
-
-        @Override
-        public void serialize(final TraversalStrategy traversalStrategy, final 
JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
-                throws IOException {
-            jsonGenerator.writeStartObject();
-            for (final Map.Entry<Object, Object> entry : 
ConfigurationConverter.getMap(traversalStrategy.getConfiguration()).entrySet()) 
{
-                jsonGenerator.writeObjectField((String) entry.getKey(), 
entry.getValue());
-            }
-            jsonGenerator.writeEndObject();
-        }
-    }
-
-    ///////////////////
-    // DESERIALIZERS //
-    //////////////////
-
-    final static class BytecodeJacksonDeserializer extends 
AbstractObjectDeserializer<Bytecode> {
-
-        public BytecodeJacksonDeserializer() {
-            super(Bytecode.class);
-        }
-
-        @Override
-        public Bytecode createObject(final Map<String, Object> data) {
-            final Bytecode bytecode = new Bytecode();
-            if (data.containsKey(GraphSONTokens.SOURCE)) {
-                final List<List<Object>> instructions = (List) 
data.get(GraphSONTokens.SOURCE);
-                for (final List<Object> instruction : instructions) {
-                    bytecode.addSource((String) instruction.get(0), 
Arrays.copyOfRange(instruction.toArray(), 1, instruction.size()));
-                }
-            }
-            if (data.containsKey(GraphSONTokens.STEP)) {
-                final List<List<Object>> instructions = (List) 
data.get(GraphSONTokens.STEP);
-                for (final List<Object> instruction : instructions) {
-                    bytecode.addStep((String) instruction.get(0), 
Arrays.copyOfRange(instruction.toArray(), 1, instruction.size()));
-                }
-            }
-            return bytecode;
-        }
-    }
-
-    final static class EnumJacksonDeserializer<A extends Enum> extends 
StdDeserializer<A> {
-
-        public EnumJacksonDeserializer(final Class<A> enumClass) {
-            super(enumClass);
-        }
-
-        @Override
-        public A deserialize(final JsonParser jsonParser, final 
DeserializationContext deserializationContext) throws IOException, 
JsonProcessingException {
-            final Class<A> enumClass = (Class<A>) this._valueClass;
-            final String enumName = jsonParser.getText();
-            for (final Enum a : enumClass.getEnumConstants()) {
-                if (a.name().equals(enumName))
-                    return (A) a;
-            }
-            throw new IOException("Unknown enum type: " + enumClass);
-        }
-    }
-
-    final static class PJacksonDeserializer extends 
AbstractObjectDeserializer<P> {
-
-        public PJacksonDeserializer() {
-            super(P.class);
-        }
-
-        @Override
-        public P createObject(final Map<String, Object> data) {
-            final String predicate = (String) 
data.get(GraphSONTokens.PREDICATE);
-            final Object value = data.get(GraphSONTokens.VALUE);
-            if (predicate.equals(GraphSONTokens.AND) || 
predicate.equals(GraphSONTokens.OR)) {
-                return predicate.equals(GraphSONTokens.AND) ? new 
AndP((List<P>) value) : new OrP((List<P>) value);
-            } else {
-                try {
-                    if (value instanceof Collection) {
-                        if (predicate.equals("between"))
-                            return P.between(((List) value).get(0), ((List) 
value).get(1));
-                        else if (predicate.equals("inside"))
-                            return P.between(((List) value).get(0), ((List) 
value).get(1));
-                        else if (predicate.equals("outside"))
-                            return P.outside(((List) value).get(0), ((List) 
value).get(1));
-                        else if (predicate.equals("within"))
-                            return P.within((Collection) value);
-                        else if (predicate.equals("without"))
-                            return P.without((Collection) value);
-                        else
-                            return (P) P.class.getMethod(predicate, 
Collection.class).invoke(null, (Collection) value);
-                    } else {
-                        try {
-                            return (P) P.class.getMethod(predicate, 
Object.class).invoke(null, value);
-                        } catch (final NoSuchMethodException e) {
-                            return (P) P.class.getMethod(predicate, 
Object[].class).invoke(null, (Object) new Object[]{value});
-                        }
-                    }
-                } catch (final Exception e) {
-                    throw new IllegalStateException(e.getMessage(), e);
-                }
-            }
-        }
-    }
-
-    final static class LambdaJacksonDeserializer extends 
AbstractObjectDeserializer<Lambda> {
-
-        public LambdaJacksonDeserializer() {
-            super(Lambda.class);
-        }
-
-        @Override
-        public Lambda createObject(final Map<String, Object> data) {
-            final String script = (String) data.get(GraphSONTokens.SCRIPT);
-            final String language = (String) data.get(GraphSONTokens.LANGUAGE);
-            final int arguments = ((Number) 
data.getOrDefault(GraphSONTokens.ARGUMENTS, -1)).intValue();
-            //
-            if (-1 == arguments || arguments > 2)
-                return new Lambda.UnknownArgLambda(script, language, 
arguments);
-            else if (0 == arguments)
-                return new Lambda.ZeroArgLambda<>(script, language);
-            else if (1 == arguments)
-                return new Lambda.OneArgLambda<>(script, language);
-            else
-                return new Lambda.TwoArgLambda<>(script, language);
-        }
-    }
-
-    final static class BindingJacksonDeserializer extends 
AbstractObjectDeserializer<Bytecode.Binding> {
-
-        public BindingJacksonDeserializer() {
-            super(Bytecode.Binding.class);
-        }
-
-        @Override
-        public Bytecode.Binding createObject(final Map<String, Object> data) {
-            return new Bytecode.Binding<>((String) 
data.get(GraphSONTokens.KEY), data.get(GraphSONTokens.VALUE));
-        }
-    }
-
-    static class TraverserJacksonDeserializer extends 
AbstractObjectDeserializer<Traverser> {
-
-        public TraverserJacksonDeserializer() {
-            super(Traverser.class);
-        }
-
-        @Override
-        public Traverser createObject(final Map<String, Object> data) {
-            return new 
DefaultRemoteTraverser<>(data.get(GraphSONTokens.VALUE), (Long) 
data.get(GraphSONTokens.BULK));
-        }
-    }
-
-    final static class TraversalStrategyProxyJacksonDeserializer<T extends 
TraversalStrategy> extends AbstractObjectDeserializer<TraversalStrategyProxy> {
-
-        private final Class<T> clazz;
-
-        public TraversalStrategyProxyJacksonDeserializer(final Class<T> clazz) 
{
-            super(TraversalStrategyProxy.class);
-            this.clazz = clazz;
-        }
-
-        @Override
-        public TraversalStrategyProxy<T> createObject(final Map<String, 
Object> data) {
-            return new TraversalStrategyProxy<>(this.clazz, new 
MapConfiguration(data));
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/97cc07de/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java
new file mode 100644
index 0000000..54e5d9a
--- /dev/null
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/graphson/TraversalSerializersV2d0.java
@@ -0,0 +1,390 @@
+/*
+ *  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.commons.configuration.ConfigurationConverter;
+import org.apache.commons.configuration.MapConfiguration;
+import 
org.apache.tinkerpop.gremlin.process.remote.traversal.DefaultRemoteTraverser;
+import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
+import org.apache.tinkerpop.gremlin.process.traversal.P;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import 
org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
+import org.apache.tinkerpop.gremlin.process.traversal.util.AndP;
+import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
+import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
+import org.apache.tinkerpop.gremlin.util.function.Lambda;
+import org.apache.tinkerpop.shaded.jackson.core.JsonGenerator;
+import org.apache.tinkerpop.shaded.jackson.core.JsonParser;
+import org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException;
+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.StdScalarSerializer;
+import org.apache.tinkerpop.shaded.jackson.databind.ser.std.StdSerializer;
+
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+final class TraversalSerializersV2d0 {
+
+    private TraversalSerializersV2d0() {
+    }
+
+    /////////////////
+    // SERIALIZERS //
+    ////////////////
+
+    final static class TraversalJacksonSerializer extends 
StdSerializer<Traversal> {
+
+        public TraversalJacksonSerializer() {
+            super(Traversal.class);
+        }
+
+        @Override
+        public void serialize(final Traversal traversal, final JsonGenerator 
jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            jsonGenerator.writeObject(traversal.asAdmin().getBytecode());
+        }
+
+        @Override
+        public void serializeWithType(final Traversal traversal, final 
JsonGenerator jsonGenerator, final SerializerProvider serializerProvider, final 
TypeSerializer typeSerializer)
+                throws IOException {
+            serialize(traversal, jsonGenerator, serializerProvider);
+        }
+
+    }
+
+    final static class BytecodeJacksonSerializer extends 
StdScalarSerializer<Bytecode> {
+
+        public BytecodeJacksonSerializer() {
+            super(Bytecode.class);
+        }
+
+        @Override
+        public void serialize(final Bytecode bytecode, final JsonGenerator 
jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            jsonGenerator.writeStartObject();
+            if (bytecode.getSourceInstructions().iterator().hasNext()) {
+                jsonGenerator.writeArrayFieldStart(GraphSONTokens.SOURCE);
+                for (final Bytecode.Instruction instruction : 
bytecode.getSourceInstructions()) {
+                    jsonGenerator.writeStartArray();
+                    jsonGenerator.writeString(instruction.getOperator());
+                    for (final Object argument : instruction.getArguments()) {
+                        jsonGenerator.writeObject(argument);
+                    }
+                    jsonGenerator.writeEndArray();
+                }
+                jsonGenerator.writeEndArray();
+            }
+            if (bytecode.getStepInstructions().iterator().hasNext()) {
+                jsonGenerator.writeArrayFieldStart(GraphSONTokens.STEP);
+                for (final Bytecode.Instruction instruction : 
bytecode.getStepInstructions()) {
+                    jsonGenerator.writeStartArray();
+                    jsonGenerator.writeString(instruction.getOperator());
+                    for (final Object argument : instruction.getArguments()) {
+                        jsonGenerator.writeObject(argument);
+                    }
+                    jsonGenerator.writeEndArray();
+                }
+                jsonGenerator.writeEndArray();
+            }
+
+            jsonGenerator.writeEndObject();
+        }
+    }
+
+    static class EnumJacksonSerializer extends StdScalarSerializer<Enum> {
+
+        public EnumJacksonSerializer() {
+            super(Enum.class);
+        }
+
+        @Override
+        public void serialize(final Enum enumInstance, final JsonGenerator 
jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            jsonGenerator.writeString(enumInstance.name());
+        }
+
+    }
+
+    final static class PJacksonSerializer extends StdScalarSerializer<P> {
+
+        public PJacksonSerializer() {
+            super(P.class);
+        }
+
+        @Override
+        public void serialize(final P p, final JsonGenerator jsonGenerator, 
final SerializerProvider serializerProvider)
+                throws IOException {
+            jsonGenerator.writeStartObject();
+            jsonGenerator.writeStringField(GraphSONTokens.PREDICATE,
+                    p instanceof ConnectiveP ?
+                            p instanceof AndP ?
+                                    GraphSONTokens.AND :
+                                    GraphSONTokens.OR :
+                            p.getBiPredicate().toString());
+            if (p instanceof ConnectiveP) {
+                jsonGenerator.writeArrayFieldStart(GraphSONTokens.VALUE);
+                for (final P<?> predicate : ((ConnectiveP<?>) 
p).getPredicates()) {
+                    jsonGenerator.writeObject(predicate);
+                }
+                jsonGenerator.writeEndArray();
+            } else {
+                if (p.getValue() instanceof Collection) {
+                    jsonGenerator.writeArrayFieldStart(GraphSONTokens.VALUE);
+                    for (final Object object : (Collection) p.getValue()) {
+                        jsonGenerator.writeObject(object);
+                    }
+                    jsonGenerator.writeEndArray();
+                } else
+                    jsonGenerator.writeObjectField(GraphSONTokens.VALUE, 
p.getValue());
+            }
+            jsonGenerator.writeEndObject();
+        }
+
+    }
+
+    final static class LambdaJacksonSerializer extends 
StdScalarSerializer<Lambda> {
+
+        public LambdaJacksonSerializer() {
+            super(Lambda.class);
+        }
+
+        @Override
+        public void serialize(final Lambda lambda, final JsonGenerator 
jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            jsonGenerator.writeStartObject();
+            jsonGenerator.writeStringField(GraphSONTokens.SCRIPT, 
lambda.getLambdaScript());
+            jsonGenerator.writeStringField(GraphSONTokens.LANGUAGE, 
lambda.getLambdaLanguage());
+            jsonGenerator.writeNumberField(GraphSONTokens.ARGUMENTS, 
lambda.getLambdaArguments());
+            jsonGenerator.writeEndObject();
+        }
+
+    }
+
+    final static class BindingJacksonSerializer extends 
StdScalarSerializer<Bytecode.Binding> {
+
+        public BindingJacksonSerializer() {
+            super(Bytecode.Binding.class);
+        }
+
+        @Override
+        public void serialize(final Bytecode.Binding binding, final 
JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            jsonGenerator.writeStartObject();
+            jsonGenerator.writeStringField(GraphSONTokens.KEY, 
binding.variable());
+            jsonGenerator.writeObjectField(GraphSONTokens.VALUE, 
binding.value());
+            jsonGenerator.writeEndObject();
+        }
+
+    }
+
+    final static class TraverserJacksonSerializer extends 
StdScalarSerializer<Traverser> {
+
+        public TraverserJacksonSerializer() {
+            super(Traverser.class);
+        }
+
+        @Override
+        public void serialize(final Traverser traverserInstance, final 
JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            jsonGenerator.writeStartObject();
+            jsonGenerator.writeObjectField(GraphSONTokens.BULK, 
traverserInstance.bulk());
+            jsonGenerator.writeObjectField(GraphSONTokens.VALUE, 
traverserInstance.get());
+            jsonGenerator.writeEndObject();
+        }
+    }
+
+    final static class TraversalStrategyJacksonSerializer extends 
StdScalarSerializer<TraversalStrategy> {
+
+        public TraversalStrategyJacksonSerializer() {
+            super(TraversalStrategy.class);
+        }
+
+        @Override
+        public void serialize(final TraversalStrategy traversalStrategy, final 
JsonGenerator jsonGenerator, final SerializerProvider serializerProvider)
+                throws IOException {
+            jsonGenerator.writeStartObject();
+            for (final Map.Entry<Object, Object> entry : 
ConfigurationConverter.getMap(traversalStrategy.getConfiguration()).entrySet()) 
{
+                jsonGenerator.writeObjectField((String) entry.getKey(), 
entry.getValue());
+            }
+            jsonGenerator.writeEndObject();
+        }
+    }
+
+    ///////////////////
+    // DESERIALIZERS //
+    //////////////////
+
+    final static class BytecodeJacksonDeserializer extends 
AbstractObjectDeserializer<Bytecode> {
+
+        public BytecodeJacksonDeserializer() {
+            super(Bytecode.class);
+        }
+
+        @Override
+        public Bytecode createObject(final Map<String, Object> data) {
+            final Bytecode bytecode = new Bytecode();
+            if (data.containsKey(GraphSONTokens.SOURCE)) {
+                final List<List<Object>> instructions = (List) 
data.get(GraphSONTokens.SOURCE);
+                for (final List<Object> instruction : instructions) {
+                    bytecode.addSource((String) instruction.get(0), 
Arrays.copyOfRange(instruction.toArray(), 1, instruction.size()));
+                }
+            }
+            if (data.containsKey(GraphSONTokens.STEP)) {
+                final List<List<Object>> instructions = (List) 
data.get(GraphSONTokens.STEP);
+                for (final List<Object> instruction : instructions) {
+                    bytecode.addStep((String) instruction.get(0), 
Arrays.copyOfRange(instruction.toArray(), 1, instruction.size()));
+                }
+            }
+            return bytecode;
+        }
+    }
+
+    final static class EnumJacksonDeserializer<A extends Enum> extends 
StdDeserializer<A> {
+
+        public EnumJacksonDeserializer(final Class<A> enumClass) {
+            super(enumClass);
+        }
+
+        @Override
+        public A deserialize(final JsonParser jsonParser, final 
DeserializationContext deserializationContext) throws IOException, 
JsonProcessingException {
+            final Class<A> enumClass = (Class<A>) this._valueClass;
+            final String enumName = jsonParser.getText();
+            for (final Enum a : enumClass.getEnumConstants()) {
+                if (a.name().equals(enumName))
+                    return (A) a;
+            }
+            throw new IOException("Unknown enum type: " + enumClass);
+        }
+    }
+
+    final static class PJacksonDeserializer extends 
AbstractObjectDeserializer<P> {
+
+        public PJacksonDeserializer() {
+            super(P.class);
+        }
+
+        @Override
+        public P createObject(final Map<String, Object> data) {
+            final String predicate = (String) 
data.get(GraphSONTokens.PREDICATE);
+            final Object value = data.get(GraphSONTokens.VALUE);
+            if (predicate.equals(GraphSONTokens.AND) || 
predicate.equals(GraphSONTokens.OR)) {
+                return predicate.equals(GraphSONTokens.AND) ? new 
AndP((List<P>) value) : new OrP((List<P>) value);
+            } else {
+                try {
+                    if (value instanceof Collection) {
+                        if (predicate.equals("between"))
+                            return P.between(((List) value).get(0), ((List) 
value).get(1));
+                        else if (predicate.equals("inside"))
+                            return P.between(((List) value).get(0), ((List) 
value).get(1));
+                        else if (predicate.equals("outside"))
+                            return P.outside(((List) value).get(0), ((List) 
value).get(1));
+                        else if (predicate.equals("within"))
+                            return P.within((Collection) value);
+                        else if (predicate.equals("without"))
+                            return P.without((Collection) value);
+                        else
+                            return (P) P.class.getMethod(predicate, 
Collection.class).invoke(null, (Collection) value);
+                    } else {
+                        try {
+                            return (P) P.class.getMethod(predicate, 
Object.class).invoke(null, value);
+                        } catch (final NoSuchMethodException e) {
+                            return (P) P.class.getMethod(predicate, 
Object[].class).invoke(null, (Object) new Object[]{value});
+                        }
+                    }
+                } catch (final Exception e) {
+                    throw new IllegalStateException(e.getMessage(), e);
+                }
+            }
+        }
+    }
+
+    final static class LambdaJacksonDeserializer extends 
AbstractObjectDeserializer<Lambda> {
+
+        public LambdaJacksonDeserializer() {
+            super(Lambda.class);
+        }
+
+        @Override
+        public Lambda createObject(final Map<String, Object> data) {
+            final String script = (String) data.get(GraphSONTokens.SCRIPT);
+            final String language = (String) data.get(GraphSONTokens.LANGUAGE);
+            final int arguments = ((Number) 
data.getOrDefault(GraphSONTokens.ARGUMENTS, -1)).intValue();
+            //
+            if (-1 == arguments || arguments > 2)
+                return new Lambda.UnknownArgLambda(script, language, 
arguments);
+            else if (0 == arguments)
+                return new Lambda.ZeroArgLambda<>(script, language);
+            else if (1 == arguments)
+                return new Lambda.OneArgLambda<>(script, language);
+            else
+                return new Lambda.TwoArgLambda<>(script, language);
+        }
+    }
+
+    final static class BindingJacksonDeserializer extends 
AbstractObjectDeserializer<Bytecode.Binding> {
+
+        public BindingJacksonDeserializer() {
+            super(Bytecode.Binding.class);
+        }
+
+        @Override
+        public Bytecode.Binding createObject(final Map<String, Object> data) {
+            return new Bytecode.Binding<>((String) 
data.get(GraphSONTokens.KEY), data.get(GraphSONTokens.VALUE));
+        }
+    }
+
+    static class TraverserJacksonDeserializer extends 
AbstractObjectDeserializer<Traverser> {
+
+        public TraverserJacksonDeserializer() {
+            super(Traverser.class);
+        }
+
+        @Override
+        public Traverser createObject(final Map<String, Object> data) {
+            return new 
DefaultRemoteTraverser<>(data.get(GraphSONTokens.VALUE), (Long) 
data.get(GraphSONTokens.BULK));
+        }
+    }
+
+    final static class TraversalStrategyProxyJacksonDeserializer<T extends 
TraversalStrategy> extends AbstractObjectDeserializer<TraversalStrategyProxy> {
+
+        private final Class<T> clazz;
+
+        public TraversalStrategyProxyJacksonDeserializer(final Class<T> clazz) 
{
+            super(TraversalStrategyProxy.class);
+            this.clazz = clazz;
+        }
+
+        @Override
+        public TraversalStrategyProxy<T> createObject(final Map<String, 
Object> data) {
+            return new TraversalStrategyProxy<>(this.clazz, new 
MapConfiguration(data));
+        }
+    }
+}

Reply via email to