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