1 package org
.argeo
.cms
.ui
.script
;
6 import javax
.jcr
.RepositoryException
;
7 import javax
.script
.Invocable
;
8 import javax
.script
.ScriptEngine
;
9 import javax
.script
.ScriptException
;
11 import org
.argeo
.api
.cms
.CmsLog
;
12 import org
.argeo
.cms
.ui
.CmsUiProvider
;
13 import org
.eclipse
.swt
.widgets
.Composite
;
14 import org
.eclipse
.swt
.widgets
.Control
;
15 import org
.osgi
.framework
.BundleContext
;
17 class ScriptUi
implements CmsUiProvider
{
18 private final static CmsLog log
= CmsLog
.getLog(ScriptUi
.class);
20 private boolean development
= true;
21 private ScriptEngine scriptEngine
;
24 // private BundleContext bundleContext;
25 // private String path;
27 // private Bindings bindings;
28 // private String script;
30 public ScriptUi(BundleContext bundleContext
,ScriptEngine scriptEngine
, String path
) {
31 this.scriptEngine
= scriptEngine
;
32 //// ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
33 // ClassLoader bundleCl = bundleContext.getBundle().adapt(BundleWiring.class).getClassLoader();
34 // ClassLoader originalCcl = Thread.currentThread().getContextClassLoader();
36 //// Thread.currentThread().setContextClassLoader(bundleCl);
37 //// scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
38 //// scriptEngine.put(CmsScriptRwtApplication.BC, bundleContext);
39 // scriptEngine = CmsScriptRwtApplication.loadScriptEngine(originalCcl, bundleCl);
41 // } catch (Exception e) {
42 // e.printStackTrace();
44 // Thread.currentThread().setContextClassLoader(originalCcl);
46 this.appUrl
= bundleContext
.getBundle().getEntry(path
);
51 // try (Reader reader = new InputStreamReader(appUrl.openStream())) {
52 // scriptEngine.eval(reader);
53 // } catch (IOException | ScriptException e) {
54 // log.warn("Cannot execute " + appUrl, e);
58 scriptEngine
.eval("load('" + appUrl
+ "')");
59 } catch (ScriptException e
) {
60 log
.warn("Cannot execute " + appUrl
, e
);
65 // public ScriptUiProvider(ScriptEngine scriptEngine, String script) throws
68 // this.scriptEngine = scriptEngine;
69 // this.script = script;
70 // bindings = scriptEngine.createBindings();
71 // scriptEngine.eval(script, bindings);
75 public Control
createUi(Composite parent
, Node context
) throws RepositoryException
{
76 long begin
= System
.currentTimeMillis();
77 // if (bindings == null) {
78 // bindings = scriptEngine.createBindings();
80 // scriptEngine.eval(script, bindings);
81 // } catch (ScriptException e) {
82 // log.warn("Cannot evaluate script", e);
85 // Bindings bindings = scriptEngine.createBindings();
86 // bindings.put("parent", parent);
87 // bindings.put("context", context);
88 // URL appUrl = bundleContext.getBundle().getEntry(path);
89 // try (Reader reader = new InputStreamReader(appUrl.openStream())) {
90 // scriptEngine.eval(reader,bindings);
91 // } catch (IOException | ScriptException e) {
92 // log.warn("Cannot execute " + appUrl, e);
98 Invocable invocable
= (Invocable
) scriptEngine
;
100 invocable
.invokeFunction("createUi", parent
, context
);
101 } catch (NoSuchMethodException e
) {
102 // TODO Auto-generated catch block
104 } catch (ScriptException e
) {
105 // TODO Auto-generated catch block
109 long duration
= System
.currentTimeMillis() - begin
;
110 if (log
.isTraceEnabled())
111 log
.trace(appUrl
+ " UI in " + duration
+ " ms");