Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1278 c5eca63fe -> b93feb477


Added a method to handle imports.

Attempted some more drastic efforts that would allow more complete integration 
of gremlin-python into the full TinkerPop plugin system, but that brings big 
fat breaking changes. To keep this branch suitable for 3.2.x we would have to 
say that GremlinPlugin is only suitable for gremlin-groovy until largely 
refactoring efforts can be made.


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

Branch: refs/heads/TINKERPOP-1278
Commit: 6840262fd4170c6caabe8d1c8390197baafa8eb4
Parents: c5eca63
Author: Stephen Mallette <[email protected]>
Authored: Thu Jul 7 15:47:19 2016 -0400
Committer: Stephen Mallette <[email protected]>
Committed: Fri Jul 8 13:30:15 2016 -0400

----------------------------------------------------------------------
 .../DefaultGremlinScriptEngineManager.java      | 57 ++++++++++----------
 .../gremlin/jsr223/GremlinScriptEngine.java     |  7 +++
 2 files changed, 36 insertions(+), 28 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6840262f/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java
index 0ab02dc..e53f505 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/DefaultGremlinScriptEngineManager.java
@@ -18,6 +18,8 @@
  */
 package org.apache.tinkerpop.gremlin.jsr223;
 
+import org.apache.tinkerpop.gremlin.util.CoreImports;
+
 import javax.script.Bindings;
 import javax.script.ScriptContext;
 import javax.script.SimpleBindings;
@@ -51,6 +53,10 @@ import java.util.ServiceLoader;
  * that this class is designed to provide support for "Gremlin-enabled" {@code 
ScriptEngine} instances (i.e. those
  * that extend from {@link GremlinScriptEngine}) and is not meant to manage 
just any {@code ScriptEngine} instance
  * that may be on the path.
