X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.ui.rap%2Fsrc%2Forg%2Fargeo%2Fcms%2Fui%2Fscript%2FScriptUi.java;fp=org.argeo.cms.ui.rap%2Fsrc%2Forg%2Fargeo%2Fcms%2Fui%2Fscript%2FScriptUi.java;h=bf68fc29984817b3dd1321f7a9fa1c3d45d41206;hb=94bd4b03ff3ca9d1875bf6424383d648e604b93a;hp=0000000000000000000000000000000000000000;hpb=0c9de3a0cbb02716f792ebed542b67f0edbe1f4b;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.ui.rap/src/org/argeo/cms/ui/script/ScriptUi.java b/org.argeo.cms.ui.rap/src/org/argeo/cms/ui/script/ScriptUi.java new file mode 100644 index 000000000..bf68fc299 --- /dev/null +++ b/org.argeo.cms.ui.rap/src/org/argeo/cms/ui/script/ScriptUi.java @@ -0,0 +1,116 @@ +package org.argeo.cms.ui.script; + +import java.net.URL; + +import javax.jcr.Node; +import javax.jcr.RepositoryException; +import javax.script.Invocable; +import javax.script.ScriptEngine; +import javax.script.ScriptException; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.argeo.cms.ui.CmsUiProvider; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.osgi.framework.BundleContext; + +class ScriptUi implements CmsUiProvider { + private final static Log log = LogFactory.getLog(ScriptUi.class); + + private boolean development = true; + private ScriptEngine scriptEngine; + + private URL appUrl; + // private BundleContext bundleContext; + // private String path; + + // private Bindings bindings; + // private String script; + + public ScriptUi(BundleContext bundleContext,ScriptEngine scriptEngine, String path) { + this.scriptEngine = scriptEngine; +//// ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); +// ClassLoader bundleCl = bundleContext.getBundle().adapt(BundleWiring.class).getClassLoader(); +// ClassLoader originalCcl = Thread.currentThread().getContextClassLoader(); +// try { +//// Thread.currentThread().setContextClassLoader(bundleCl); +//// scriptEngine = scriptEngineManager.getEngineByName("JavaScript"); +//// scriptEngine.put(CmsScriptRwtApplication.BC, bundleContext); +// scriptEngine = CmsScriptRwtApplication.loadScriptEngine(originalCcl, bundleCl); +// +// } catch (Exception e) { +// e.printStackTrace(); +// } finally { +// Thread.currentThread().setContextClassLoader(originalCcl); +// } + this.appUrl = bundleContext.getBundle().getEntry(path); + load(); + } + + private void load() { +// try (Reader reader = new InputStreamReader(appUrl.openStream())) { +// scriptEngine.eval(reader); +// } catch (IOException | ScriptException e) { +// log.warn("Cannot execute " + appUrl, e); +// } + + try { + scriptEngine.eval("load('" + appUrl + "')"); + } catch (ScriptException e) { + log.warn("Cannot execute " + appUrl, e); + } + + } + + // public ScriptUiProvider(ScriptEngine scriptEngine, String script) throws + // ScriptException { + // super(); + // this.scriptEngine = scriptEngine; + // this.script = script; + // bindings = scriptEngine.createBindings(); + // scriptEngine.eval(script, bindings); + // } + + @Override + public Control createUi(Composite parent, Node context) throws RepositoryException { + long begin = System.currentTimeMillis(); + // if (bindings == null) { + // bindings = scriptEngine.createBindings(); + // try { + // scriptEngine.eval(script, bindings); + // } catch (ScriptException e) { + // log.warn("Cannot evaluate script", e); + // } + // } + // Bindings bindings = scriptEngine.createBindings(); + // bindings.put("parent", parent); + // bindings.put("context", context); + // URL appUrl = bundleContext.getBundle().getEntry(path); + // try (Reader reader = new InputStreamReader(appUrl.openStream())) { + // scriptEngine.eval(reader,bindings); + // } catch (IOException | ScriptException e) { + // log.warn("Cannot execute " + appUrl, e); + // } + + if (development) + load(); + + Invocable invocable = (Invocable) scriptEngine; + try { + invocable.invokeFunction("createUi", parent, context); + } catch (NoSuchMethodException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (ScriptException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + long duration = System.currentTimeMillis() - begin; + if (log.isTraceEnabled()) + log.trace(appUrl + " UI in " + duration + " ms"); + return null; + } + +}