You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by jo...@apache.org on 2019/02/05 12:08:42 UTC

[tinkerpop] 01/01: TINKERPOP-2150 Support configuring the registry builder in config

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

jorgebg pushed a commit to branch TINKERPOP-2150
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 2c91de023f12642866fa0e3d6f6e25c540bab21e
Author: Jorge Bay Gondra <jo...@gmail.com>
AuthorDate: Tue Feb 5 13:07:27 2019 +0100

    TINKERPOP-2150 Support configuring the registry builder in config
---
 .../driver/ser/GraphBinaryMessageSerializerV1.java | 20 ++++++++++++++--
 .../binary/GraphBinaryMessageSerializerV1Test.java | 27 ++++++++++++++++++++++
 2 files changed, 45 insertions(+), 2 deletions(-)

diff --git a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphBinaryMessageSerializerV1.java b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphBinaryMessageSerializerV1.java
index cd5405b..c0defd4 100644
--- a/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphBinaryMessageSerializerV1.java
+++ b/gremlin-driver/src/main/java/org/apache/tinkerpop/gremlin/driver/ser/GraphBinaryMessageSerializerV1.java
@@ -34,6 +34,7 @@ import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.io.IoRegistry;
 import org.javatuples.Pair;
 
+import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.util.List;
 import java.util.Map;
@@ -42,6 +43,7 @@ import static java.nio.charset.StandardCharsets.UTF_8;
 
 public class GraphBinaryMessageSerializerV1 extends AbstractMessageSerializer {
     public static final String TOKEN_CUSTOM = "custom";
+    public static final String TOKEN_BUILDER = "builder";
     private static final String MIME_TYPE = SerTokens.MIME_GRAPHBINARY_V1D0;
     private static final byte[] HEADER = MIME_TYPE.getBytes(UTF_8);
 
@@ -71,9 +73,23 @@ public class GraphBinaryMessageSerializerV1 extends AbstractMessageSerializer {
 
     @Override
     public void configure(final Map<String, Object> config, final Map<String, Graph> graphs) {
-        final List<String> classNameList = getListStringFromConfig(TOKEN_IO_REGISTRIES, config);
-        final TypeSerializerRegistry.Builder builder = TypeSerializerRegistry.build();
+        final String builderClassName = (String) config.get(TOKEN_BUILDER);
+        final TypeSerializerRegistry.Builder builder;
+
+        if (builderClassName != null) {
+            try {
+                Class<?> clazz = Class.forName(builderClassName);
+                Constructor<?> ctor = clazz.getConstructor();
+                builder = (TypeSerializerRegistry.Builder) ctor.newInstance();
+            } catch (Exception ex) {
+                throw new IllegalStateException(ex);
+            }
 
+        } else {
+            builder = TypeSerializerRegistry.build();
+        }
+
+        final List<String> classNameList = getListStringFromConfig(TOKEN_IO_REGISTRIES, config);
         classNameList.forEach(className -> {
             try {
                 final Class<?> clazz = Class.forName(className);
diff --git a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryMessageSerializerV1Test.java b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryMessageSerializerV1Test.java
index d3683de..0e8e7ed 100644
--- a/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryMessageSerializerV1Test.java
+++ b/gremlin-driver/src/test/java/org/apache/tinkerpop/gremlin/driver/ser/binary/GraphBinaryMessageSerializerV1Test.java
@@ -28,7 +28,10 @@ import org.apache.tinkerpop.gremlin.driver.ser.SerializationException;
 import org.junit.Test;
 import org.mockito.internal.matchers.apachecommons.ReflectionEquals;
 
+import java.util.HashMap;
+import java.util.Map;
 import java.util.UUID;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertThat;
@@ -131,6 +134,20 @@ public class GraphBinaryMessageSerializerV1Test {
         assertResponseEquals(response, deserialized);
     }
 
+    @Test
+    public void shouldSupportConfigurationOfRegistryBuilder() {
+        final GraphBinaryMessageSerializerV1 serializer = new GraphBinaryMessageSerializerV1();
+        final Map<String, Object> config = new HashMap<>();
+        int counter = SampleTypeSerializerRegistryBuilder.createCounter.get();
+
+        config.put(GraphBinaryMessageSerializerV1.TOKEN_BUILDER, "org.apache.tinkerpop.gremlin.driver.ser.binary.GraphBinaryMessageSerializerV1Test$SampleTypeSerializerRegistryBuilder");
+        serializer.configure(config, null);
+
+        counter = SampleTypeSerializerRegistryBuilder.createCounter.get() - counter;
+        // There should be a call to `create()`
+        assertEquals(1, counter);
+    }
+
     private static void assertResponseEquals(ResponseMessage expected, ResponseMessage actual) {
         assertEquals(expected.getRequestId(), actual.getRequestId());
         // Status
@@ -141,4 +158,14 @@ public class GraphBinaryMessageSerializerV1Test {
         assertEquals(expected.getResult().getData(), actual.getResult().getData());
         assertEquals(expected.getResult().getMeta(), actual.getResult().getMeta());
     }
+
+    public static class SampleTypeSerializerRegistryBuilder extends TypeSerializerRegistry.Builder {
+        public static AtomicInteger createCounter = new AtomicInteger();
+
+        @Override
+        public TypeSerializerRegistry create() {
+            createCounter.incrementAndGet();
+            return super.create();
+        }
+    }
 }