]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.ui.rap/src/org/argeo/cms/web/SimpleErgonomics.java
[maven-release-plugin] prepare release argeo-commons-2.1.100
[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.cms.CmsException;
13 import org.argeo.cms.ui.CmsImageManager;
14 import org.argeo.cms.ui.CmsStyles;
15 import org.argeo.cms.ui.CmsUiProvider;
16 import org.argeo.cms.ui.UxContext;
17 import org.argeo.cms.ui.util.CmsUiUtils;
18 import org.argeo.cms.ui.util.DefaultImageManager;
19 import org.argeo.cms.ui.util.SimpleUxContext;
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(CmsUiUtils.noSpaceGridLayout(new GridLayout(3, false)));
66
67 uxContext = new SimpleUxContext();
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(CmsUiUtils.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(CmsUiUtils.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(CmsUiUtils.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 CmsUiUtils.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(CmsUiUtils.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 @Override
192 public CmsImageManager getImageManager() {
193 return imageManager;
194 }
195
196 public void setHeader(CmsUiProvider header) {
197 this.header = header;
198 }
199
200 public void setHeaderHeight(Integer headerHeight) {
201 this.headerHeight = headerHeight;
202 }
203
204 public void setImageManager(CmsImageManager imageManager) {
205 this.imageManager = imageManager;
206 }
207
208 public CmsUiProvider getLead() {
209 return lead;
210 }
211
212 public void setLead(CmsUiProvider lead) {
213 this.lead = lead;
214 }
215
216 public CmsUiProvider getEnd() {
217 return end;
218 }
219
220 public void setEnd(CmsUiProvider end) {
221 this.end = end;
222 }
223
224 public CmsUiProvider getFooter() {
225 return footer;
226 }
227
228 public void setFooter(CmsUiProvider footer) {
229 this.footer = footer;
230 }
231
232 public CmsUiProvider getHeader() {
233 return header;
234 }
235
236 public void setFooterHeight(Integer footerHeight) {
237 this.footerHeight = footerHeight;
238 }
239
240 }