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