]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ui.rap/src/org/argeo/cms/ui/script/AppUi.java
Merge remote-tracking branch 'origin/v2.x'
[lgpl/argeo-commons.git] / org.argeo.cms.ui.rap / src / org / argeo / cms / ui / script / AppUi.java
1 package org.argeo.cms.ui.script;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 import javax.jcr.Node;
7 import javax.jcr.Repository;
8 import javax.jcr.RepositoryException;
9 import javax.script.Invocable;
10 import javax.script.ScriptException;
11
12 import org.argeo.api.NodeConstants;
13 import org.argeo.cms.ui.CmsUiProvider;
14 import org.argeo.cms.ui.util.CmsPane;
15 import org.argeo.cms.ui.util.CmsUiUtils;
16 import org.argeo.cms.web.SimpleErgonomics;
17 import org.argeo.eclipse.ui.Selected;
18 import org.eclipse.rap.rwt.RWT;
19 import org.eclipse.rap.rwt.application.Application;
20 import org.eclipse.rap.rwt.application.EntryPoint;
21 import org.eclipse.rap.rwt.application.EntryPointFactory;
22 import org.eclipse.rap.rwt.client.WebClient;
23 import org.eclipse.rap.rwt.client.service.JavaScriptExecutor;
24 import org.eclipse.swt.SWT;
25 import org.eclipse.swt.events.SelectionEvent;
26 import org.eclipse.swt.widgets.Button;
27 import org.eclipse.swt.widgets.Composite;
28 import org.eclipse.swt.widgets.Control;
29 import org.eclipse.swt.widgets.Label;
30 import org.osgi.framework.BundleContext;
31
32 public class AppUi implements CmsUiProvider, Branding {
33 private final CmsScriptApp app;
34
35 private CmsUiProvider ui;
36 private String createUi;
37 private Object impl;
38 private String script;
39 // private Branding branding = new Branding();
40
41 private EntryPointFactory factory;
42
43 // Branding
44 private String themeId;
45 private String additionalHeaders;
46 private String bodyHtml;
47 private String pageTitle;
48 private String pageOverflow;
49 private String favicon;
50
51 public AppUi(CmsScriptApp app) {
52 this.app = app;
53 }
54
55 public AppUi(CmsScriptApp app, String scriptPath) {
56 this.app = app;
57 this.ui = new ScriptUi((BundleContext) app.getScriptEngine().get(CmsScriptRwtApplication.BC),
58 app.getScriptEngine(), scriptPath);
59 }
60
61 public AppUi(CmsScriptApp app, CmsUiProvider uiProvider) {
62 this.app = app;
63 this.ui = uiProvider;
64 }
65
66 public AppUi(CmsScriptApp app, EntryPointFactory factory) {
67 this.app = app;
68 this.factory = factory;
69 }
70
71 public void apply(Repository repository, Application application, Branding appBranding, String path) {
72 Map<String, String> factoryProperties = new HashMap<>();
73 if (appBranding != null)
74 appBranding.applyBranding(factoryProperties);
75 applyBranding(factoryProperties);
76 if (factory != null) {
77 application.addEntryPoint("/" + path, factory, factoryProperties);
78 } else {
79 EntryPointFactory entryPointFactory = new EntryPointFactory() {
80 @Override
81 public EntryPoint create() {
82 SimpleErgonomics ergonomics = new SimpleErgonomics(repository, NodeConstants.SYS_WORKSPACE,
83 "/home/root/argeo:keyring", AppUi.this, factoryProperties);
84 // CmsUiProvider header = app.getHeader();
85 // if (header != null)
86 // ergonomics.setHeader(header);
87 app.applySides(ergonomics);
88 Integer headerHeight = app.getHeaderHeight();
89 if (headerHeight != null)
90 ergonomics.setHeaderHeight(headerHeight);
91 return ergonomics;
92 }
93 };
94 application.addEntryPoint("/" + path, entryPointFactory, factoryProperties);
95 }
96 }
97
98 public void setUi(CmsUiProvider uiProvider) {
99 this.ui = uiProvider;
100 }
101
102 public void applyBranding(Map<String, String> properties) {
103 if (themeId != null)
104 properties.put(WebClient.THEME_ID, themeId);
105 if (additionalHeaders != null)
106 properties.put(WebClient.HEAD_HTML, additionalHeaders);
107 if (bodyHtml != null)
108 properties.put(WebClient.BODY_HTML, bodyHtml);
109 if (pageTitle != null)
110 properties.put(WebClient.PAGE_TITLE, pageTitle);
111 if (pageOverflow != null)
112 properties.put(WebClient.PAGE_OVERFLOW, pageOverflow);
113 if (favicon != null)
114 properties.put(WebClient.FAVICON, favicon);
115 }
116
117 // public Branding getBranding() {
118 // return branding;
119 // }
120
121 @Override
122 public Control createUi(Composite parent, Node context) throws RepositoryException {
123 CmsPane cmsPane = new CmsPane(parent, SWT.NONE);
124
125 if (false) {
126 // QA
127 CmsUiUtils.style(cmsPane.getQaArea(), "qa");
128 Button reload = new Button(cmsPane.getQaArea(), SWT.FLAT);
129 CmsUiUtils.style(reload, "qa");
130 reload.setText("Reload");
131 reload.addSelectionListener(new Selected() {
132 private static final long serialVersionUID = 1L;
133
134 @Override
135 public void widgetSelected(SelectionEvent e) {
136 new Thread() {
137 @Override
138 public void run() {
139 app.reload();
140 }
141 }.start();
142 RWT.getClient().getService(JavaScriptExecutor.class)
143 .execute("setTimeout('location.reload()',1000)");
144 }
145 });
146
147 // Support
148 CmsUiUtils.style(cmsPane.getSupportArea(), "support");
149 Label msg = new Label(cmsPane.getSupportArea(), SWT.NONE);
150 CmsUiUtils.style(msg, "support");
151 msg.setText("UNSUPPORTED DEVELOPMENT VERSION");
152 }
153
154 if (ui != null) {
155 ui.createUi(cmsPane.getMainArea(), context);
156 }
157 if (createUi != null) {
158 Invocable invocable = (Invocable) app.getScriptEngine();
159 try {
160 invocable.invokeFunction(createUi, cmsPane.getMainArea(), context);
161
162 } catch (NoSuchMethodException e) {
163 // TODO Auto-generated catch block
164 e.printStackTrace();
165 } catch (ScriptException e) {
166 // TODO Auto-generated catch block
167 e.printStackTrace();
168 }
169 }
170 if (impl != null) {
171 Invocable invocable = (Invocable) app.getScriptEngine();
172 try {
173 invocable.invokeMethod(impl, "createUi", cmsPane.getMainArea(), context);
174
175 } catch (NoSuchMethodException e) {
176 // TODO Auto-generated catch block
177 e.printStackTrace();
178 } catch (ScriptException e) {
179 // TODO Auto-generated catch block
180 e.printStackTrace();
181 }
182 }
183
184 // Invocable invocable = (Invocable) app.getScriptEngine();
185 // try {
186 // invocable.invokeMethod(AppUi.this, "initUi", parent, context);
187 //
188 // } catch (NoSuchMethodException e) {
189 // // TODO Auto-generated catch block
190 // e.printStackTrace();
191 // } catch (ScriptException e) {
192 // // TODO Auto-generated catch block
193 // e.printStackTrace();
194 // }
195
196 return null;
197 }
198
199 public void setCreateUi(String createUi) {
200 this.createUi = createUi;
201 }
202
203 public void setImpl(Object impl) {
204 this.impl = impl;
205 }
206
207 public Object getImpl() {
208 return impl;
209 }
210
211 public String getScript() {
212 return script;
213 }
214
215 public void setScript(String script) {
216 this.script = script;
217 }
218
219 // Branding
220 public String getThemeId() {
221 return themeId;
222 }
223
224 public void setThemeId(String themeId) {
225 this.themeId = themeId;
226 }
227
228 public String getAdditionalHeaders() {
229 return additionalHeaders;
230 }
231
232 public void setAdditionalHeaders(String additionalHeaders) {
233 this.additionalHeaders = additionalHeaders;
234 }
235
236 public String getBodyHtml() {
237 return bodyHtml;
238 }
239
240 public void setBodyHtml(String bodyHtml) {
241 this.bodyHtml = bodyHtml;
242 }
243
244 public String getPageTitle() {
245 return pageTitle;
246 }
247
248 public void setPageTitle(String pageTitle) {
249 this.pageTitle = pageTitle;
250 }
251
252 public String getPageOverflow() {
253 return pageOverflow;
254 }
255
256 public void setPageOverflow(String pageOverflow) {
257 this.pageOverflow = pageOverflow;
258 }
259
260 public String getFavicon() {
261 return favicon;
262 }
263
264 public void setFavicon(String favicon) {
265 this.favicon = favicon;
266 }
267
268 }