@Test public void shouldRemoveGlobalBindings() throws Exception { final DefaultGremlinScriptEngineManager manager = new DefaultGremlinScriptEngineManager(); manager.put("x", 100); final GremlinScriptEngine engine1 = manager.getEngineByName(ENGINE_TO_TEST); assertThat(engine1.getBindings(ScriptContext.GLOBAL_SCOPE).size(), is(1)); assertEquals(101, (int) engine1.eval("x+1")); manager.getBindings().remove("x"); final GremlinScriptEngine engine2 = manager.getEngineByName(ENGINE_TO_TEST); assertThat(engine2.getBindings(ScriptContext.GLOBAL_SCOPE).size(), is(0)); }
@Test public void shouldAddLazyGlobalBindingsViaPlugin() throws Exception { final Bindings bindings = new SimpleBindings(); bindings.put("x", 100); final BindingsGremlinPlugin plugin = new BindingsGremlinPlugin(() -> bindings); final DefaultGremlinScriptEngineManager manager = new DefaultGremlinScriptEngineManager(); manager.addPlugin(plugin); final GremlinScriptEngine engine = manager.getEngineByName(ENGINE_TO_TEST); assertThat(engine.getBindings(ScriptContext.GLOBAL_SCOPE).size(), is(1)); assertEquals(101, (int) engine.eval("x+1")); }
final GremlinScriptEngineFactory spi = (GremlinScriptEngineFactory) obj; try { return createGremlinScriptEngine(spi); } catch (Exception exp) { logger.error(String.format("Could not create GremlinScriptEngine for %s", shortName), exp); if (shortName.equals(name)) { try { return createGremlinScriptEngine(spi); } catch (Exception exp) { logger.error(String.format("Could not create GremlinScriptEngine for %s", shortName), exp);
getCustomizers(spi.getEngineName()).stream() .filter(p -> p instanceof BindingsCustomizer) .map(p -> ((BindingsCustomizer) p)) engine.setBindings(getBindings(), ScriptContext.GLOBAL_SCOPE); getCustomizers(spi.getEngineName()).stream() .filter(p -> p instanceof BindingsCustomizer) .map(p -> ((BindingsCustomizer) p)) .forEach(bc -> engine.getBindings(ScriptContext.ENGINE_SCOPE).putAll(bc.getBindings())); final List<ScriptCustomizer> scriptCustomizers = getCustomizers(spi.getEngineName()).stream() .filter(p -> p instanceof ScriptCustomizer) .map(p -> ((ScriptCustomizer) p)) ((Map<String,Object>) initializedBindings).forEach((k,v) -> put(k,v)); } catch (Exception ex) { throw new IllegalStateException(ex);
@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()); }
/** * Gets a {@link GremlinScriptEngine} from cache or creates a new one from the {@link GremlinScriptEngineFactory}. * <p/> * {@inheritDoc} */ @Override public GremlinScriptEngine getEngineByExtension(final String extension) { if (!extensionToName.containsKey(extension)) { final GremlinScriptEngine engine = super.getEngineByExtension(extension); registerLookUpInfo(engine, engine.getFactory().getEngineName()); return engine; } return cache.get(extensionToName.get(extension)); }
/** * Gets a {@link GremlinScriptEngine} from cache or creates a new one from the {@link GremlinScriptEngineFactory}. * <p/> * {@inheritDoc} */ @Override public GremlinScriptEngine getEngineByMimeType(final String mimeType) { if (!mimeToName.containsKey(mimeType)) { final GremlinScriptEngine engine = super.getEngineByMimeType(mimeType); registerLookUpInfo(engine, engine.getFactory().getEngineName()); return engine; } return cache.get(mimeToName.get(mimeType)); }
private void initEngines(final ClassLoader loader) { Iterator<GremlinScriptEngineFactory> itty; try { final ServiceLoader<GremlinScriptEngineFactory> sl = AccessController.doPrivileged( (PrivilegedAction<ServiceLoader<GremlinScriptEngineFactory>>) () -> getServiceLoader(loader)); itty = sl.iterator(); } catch (ServiceConfigurationError err) { logger.error("Can't find GremlinScriptEngineFactory providers: " + err.getMessage(), err); // do not throw any exception here. user may want to manager their own factories using this manager // by explicit registration (by registerXXX) methods. return; } try { while (itty.hasNext()) { try { final GremlinScriptEngineFactory factory = itty.next(); factory.setCustomizerManager(this); engineSpis.add(factory); } catch (ServiceConfigurationError err) { logger.error("GremlinScriptEngineManager providers.next(): " + err.getMessage(), err); } } } catch (ServiceConfigurationError err) { logger.error("GremlinScriptEngineManager providers.hasNext(): " + err.getMessage(), err); // do not throw any exception here. user may want to manage their own factories using this manager // by explicit registration (by registerXXX) methods. } }
getCustomizers(spi.getEngineName()).stream() .filter(p -> p instanceof BindingsCustomizer) .map(p -> ((BindingsCustomizer) p)) engine.setBindings(getBindings(), ScriptContext.GLOBAL_SCOPE); getCustomizers(spi.getEngineName()).stream() .filter(p -> p instanceof BindingsCustomizer) .map(p -> ((BindingsCustomizer) p)) .forEach(bc -> engine.getBindings(ScriptContext.ENGINE_SCOPE).putAll(bc.getBindings())); final List<ScriptCustomizer> scriptCustomizers = getCustomizers(spi.getEngineName()).stream() .filter(p -> p instanceof ScriptCustomizer) .map(p -> ((ScriptCustomizer) p)) ((Map<String,Object>) initializedBindings).forEach((k,v) -> put(k,v)); } catch (Exception ex) { throw new IllegalStateException(ex);
@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")); }
/** * Gets a {@link GremlinScriptEngine} from cache or creates a new one from the {@link GremlinScriptEngineFactory}. * <p/> * {@inheritDoc} */ @Override public GremlinScriptEngine getEngineByExtension(final String extension) { if (!extensionToName.containsKey(extension)) { final GremlinScriptEngine engine = super.getEngineByExtension(extension); registerLookUpInfo(engine, engine.getFactory().getEngineName()); return engine; } return cache.get(extensionToName.get(extension)); }
/** * Gets a {@link GremlinScriptEngine} from cache or creates a new one from the {@link GremlinScriptEngineFactory}. * <p/> * {@inheritDoc} */ @Override public GremlinScriptEngine getEngineByMimeType(final String mimeType) { if (!mimeToName.containsKey(mimeType)) { final GremlinScriptEngine engine = super.getEngineByMimeType(mimeType); registerLookUpInfo(engine, engine.getFactory().getEngineName()); return engine; } return cache.get(mimeToName.get(mimeType)); }
private void initEngines(final ClassLoader loader) { Iterator<GremlinScriptEngineFactory> itty; try { final ServiceLoader<GremlinScriptEngineFactory> sl = AccessController.doPrivileged( (PrivilegedAction<ServiceLoader<GremlinScriptEngineFactory>>) () -> getServiceLoader(loader)); itty = sl.iterator(); } catch (ServiceConfigurationError err) { logger.error("Can't find GremlinScriptEngineFactory providers: " + err.getMessage(), err); // do not throw any exception here. user may want to manager their own factories using this manager // by explicit registration (by registerXXX) methods. return; } try { while (itty.hasNext()) { try { final GremlinScriptEngineFactory factory = itty.next(); factory.setCustomizerManager(this); engineSpis.add(factory); } catch (ServiceConfigurationError err) { logger.error("GremlinScriptEngineManager providers.next(): " + err.getMessage(), err); } } } catch (ServiceConfigurationError err) { logger.error("GremlinScriptEngineManager providers.hasNext(): " + err.getMessage(), err); // do not throw any exception here. user may want to manage their own factories using this manager // by explicit registration (by registerXXX) methods. } }
@Test public void shouldRemoveGlobalBindings() throws Exception { final DefaultGremlinScriptEngineManager manager = new DefaultGremlinScriptEngineManager(); manager.put("x", 100); final GremlinScriptEngine engine1 = manager.getEngineByName(ENGINE_TO_TEST); assertThat(engine1.getBindings(ScriptContext.GLOBAL_SCOPE).size(), is(1)); assertEquals(101, (int) engine1.eval("x+1")); manager.getBindings().remove("x"); final GremlinScriptEngine engine2 = manager.getEngineByName(ENGINE_TO_TEST); assertThat(engine2.getBindings(ScriptContext.GLOBAL_SCOPE).size(), is(0)); }
@Test public void shouldAddLazyGlobalBindingsViaPlugin() throws Exception { final Bindings bindings = new SimpleBindings(); bindings.put("x", 100); final BindingsGremlinPlugin plugin = new BindingsGremlinPlugin(() -> bindings); final DefaultGremlinScriptEngineManager manager = new DefaultGremlinScriptEngineManager(); manager.addPlugin(plugin); final GremlinScriptEngine engine = manager.getEngineByName(ENGINE_TO_TEST); assertThat(engine.getBindings(ScriptContext.GLOBAL_SCOPE).size(), is(1)); assertEquals(101, (int) engine.eval("x+1")); }
@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)); } }
final GremlinScriptEngineFactory spi = (GremlinScriptEngineFactory) obj; try { return createGremlinScriptEngine(spi); } catch (Exception exp) { logger.error(String.format("Could not create GremlinScriptEngine for %s", extension), exp); if (extension.equals(ext)) { try { return createGremlinScriptEngine(spi); } catch (Exception exp) { logger.error(String.format("Could not create GremlinScriptEngine for %s", extension), exp);
@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()); }
final GremlinScriptEngineFactory spi = (GremlinScriptEngineFactory) obj; try { return createGremlinScriptEngine(spi); } catch (Exception exp) { logger.error(String.format("Could not create GremlinScriptEngine for %s", mimeType), exp); if (mimeType.equals(type)) { try { return createGremlinScriptEngine(spi); } catch (Exception exp) { logger.error(String.format("Could not create GremlinScriptEngine for %s", mimeType), exp);
@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")); }