+ * <p/>
+ * As this is a "Gremlin" {@code ScriptEngine}, certain common imports are 
automatically applied when a
+ * {@link GremlinScriptEngine} is instantiated via the {@link 
GremlinScriptEngineFactory}.. Initial imports from
+ * gremlin-core come from the {@link CoreImports}.
  *
  * @author Stephen Mallette (http://stephen.genoprime.com)
  */
@@ -164,9 +170,7 @@ public class DefaultGremlinScriptEngineManager implements 
GremlinScriptEngineMan
         if (null != (obj = nameAssociations.get(shortName))) {
             final GremlinScriptEngineFactory spi = 
(GremlinScriptEngineFactory) obj;
             try {
-                final GremlinScriptEngine engine = spi.getScriptEngine();
-                engine.setBindings(getBindings(), ScriptContext.GLOBAL_SCOPE);
-                return engine;
+                return createGremlinScriptEngine(spi);
             } catch (Exception exp) {
                 if (DEBUG) exp.printStackTrace();
             }
@@ -184,9 +188,7 @@ public class DefaultGremlinScriptEngineManager implements 
GremlinScriptEngineMan
                 for (String name : names) {
                     if (shortName.equals(name)) {
                         try {
-                            final GremlinScriptEngine engine = 
spi.getScriptEngine();
-                            engine.setBindings(getBindings(), 
ScriptContext.GLOBAL_SCOPE);
-                            return engine;
+                            return createGremlinScriptEngine(spi);
                         } catch (Exception exp) {
                             if (DEBUG) exp.printStackTrace();
                         }
@@ -213,11 +215,9 @@ public class DefaultGremlinScriptEngineManager implements 
GremlinScriptEngineMan
         //look for registered extension first
         Object obj;
         if (null != (obj = extensionAssociations.get(extension))) {
-            final GremlinScriptEngineFactory spi = 
(GremlinScriptEngineFactory)obj;
+            final GremlinScriptEngineFactory spi = 
(GremlinScriptEngineFactory) obj;
             try {
-                final GremlinScriptEngine engine = spi.getScriptEngine();
-                engine.setBindings(getBindings(), ScriptContext.GLOBAL_SCOPE);
-                return engine;
+                return createGremlinScriptEngine(spi);
             } catch (Exception exp) {
                 if (DEBUG) exp.printStackTrace();
             }
@@ -234,9 +234,7 @@ public class DefaultGremlinScriptEngineManager implements 
GremlinScriptEngineMan
             for (String ext : exts) {
                 if (extension.equals(ext)) {
                     try {
-                        final GremlinScriptEngine engine = 
spi.getScriptEngine();
-                        engine.setBindings(getBindings(), 
ScriptContext.GLOBAL_SCOPE);
-                        return engine;
+                        return createGremlinScriptEngine(spi);
                     } catch (Exception exp) {
                         if (DEBUG) exp.printStackTrace();
                     }
@@ -264,9 +262,7 @@ public class DefaultGremlinScriptEngineManager implements 
GremlinScriptEngineMan
         if (null != (obj = mimeTypeAssociations.get(mimeType))) {
             final GremlinScriptEngineFactory spi = 
(GremlinScriptEngineFactory) obj;
             try {
-                final GremlinScriptEngine engine = spi.getScriptEngine();
-                engine.setBindings(getBindings(), ScriptContext.GLOBAL_SCOPE);
-                return engine;
+                return createGremlinScriptEngine(spi);
             } catch (Exception exp) {
                 if (DEBUG) exp.printStackTrace();
             }
@@ -283,9 +279,7 @@ public class DefaultGremlinScriptEngineManager implements 
GremlinScriptEngineMan
             for (String type : types) {
                 if (mimeType.equals(type)) {
                     try {
-                        final GremlinScriptEngine engine = 
spi.getScriptEngine();
-                        engine.setBindings(getBindings(), 
ScriptContext.GLOBAL_SCOPE);
-                        return engine;
+                        return createGremlinScriptEngine(spi);
                     } catch (Exception exp) {
                         if (DEBUG) exp.printStackTrace();
                     }
@@ -369,9 +363,8 @@ public class DefaultGremlinScriptEngineManager implements 
GremlinScriptEngineMan
         } catch (ServiceConfigurationError err) {
             System.err.println("Can't find GremlinScriptEngineFactory 
providers: " +
                     err.getMessage());
-            if (DEBUG) {
-                err.printStackTrace();
-            }
+            if (DEBUG) err.printStackTrace();
+
             // do not throw any exception here. user may want to manager their 
own factories using this manager
             // by explicit registration (by registerXXX) methods.
             return;
@@ -384,19 +377,27 @@ public class DefaultGremlinScriptEngineManager implements 
GremlinScriptEngineMan
                 } catch (ServiceConfigurationError err) {
                     System.err.println("GremlinScriptEngineManager 
providers.next(): "
                             + err.getMessage());
-                    if (DEBUG) {
-                        err.printStackTrace();
-                    }
+                    if (DEBUG) err.printStackTrace();
                 }
             }
         } catch (ServiceConfigurationError err) {
             System.err.println("GremlinScriptEngineManager 
providers.hasNext(): "
                     + err.getMessage());
-            if (DEBUG) {
-                err.printStackTrace();
-            }
+            if (DEBUG) err.printStackTrace();
             // do not throw any exception here. user may want to manage their 
own factories using this manager
             // by explicit registration (by registerXXX) methods.
         }
     }
+
+    private GremlinScriptEngine createGremlinScriptEngine(final 
GremlinScriptEngineFactory spi) {
+        final GremlinScriptEngine engine = spi.getScriptEngine();
+        engine.setBindings(getBindings(), ScriptContext.GLOBAL_SCOPE);
+
+        // these are standard imports from gremlin-core that are applied to 
all GremlinScriptEngine instances
+        CoreImports.getClassImports().forEach(engine::addClassImport);
+        CoreImports.getMethodImports().forEach(engine::addMethodImport);
+        CoreImports.getEnumImports().forEach(engine::addEnumImport);
+
+        return engine;
+    }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/6840262f/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinScriptEngine.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinScriptEngine.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinScriptEngine.java
index f3ef212..916c2a6 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinScriptEngine.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/jsr223/GremlinScriptEngine.java
@@ -23,6 +23,7 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 
 import javax.script.Bindings;
 import javax.script.ScriptEngine;
+import java.lang.reflect.Method;
 
 /**
  * A {@code GremlinScriptEngine} is an extension of the standard {@code 
ScriptEngine} and provides some specific
@@ -35,4 +36,10 @@ public interface GremlinScriptEngine extends ScriptEngine {
     GremlinScriptEngineFactory getFactory();
 
     Traversal.Admin eval(final Bytecode bytes, final Bindings bindings);
+
+    void addClassImport(final Class clazz);
+
+    void addEnumImport(final Enum e);
+
+    void addMethodImport(final Method method);
 }

Reply via email to