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/11/22 15:58:57 UTC

[1/6] tinkerpop git commit: TINKERPOP-1562 ImportCustomizer has become an interface

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1562 bb4bcc7a0 -> 64d61c04b


TINKERPOP-1562 ImportCustomizer has become an interface

This is a breaking change unfortunately, but this was not a feature that was published or used in 3.2.3 so I don't expect wide usage.


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

Branch: refs/heads/TINKERPOP-1562
Commit: 690b603ec7df5415effb789ac1c6f57a4cce1b80
Parents: bb4bcc7
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Nov 22 06:33:22 2016 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue Nov 22 06:33:22 2016 -0500

----------------------------------------------------------------------
 .../giraph/jsr223/GiraphGremlinPlugin.java      |   4 +-
 .../gremlin/console/plugin/PluggedIn.groovy     |   3 +-
 .../gremlin/jsr223/CoreGremlinModule.java       |   2 +-
 .../gremlin/jsr223/CoreGremlinPlugin.java       |   2 +-
 .../gremlin/jsr223/DefaultImportCustomizer.java | 112 +++++++++++++++++++
 .../gremlin/jsr223/ImportCustomizer.java        |  85 +-------------
 .../gremlin/jsr223/ImportGremlinPlugin.java     |   2 +-
 .../gremlin/jsr223/ImportGremlinPluginTest.java |  12 +-
 ...aultDefaultImportCustomizerProviderTest.java |  90 +++++++++++++++
 .../DefaultImportCustomizerProviderTest.java    |  90 ---------------
 .../jsr223/GremlinServerGremlinPlugin.java      |   4 +-
 .../jsr223/GremlinEnabledScriptEngineTest.java  |   3 +-
 12 files changed, 221 insertions(+), 188 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/690b603e/giraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/giraph/jsr223/GiraphGremlinPlugin.java
----------------------------------------------------------------------
diff --git a/giraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/giraph/jsr223/GiraphGremlinPlugin.java b/giraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/giraph/jsr223/GiraphGremlinPlugin.java
index a96ac86..ee49ed5 100644
--- a/giraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/giraph/jsr223/GiraphGremlinPlugin.java
+++ b/giraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/giraph/jsr223/GiraphGremlinPlugin.java
@@ -29,7 +29,7 @@ import org.apache.tinkerpop.gremlin.giraph.process.computer.GiraphWorkerContext;
 import org.apache.tinkerpop.gremlin.giraph.process.computer.MemoryAggregator;
 import org.apache.tinkerpop.gremlin.giraph.process.computer.PassThroughMemory;
 import org.apache.tinkerpop.gremlin.jsr223.AbstractGremlinPlugin;
