/** * Delegates calls to the {@link CachedGremlinScriptEngineManager} instance ensuring that the same instance * is returned for each {@code ScriptEngine} requested. */ public static GremlinScriptEngine get(final String scriptEngineName) { return cached.getEngineByName(scriptEngineName); } }
@Test public void shouldReturnNoCustomizers() { final GremlinScriptEngineManager mgr = new DefaultGremlinScriptEngineManager(); mgr.addPlugin(ImportGremlinPlugin.build() .classImports(java.awt.Color.class) .appliesTo(Collections.singletonList("fake-script-engine")).create()); assertEquals(0, mgr.getCustomizers(ENGINE_TO_TEST).size()); }
private void updateTraversalSource(String graphName, Graph graph, GremlinExecutor gremlinExecutor, JanusGraphManager graphManager){ gremlinExecutor.getScriptEngineManager().put(graphName, graph); String traversalName = graphName + "_traversal"; TraversalSource traversalSource = graph.traversal(); gremlinExecutor.getScriptEngineManager().put(traversalName, traversalSource); graphManager.putTraversalSource(traversalName, traversalSource); }
gremlinScriptEngineManager.addPlugin((GremlinPlugin) instanceMethod.invoke(null)); } catch (Exception ex) { final Method builderMethod = clazz.getMethod("build"); gremlinScriptEngineManager.addPlugin((GremlinPlugin) create.invoke(pluginBuilder)); gremlinScriptEngineManager.setBindings(globalBindings);
@Test public void shouldIncludeGlobalBindings() throws ScriptException { final GremlinScriptEngineManager manager = new DefaultGremlinScriptEngineManager(); final Bindings b = new SimpleBindings(); b.put("x", 1); b.put("y", 2); manager.addPlugin(BindingsGremlinPlugin.build(). bindings(b).create()); final GremlinScriptEngine engine = manager.getEngineByName(ENGINE_TO_TEST); assertEquals(1, engine.eval("x")); assertEquals(2, engine.eval("y")); }
@Test public void shouldEvalBytecode() throws Exception { final GremlinScriptEngine scriptEngine = manager.getEngineByName(ENGINE_TO_TEST); final Graph graph = EmptyGraph.instance(); final GraphTraversalSource g = graph.traversal(); // purposefully use "x" to match the name of the traversal source binding for "x" below and // thus tests the alias added for "x" final GraphTraversal t = getTraversalWithLambda(g); final Bindings bindings = new SimpleBindings(); bindings.put("x", g); final Traversal evald = scriptEngine.eval(t.asAdmin().getBytecode(), bindings, "x"); assertTraversals(t, evald); assertThat(manager.getBindings().containsKey(GremlinScriptEngine.HIDDEN_G), is(false)); }
@Override public GremlinScriptEngine getScriptEngine() { final Set<Customizer> customizers = new HashSet<>(manager.getCustomizers(GREMLIN_JYTHON)); customizers.addAll(manager.getCustomizers(GREMLIN_PYTHON)); return (customizers.isEmpty()) ? new GremlinJythonScriptEngine() : new GremlinJythonScriptEngine(customizers.toArray(new Customizer[customizers.size()])); } }
gremlinExecutor.getScriptEngineManager().getBindings().entrySet().stream() .filter(kv -> kv.getValue() instanceof Graph) .forEach(kv -> this.graphManager.putGraph(kv.getKey(), (Graph) kv.getValue())); gremlinExecutor.getScriptEngineManager().getBindings().entrySet().stream() .filter(kv -> kv.getValue() instanceof TraversalSource) .forEach(kv -> { hooks = gremlinExecutor.getScriptEngineManager().getBindings().entrySet().stream() .filter(kv -> kv.getValue() instanceof LifeCycleHook) .map(kv -> (LifeCycleHook) kv.getValue())
@Test public void shouldExtractGlobalBindingsAfterScriptExecution() throws Exception { assumeThat("Only works with gremlin-groovy", ENGINE_TO_TEST, is("gremlin-groovy")); final GremlinScriptEngineManager manager = new DefaultGremlinScriptEngineManager(); final Bindings b1 = new SimpleBindings(); b1.put("x", 1); b1.put("y", 2); manager.addPlugin(BindingsGremlinPlugin.build().bindings(b1).create()); final Bindings b2 = new SimpleBindings(); b2.put("x", 100); b2.put("y", 200); manager.addPlugin(BindingsGremlinPlugin.build().bindings(b2).create()); final File scriptFile = TestHelper.generateTempFileFromResource(BindingsScriptEngineTest.class, "bindings-init.groovy", ".groovy"); final List<String> files = new ArrayList<>(); files.add(scriptFile.getAbsolutePath()); manager.addPlugin(ScriptFileGremlinPlugin.build().files(files).create()); final GremlinScriptEngine engine = manager.getEngineByName(ENGINE_TO_TEST); assertEquals(100, engine.eval("x")); assertEquals(200, engine.eval("y")); assertEquals(300, engine.eval("z")); assertEquals(600, engine.eval("addItUp(z, addItUp(x,y))")); assertEquals(300, engine.getBindings(ScriptContext.GLOBAL_SCOPE).get("z")); assertThat(engine.getBindings(ScriptContext.ENGINE_SCOPE).containsKey("z"), is(false)); } }
@Test public void shouldEvalBytecode() throws Exception { final GremlinScriptEngine scriptEngine = manager.getEngineByName(ENGINE_TO_TEST); final Graph graph = EmptyGraph.instance(); final GraphTraversalSource g = graph.traversal(); // purposefully use "x" to match the name of the traversal source binding for "x" below and // thus tests the alias added for "x" final GraphTraversal t = getTraversalWithLambda(g); final Bindings bindings = new SimpleBindings(); bindings.put("x", g); final Traversal evald = scriptEngine.eval(t.asAdmin().getBytecode(), bindings, "x"); assertTraversals(t, evald); assertThat(manager.getBindings().containsKey(GremlinScriptEngine.HIDDEN_G), is(false)); }
@Override public GremlinScriptEngine getScriptEngine() { final List<Customizer> customizers = manager.getCustomizers(ENGINE_NAME); return (customizers.isEmpty()) ? new GremlinGroovyScriptEngine() : new GremlinGroovyScriptEngine(customizers.toArray(new Customizer[customizers.size()])); } }
gremlinScriptEngineManager.addPlugin((GremlinPlugin) instanceMethod.invoke(null)); } catch (Exception ex) { final Method builderMethod = clazz.getMethod("build"); gremlinScriptEngineManager.addPlugin((GremlinPlugin) create.invoke(pluginBuilder)); gremlinScriptEngineManager.setBindings(globalBindings);
gremlinExecutor.getScriptEngineManager().getBindings().entrySet().stream() .filter(kv -> kv.getValue() instanceof Graph) .forEach(kv -> this.graphManager.putGraph(kv.getKey(), (Graph) kv.getValue())); gremlinExecutor.getScriptEngineManager().getBindings().entrySet().stream() .filter(kv -> kv.getValue() instanceof TraversalSource) .forEach(kv -> { hooks = gremlinExecutor.getScriptEngineManager().getBindings().entrySet().stream() .filter(kv -> kv.getValue() instanceof LifeCycleHook) .map(kv -> (LifeCycleHook) kv.getValue())
public ScriptRecordWriter(final DataOutputStream out, final TaskAttemptContext context) throws IOException { this.out = out; final Configuration configuration = context.getConfiguration(); this.engine = manager.getEngineByName(configuration.get(SCRIPT_ENGINE, "gremlin-groovy")); final FileSystem fs = FileSystem.get(configuration); try { this.engine.eval(new InputStreamReader(fs.open(new Path(configuration.get(SCRIPT_FILE))))); } catch (final ScriptException e) { throw new IOException(e.getMessage(),e); } }
@Test public void shouldIncludeGlobalBindings() throws ScriptException { final GremlinScriptEngineManager manager = new DefaultGremlinScriptEngineManager(); final Bindings b = new SimpleBindings(); b.put("x", 1); b.put("y", 2); manager.addPlugin(BindingsGremlinPlugin.build(). bindings(b).create()); final GremlinScriptEngine engine = manager.getEngineByName(ENGINE_TO_TEST); assertEquals(1, engine.eval("x")); assertEquals(2, engine.eval("y")); }
@Test public void shouldReturnNoCustomizers() { final GremlinScriptEngineManager mgr = new DefaultGremlinScriptEngineManager(); mgr.addPlugin(ImportGremlinPlugin.build() .classImports(java.awt.Color.class) .appliesTo(Collections.singletonList("fake-script-engine")).create()); assertEquals(0, mgr.getCustomizers(ENGINE_TO_TEST).size()); }
@Override public GremlinScriptEngine getScriptEngine() { final List<Customizer> customizers = manager.getCustomizers(ENGINE_NAME); return (customizers.isEmpty()) ? new GremlinGroovyScriptEngine() : new GremlinGroovyScriptEngine(customizers.toArray(new Customizer[customizers.size()])); } }
@Test public void shouldBeSameInstance() { final Set<GremlinScriptEngine> scriptEngines = new HashSet<>(); IntStream.range(0,100).forEach(i -> scriptEngines.add(manager.getEngineByName(ENGINE_TO_TEST))); assertEquals(1, scriptEngines.size()); }
@Test public void shouldExtractGlobalBindingsAfterScriptExecution() throws Exception { assumeThat("Only works with gremlin-groovy", ENGINE_TO_TEST, is("gremlin-groovy")); final GremlinScriptEngineManager manager = new DefaultGremlinScriptEngineManager(); final Bindings b1 = new SimpleBindings(); b1.put("x", 1); b1.put("y", 2); manager.addPlugin(BindingsGremlinPlugin.build().bindings(b1).create()); final Bindings b2 = new SimpleBindings(); b2.put("x", 100); b2.put("y", 200); manager.addPlugin(BindingsGremlinPlugin.build().bindings(b2).create()); final File scriptFile = TestHelper.generateTempFileFromResource(BindingsScriptEngineTest.class, "bindings-init.groovy", ".groovy"); final List<String> files = new ArrayList<>(); files.add(scriptFile.getAbsolutePath()); manager.addPlugin(ScriptFileGremlinPlugin.build().files(files).create()); final GremlinScriptEngine engine = manager.getEngineByName(ENGINE_TO_TEST); assertEquals(100, engine.eval("x")); assertEquals(200, engine.eval("y")); assertEquals(300, engine.eval("z")); assertEquals(600, engine.eval("addItUp(z, addItUp(x,y))")); assertEquals(300, engine.getBindings(ScriptContext.GLOBAL_SCOPE).get("z")); assertThat(engine.getBindings(ScriptContext.ENGINE_SCOPE).containsKey("z"), is(false)); } }
/** * Attempts to compile a script and cache it in the request {@link javax.script.ScriptEngine}. This is only * possible if the {@link javax.script.ScriptEngine} implementation implements {@link Compilable}. * In the event that the requested {@link javax.script.ScriptEngine} does not implement it, the method will * return empty. */ public Optional<CompiledScript> compile(final String script, final Optional<String> language) throws ScriptException { final String lang = language.orElse("gremlin-groovy"); try { final GremlinScriptEngine scriptEngine = gremlinScriptEngineManager.getEngineByName(lang); if (scriptEngine instanceof Compilable) return Optional.of(((Compilable) scriptEngine).compile(script)); else return Optional.empty(); } catch (UnsupportedOperationException uoe) { return Optional.empty(); } }