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
.ScriptEngineManager
;
10 import javax
.script
.ScriptException
;
12 import org
.apache
.commons
.logging
.Log
;
13 import org
.apache
.commons
.logging
.LogFactory
;
14 import org
.argeo
.cms
.ui
.CmsUiProvider
;
15 import org
.eclipse
.swt
.widgets
.Composite
;
16 import org
.eclipse
.swt
.widgets
.Control
;
17 import org
.osgi
.framework
.BundleContext
;
18 import org
.osgi
.framework
.wiring
.BundleWiring
;
20 public class ScriptUi
implements CmsUiProvider
{
21 private final static Log log
= LogFactory
.getLog(ScriptUi
.class);
23 private boolean development
= true;
24 private ScriptEngine scriptEngine
;
27 // private BundleContext bundleContext;
28 // private String path;
30 // private Bindings bindings;
31 // private String script;
33 public ScriptUi(BundleContext bundleContext
, String path
) {
34 ScriptEngineManager scriptEngineManager
= new ScriptEngineManager();
35 ClassLoader bundleCl
= bundleContext
.getBundle().adapt(BundleWiring
.class).getClassLoader();
36 ClassLoader currentCcl
= Thread
.currentThread().getContextClassLoader();
38 Thread
.currentThread().setContextClassLoader(bundleCl
);
39 scriptEngine
= scriptEngineManager
.getEngineByName("JavaScript");
40 scriptEngine
.put(CmsScriptRwtApplication
.BC
, bundleContext
);
41 } catch (Exception e
) {
44 Thread
.currentThread().setContextClassLoader(currentCcl
);
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");