]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/util/SimpleErgonomics.java
[maven-release-plugin] prepare for next development iteration
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / util / SimpleErgonomics.java
1 package org.argeo.cms.util;
2
3 import java.util.Map;
4
5 import javax.jcr.Repository;
6 import javax.jcr.RepositoryException;
7
8 import org.apache.commons.logging.Log;
9 import org.apache.commons.logging.LogFactory;
10 import org.argeo.cms.AbstractCmsEntryPoint;
11 import org.argeo.cms.CmsException;
12 import org.argeo.cms.CmsImageManager;
13 import org.argeo.cms.CmsStyles;
14 import org.argeo.cms.CmsUiProvider;
15 import org.argeo.cms.internal.ImageManagerImpl;
16 import org.argeo.cms.ui.UxContext;
17 import org.eclipse.rap.rwt.RWT;
18 import org.eclipse.swt.SWT;
19 import org.eclipse.swt.layout.FillLayout;
20 import org.eclipse.swt.layout.GridData;
21 import org.eclipse.swt.widgets.Composite;
22 import org.eclipse.swt.widgets.Control;
23
24 /** Simple header/body ergonomics. */
25 public class SimpleErgonomics extends AbstractCmsEntryPoint {
26 private final static Log log = LogFactory.getLog(SimpleErgonomics.class);
27
28 private boolean uiInitialized = false;
29 private Composite headerArea;
30 private Composite bodyArea;
31 private final CmsUiProvider uiProvider;
32
33 private CmsUiProvider header;
34 private Integer headerHeight = 40;
35
36 private CmsImageManager imageManager = new ImageManagerImpl();
37 private UxContext uxContext = null;
38
39 public SimpleErgonomics(Repository repository, String workspace,
40 String defaultPath, CmsUiProvider uiProvider,
41 Map<String, String> factoryProperties) {
42 super(repository, workspace, defaultPath, factoryProperties);
43 this.uiProvider = uiProvider;
44 }
45
46 @Override
47 protected void initUi(Composite parent) {
48 parent.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
49 parent.setLayout(CmsUtils.noSpaceGridLayout());
50
51 // createAdminArea(parent);
52 headerArea = new Composite(parent, SWT.NONE);
53 headerArea.setLayout(new FillLayout());
54 GridData headerData = new GridData(SWT.FILL, SWT.FILL, false, false);
55 headerData.heightHint = headerHeight;
56 headerArea.setLayoutData(headerData);
57
58 bodyArea = new Composite(parent, SWT.NONE);
59 bodyArea.setData(RWT.CUSTOM_VARIANT, CmsStyles.CMS_BODY);
60 bodyArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
61 bodyArea.setLayout(CmsUtils.noSpaceGridLayout());
62 uxContext = new SimpleUxContext();
63 uiInitialized = true;
64 refresh();
65 }
66
67 @Override
68 protected void refresh() {
69 if (!uiInitialized)
70 return;
71 if (getState() == null)
72 setState("");
73 refreshHeader();
74 refreshBody();
75 if (log.isTraceEnabled())
76 log.trace("UI refreshed " + getNode());
77 }
78
79 protected void createAdminArea(Composite parent) {
80 }
81
82 protected void refreshHeader() {
83 for (Control child : headerArea.getChildren())
84 child.dispose();
85 try {
86 header.createUi(headerArea, getNode());
87 } catch (RepositoryException e) {
88 throw new CmsException("Cannot refresh header", e);
89 }
90 headerArea.layout(true, true);
91 }
92
93 protected void refreshBody() {
94 // Exception
95 Throwable exception = getException();
96 if (exception != null) {
97 SystemNotifications systemNotifications = new SystemNotifications(
98 bodyArea);
99 systemNotifications.notifyException(exception);
100 resetException();
101 return;
102 // TODO report
103 }
104
105 // clear
106 for (Control child : bodyArea.getChildren())
107 child.dispose();
108 bodyArea.setLayout(CmsUtils.noSpaceGridLayout());
109
110 try {
111 uiProvider.createUi(bodyArea, getNode());
112 } catch (RepositoryException e) {
113 throw new CmsException("Cannot refresh body", e);
114 }
115
116 bodyArea.layout(true, true);
117 }
118
119 @Override
120 public UxContext getUxContext() {
121 return uxContext;
122 }
123
124 @Override
125 public CmsImageManager getImageManager() {
126 return imageManager;
127 }
128
129 public void setHeader(CmsUiProvider header) {
130 this.header = header;
131 }
132
133 public void setHeaderHeight(Integer headerHeight) {
134 this.headerHeight = headerHeight;
135 }
136
137 public void setImageManager(CmsImageManager imageManager) {
138 this.imageManager = imageManager;
139 }
140 }