Class GremlinLangScriptEngine
- java.lang.Object
-
- javax.script.AbstractScriptEngine
-
- org.apache.tinkerpop.gremlin.jsr223.GremlinLangScriptEngine
-
- All Implemented Interfaces:
ScriptEngine
,GremlinScriptEngine
public class GremlinLangScriptEngine extends AbstractScriptEngine implements GremlinScriptEngine
AGremlinScriptEngine
implementation that evaluates Gremlin scripts usinggremlin-language
. As it usesgremlin-language
and thus the ANTLR parser, it is not capable of process arbitrary scripts as theGremlinGroovyScriptEngine
can and is therefore a more secure Gremlin evaluator. It is obviously restricted to the capabilities of the ANTLR grammar so therefore syntax that includes things like lambdas are not supported. For bytecode evaluation it simply uses theJavaTranslator
. As an internal note, technically, this is an incomplete implementation of theGremlinScriptEngine
in the traditional sense as a drop-in replacement for something like theGremlinGroovyScriptEngine
. As a result, thisGremlinScriptEngine
cannot pass theGremlinScriptEngineSuite
tests in full. On the other hand, this limitation is precisely what makes this implementation better from a security perspective. Ultimately, this implementation represents the first step to changes in what it means to have aGremlinScriptEngine
. In some sense, there is question why aGremlinScriptEngine
approach is necessary at all except for easily plugging into the existing internals of Gremlin Server or more specifically theGremlinExecutor
.
-
-
Field Summary
-
Fields inherited from class javax.script.AbstractScriptEngine
context
-
Fields inherited from interface org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine
HIDDEN_G
-
Fields inherited from interface javax.script.ScriptEngine
ARGV, ENGINE, ENGINE_VERSION, FILENAME, LANGUAGE, LANGUAGE_VERSION, NAME
-
-
Constructor Summary
Constructors Constructor Description GremlinLangScriptEngine()
Creates a new instance using noCustomizer
.GremlinLangScriptEngine(Customizer... customizers)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Bindings
createBindings()
Object
eval(Reader reader, ScriptContext context)
Object
eval(String script, ScriptContext context)
Gremlin scripts evaluated by the grammar must be bound to "g" and should evaluate to a "g" in theScriptContext
that is of typeTraversalSource
Traversal.Admin
eval(Bytecode bytecode, Bindings bindings, String traversalSource)
Bytecode is evaluated by theJavaTranslator
.GremlinScriptEngineFactory
getFactory()
protected ScriptContext
getScriptContext(Bindings nn)
Creates theScriptContext
using aGremlinScriptContext
which avoids a significant amount of additional object creation on script evaluation.-
Methods inherited from class javax.script.AbstractScriptEngine
eval, eval, eval, eval, get, getBindings, getContext, put, setBindings, setContext
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.tinkerpop.gremlin.jsr223.GremlinScriptEngine
eval
-
Methods inherited from interface javax.script.ScriptEngine
eval, eval, eval, eval, get, getBindings, getContext, put, setBindings, setContext
-
-
-
-
Constructor Detail
-
GremlinLangScriptEngine
public GremlinLangScriptEngine()
Creates a new instance using noCustomizer
.
-
GremlinLangScriptEngine
public GremlinLangScriptEngine(Customizer... customizers)
-
-
Method Detail
-
getFactory
public GremlinScriptEngineFactory getFactory()
- Specified by:
getFactory
in interfaceGremlinScriptEngine
- Specified by:
getFactory
in interfaceScriptEngine
-
eval
public Traversal.Admin eval(Bytecode bytecode, Bindings bindings, String traversalSource) throws ScriptException
Bytecode is evaluated by theJavaTranslator
.- Specified by:
eval
in interfaceGremlinScriptEngine
- Throws:
ScriptException
-
eval
public Object eval(String script, ScriptContext context) throws ScriptException
Gremlin scripts evaluated by the grammar must be bound to "g" and should evaluate to a "g" in theScriptContext
that is of typeTraversalSource
- Specified by:
eval
in interfaceScriptEngine
- Throws:
ScriptException
-
eval
public Object eval(Reader reader, ScriptContext context) throws ScriptException
- Specified by:
eval
in interfaceScriptEngine
- Throws:
ScriptException
-
createBindings
public Bindings createBindings()
- Specified by:
createBindings
in interfaceScriptEngine
-
getScriptContext
protected ScriptContext getScriptContext(Bindings nn)
Creates theScriptContext
using aGremlinScriptContext
which avoids a significant amount of additional object creation on script evaluation.- Overrides:
getScriptContext
in classAbstractScriptEngine
-
-