1 package org
.argeo
.cms
.script
;
3 import java
.io
.IOException
;
4 import java
.io
.InputStreamReader
;
9 import javax
.jcr
.RepositoryException
;
10 import javax
.script
.Invocable
;
11 import javax
.script
.ScriptEngine
;
12 import javax
.script
.ScriptEngineManager
;
13 import javax
.script
.ScriptException
;
15 import org
.apache
.commons
.logging
.Log
;
16 import org
.apache
.commons
.logging
.LogFactory
;
17 import org
.argeo
.cms
.ui
.CmsUiProvider
;
18 import org
.eclipse
.swt
.widgets
.Composite
;
19 import org
.eclipse
.swt
.widgets
.Control
;
20 import org
.osgi
.framework
.BundleContext
;
21 import org
.osgi
.framework
.wiring
.BundleWiring
;
23 public class ScriptUi
implements CmsUiProvider
{
24 private final static Log log
= LogFactory
.getLog(ScriptUi
.class);
26 private boolean development
= true;
27 private ScriptEngine scriptEngine
;
30 // private BundleContext bundleContext;
31 // private String path;
33 // private Bindings bindings;
34 // private String script;
36 public ScriptUi(BundleContext bundleContext
, String path
) {
37 ScriptEngineManager scriptEngineManager
= new ScriptEngineManager();
38 ClassLoader bundleCl
= bundleContext
.getBundle().adapt(BundleWiring
.class).getClassLoader();
39 ClassLoader currentCcl
= Thread
.currentThread().getContextClassLoader();
41 Thread
.currentThread().setContextClassLoader(bundleCl
);
42 scriptEngine
= scriptEngineManager
.getEngineByName("JavaScript");
43 scriptEngine
.put(CmsScriptRwtApplication
.BC
, bundleContext
);
44 } catch (Exception e
) {
47 Thread
.currentThread().setContextClassLoader(currentCcl
);
49 this.appUrl
= bundleContext
.getBundle().getEntry(path
);
54 // try (Reader reader = new InputStreamReader(appUrl.openStream())) {
55 // scriptEngine.eval(reader);
56 // } catch (IOException | ScriptException e) {
57 // log.warn("Cannot execute " + appUrl, e);
61 scriptEngine
.eval("load('" + appUrl
+ "')");
62 } catch (ScriptException e
) {
63 log
.warn("Cannot execute " + appUrl
, e
);
68 // public ScriptUiProvider(ScriptEngine scriptEngine, String script) throws
71 // this.scriptEngine = scriptEngine;
72 // this.script = script;
73 // bindings = scriptEngine.createBindings();
74 // scriptEngine.eval(script, bindings);
78 public Control
createUi(Composite parent
, Node context
) throws RepositoryException
{
79 long begin
= System
.currentTimeMillis();
80 // if (bindings == null) {
81 // bindings = scriptEngine.createBindings();
83 // scriptEngine.eval(script, bindings);
84 // } catch (ScriptException e) {
85 // log.warn("Cannot evaluate script", e);
88 // Bindings bindings = scriptEngine.createBindings();
89 // bindings.put("parent", parent);
90 // bindings.put("context", context);
91 // URL appUrl = bundleContext.getBundle().getEntry(path);
92 // try (Reader reader = new InputStreamReader(appUrl.openStream())) {
93 // scriptEngine.eval(reader,bindings);
94 // } catch (IOException | ScriptException e) {
95 // log.warn("Cannot execute " + appUrl, e);
101 Invocable invocable
= (Invocable
) scriptEngine
;
103 invocable
.invokeFunction("createUi", parent
, context
);
104 } catch (NoSuchMethodException e
) {
105 // TODO Auto-generated catch block
107 } catch (ScriptException e
) {
108 // TODO Auto-generated catch block
112 long duration
= System
.currentTimeMillis() - begin
;
113 if (log
.isDebugEnabled())
114 log
.debug(appUrl
+ " UI in " + duration
+ " ms");