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