/** * @see de.matrixweb.smaller.javascript.JavaScriptExecutor#addGlobalFunction(java.lang.String, * java.lang.Object) */ @Override public void addGlobalFunction(final String name, final Object object) { addGlobalFunction(name, object, name); }
/** * @see de.matrixweb.smaller.javascript.JavaScriptExecutor#addScriptFile(java.net.URL) */ @Override public void addScriptFile(final URL url) { try { addScriptSource(IOUtils.toString(url), url.getFile()); } catch (final IOException e) { throw new SmallerException("Failed to include script file", e); } }
/** * @param name * @param optimizationLevel * @param clazz */ public JavaScriptExecutorFast(final String name, final int optimizationLevel, final Class<?> clazz) { try { LOGGER.info("Try v8 executor"); this.executor = new JavaScriptExecutorV8(name, clazz); } catch (final NoClassDefFoundError e) { LOGGER.info("Fallback to rhino executor"); this.executor = new JavaScriptExecutorRhino(name, optimizationLevel, clazz); } catch (final UnsatisfiedLinkError e) { LOGGER.info("Fallback to rhino executor"); this.executor = new JavaScriptExecutorRhino(name, optimizationLevel, clazz); } }
/** * @see de.matrixweb.smaller.javascript.JavaScriptExecutor#addScriptFile(java.lang.String) */ @Override public void addScriptFile(final String file) { final InputStream script = getClass().getResourceAsStream(file); try { addScriptSource(IOUtils.toString(script), file); } catch (final IOException e) { throw new SmallerException("Failed to include script file", e); } finally { if (script != null) { IOUtils.closeQuietly(script); } } }
/** * @param name * @param clazz */ public JavaScriptExecutorV8(final String name, final Class<?> clazz) { this.engine = new NativeEngine(new StringFunctor("require") { @Override public String call(final String require) { final String module = "/" + name + "/" + require + ".js"; try { final InputStream in = clazz.getResourceAsStream(module); if (in == null) { throw new SmallerException("Failed to find required module: " + module); } try { return IOUtils.toString(in); } finally { in.close(); } } catch (final IOException e) { throw new SmallerException("Failed to find required module: " + module, e); } } }); addGlobalFunction("print", LOGGER, "info"); }