]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ui/src/org/argeo/cms/script/ScriptUi.java
Improve DocBook
[lgpl/argeo-commons.git] / org.argeo.cms.ui / src / org / argeo / cms / script / ScriptUi.java
1 package org.argeo.cms.script;
2
3 import java.net.URL;
4
5 import javax.jcr.Node;
6 import javax.jcr.RepositoryException;
7 import javax.script.Invocable;
8 import javax.script.ScriptEngine;
9 import javax.script.ScriptException;
10
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;
17
18 class ScriptUi implements CmsUiProvider {
19 private final static Log log = LogFactory.getLog(ScriptUi.class);
20
21 private boolean development = true;
22 private ScriptEngine scriptEngine;
23
24 private URL appUrl;
25 // private BundleContext bundleContext;
26 // private String path;
27
28 // private Bindings bindings;
29 // private String script;
30
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();
36 // try {
37 //// Thread.currentThread().setContextClassLoader(bundleCl);
38 //// scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
39 //// scriptEngine.put(CmsScriptRwtApplication.BC, bundleContext);
40 // scriptEngine = CmsScriptRwtApplication.loadScriptEngine(originalCcl, bundleCl);
41 //
42 // } catch (Exception e) {
43 // e.printStackTrace();
44 // } finally {
45 // Thread.currentThread().setContextClassLoader(originalCcl);
46 // }
47 this.appUrl = bundleContext.getBundle().getEntry(path);
48 load();
49 }
50
51 private void load() {
52 // try (Reader reader = new InputStreamReader(appUrl.openStream())) {
53 // scriptEngine.eval(reader);
54 // } catch (IOException | ScriptException e) {
55 // log.warn("Cannot execute " + appUrl, e);
56 // }
57
58 try {
59 scriptEngine.eval("load('" + appUrl + "')");
60 } catch (ScriptException e) {
61 log.warn("Cannot execute " + appUrl, e);
62 }
63
64 }
65
66 // public ScriptUiProvider(ScriptEngine scriptEngine, String script) throws
67 // ScriptException {
68 // super();
69 // this.scriptEngine = scriptEngine;
70 // this.script = script;
71 // bindings = scriptEngine.createBindings();
72 // scriptEngine.eval(script, bindings);
73 // }
74
75 @Override
76 public Control createUi(Composite parent, Node context) throws RepositoryException {
77 long begin = System.currentTimeMillis();
78 // if (bindings == null) {
79 // bindings = scriptEngine.createBindings();
80 // try {
81 // scriptEngine.eval(script, bindings);
82 // } catch (ScriptException e) {
83 // log.warn("Cannot evaluate script", e);
84 // }
85 // }
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);
94 // }
95
96 if (development)
97 load();
98
99 Invocable invocable = (Invocable) scriptEngine;
100 try {
101 invocable.invokeFunction("createUi", parent, context);
102 } catch (NoSuchMethodException e) {
103 // TODO Auto-generated catch block
104 e.printStackTrace();
105 } catch (ScriptException e) {
106 // TODO Auto-generated catch block
107 e.printStackTrace();
108 }
109
110 long duration = System.currentTimeMillis() - begin;
111 if (log.isTraceEnabled())
112 log.trace(appUrl + " UI in " + duration + " ms");
113 return null;
114 }
115
116 }