1 package org
.argeo
.cms
.script
;
6 import javax
.jcr
.RepositoryException
;
7 import javax
.script
.Invocable
;
8 import javax
.script
.ScriptEngine
;
9 import javax
.script
.ScriptException
;
11 import org
.apache
.commons
.logging
.Log
;
12 import org
.apache
.commons
.logging
.LogFactory
;
13 import org
.argeo
.cms
.ui
.CmsUiProvider
;
14 import org
.eclipse
.swt
.widgets
.Composite
;
15 import org
.eclipse
.swt
.widgets
.Control
;
16 import org
.osgi
.framework
.BundleContext
;
18 class ScriptUi
implements CmsUiProvider
{
19 private final static Log log
= LogFactory
.getLog(ScriptUi
.class);
21 private boolean development
= true;
22 private ScriptEngine scriptEngine
;
25 // private BundleContext bundleContext;
26 // private String path;
28 // private Bindings bindings;
29 // private String script;
31 public ScriptUi(BundleContext bundleContext
,ScriptEngine scriptEngine
, String path
) {
32 this.scriptEngine
= scriptEngine
;
33 //// ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
34 // ClassLoader bundleCl = bundleContext.getBundle().adapt(BundleWiring.class).getClassLoader();
35 // ClassLoader originalCcl = Thread.currentThread().getContextClassLoader();
37 //// Thread.currentThread().setContextClassLoader(bundleCl);
38 //// scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
39 //// scriptEngine.put(CmsScriptRwtApplication.BC, bundleContext);
40 // scriptEngine = CmsScriptRwtApplication.loadScriptEngine(originalCcl, bundleCl);
42 // } catch (Exception e) {
43 // e.printStackTrace();
45 // Thread.currentThread().setContextClassLoader(originalCcl);
47 this.appUrl
= bundleContext
.getBundle().getEntry(path
);
52 // try (Reader reader = new InputStreamReader(appUrl.openStream())) {
53 // scriptEngine.eval(reader);
54 // } catch (IOException | ScriptException e) {
55 // log.warn("Cannot execute " + appUrl, e);
59 scriptEngine
.eval("load('" + appUrl
+ "')");
60 } catch (ScriptException e
) {
61 log
.warn("Cannot execute " + appUrl
, e
);
66 // public ScriptUiProvider(ScriptEngine scriptEngine, String script) throws
69 // this.scriptEngine = scriptEngine;
70 // this.script = script;
71 // bindings = scriptEngine.createBindings();
72 // scriptEngine.eval(script, bindings);
76 public Control
createUi(Composite parent
, Node context
) throws RepositoryException
{
77 long begin
= System
.currentTimeMillis();
78 // if (bindings == null) {
79 // bindings = scriptEngine.createBindings();
81 // scriptEngine.eval(script, bindings);
82 // } catch (ScriptException e) {
83 // log.warn("Cannot evaluate script", e);
86 // Bindings bindings = scriptEngine.createBindings();
87 // bindings.put("parent", parent);
88 // bindings.put("context", context);
89 // URL appUrl = bundleContext.getBundle().getEntry(path);
90 // try (Reader reader = new InputStreamReader(appUrl.openStream())) {
91 // scriptEngine.eval(reader,bindings);
92 // } catch (IOException | ScriptException e) {
93 // log.warn("Cannot execute " + appUrl, e);
99 Invocable invocable
= (Invocable
) scriptEngine
;
101 invocable
.invokeFunction("createUi", parent
, context
);
102 } catch (NoSuchMethodException e
) {
103 // TODO Auto-generated catch block
105 } catch (ScriptException e
) {
106 // TODO Auto-generated catch block
110 long duration
= System
.currentTimeMillis() - begin
;
111 if (log
.isTraceEnabled())
112 log
.trace(appUrl
+ " UI in " + duration
+ " ms");