Class DefaultGremlinScriptEngineManager
java.lang.Object
org.apache.tinkerpop.gremlin.jsr223.DefaultGremlinScriptEngineManager
- All Implemented Interfaces:
GremlinScriptEngineManager
- Direct Known Subclasses:
CachedGremlinScriptEngineManager
The
ScriptEngineManager implements a discovery, instantiation and configuration mechanism for
GremlinScriptEngine classes and also maintains a collection of key/value pairs storing state shared by all
engines created by it. This class uses the ServiceProvider mechanism to enumerate all the
implementations of GremlinScriptEngineFactory. The ScriptEngineManager provides a method
to return a list of all these factories as well as utility methods which look up factories on the basis of language
name, file extension and mime type.
The Bindings of key/value pairs, referred to as the "Global Scope" maintained by the manager is available
to all instances of @code ScriptEngine} created by the GremlinScriptEngineManager. The values
in the Bindings are generally exposed in all scripts.
This class is based quite heavily on the workings of the ScriptEngineManager supplied in the
javax.script packages, but adds some additional features that are specific to Gremlin and TinkerPop.
Unfortunately, it's not easily possible to extend ScriptEngineManager directly as there certain behaviors
don't appear to be straightforward to implement and member variables are all private. It is important to note
that this class is designed to provide support for "Gremlin-enabled" ScriptEngine instances (i.e. those
that extend from GremlinScriptEngine) and is not meant to manage just any ScriptEngine instance
that may be on the path.
As this is a "Gremlin" ScriptEngine, certain common imports are automatically applied when a
GremlinScriptEngine is instantiated via the GremlinScriptEngineFactory.. Initial imports from
gremlin-core come from the CoreImports.- Author:
- Stephen Mallette (http://stephen.genoprime.com)
-
Constructor Summary
ConstructorsConstructorDescriptionThe effect of calling this constructor is the same as callingDefaultGremlinScriptEngineManager(Thread.currentThread().getContextClassLoader()).This constructor loads the implementations ofGremlinScriptEngineFactoryvisible to the givenClassLoaderusing theServiceLoadermechanism.DefaultGremlinScriptEngineManager(Set<String> allowedEngines) Creates a manager with an allowlist of engine names. -
Method Summary
Modifier and TypeMethodDescriptionvoidaddPlugin(GremlinPlugin plugin) AddGremlinPlugininstances to customize newly createdGremlinScriptEngineinstances.Gets the value for the specified key in the global scope.Gets the bindings of theBindingsin global scope.getCustomizers(String scriptEngineName) Get the list ofCustomizerinstances filtered by thescriptEngineName.getEngineByExtension(String extension) Look up and create aGremlinScriptEnginefor a given extension.getEngineByMimeType(String mimeType) Look up and create aGremlinScriptEnginefor a given mime type.getEngineByName(String shortName) Looks up and creates aGremlinScriptEnginefor a given name.Returns a list whose elements are instances of all theGremlinScriptEngineFactoryclasses found by the discovery mechanism.voidSets the specified key/value pair in the global scope.voidregisterEngineExtension(String extension, GremlinScriptEngineFactory factory) Registers aGremlinScriptEngineFactoryto handle an extension.voidregisterEngineMimeType(String type, GremlinScriptEngineFactory factory) Registers aGremlinScriptEngineFactoryto handle a mime type.voidregisterEngineName(String name, GremlinScriptEngineFactory factory) Registers aGremlinScriptEngineFactoryto handle a language name.voidsetBindings(Bindings bindings) Stores the specifiedBindingsas a global for allGremlinScriptEngineobjects created by it.
-
Constructor Details
-
DefaultGremlinScriptEngineManager
public DefaultGremlinScriptEngineManager()The effect of calling this constructor is the same as callingDefaultGremlinScriptEngineManager(Thread.currentThread().getContextClassLoader()). -
DefaultGremlinScriptEngineManager
This constructor loads the implementations ofGremlinScriptEngineFactoryvisible to the givenClassLoaderusing theServiceLoadermechanism. If loader isnull, the script engine factories that are bundled with the platform and that are in the usual extension directories (installed extensions) are loaded. -
DefaultGremlinScriptEngineManager
Creates a manager with an allowlist of engine names. Only engines whose names appear inallowedEngineswill be returned bygetEngineByName(String). Engines discovered via SPI but not in the allowlist will be rejected. Passnullto allow all engines.- Parameters:
allowedEngines- the set of permitted engine names, ornullfor no restriction
-
-
Method Details
-
getCustomizers
Description copied from interface:GremlinScriptEngineManagerGet the list ofCustomizerinstances filtered by thescriptEngineName.- Specified by:
getCustomizersin interfaceGremlinScriptEngineManager
-
addPlugin
Description copied from interface:GremlinScriptEngineManagerAddGremlinPlugininstances to customize newly createdGremlinScriptEngineinstances.- Specified by:
addPluginin interfaceGremlinScriptEngineManager
-
setBindings
Stores the specifiedBindingsas a global for allGremlinScriptEngineobjects created by it. If the bindings are to be updated by multiple threads it is recommended that aConcurrentBindingsinstance is supplied.- Specified by:
setBindingsin interfaceGremlinScriptEngineManager- Throws:
IllegalArgumentException- if bindings is null.
-
getBindings
Gets the bindings of theBindingsin global scope.- Specified by:
getBindingsin interfaceGremlinScriptEngineManager
-
put
Sets the specified key/value pair in the global scope. The key may not be null or empty.- Specified by:
putin interfaceGremlinScriptEngineManager- Throws:
IllegalArgumentException- if key is null or empty.
-
get
Gets the value for the specified key in the global scope.- Specified by:
getin interfaceGremlinScriptEngineManager
-
getEngineByName
Looks up and creates aGremlinScriptEnginefor a given name. The algorithm first searches for aGremlinScriptEngineFactorythat has been registered as a handler for the specified name using theregisterEngineExtension(String, GremlinScriptEngineFactory)method. If one is not found, it searches the set ofGremlinScriptEngineFactoryinstances stored by the constructor for one with the specified name. If aScriptEngineFactoryis found by either method, it is used to create instance ofGremlinScriptEngine.- Specified by:
getEngineByNamein interfaceGremlinScriptEngineManager- Parameters:
shortName- The short name of theGremlinScriptEngineimplementation returned by theScriptEngineFactory.getNames()method.- Returns:
- A
GremlinScriptEnginecreated by the factory located in the search. Returnsnullif no such factory was found. The global scope of this manager is applied to the newly createdGremlinScriptEngine - Throws:
NullPointerException- if shortName isnull.
-
getEngineByExtension
Look up and create aGremlinScriptEnginefor a given extension. The algorithm used bygetEngineByName(String)is used except that the search starts by looking for aGremlinScriptEngineFactoryregistered to handle the given extension usingregisterEngineExtension(String, GremlinScriptEngineFactory).- Specified by:
getEngineByExtensionin interfaceGremlinScriptEngineManager- Returns:
- The engine to handle scripts with this extension. Returns
nullif not found. - Throws:
NullPointerException- if extension isnull.
-
getEngineByMimeType
Look up and create aGremlinScriptEnginefor a given mime type. The algorithm used bygetEngineByName(String)is used except that the search starts by looking for aGremlinScriptEngineFactoryregistered to handle the given mime type usingregisterEngineMimeType(String, GremlinScriptEngineFactory).- Specified by:
getEngineByMimeTypein interfaceGremlinScriptEngineManager- Parameters:
mimeType- The given mime type- Returns:
- The engine to handle scripts with this mime type. Returns
nullif not found. - Throws:
NullPointerException- if mime-type isnull.
-
getEngineFactories
Returns a list whose elements are instances of all theGremlinScriptEngineFactoryclasses found by the discovery mechanism.- Specified by:
getEngineFactoriesin interfaceGremlinScriptEngineManager- Returns:
- List of all discovered
GremlinScriptEngineFactoryobjects.
-
registerEngineName
Registers aGremlinScriptEngineFactoryto handle a language name. Overrides any such association found using the discovery mechanism.- Specified by:
registerEngineNamein interfaceGremlinScriptEngineManager- Parameters:
name- The name to be associated with theGremlinScriptEngineFactoryfactory- The class to associate with the given name.- Throws:
NullPointerException- if any of the parameters is null.
-
registerEngineMimeType
Registers aGremlinScriptEngineFactoryto handle a mime type. Overrides any such association found using the discovery mechanism.- Specified by:
registerEngineMimeTypein interfaceGremlinScriptEngineManager- Parameters:
type- The mime type to be associated with theGremlinScriptEngineFactory.factory- The class to associate with the given mime type.- Throws:
NullPointerException- if any of the parameters is null.
-
registerEngineExtension
Registers aGremlinScriptEngineFactoryto handle an extension. Overrides any such association found using the discovery mechanism.- Specified by:
registerEngineExtensionin interfaceGremlinScriptEngineManager- Parameters:
extension- The extension type to be associated with theGremlinScriptEngineFactoryfactory- The class to associate with the given extension.- Throws:
NullPointerException- if any of the parameters is null.
-