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