]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ui.rap/src/org/argeo/cms/web/SimpleErgonomics.java
Introduce CMS Servlet.
[lgpl/argeo-commons.git] / org.argeo.cms.ui.rap / src / org / argeo / cms / web / SimpleErgonomics.java
1 package org.argeo.cms.web;
2
3 import java.util.Map;
4 import java.util.UUID;
5
6 import javax.jcr.Node;
7 import javax.jcr.Repository;
8 import javax.jcr.RepositoryException;
9
10 import org.apache.commons.logging.Log;
11 import org.apache.commons.logging.LogFactory;
12 import org.argeo.api.cms.CmsImageManager;
13 import org.argeo.api.cms.UxContext;
14 import org.argeo.cms.CmsException;
15 import org.argeo.cms.swt.CmsStyles;
16 import org.argeo.cms.swt.CmsSwtUtils;
17 import org.argeo.cms.swt.SimpleSwtUxContext;
18 import org.argeo.cms.ui.CmsUiProvider;
19 import org.argeo.cms.ui.util.DefaultImageManager;
20 import org.argeo.cms.ui.util.SystemNotifications;
21 import org.eclipse.rap.rwt.RWT;
22 import org.eclipse.swt.SWT;
23 import org.eclipse.swt.layout.FillLayout;
24 import org.eclipse.swt.layout.GridData;
25 import org.eclipse.swt.layout.GridLayout;
26 import org.eclipse.swt.widgets.Composite;
27 import org.eclipse.swt.widgets.Control;
28
29 /** Simple header/body ergonomics. */
30 @Deprecated
31 public class SimpleErgonomics extends AbstractCmsEntryPoint {
32 private static final long serialVersionUID = 8743413921359548523L;
33
34 private final static Log log = LogFactory.getLog(SimpleErgonomics.class);
35
36 private boolean uiInitialized = false;
37 private Composite headerArea;
38 private Composite leftArea;
39 private Composite rightArea;
40 private Composite footerArea;
41 private Composite bodyArea;
42 private final CmsUiProvider uiProvider;
43
44 private CmsUiProvider header;
45 private Integer headerHeight = 0;
46 private Integer footerHeight = 0;
47 private CmsUiProvider lead;
48 private CmsUiProvider end;
49 private CmsUiProvider footer;
50
51 private CmsImageManager imageManager = new DefaultImageManager();
52 private UxContext uxContext = null;
53 private String uid;
54
55 public SimpleErgonomics(Repository repository, String workspace, String defaultPath, CmsUiProvider uiProvider,
56 Map<String, String> factoryProperties) {
57 super(repository, workspace, defaultPath, factoryProperties);
58 this.uiProvider = uiProvider;
59 }
60
61 @Override
62 protected void initUi(Composite parent) {
63 uid = UUID.randomUUID().toString();
64 parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
65 parent.setLayout(CmsSwtUtils.noSpaceGridLayout(new GridLayout(3, false)));
66
67 uxContext = new SimpleSwtUxContext();
68 if (!getUxContext().isMasterData())
69 createAdminArea(parent);
70 headerArea = new Composite(parent, SWT.NONE);
71 headerArea.setLayout(new FillLayout());
72 GridData headerData = new GridData(SWT.FILL, SWT.FILL, false, false, 3, 1);
73 headerData.heightHint = headerHeight;
74 headerArea.setLayoutData(headerData);
75
76 // TODO: bi-directional
77 leftArea = new Composite(parent, SWT.NONE);
78 leftArea.setLayoutData(new GridData(SWT.LEAD, SWT.TOP, false, false));
79 leftArea.setLayout(CmsSwtUtils.noSpaceGridLayout());
80
81 bodyArea = new Composite(parent, SWT.NONE);
82 bodyArea.setData(RWT.CUSTOM_VARIANT, CmsStyles.CMS_BODY);
83 bodyArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
84 bodyArea.setLayout(CmsSwtUtils.noSpaceGridLayout());
85
86 // TODO: bi-directional
87 rightArea = new Composite(parent, SWT.NONE);
88 rightArea.setLayoutData(new GridData(SWT.END, SWT.TOP, false, false));
89 rightArea.setLayout(CmsSwtUtils.noSpaceGridLayout());
90
91 footerArea = new Composite(parent, SWT.NONE);
92 // footerArea.setLayout(new FillLayout());
93 GridData footerData = new GridData(SWT.FILL, SWT.FILL, false, false, 3, 1);
94 footerData.heightHint = footerHeight;
95 footerArea.setLayoutData(footerData);
96
97 uiInitialized = true;
98 refresh();
99 }
100
101 @Override
102 protected void refresh() {
103 if (!uiInitialized)
104 return;
105 if (getState() == null)
106 setState("");
107 refreshSides();
108 refreshBody();
109 if (log.isTraceEnabled())
110 log.trace("UI refreshed " + getNode());
111 }
112
113 protected void createAdminArea(Composite parent) {
114 }
115
116 @Deprecated
117 protected void refreshHeader() {
118 if (header == null)
119 return;
120
121 for (Control child : headerArea.getChildren())
122 child.dispose();
123 try {
124 header.createUi(headerArea, getNode());
125 } catch (RepositoryException e) {
126 throw new CmsException("Cannot refresh header", e);
127 }
128 headerArea.layout(true, true);
129 }
130
131 protected void refreshSides() {
132 refresh(headerArea, header, CmsStyles.CMS_HEADER);
133 refresh(leftArea, lead, CmsStyles.CMS_LEAD);
134 refresh(rightArea, end, CmsStyles.CMS_END);
135 refresh(footerArea, footer, CmsStyles.CMS_FOOTER);
136 }
137
138 private void refresh(Composite area, CmsUiProvider uiProvider, String style) {
139 if (uiProvider == null)
140 return;
141
142 for (Control child : area.getChildren())
143 child.dispose();
144 CmsSwtUtils.style(area, style);
145 try {
146 uiProvider.createUi(area, getNode());
147 } catch (RepositoryException e) {
148 throw new CmsException("Cannot refresh header", e);
149 }
150 area.layout(true, true);
151 }
152
153 protected void refreshBody() {
154 // Exception
155 Throwable exception = getException();
156 if (exception != null) {
157 SystemNotifications systemNotifications = new SystemNotifications(bodyArea);
158 systemNotifications.notifyException(exception);
159 resetException();
160 return;
161 // TODO report
162 }
163
164 // clear
165 for (Control child : bodyArea.getChildren())
166 child.dispose();
167 bodyArea.setLayout(CmsSwtUtils.noSpaceGridLayout());
168
169 try {
170 Node node = getNode();
171 // if (node == null)
172 // log.error("Context cannot be null");
173 // else
174 uiProvider.createUi(bodyArea, node);
175 } catch (RepositoryException e) {
176 throw new CmsException("Cannot refresh body", e);
177 }
178
179 bodyArea.layout(true, true);
180 }
181
182 @Override
183 public UxContext getUxContext() {
184 return uxContext;
185 }
186 @Override
187 public String getUid() {
188 return uid;
189 }
190
191 public CmsImageManager getImageManager() {
192 return imageManager;
193 }
194
195 public void setHeader(CmsUiProvider header) {
196 this.header = header;
197 }
198
199 public void setHeaderHeight(Integer headerHeight) {
200 this.headerHeight = headerHeight;
201 }
202
203 public void setImageManager(CmsImageManager imageManager) {
204 this.imageManager = imageManager;
205 }
206
207 public CmsUiProvider getLead() {
208 return lead;
209 }
210
211 public void setLead(CmsUiProvider lead) {
212 this.lead = lead;
213 }
214
215 public CmsUiProvider getEnd() {
216 return end;
217 }
218
219 public void setEnd(CmsUiProvider end) {
220 this.end = end;
221 }
222
223 public CmsUiProvider getFooter() {
224 return footer;
225 }
226
227 public void setFooter(CmsUiProvider footer) {
228 this.footer = footer;
229 }
230
231 public CmsUiProvider getHeader() {
232 return header;
233 }
234
235 public void setFooterHeight(Integer footerHeight) {
236 this.footerHeight = footerHeight;
237 }
238
239 }