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