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 2019/02/11 15:06:26 UTC

[tinkerpop] branch master updated: Dynamically register SparqlStrategy for GraphSON CTR

This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git


The following commit(s) were added to refs/heads/master by this push:
     new e21e225  Dynamically register SparqlStrategy for GraphSON CTR
e21e225 is described below

commit e21e225af3e9895aef7d733d1624aa416c79be11
Author: Stephen Mallette <sp...@genoprime.com>
AuthorDate: Mon Feb 11 10:05:21 2019 -0500

    Dynamically register SparqlStrategy for GraphSON CTR
---
 CHANGELOG.asciidoc                                  |  1 +
 .../structure/io/graphson/GraphSONModule.java       | 21 +++++++++++++++++++++
 2 files changed, 22 insertions(+)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 487844b..ff4b1e0 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 This release also includes changes from <<release-3-3-6, 3.3.6>>.
 
 * Added GraphBinary serializer for TraversalMetrics
+* Added registration for `SparqlStrategy` for GraphSON.
 * Fixed up `SparqlStrategy` so that it could be used properly with `RemoteStrategy`.
 * Fixed `ByteBuffer` serialization for GraphBinary.
 * Added fallback resolver to `TypeSerializerRegistry` for GraphBinary.
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 c3ba80c..6a3c6a5 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
@@ -96,6 +96,7 @@ import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Stream;
 
@@ -116,6 +117,18 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
     }
 
     /**
+     * Attempt to load {@code SparqlStrategy} if it's on the path. Dynamically loading it from core makes it easier
+     * for users as they won't have to register special modules for serialization purposes.
+     */
+    private static Optional<Class<?>> tryLoadSparqlStrategy() {
+        try {
+            return Optional.of(Class.forName("org.apache.tinkerpop.gremlin.sparql.process.traversal.strategy.SparqlStrategy"));
+        } catch (Exception ignored) {
+            return Optional.empty();
+        }
+    }
+
+    /**
      * Version 3.0 of GraphSON.
      */
     static final class GraphSONModuleV3d0 extends GraphSONModule {
@@ -193,6 +206,8 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
                             GraphFilterStrategy.class,
                             VertexProgramStrategy.class
                     ).forEach(strategy -> put(strategy, strategy.getSimpleName()));
+
+                    GraphSONModule.tryLoadSparqlStrategy().ifPresent(s -> put(s, s.getSimpleName()));
                 }});
 
         /**
@@ -314,6 +329,8 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
                     GraphFilterStrategy.class,
                     VertexProgramStrategy.class
             ).forEach(strategy -> addDeserializer(strategy, new TraversalSerializersV3d0.TraversalStrategyProxyJacksonDeserializer(strategy)));
+
+            GraphSONModule.tryLoadSparqlStrategy().ifPresent(s -> addDeserializer(s, new TraversalSerializersV3d0.TraversalStrategyProxyJacksonDeserializer(s)));
         }
 
         public static Builder build() {
@@ -416,6 +433,8 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
                             GraphFilterStrategy.class,
                             VertexProgramStrategy.class
                     ).forEach(strategy -> put(strategy, strategy.getSimpleName()));
+
+                    GraphSONModule.tryLoadSparqlStrategy().ifPresent(s -> put(s, s.getSimpleName()));
                 }});
 
         /**
@@ -527,6 +546,8 @@ abstract class GraphSONModule extends TinkerPopJacksonModule {
                     GraphFilterStrategy.class,
                     VertexProgramStrategy.class
             ).forEach(strategy -> addDeserializer(strategy, new TraversalSerializersV2d0.TraversalStrategyProxyJacksonDeserializer(strategy)));
+
+            GraphSONModule.tryLoadSparqlStrategy().ifPresent(s -> addDeserializer(s, new TraversalSerializersV2d0.TraversalStrategyProxyJacksonDeserializer(s)));
         }
 
         public static Builder build() {