-import org.apache.tinkerpop.gremlin.jsr223.ImportCustomizer;
+import org.apache.tinkerpop.gremlin.jsr223.DefaultImportCustomizer;
 
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
@@ -39,7 +39,7 @@ public final class GiraphGremlinPlugin extends AbstractGremlinPlugin {
     private static final GiraphGremlinPlugin instance = new GiraphGremlinPlugin();
 
     private GiraphGremlinPlugin() {
-        super(MODULE_NAME, ImportCustomizer.build().addClassImports(
+        super(MODULE_NAME, DefaultImportCustomizer.build().addClassImports(
                 EmptyOutEdges.class,
                 GiraphComputation.class,
                 GiraphGraphComputer.class,

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/690b603e/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy
index def49ed..053a072 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy
@@ -24,8 +24,7 @@ import org.apache.tinkerpop.gremlin.groovy.plugin.PluginAcceptor
 import org.apache.tinkerpop.gremlin.groovy.plugin.PluginInitializationException
 import org.apache.tinkerpop.gremlin.groovy.plugin.RemoteAcceptor
 import org.apache.tinkerpop.gremlin.groovy.plugin.RemoteException
-import org.apache.tinkerpop.gremlin.jsr223.ImportCustomizer
-import org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin
+import org.apache.tinkerpop.gremlin.jsr223.DefaultImportCustomizer
 import org.apache.tinkerpop.gremlin.jsr223.console.ConsoleCustomizer
 import org.codehaus.groovy.tools.shell.Groovysh
 import org.codehaus.groovy.tools.shell.IO

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/690b603e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreGremlinModule.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreGremlinModule.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreGremlinModule.java
index 6869064..d398f89 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreGremlinModule.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreGremlinModule.java
@@ -33,7 +33,7 @@ public final class CoreGremlinModule implements GremlinModule {
 
     private static final String MODULE_NAME = "tinkerpop.core";
 
-    private static final ImportCustomizer gremlinCore = ImportCustomizer.build()
+    private static final ImportCustomizer gremlinCore = DefaultImportCustomizer.build()
             .addClassImports(CoreImports.getClassImports())
             .addEnumImports(CoreImports.getEnumImports())
             .addMethodImports(CoreImports.getMethodImports()).create();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/690b603e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreGremlinPlugin.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreGremlinPlugin.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreGremlinPlugin.java
index 3f5ac2c..410b222 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreGremlinPlugin.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/CoreGremlinPlugin.java
@@ -31,7 +31,7 @@ public final class CoreGremlinPlugin implements GremlinPlugin {
 
     private static final String MODULE_NAME = "tinkerpop.core";
 
-    private static final ImportCustomizer gremlinCore = ImportCustomizer.build()
+    private static final ImportCustomizer gremlinCore = DefaultImportCustomizer.build()
             .addClassImports(CoreImports.getClassImports())
             .addEnumImports(CoreImports.getEnumImports())
             .addMethodImports(CoreImports.getMethodImports()).create();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/690b603e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultImportCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultImportCustomizer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultImportCustomizer.java
new file mode 100644
index 0000000..85d6531
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultImportCustomizer.java
@@ -0,0 +1,112 @@
+/*
+ * 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.jsr223;
+
+import org.apache.tinkerpop.gremlin.util.CoreImports;
+
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Simple implementation of the {@link ImportCustomizer} which allows direct setting of all the different import types.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class DefaultImportCustomizer implements ImportCustomizer {
+    /**
+     * @deprecated As of release 3.2.4, not replaced.
+     */
+    @Deprecated
+    public static final ImportCustomizer GREMLIN_CORE = DefaultImportCustomizer.build()
+            .addClassImports(CoreImports.getClassImports())
+            .addEnumImports(CoreImports.getEnumImports())
+            .addMethodImports(CoreImports.getMethodImports()).create();
+
+    private final Set<Class> classImports;
+    private final Set<Method> methodImports;
+    private final Set<Enum> enumImports;
+
+    private DefaultImportCustomizer(final Builder builder) {
+        classImports = builder.classImports;
+        methodImports = builder.methodImports;
+        enumImports = builder.enumImports;
+    }
+
+    public Set<Class> getClassImports() {
+        return Collections.unmodifiableSet(classImports);
+    }
+
+    public Set<Method> getMethodImports() {
+        return Collections.unmodifiableSet(methodImports);
+    }
+
+    public Set<Enum> getEnumImports() {
+        return Collections.unmodifiableSet(enumImports);
+    }
+
+    public static Builder build() {
+        return new Builder();
+    }
+
+    public static class Builder {
+        private Set<Class> classImports = new HashSet<>();
+        private Set<Method> methodImports = new HashSet<>();
+        private Set<Enum> enumImports = new HashSet<>();
+
+        private Builder() {}
+
+        public Builder addClassImports(final Class... clazz) {
+            classImports.addAll(Arrays.asList(clazz));
+            return this;
+        }
+
+        public Builder addClassImports(final Collection<Class> classes) {
+            classImports.addAll(classes);
+            return this;
+        }
+
+        public Builder addMethodImports(final Method... method) {
+            methodImports.addAll(Arrays.asList(method));
+            return this;
+        }
+
+        public Builder addMethodImports(final Collection<Method> methods) {
+            methodImports.addAll(methods);
+            return this;
+        }
+
+        public Builder addEnumImports(final Enum... e) {
+            enumImports.addAll(Arrays.asList(e));
+            return this;
+        }
+
+        public Builder addEnumImports(final Collection<Enum> enums) {
+            enumImports.addAll(enums);
+            return this;
+        }
+
+        public DefaultImportCustomizer create() {
+            return new DefaultImportCustomizer(this);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/690b603e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ImportCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ImportCustomizer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ImportCustomizer.java
index 2f0e08c..7eced82 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ImportCustomizer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ImportCustomizer.java
@@ -18,13 +18,7 @@
  */
 package org.apache.tinkerpop.gremlin.jsr223;
 
-import org.apache.tinkerpop.gremlin.util.CoreImports;
-
 import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
 import java.util.Set;
 
 /**
@@ -32,82 +26,11 @@ import java.util.Set;
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public class ImportCustomizer implements Customizer {
-
-    /**
-     * @deprecated As of release 3.2.4, not replaced.
-     */
-    @Deprecated
-    public static final ImportCustomizer GREMLIN_CORE = ImportCustomizer.build()
-            .addClassImports(CoreImports.getClassImports())
-            .addEnumImports(CoreImports.getEnumImports())
-            .addMethodImports(CoreImports.getMethodImports()).create();
-
-    private final Set<Class> classImports;
-    private final Set<Method> methodImports;
-    private final Set<Enum> enumImports;
-
-    private ImportCustomizer(final Builder builder) {
-        classImports = builder.classImports;
-        methodImports = builder.methodImports;
-        enumImports = builder.enumImports;
-    }
-
-    public Set<Class> getClassImports() {
-        return Collections.unmodifiableSet(classImports);
-    }
-
-    public Set<Method> getMethodImports() {
-        return Collections.unmodifiableSet(methodImports);
-    }
-
-    public Set<Enum> getEnumImports() {
-        return Collections.unmodifiableSet(enumImports);
-    }
-
-    public static Builder build() {
-        return new Builder();
-    }
-
-    public static class Builder {
-        private Set<Class> classImports = new HashSet<>();
-        private Set<Method> methodImports = new HashSet<>();
-        private Set<Enum> enumImports = new HashSet<>();
-
-        private Builder() {}
-
-        public Builder addClassImports(final Class... clazz) {
-            classImports.addAll(Arrays.asList(clazz));
-            return this;
-        }
-
-        public Builder addClassImports(final Collection<Class> classes) {
-            classImports.addAll(classes);
-            return this;
-        }
-
-        public Builder addMethodImports(final Method... method) {
-            methodImports.addAll(Arrays.asList(method));
-            return this;
-        }
-
-        public Builder addMethodImports(final Collection<Method> methods) {
-            methodImports.addAll(methods);
-            return this;
-        }
+public interface ImportCustomizer extends Customizer {
 
-        public Builder addEnumImports(final Enum... e) {
-            enumImports.addAll(Arrays.asList(e));
-            return this;
-        }
+    public Set<Class> getClassImports();
 
-        public Builder addEnumImports(final Collection<Enum> enums) {
-            enumImports.addAll(enums);
-            return this;
-        }
+    public Set<Method> getMethodImports();
 
-        public ImportCustomizer create() {
-            return new ImportCustomizer(this);
-        }
-    }
+    public Set<Enum> getEnumImports();
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/690b603e/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPlugin.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPlugin.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPlugin.java
index f99ee68..a5ac278 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPlugin.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPlugin.java
@@ -40,7 +40,7 @@ public final class ImportGremlinPlugin extends AbstractGremlinPlugin {
     private static final String MODULE_NAME = "tinkerpop.import";
 
     private ImportGremlinPlugin(final Builder builder) {
-        super(MODULE_NAME, builder.appliesTo, ImportCustomizer.build()
+        super(MODULE_NAME, builder.appliesTo, DefaultImportCustomizer.build()
                                                 .addClassImports(builder.classImports)
                                                 .addEnumImports(builder.enumImports)
                                                 .addMethodImports(builder.methodImports).create());

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/690b603e/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPluginTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPluginTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPluginTest.java
index 428fc57..59c64df 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPluginTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPluginTest.java
@@ -49,7 +49,7 @@ public class ImportGremlinPluginTest {
         final ImportGremlinPlugin module = ImportGremlinPlugin.build()
                 .classImports(Collections.singletonList(Graph.class.getCanonicalName())).create();
 
-        final ImportCustomizer customizer = (ImportCustomizer) module.getCustomizers().get()[0];
+        final DefaultImportCustomizer customizer = (DefaultImportCustomizer) module.getCustomizers().get()[0];
         assertEquals(1, module.getCustomizers().get().length);
         assertThat(customizer.getClassImports(), hasItems(Graph.class));
         assertEquals(1, customizer.getClassImports().size());
@@ -61,7 +61,7 @@ public class ImportGremlinPluginTest {
         final ImportGremlinPlugin module = ImportGremlinPlugin.build()
                 .methodImports(Collections.singletonList(Gremlin.class.getCanonicalName() + "#*")).create();
 
-        final ImportCustomizer customizer = (ImportCustomizer) module.getCustomizers().get()[0];
+        final DefaultImportCustomizer customizer = (DefaultImportCustomizer) module.getCustomizers().get()[0];
         assertEquals(1, module.getCustomizers().get().length);
         assertThat(customizer.getMethodImports(), hasItems(zeroArgs));
 
@@ -75,7 +75,7 @@ public class ImportGremlinPluginTest {
         final ImportGremlinPlugin module = ImportGremlinPlugin.build()
                 .methodImports(Collections.singletonList(toMethodDescriptor(zeroArgs))).create();
 
-        final ImportCustomizer customizer = (ImportCustomizer) module.getCustomizers().get()[0];
+        final DefaultImportCustomizer customizer = (DefaultImportCustomizer) module.getCustomizers().get()[0];
         assertEquals(1, module.getCustomizers().get().length);
         assertThat(customizer.getMethodImports(), hasItems(zeroArgs));
         assertEquals(1, customizer.getMethodImports().size());
@@ -87,7 +87,7 @@ public class ImportGremlinPluginTest {
         final ImportGremlinPlugin module = ImportGremlinPlugin.build()
                 .methodImports(Collections.singletonList(toMethodDescriptor(singleArg))).create();
 
-        final ImportCustomizer customizer = (ImportCustomizer) module.getCustomizers().get()[0];
+        final DefaultImportCustomizer customizer = (DefaultImportCustomizer) module.getCustomizers().get()[0];
         assertEquals(1, module.getCustomizers().get().length);
         assertThat(customizer.getMethodImports(), hasItems(singleArg));
         assertEquals(1, customizer.getMethodImports().size());
@@ -110,7 +110,7 @@ public class ImportGremlinPluginTest {
         final ImportGremlinPlugin module = ImportGremlinPlugin.build()
                 .enumImports(Collections.singletonList(T.class.getCanonicalName() + "#*")).create();
 
-        final ImportCustomizer customizer = (ImportCustomizer) module.getCustomizers().get()[0];
+        final DefaultImportCustomizer customizer = (DefaultImportCustomizer) module.getCustomizers().get()[0];
         assertEquals(1, module.getCustomizers().get().length);
         assertThat(customizer.getEnumImports(), hasItems(T.id, T.key, T.label, T.value));
         assertEquals(4, customizer.getEnumImports().size());
@@ -121,7 +121,7 @@ public class ImportGremlinPluginTest {
         final ImportGremlinPlugin module = ImportGremlinPlugin.build()
                 .enumImports(Collections.singletonList(T.class.getCanonicalName() + "#" + T.id.name())).create();
 
-        final ImportCustomizer customizer = (ImportCustomizer) module.getCustomizers().get()[0];
+        final DefaultImportCustomizer customizer = (DefaultImportCustomizer) module.getCustomizers().get()[0];
         assertEquals(1, module.getCustomizers().get().length);
         assertThat(customizer.getEnumImports(), hasItems(T.id));
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/690b603e/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/DefaultDefaultImportCustomizerProviderTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/DefaultDefaultImportCustomizerProviderTest.java b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/DefaultDefaultImportCustomizerProviderTest.java
new file mode 100644
index 0000000..9a3785f
--- /dev/null
+++ b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/DefaultDefaultImportCustomizerProviderTest.java
@@ -0,0 +1,90 @@
+/*
+ * 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.groovy;
+
+import org.apache.tinkerpop.gremlin.groovy.loaders.SugarLoader;
+import org.junit.Test;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class DefaultDefaultImportCustomizerProviderTest {
+    static {
+        SugarLoader.load();
+    }
+
+    @Test
+    public void shouldReturnDefaultImports() {
+        final DefaultImportCustomizerProvider provider = new DefaultImportCustomizerProvider();
+        assertImportsInProvider(provider);
+    }
+
+    @Test
+    public void shouldReturnWithExtraStaticImports() {
+        final Set<String> statics = new HashSet<>();
+        statics.add("com.test.This.*");
+        statics.add("com.test.That.OTHER");
+        final DefaultImportCustomizerProvider provider = new DefaultImportCustomizerProvider(new HashSet<>(), statics);
+        assertImportsInProvider(provider);
+    }
+
+    @Test
+    public void shouldReturnWithExtraImports() {
+        final Set<String> imports = new HashSet<>();
+        imports.add("com.test.that.*");
+        imports.add("com.test.that.That");
+        final DefaultImportCustomizerProvider provider = new DefaultImportCustomizerProvider(imports, new HashSet<>());
+        assertImportsInProvider(provider);
+    }
+
+    @Test
+    public void shouldReturnWithBothImportTypes() {
+        final Set<String> imports = new HashSet<>();
+        imports.add("com.test.that.*");
+        imports.add("com.test.that.That");
+
+        final Set<String> statics = new HashSet<>();
+        statics.add("com.test.This.*");
+        statics.add("com.test.That.OTHER");
+
+        final DefaultImportCustomizerProvider provider = new DefaultImportCustomizerProvider(imports, statics);
+        assertImportsInProvider(provider);
+    }
+
+    private static void assertImportsInProvider(DefaultImportCustomizerProvider provider) {
+        final Set<String> allImports = provider.getAllImports();
+
+        final Set<String> imports = provider.getImports();
+        final Set<String> staticImports = provider.getStaticImports();
+        final Set<String> extraImports = provider.getExtraImports();
+        final Set<String> extraStaticImports = provider.getExtraStaticImports();
+
+        assertEquals(imports.size() + staticImports.size() + extraImports.size() + extraStaticImports.size(), allImports.size());
+        assertTrue(allImports.containsAll(imports));
+        assertTrue(allImports.containsAll(staticImports));
+        assertTrue(allImports.containsAll(extraImports));
+        assertTrue(allImports.containsAll(extraStaticImports));
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/690b603e/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/DefaultImportCustomizerProviderTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/DefaultImportCustomizerProviderTest.java b/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/DefaultImportCustomizerProviderTest.java
deleted file mode 100644
index 74df889..0000000
--- a/gremlin-groovy/src/test/java/org/apache/tinkerpop/gremlin/groovy/DefaultImportCustomizerProviderTest.java
+++ /dev/null
@@ -1,90 +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.groovy;
-
-import org.apache.tinkerpop.gremlin.groovy.loaders.SugarLoader;
-import org.junit.Test;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-/**
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public class DefaultImportCustomizerProviderTest {
-    static {
-        SugarLoader.load();
-    }
-
-    @Test
-    public void shouldReturnDefaultImports() {
-        final DefaultImportCustomizerProvider provider = new DefaultImportCustomizerProvider();
-        assertImportsInProvider(provider);
-    }
-
-    @Test
-    public void shouldReturnWithExtraStaticImports() {
-        final Set<String> statics = new HashSet<>();
-        statics.add("com.test.This.*");
-        statics.add("com.test.That.OTHER");
-        final DefaultImportCustomizerProvider provider = new DefaultImportCustomizerProvider(new HashSet<>(), statics);
-        assertImportsInProvider(provider);
-    }
-
-    @Test
-    public void shouldReturnWithExtraImports() {
-        final Set<String> imports = new HashSet<>();
-        imports.add("com.test.that.*");
-        imports.add("com.test.that.That");
-        final DefaultImportCustomizerProvider provider = new DefaultImportCustomizerProvider(imports, new HashSet<>());
-        assertImportsInProvider(provider);
-    }
-
-    @Test
-    public void shouldReturnWithBothImportTypes() {
-        final Set<String> imports = new HashSet<>();
-        imports.add("com.test.that.*");
-        imports.add("com.test.that.That");
-
-        final Set<String> statics = new HashSet<>();
-        statics.add("com.test.This.*");
-        statics.add("com.test.That.OTHER");
-
-        final DefaultImportCustomizerProvider provider = new DefaultImportCustomizerProvider(imports, statics);
-        assertImportsInProvider(provider);
-    }
-
-    private static void assertImportsInProvider(DefaultImportCustomizerProvider provider) {
-        final Set<String> allImports = provider.getAllImports();
-
-        final Set<String> imports = provider.getImports();
-        final Set<String> staticImports = provider.getStaticImports();
-        final Set<String> extraImports = provider.getExtraImports();
-        final Set<String> extraStaticImports = provider.getExtraStaticImports();
-
-        assertEquals(imports.size() + staticImports.size() + extraImports.size() + extraStaticImports.size(), allImports.size());
-        assertTrue(allImports.containsAll(imports));
-        assertTrue(allImports.containsAll(staticImports));
-        assertTrue(allImports.containsAll(extraImports));
-        assertTrue(allImports.containsAll(extraStaticImports));
-    }
-}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/690b603e/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/jsr223/GremlinServerGremlinPlugin.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/jsr223/GremlinServerGremlinPlugin.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/jsr223/GremlinServerGremlinPlugin.java
index e8826ae..a08aa76 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/jsr223/GremlinServerGremlinPlugin.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/jsr223/GremlinServerGremlinPlugin.java
@@ -20,7 +20,7 @@ package org.apache.tinkerpop.gremlin.server.jsr223;
 
 import org.apache.tinkerpop.gremlin.jsr223.AbstractGremlinPlugin;
 import org.apache.tinkerpop.gremlin.jsr223.GremlinPlugin;
-import org.apache.tinkerpop.gremlin.jsr223.ImportCustomizer;
+import org.apache.tinkerpop.gremlin.jsr223.DefaultImportCustomizer;
 import org.apache.tinkerpop.gremlin.server.util.LifeCycleHook;
 
 /**
@@ -33,7 +33,7 @@ public final class GremlinServerGremlinPlugin extends AbstractGremlinPlugin {
     private static final GremlinServerGremlinPlugin instance = new GremlinServerGremlinPlugin();
 
     private GremlinServerGremlinPlugin() {
-        super(MODULE_NAME, ImportCustomizer.build().addClassImports(LifeCycleHook.class, LifeCycleHook.Context.class).create());
+        super(MODULE_NAME, DefaultImportCustomizer.build().addClassImports(LifeCycleHook.class, LifeCycleHook.Context.class).create());
     }
 
     public static GremlinServerGremlinPlugin instance() {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/690b603e/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinEnabledScriptEngineTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinEnabledScriptEngineTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinEnabledScriptEngineTest.java
index 9910a4c..723d898 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinEnabledScriptEngineTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinEnabledScriptEngineTest.java
@@ -25,7 +25,6 @@ import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.junit.Test;
 
 import java.util.Arrays;
-import java.util.Collections;
 import java.util.List;
 import java.util.Optional;
 
@@ -68,7 +67,7 @@ public class GremlinEnabledScriptEngineTest {
 
             @Override
             public Optional<Customizer[]> getCustomizers(final String scriptEngineName) {
-                return Optional.of(new Customizer[] {ImportCustomizer.build()
+                return Optional.of(new Customizer[] {DefaultImportCustomizer.build()
                         .addClassImports(java.awt.Color.class)
                         .addClassImports(java.sql.CallableStatement.class)
                         .create() });


[5/6] tinkerpop git commit: TINKERPOP-1562 Deprecated TinkerGraphGremlinPlugin.

Posted by sp...@apache.org.
TINKERPOP-1562 Deprecated TinkerGraphGremlinPlugin.


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

Branch: refs/heads/TINKERPOP-1562
Commit: 32cf3bfe0c264aa8120be2e21345f17b35b21d90
Parents: 0cc705b
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Nov 22 09:42:12 2016 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue Nov 22 09:42:12 2016 -0500

----------------------------------------------------------------------
 .../tinkergraph/groovy/plugin/TinkerGraphGremlinPlugin.java       | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/32cf3bfe/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/groovy/plugin/TinkerGraphGremlinPlugin.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/groovy/plugin/TinkerGraphGremlinPlugin.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/groovy/plugin/TinkerGraphGremlinPlugin.java
index df35314..5c8231a 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/groovy/plugin/TinkerGraphGremlinPlugin.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/groovy/plugin/TinkerGraphGremlinPlugin.java
@@ -30,10 +30,11 @@ import java.util.Set;
 
 /**
  * @author Stephen Mallette (http://stephen.genoprime.com)
+ * @deprecated As of release 3.2.4, replaced by {@link org.apache.tinkerpop.gremlin.tinkergraph.jsr223.TinkerGraphGremlinPlugin}.
  */
+@Deprecated
 public final class TinkerGraphGremlinPlugin extends AbstractGremlinPlugin {
 
-
     private static final Set<String> IMPORTS = new HashSet<String>() {{
         add(IMPORT_SPACE + TinkerGraph.class.getPackage().getName() + DOT_STAR);
         add(IMPORT_SPACE + TinkerGraphComputer.class.getPackage().getName() + DOT_STAR);


[2/6] tinkerpop git commit: TINKERPOP-1562 Change ScriptCustomizer to an interface.

Posted by sp...@apache.org.
TINKERPOP-1562 Change ScriptCustomizer to an interface.

This class had been added as part of this branch so recasting it as an interface is non-breaking. Get PluggedIn to process the ScriptCustomizer.


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

Branch: refs/heads/TINKERPOP-1562
Commit: f4308370cdbac8ba822bbe096e29fcf6d58c8a23
Parents: 690b603
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Nov 22 06:49:14 2016 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue Nov 22 06:49:14 2016 -0500

----------------------------------------------------------------------
 .../gremlin/console/plugin/PluggedIn.groovy     |  7 ++-
 .../gremlin/jsr223/DefaultScriptCustomizer.java | 57 ++++++++++++++++++++
 .../gremlin/jsr223/ScriptCustomizer.java        | 36 +++----------
 .../gremlin/jsr223/ScriptFileGremlinPlugin.java |  2 +-
 4 files changed, 70 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f4308370/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy
index 053a072..54659fa 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy
@@ -24,7 +24,8 @@ import org.apache.tinkerpop.gremlin.groovy.plugin.PluginAcceptor
 import org.apache.tinkerpop.gremlin.groovy.plugin.PluginInitializationException
 import org.apache.tinkerpop.gremlin.groovy.plugin.RemoteAcceptor
 import org.apache.tinkerpop.gremlin.groovy.plugin.RemoteException
-import org.apache.tinkerpop.gremlin.jsr223.DefaultImportCustomizer
+import org.apache.tinkerpop.gremlin.jsr223.ImportCustomizer
+import org.apache.tinkerpop.gremlin.jsr223.ScriptCustomizer
 import org.apache.tinkerpop.gremlin.jsr223.console.ConsoleCustomizer
 import org.codehaus.groovy.tools.shell.Groovysh
 import org.codehaus.groovy.tools.shell.IO
@@ -33,6 +34,7 @@ import org.codehaus.groovy.tools.shell.IO
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
 class PluggedIn {
+    private static final String LINE_SEPARATOR = System.getProperty("line.separator")
     private final GremlinPlugin plugin
     private boolean activated = false
 
@@ -77,7 +79,6 @@ class PluggedIn {
 
         @Override
         void pluginTo(final PluginAcceptor pluginAcceptor) throws IllegalEnvironmentException, PluginInitializationException {
-            // TODO: handle script customizer
             corePlugin.getCustomizers("gremlin-groovy").each {
                 if (it instanceof ImportCustomizer) {
                     def imports = [] as Set
@@ -85,6 +86,8 @@ class PluggedIn {
                     it.methodImports.each { imports.add("import static " + it.declaringClass.canonicalName + "." + it.name) }
                     it.enumImports.each { imports.add("import static " + it.declaringClass.canonicalName + "." + it.name()) }
                     pluginAcceptor.addImports(imports)
+                } else if (it instanceof ScriptCustomizer) {
+                    it.getScripts().collect { it.join(LINE_SEPARATOR) }.each { pluginAcceptor.eval(it) }
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f4308370/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultScriptCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultScriptCustomizer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultScriptCustomizer.java
new file mode 100644
index 0000000..9640f28
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultScriptCustomizer.java
@@ -0,0 +1,57 @@
+/*
+ * 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.jsr223;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * Default implementation of the {@link ScriptCustomizer} that can create the script list from a list of files or
+ * from lines of script.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class DefaultScriptCustomizer implements ScriptCustomizer {
+
+    private final Collection<List<String>> scripts;
+
+    public DefaultScriptCustomizer(final Set<File> files) {
+        this(files.stream().map(f -> {
+            try {
+                return Files.lines(f.toPath(), StandardCharsets.UTF_8).collect(Collectors.toList());
+            } catch (IOException ioe) {
+                throw new IllegalStateException(ioe);
+            }
+        }).collect(Collectors.toList()));
+    }
+
+    public DefaultScriptCustomizer(final Collection<List<String>> scripts) {
+        this.scripts = scripts;
+    }
+
+    public Collection<List<String>> getScripts() {
+        return scripts;
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f4308370/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ScriptCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ScriptCustomizer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ScriptCustomizer.java
index 28603df..eb2f8bc 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ScriptCustomizer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ScriptCustomizer.java
@@ -18,39 +18,17 @@
  */
 package org.apache.tinkerpop.gremlin.jsr223;
 
-import java.io.File;
-import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
+ * A {@link Customizer} that executes scripts in a {@link GremlinScriptEngine} instance for purpose of initialization.
+ *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
-public class ScriptCustomizer implements Customizer {
-
-    private final Collection<List<String>> scripts;
-
-    public ScriptCustomizer(final Set<File> files) {
-        this(files.stream().map(f -> {
-            try {
-                return Files.lines(f.toPath(), StandardCharsets.UTF_8).collect(Collectors.toList());
-            } catch (IOException ioe) {
-                throw new IllegalStateException(ioe);
-            }
-        }).collect(Collectors.toList()));
-    }
-
-    public ScriptCustomizer(final Collection<List<String>> scripts) {
-        this.scripts = scripts;
-    }
-
-    public Collection<List<String>> scripts() {
-        return scripts;
-    }
+public interface ScriptCustomizer extends Customizer {
+    /**
+     * Gets a collection of scripts where each is represented as a list of script lines.
+     */
+    public Collection<List<String>> getScripts();
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/f4308370/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ScriptFileGremlinPlugin.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ScriptFileGremlinPlugin.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ScriptFileGremlinPlugin.java
index 30e66ed..3fd811a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ScriptFileGremlinPlugin.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ScriptFileGremlinPlugin.java
@@ -31,7 +31,7 @@ public final class ScriptFileGremlinPlugin extends AbstractGremlinPlugin {
     private static final String MODULE_NAME = "tinkerpop.script";
 
     public ScriptFileGremlinPlugin(final Builder builder) {
-        super(MODULE_NAME, builder.appliesTo, new ScriptCustomizer(builder.files));
+        super(MODULE_NAME, builder.appliesTo, new DefaultScriptCustomizer(builder.files));
     }
 
     public static Builder build() {


[6/6] tinkerpop git commit: TINKERPOP-1562 Added SparkGremlinPlugin

Posted by sp...@apache.org.
TINKERPOP-1562 Added SparkGremlinPlugin

SparkGremlinPlugin required binding injections so a BindingCustomizer was added along with two implementations - one for direct assignment and one for lazy assignment.


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

Branch: refs/heads/TINKERPOP-1562
Commit: 64d61c04ba1af0700737ad3a0047b122bf7f2c31
Parents: 32cf3bf
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Nov 22 10:57:32 2016 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue Nov 22 10:57:32 2016 -0500

----------------------------------------------------------------------
 .../gremlin/console/plugin/PluggedIn.groovy     |  3 +
 .../groovy/plugin/GremlinPluginAdapterTest.java | 63 ++++++++++++++
 .../gremlin/jsr223/BindingsCustomizer.java      | 33 +++++++
 .../jsr223/DefaultBindingsCustomizer.java       | 40 +++++++++
 .../gremlin/jsr223/ImportGremlinPlugin.java     | 16 ++++
 .../jsr223/console/LazyBindingsCustomizer.java  | 41 +++++++++
 .../gremlin/groovy/engine/GremlinExecutor.java  |  6 +-
 .../spark/groovy/plugin/SparkGremlinPlugin.java |  2 +
 .../spark/jsr223/SparkGremlinPlugin.java        | 92 ++++++++++++++++++++
 .../jsr223/TinkerGraphGremlinPlugin.java        | 46 +++++-----
 10 files changed, 317 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/64d61c04/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy
index d298cd7..b707226 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy
@@ -24,6 +24,7 @@ import org.apache.tinkerpop.gremlin.groovy.plugin.PluginAcceptor
 import org.apache.tinkerpop.gremlin.groovy.plugin.PluginInitializationException
 import org.apache.tinkerpop.gremlin.groovy.plugin.RemoteAcceptor
 import org.apache.tinkerpop.gremlin.groovy.plugin.RemoteException
+import org.apache.tinkerpop.gremlin.jsr223.BindingsCustomizer
 import org.apache.tinkerpop.gremlin.jsr223.ImportCustomizer
 import org.apache.tinkerpop.gremlin.jsr223.ScriptCustomizer
 import org.apache.tinkerpop.gremlin.jsr223.console.ConsoleCustomizer
@@ -88,6 +89,8 @@ class PluggedIn {
                     pluginAcceptor.addImports(imports)
                 } else if (it instanceof ScriptCustomizer) {
                     it.getScripts().collect { it.join(LINE_SEPARATOR) }.each { pluginAcceptor.eval(it) }
+                } else if (it instanceof BindingsCustomizer) {
+                    it.bindings.entrySet().each { k, v -> pluginAcceptor.addBinding(k,v) }
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/64d61c04/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/GremlinPluginAdapterTest.java
----------------------------------------------------------------------
diff --git a/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/GremlinPluginAdapterTest.java b/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/GremlinPluginAdapterTest.java
new file mode 100644
index 0000000..77422da
--- /dev/null
+++ b/gremlin-console/src/test/java/org/apache/tinkerpop/gremlin/console/groovy/plugin/GremlinPluginAdapterTest.java
@@ -0,0 +1,63 @@
+/*
+ * 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.console.groovy.plugin;
+
+import org.apache.tinkerpop.gremlin.console.plugin.PluggedIn;
+import org.apache.tinkerpop.gremlin.jsr223.BindingsCustomizer;
+import org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin;
+import org.apache.tinkerpop.gremlin.jsr223.ScriptCustomizer;
+import org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin;
+import org.junit.Test;
+
+import java.time.DayOfWeek;
+import java.time.temporal.TemporalAccessor;
+import java.util.Set;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsCollectionContaining.hasItems;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class GremlinPluginAdapterTest {
+
+    @Test
+    public void shouldAdaptForImportCustomizer() throws Exception {
+        final ImportGremlinPlugin plugin = ImportGremlinPlugin.build()
+                .classImports(java.awt.Color.class, java.sql.CallableStatement.class)
+                .enumImports(DayOfWeek.SATURDAY, DayOfWeek.SUNDAY)
+                .methodImports(DayOfWeek.class.getMethod("from", TemporalAccessor.class), DayOfWeek.class.getMethod("values")).create();
+        final PluggedIn.GremlinPluginAdapter adapter = new PluggedIn.GremlinPluginAdapter(plugin);
+
+        assertEquals(plugin.getName(), adapter.getName());
+
+        final SpyPluginAcceptor spy = new SpyPluginAcceptor();
+        adapter.pluginTo(spy);
+
+        final Set<String> imports = spy.getImports();
+        assertEquals(6, imports.size());
+        assertThat(imports, hasItems("import " + java.awt.Color.class.getCanonicalName()));
+        assertThat(imports, hasItems("import " + java.sql.CallableStatement.class.getCanonicalName()));
+        assertThat(imports, hasItems("import static " + DayOfWeek.class.getCanonicalName() + "." + DayOfWeek.SATURDAY.name()));
+        assertThat(imports, hasItems("import static " + DayOfWeek.class.getCanonicalName() + "." + DayOfWeek.SUNDAY.name()));
+        assertThat(imports, hasItems("import static " + DayOfWeek.class.getCanonicalName() + ".from"));
+        assertThat(imports, hasItems("import static " + DayOfWeek.class.getCanonicalName() + ".values"));
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/64d61c04/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/BindingsCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/BindingsCustomizer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/BindingsCustomizer.java
new file mode 100644
index 0000000..02c129e
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/BindingsCustomizer.java
@@ -0,0 +1,33 @@
+/*
+ * 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.jsr223;
+
+import javax.script.Bindings;
+
+/**
+ * Provides a way to alter the bindings on a {@link GremlinScriptEngine}.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public interface BindingsCustomizer extends Customizer {
+    /**
+     * Gets the bindings to add to a {@link GremlinScriptEngine}.
+     */
+    public Bindings getBindings();
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/64d61c04/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultBindingsCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultBindingsCustomizer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultBindingsCustomizer.java
new file mode 100644
index 0000000..0073d39
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultBindingsCustomizer.java
@@ -0,0 +1,40 @@
+/*
+ * 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.jsr223;
+
+import javax.script.Bindings;
+
+/**
+ * Default implementation of the {@link BindingsCustomizer}.
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class DefaultBindingsCustomizer implements BindingsCustomizer {
+
+    private final Bindings bindings;
+
+    public DefaultBindingsCustomizer(final Bindings bindings) {
+        this.bindings = bindings;
+    }
+
+    @Override
+    public Bindings getBindings() {
+        return bindings;
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/64d61c04/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPlugin.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPlugin.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPlugin.java
index a5ac278..26290d3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPlugin.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/ImportGremlinPlugin.java
@@ -20,6 +20,7 @@ package org.apache.tinkerpop.gremlin.jsr223;
 
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
@@ -69,6 +70,11 @@ public final class ImportGremlinPlugin extends AbstractGremlinPlugin {
             return this;
         }
 
+        public Builder classImports(final Class<?>... classes) {
+            classImports.addAll(Arrays.asList(classes));
+            return this;
+        }
+
         public Builder classImports(final Collection<String> classes) {
             for (String clazz : classes) {
                 try {
@@ -108,6 +114,11 @@ public final class ImportGremlinPlugin extends AbstractGremlinPlugin {
             return this;
         }
 
+        public Builder methodImports(final Method... methods) {
+            methodImports.addAll(Arrays.asList(methods));
+            return this;
+        }
+
         public Builder enumImports(final Collection<String> enums) {
             for (String enumItem : enums) {
                 try {
@@ -138,6 +149,11 @@ public final class ImportGremlinPlugin extends AbstractGremlinPlugin {
             return this;
         }
 
+        public Builder enumImports(final Enum... enums) {
+            enumImports.addAll(Arrays.asList(enums));
+            return this;
+        }
+
         public ImportGremlinPlugin create() {
             if (enumImports.isEmpty() && classImports.isEmpty() && methodImports.isEmpty())
                 throw new IllegalStateException("At least one import must be specified");

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/64d61c04/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/console/LazyBindingsCustomizer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/console/LazyBindingsCustomizer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/console/LazyBindingsCustomizer.java
new file mode 100644
index 0000000..f21a2ab
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/console/LazyBindingsCustomizer.java
@@ -0,0 +1,41 @@
+/*
+ * 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.jsr223.console;
+
+import org.apache.tinkerpop.gremlin.jsr223.BindingsCustomizer;
+
+import javax.script.Bindings;
+import java.util.function.Supplier;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class LazyBindingsCustomizer implements BindingsCustomizer {
+
+    private final Supplier<Bindings> bindingsSupplier;
+
+    public LazyBindingsCustomizer(final Supplier<Bindings> bindingsSupplier) {
+        this.bindingsSupplier = bindingsSupplier;
+    }
+
+    @Override
+    public Bindings getBindings() {
+        return bindingsSupplier.get();
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/64d61c04/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
index 84f1992..87d5728 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
@@ -447,7 +447,11 @@ public class GremlinExecutor implements AutoCloseable {
                         final Map<String, Object> customizerConfigs = pluginConfig.getValue();
                         final Method[] methods = builderClazz.getMethods();
                         for (Map.Entry<String, Object> customizerConfig : customizerConfigs.entrySet()) {
-                            final Method configMethod = Stream.of(methods).filter(m -> m.getName().equals(customizerConfig.getKey())).findFirst()
+                            final Method configMethod = Stream.of(methods).filter(m -> {
+                                final Class<?> type = customizerConfig.getValue().getClass();
+                                return m.getName().equals(customizerConfig.getKey()) && m.getParameters().length <= 1
+                                        && m.getParameters()[0].getType().isAssignableFrom(type);
+                            }).findFirst()
                                     .orElseThrow(() -> new IllegalStateException("Could not find builder method on " + builderClazz.getCanonicalName()));
                             if (null == customizerConfig.getValue())
                                 pluginBuilder = configMethod.invoke(pluginBuilder);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/64d61c04/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/groovy/plugin/SparkGremlinPlugin.java
----------------------------------------------------------------------
diff --git a/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/groovy/plugin/SparkGremlinPlugin.java b/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/groovy/plugin/SparkGremlinPlugin.java
index 1fe23e3..c6eb682 100644
--- a/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/groovy/plugin/SparkGremlinPlugin.java
+++ b/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/groovy/plugin/SparkGremlinPlugin.java
@@ -34,7 +34,9 @@ import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @deprecated As of release 3.2.4, replaced by {@link org.apache.tinkerpop.gremlin.spark.jsr223.SparkGremlinPlugin}.
  */
+@Deprecated
 public final class SparkGremlinPlugin extends AbstractGremlinPlugin {
 
     protected static String NAME = "tinkerpop.spark";

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/64d61c04/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/jsr223/SparkGremlinPlugin.java
----------------------------------------------------------------------
diff --git a/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/jsr223/SparkGremlinPlugin.java b/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/jsr223/SparkGremlinPlugin.java
new file mode 100644
index 0000000..840f593
--- /dev/null
+++ b/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/jsr223/SparkGremlinPlugin.java
@@ -0,0 +1,92 @@
+/*
+ * 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.spark.jsr223;
+
+import org.apache.tinkerpop.gremlin.jsr223.AbstractGremlinPlugin;
+import org.apache.tinkerpop.gremlin.jsr223.BindingsCustomizer;
+import org.apache.tinkerpop.gremlin.jsr223.DefaultImportCustomizer;
+import org.apache.tinkerpop.gremlin.jsr223.ImportCustomizer;
+import org.apache.tinkerpop.gremlin.jsr223.console.LazyBindingsCustomizer;
+import org.apache.tinkerpop.gremlin.spark.process.computer.CombineIterator;
+import org.apache.tinkerpop.gremlin.spark.process.computer.MapIterator;
+import org.apache.tinkerpop.gremlin.spark.process.computer.MemoryAccumulator;
+import org.apache.tinkerpop.gremlin.spark.process.computer.ReduceIterator;
+import org.apache.tinkerpop.gremlin.spark.process.computer.SparkExecutor;
+import org.apache.tinkerpop.gremlin.spark.process.computer.SparkGraphComputer;
+import org.apache.tinkerpop.gremlin.spark.process.computer.SparkMemory;
+import org.apache.tinkerpop.gremlin.spark.process.computer.SparkMessenger;
+import org.apache.tinkerpop.gremlin.spark.structure.Spark;
+import org.apache.tinkerpop.gremlin.spark.structure.io.InputFormatRDD;
+import org.apache.tinkerpop.gremlin.spark.structure.io.InputOutputHelper;
+import org.apache.tinkerpop.gremlin.spark.structure.io.InputRDD;
+import org.apache.tinkerpop.gremlin.spark.structure.io.InputRDDFormat;
+import org.apache.tinkerpop.gremlin.spark.structure.io.OutputFormatRDD;
+import org.apache.tinkerpop.gremlin.spark.structure.io.OutputRDD;
+import org.apache.tinkerpop.gremlin.spark.structure.io.PersistedInputRDD;
+import org.apache.tinkerpop.gremlin.spark.structure.io.PersistedOutputRDD;
+import org.apache.tinkerpop.gremlin.spark.structure.io.SparkContextStorage;
+
+import javax.script.Bindings;
+import javax.script.SimpleBindings;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public final class SparkGremlinPlugin extends AbstractGremlinPlugin {
+
+    protected static String NAME = "tinkerpop.spark";
+
+    private static final ImportCustomizer imports = DefaultImportCustomizer.build().addClassImports(
+            SparkGraphComputer.class,
+            CombineIterator.class,
+            MapIterator.class,
+            MemoryAccumulator.class,
+            ReduceIterator.class,
+            SparkExecutor.class,
+            SparkGraphComputer.class,
+            SparkMemory.class,
+            SparkMessenger.class,
+            Spark.class,
+            InputFormatRDD.class,
+            InputOutputHelper.class,
+            InputRDD.class,
+            InputRDDFormat.class,
+            OutputFormatRDD.class,
+            OutputRDD.class,
+            PersistedInputRDD.class,
+            PersistedOutputRDD.class,
+            SparkContextStorage.class).create();
+
+    private static final BindingsCustomizer bindings = new LazyBindingsCustomizer(() -> {
+        final Bindings bindings = new SimpleBindings();
+        bindings.put("spark", SparkContextStorage.open());
+        return bindings;
+    });
+
+    public SparkGremlinPlugin() {
+        super(NAME, imports, bindings);
+    }
+
+    @Override
+    public boolean requireRestart() {
+        return true;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/64d61c04/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinPlugin.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinPlugin.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinPlugin.java
index 16a6cb5..68e649c 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinPlugin.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinPlugin.java
@@ -21,6 +21,7 @@ package org.apache.tinkerpop.gremlin.tinkergraph.jsr223;
 import org.apache.tinkerpop.gremlin.jsr223.AbstractGremlinPlugin;
 import org.apache.tinkerpop.gremlin.jsr223.Customizer;
 import org.apache.tinkerpop.gremlin.jsr223.DefaultImportCustomizer;
+import org.apache.tinkerpop.gremlin.jsr223.ImportCustomizer;
 import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerGraphComputer;
 import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerGraphComputerView;
 import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerMapEmitter;
@@ -48,30 +49,27 @@ import java.util.Optional;
 public final class TinkerGraphGremlinPlugin extends AbstractGremlinPlugin {
     private static final String MODULE_NAME = "tinkerpop.tinkergraph";
 
-    public TinkerGraphGremlinPlugin() {
-        super(MODULE_NAME, DefaultImportCustomizer.build().addClassImports(
-                TinkerEdge.class,
-                TinkerElement.class,
-                TinkerFactory.class,
-                TinkerGraph.class,
-                TinkerGraphVariables.class,
-                TinkerHelper.class,
-                TinkerIoRegistry.class,
-                TinkerIoRegistryV2d0.class,
-                TinkerProperty.class,
-                TinkerVertex.class,
-                TinkerVertexProperty.class,
-                TinkerGraphComputer.class,
-                TinkerGraphComputerView.class,
-                TinkerMapEmitter.class,
-                TinkerMemory.class,
-                TinkerMessenger.class,
-                TinkerReduceEmitter.class,
-                TinkerWorkerPool.class).create());
-    }
+    private static final ImportCustomizer imports = DefaultImportCustomizer.build()
+            .addClassImports(TinkerEdge.class,
+                             TinkerElement.class,
+                             TinkerFactory.class,
+                             TinkerGraph.class,
+                             TinkerGraphVariables.class,
+                             TinkerHelper.class,
+                             TinkerIoRegistry.class,
+                             TinkerIoRegistryV2d0.class,
+                             TinkerProperty.class,
+                             TinkerVertex.class,
+                             TinkerVertexProperty.class,
+                             TinkerGraphComputer.class,
+                             TinkerGraphComputerView.class,
+                             TinkerMapEmitter.class,
+                             TinkerMemory.class,
+                             TinkerMessenger.class,
+                             TinkerReduceEmitter.class,
+                             TinkerWorkerPool.class).create();
 
-    @Override
-    public Optional<Customizer[]> getCustomizers() {
-        return null;
+    public TinkerGraphGremlinPlugin() {
+        super(MODULE_NAME, imports);
     }
 }


[4/6] tinkerpop git commit: TINKERPOP-1562 Fixed problems related to loading new/old plugins

Posted by sp...@apache.org.
TINKERPOP-1562 Fixed problems related to loading new/old plugins

Tested in Gremlin Console and it looks like the flag that will tell it to load one plugin version or the other is working properly.


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

Branch: refs/heads/TINKERPOP-1562
Commit: 0cc705bf98770ee37ec7bb68440f368b406b0cc1
Parents: a302997
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Nov 22 09:39:37 2016 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue Nov 22 09:39:37 2016 -0500

----------------------------------------------------------------------
 .../tinkerpop/gremlin/console/Mediator.groovy   |  2 +-
 .../gremlin/console/plugin/PluggedIn.groovy     |  2 +-
 .../jsr223/TinkerGraphGremlinPlugin.java        | 77 ++++++++++++++++++++
 ...pache.tinkerpop.gremlin.jsr223.GremlinPlugin |  1 +
 4 files changed, 80 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0cc705bf/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Mediator.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Mediator.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Mediator.groovy
index 396c563..18e8d58 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Mediator.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/Mediator.groovy
@@ -34,7 +34,7 @@ class Mediator {
 
     private static String LINE_SEP = System.getProperty("line.separator")
 
-    public static final boolean useV3d3 = System.getProperty("plugins", "v3d3") == "v3d3"
+    public static final boolean useV3d3 = System.getProperty("plugins", "v3d2") == "v3d3"
 
     public Mediator(final Console console) {
         this.console = console

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0cc705bf/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy
----------------------------------------------------------------------
diff --git a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy
index 54659fa..d298cd7 100644
--- a/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy
+++ b/gremlin-console/src/main/groovy/org/apache/tinkerpop/gremlin/console/plugin/PluggedIn.groovy
@@ -79,7 +79,7 @@ class PluggedIn {
 
         @Override
         void pluginTo(final PluginAcceptor pluginAcceptor) throws IllegalEnvironmentException, PluginInitializationException {
-            corePlugin.getCustomizers("gremlin-groovy").each {
+            corePlugin.getCustomizers("gremlin-groovy").get().each {
                 if (it instanceof ImportCustomizer) {
                     def imports = [] as Set
                     it.classImports.each { imports.add("import " + it.canonicalName )}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0cc705bf/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinPlugin.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinPlugin.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinPlugin.java
new file mode 100644
index 0000000..16a6cb5
--- /dev/null
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinPlugin.java
@@ -0,0 +1,77 @@
+/*
+ * 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.tinkergraph.jsr223;
+
+import org.apache.tinkerpop.gremlin.jsr223.AbstractGremlinPlugin;
+import org.apache.tinkerpop.gremlin.jsr223.Customizer;
+import org.apache.tinkerpop.gremlin.jsr223.DefaultImportCustomizer;
+import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerGraphComputer;
+import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerGraphComputerView;
+import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerMapEmitter;
+import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerMemory;
+import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerMessenger;
+import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerReduceEmitter;
+import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerWorkerPool;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerEdge;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerElement;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraphVariables;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerHelper;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistry;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2d0;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerProperty;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerVertex;
+import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerVertexProperty;
+
+import java.util.Optional;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public final class TinkerGraphGremlinPlugin extends AbstractGremlinPlugin {
+    private static final String MODULE_NAME = "tinkerpop.tinkergraph";
+
+    public TinkerGraphGremlinPlugin() {
+        super(MODULE_NAME, DefaultImportCustomizer.build().addClassImports(
+                TinkerEdge.class,
+                TinkerElement.class,
+                TinkerFactory.class,
+                TinkerGraph.class,
+                TinkerGraphVariables.class,
+                TinkerHelper.class,
+                TinkerIoRegistry.class,
+                TinkerIoRegistryV2d0.class,
+                TinkerProperty.class,
+                TinkerVertex.class,
+                TinkerVertexProperty.class,
+                TinkerGraphComputer.class,
+                TinkerGraphComputerView.class,
+                TinkerMapEmitter.class,
+                TinkerMemory.class,
+                TinkerMessenger.class,
+                TinkerReduceEmitter.class,
+                TinkerWorkerPool.class).create());
+    }
+
+    @Override
+    public Optional<Customizer[]> getCustomizers() {
+        return null;
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0cc705bf/tinkergraph-gremlin/src/main/resources/META-INF/services/org.apache.tinkerpop.gremlin.jsr223.GremlinPlugin
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/resources/META-INF/services/org.apache.tinkerpop.gremlin.jsr223.GremlinPlugin b/tinkergraph-gremlin/src/main/resources/META-INF/services/org.apache.tinkerpop.gremlin.jsr223.GremlinPlugin
new file mode 100644
index 0000000..f63b96f
--- /dev/null
+++ b/tinkergraph-gremlin/src/main/resources/META-INF/services/org.apache.tinkerpop.gremlin.jsr223.GremlinPlugin
@@ -0,0 +1 @@
+org.apache.tinkerpop.gremlin.tinkergraph.jsr223.TinkerGraphGremlinPlugin
\ No newline at end of file


[3/6] tinkerpop git commit: TINKERPOP-1562 Rename "modules" as "plugin"

Posted by sp...@apache.org.
TINKERPOP-1562 Rename "modules" as "plugin"


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

Branch: refs/heads/TINKERPOP-1562
Commit: a3029973000ad404e745c55f5d7f7e6071c13710
Parents: f430837
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Tue Nov 22 06:59:49 2016 -0500
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Tue Nov 22 06:59:49 2016 -0500

----------------------------------------------------------------------
 .../gremlin/groovy/engine/GremlinExecutor.java  | 40 ++++++++++----------
 .../tinkerpop/gremlin/server/Settings.java      |  4 +-
 .../server/util/ServerGremlinExecutor.java      |  6 +--
 3 files changed, 25 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a3029973/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
index 4449e1b..84f1992 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/engine/GremlinExecutor.java
@@ -85,7 +85,7 @@ public class GremlinExecutor implements AutoCloseable {
     private GremlinScriptEngineManager gremlinScriptEngineManager;
 
     private final Map<String, EngineSettings> settings;
-    private final Map<String, Map<String, Map<String,Object>>> modules;
+    private final Map<String, Map<String, Map<String,Object>>> plugins;
     private final long scriptEvaluationTimeout;
     private final Bindings globalBindings;
     private final List<List<String>> use;
@@ -111,7 +111,7 @@ public class GremlinExecutor implements AutoCloseable {
         this.afterFailure = builder.afterFailure;
         this.use = builder.use;
         this.settings = builder.settings;
-        this.modules = builder.modules;
+        this.plugins = builder.plugins;
         this.scriptEvaluationTimeout = builder.scriptEvaluationTimeout;
         this.globalBindings = builder.globalBindings;
         this.enabledPlugins = builder.enabledPlugins;
@@ -426,14 +426,14 @@ public class GremlinExecutor implements AutoCloseable {
     }
 
     private void initializeGremlinScriptEngineManager() {
-        this.useGremlinScriptEngineManager = !modules.entrySet().isEmpty();
+        this.useGremlinScriptEngineManager = !plugins.entrySet().isEmpty();
 
-        for (Map.Entry<String, Map<String, Map<String,Object>>> config : modules.entrySet()) {
+        for (Map.Entry<String, Map<String, Map<String,Object>>> config : plugins.entrySet()) {
             final String language = config.getKey();
-            final Map<String, Map<String,Object>> moduleConfigs = config.getValue();
-            for (Map.Entry<String, Map<String,Object>> moduleConfig : moduleConfigs.entrySet()) {
+            final Map<String, Map<String,Object>> pluginConfigs = config.getValue();
+            for (Map.Entry<String, Map<String,Object>> pluginConfig : pluginConfigs.entrySet()) {
                 try {
-                    final Class<?> clazz = Class.forName(moduleConfig.getKey());
+                    final Class<?> clazz = Class.forName(pluginConfig.getKey());
 
                     // first try instance() and if that fails try to use build()
                     try {
@@ -441,29 +441,29 @@ public class GremlinExecutor implements AutoCloseable {
                         gremlinScriptEngineManager.addPlugin((GremlinPlugin) instanceMethod.invoke(null));
                     } catch (Exception ex) {
                         final Method builderMethod = clazz.getMethod("build");
-                        Object moduleBuilder = builderMethod.invoke(null);
+                        Object pluginBuilder = builderMethod.invoke(null);
 
-                        final Class<?> builderClazz = moduleBuilder.getClass();
-                        final Map<String, Object> customizerConfigs = moduleConfig.getValue();
+                        final Class<?> builderClazz = pluginBuilder.getClass();
+                        final Map<String, Object> customizerConfigs = pluginConfig.getValue();
                         final Method[] methods = builderClazz.getMethods();
                         for (Map.Entry<String, Object> customizerConfig : customizerConfigs.entrySet()) {
                             final Method configMethod = Stream.of(methods).filter(m -> m.getName().equals(customizerConfig.getKey())).findFirst()
                                     .orElseThrow(() -> new IllegalStateException("Could not find builder method on " + builderClazz.getCanonicalName()));
                             if (null == customizerConfig.getValue())
-                                moduleBuilder = configMethod.invoke(moduleBuilder);
+                                pluginBuilder = configMethod.invoke(pluginBuilder);
                             else
-                                moduleBuilder = configMethod.invoke(moduleBuilder, customizerConfig.getValue());
+                                pluginBuilder = configMethod.invoke(pluginBuilder, customizerConfig.getValue());
                         }
 
                         try {
                             final Method appliesTo = builderClazz.getMethod("appliesTo");
-                            moduleBuilder = appliesTo.invoke(moduleBuilder, language);
+                            pluginBuilder = appliesTo.invoke(pluginBuilder, language);
                         } catch (NoSuchMethodException ignored) {
 
                         }
 
                         final Method create = builderClazz.getMethod("create");
-                        gremlinScriptEngineManager.addPlugin((GremlinPlugin) create.invoke(moduleBuilder));
+                        gremlinScriptEngineManager.addPlugin((GremlinPlugin) create.invoke(pluginBuilder));
                     }
                 } catch (Exception ex) {
                     throw new IllegalStateException(ex);
@@ -569,7 +569,7 @@ public class GremlinExecutor implements AutoCloseable {
         private long scriptEvaluationTimeout = 8000;
         private Map<String, EngineSettings> settings = new HashMap<>();
 
-        private Map<String, Map<String, Map<String,Object>>> modules = new HashMap<>();
+        private Map<String, Map<String, Map<String,Object>>> plugins = new HashMap<>();
 
         private ExecutorService executorService = null;
         private ScheduledExecutorService scheduledExecutorService = null;
@@ -597,7 +597,7 @@ public class GremlinExecutor implements AutoCloseable {
          * @param scripts       A list of scripts to execute in the engine to initialize it.
          * @param config        Custom configuration map for the ScriptEngine
          *
-         * @deprecated As of release 3.2.4, replaced by {@link #addModules(String, Map)}.
+         * @deprecated As of release 3.2.4, replaced by {@link #addPlugins(String, Map)}.
          */
         @Deprecated
         public Builder addEngineSettings(final String engineName, final List<String> imports,
@@ -618,8 +618,8 @@ public class GremlinExecutor implements AutoCloseable {
          * is the name of a builder method on the {@link GremlinPlugin} and the value is some argument to pass to that
          * method.
          */
-        public Builder addModules(final String engineName, final Map<String, Map<String,Object>> modules) {
-            this.modules.put(engineName, modules);
+        public Builder addPlugins(final String engineName, final Map<String, Map<String,Object>> plugins) {
+            this.plugins.put(engineName, plugins);
             return this;
         }
 
@@ -649,7 +649,7 @@ public class GremlinExecutor implements AutoCloseable {
         /**
          * Replaces any settings provided.
          *
-         * @deprecated As of release 3.2.4, replaced by {@link #addModules(String, Map)}.
+         * @deprecated As of release 3.2.4, replaced by {@link #addPlugins(String, Map)}.
          */
         @Deprecated
         public Builder engineSettings(final Map<String, EngineSettings> settings) {
@@ -721,7 +721,7 @@ public class GremlinExecutor implements AutoCloseable {
         /**
          * Set of the names of plugins that should be enabled for the engine.
          *
-         * @deprecated As of release 3.2.4, replaced by {@link #addModules(String, Map)} though behavior is not quite
+         * @deprecated As of release 3.2.4, replaced by {@link #addPlugins(String, Map)} though behavior is not quite
          *             the same.
          */
         @Deprecated

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a3029973/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java
index 75cff3b..97e2875 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/Settings.java
@@ -260,7 +260,7 @@ public class Settings {
         scriptEngineSettingsDescription.putListPropertyType("staticImports", String.class);
         scriptEngineSettingsDescription.putListPropertyType("scripts", String.class);
         scriptEngineSettingsDescription.putMapPropertyType("config", String.class, Object.class);
-        scriptEngineSettingsDescription.putMapPropertyType("modules", String.class, Object.class);
+        scriptEngineSettingsDescription.putMapPropertyType("plugins", String.class, Object.class);
         constructor.addTypeDescription(scriptEngineSettingsDescription);
 
         final TypeDescription sslSettings = new TypeDescription(SslSettings.class);
@@ -343,7 +343,7 @@ public class Settings {
         /**
          * A set of configurations for {@link GremlinPlugin} instances to apply to this {@link GremlinScriptEngine}.
          */
-        public Map<String,Map<String,Object>> modules = new HashMap<>();
+        public Map<String,Map<String,Object>> plugins = new HashMap<>();
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/a3029973/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java
----------------------------------------------------------------------
diff --git a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java
index 1204bee..2b2f1f1 100644
--- a/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java
+++ b/gremlin-server/src/main/java/org/apache/tinkerpop/gremlin/server/util/ServerGremlinExecutor.java
@@ -127,8 +127,8 @@ public class ServerGremlinExecutor<T extends ScheduledExecutorService> {
                 .scheduledExecutorService(this.scheduledExecutorService);
 
         settings.scriptEngines.forEach((k, v) -> {
-            // use modules if they are present and the old approach if not
-            if (v.modules.isEmpty()) {
+            // use plugins if they are present and the old approach if not
+            if (v.plugins.isEmpty()) {
                 // make sure that server related classes are available at init - ultimately this body of code will be
                 // deleted when deprecation is removed
                 v.imports.add(LifeCycleHook.class.getCanonicalName());
@@ -137,7 +137,7 @@ public class ServerGremlinExecutor<T extends ScheduledExecutorService> {
             } else {
                 // make sure that server related classes are available at init - new approach. the LifeCycleHook stuff
                 // will be added explicitly via configuration using GremlinServerGremlinModule in the yaml
-                gremlinExecutorBuilder.addModules(k, v.modules);
+                gremlinExecutorBuilder.addPlugins(k, v.plugins);
             }
         });