]> git.argeo.org Git - lgpl/argeo-commons.git/blob - SimpleErgonomics.java
b7b76e4e686e05bbfc1b91875733abe8cd1dd471
[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 // createAdminArea(parent);
54 headerArea = new Composite(parent, SWT.NONE);
55 headerArea.setLayout(new FillLayout());
56 GridData headerData = new GridData(SWT.FILL, SWT.FILL, false, false);
57 headerData.heightHint = headerHeight;
58 headerArea.setLayoutData(headerData);
59
60 bodyArea = new Composite(parent, SWT.NONE);
61 bodyArea.setData(RWT.CUSTOM_VARIANT, CmsStyles.CMS_BODY);
62 bodyArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
63 bodyArea.setLayout(CmsUtils.noSpaceGridLayout());
64 uxContext = new SimpleUxContext();
65 uiInitialized = true;
66 refresh();
67 }
68
69 @Override
70 protected void refresh() {
71 if (!uiInitialized)
72 return;
73 if (getState() == null)
74 setState("");
75 refreshHeader();
76 refreshBody();
77 if (log.isTraceEnabled())
78 log.trace("UI refreshed " + getNode());
79 }
80
81 protected void createAdminArea(Composite parent) {
82 }
83
84 protected void refreshHeader() {
85 for (Control child : headerArea.getChildren())
86 child.dispose();
87 try {
88 header.createUi(headerArea, getNode());
89 } catch (RepositoryException e) {
90 throw new CmsException("Cannot refresh header", e);
91 }
92 headerArea.layout(true, true);
93 }
94
95 protected void refreshBody() {
96 // Exception
97 Throwable exception = getException();
98 if (exception != null) {
99 SystemNotifications systemNotifications = new SystemNotifications(bodyArea);
100 systemNotifications.notifyException(exception);
101 resetException();
102 return;
103 // TODO report
104 }
105
106 // clear
107 for (Control child : bodyArea.getChildren())
108 child.dispose();
109 bodyArea.setLayout(CmsUtils.noSpaceGridLayout());
110
111 try {
112 Node node = getNode();
113 if (node == null)
114 log.error("Context cannot be null");
115 else
116 uiProvider.createUi(bodyArea, node);
117 } catch (RepositoryException e) {
118 throw new CmsException("Cannot refresh body", e);
119 }
120
121 bodyArea.layout(true, true);
122 }
123
124 @Override
125 public UxContext getUxContext() {
126 return uxContext;
127 }
128
129 @Override
130 public CmsImageManager getImageManager() {
131 return imageManager;
132 }
133
134 public void setHeader(CmsUiProvider header) {
135 this.header = header;
136 }
137
138 public void setHeaderHeight(Integer headerHeight) {
139 this.headerHeight = headerHeight;
140 }
141
142 public void setImageManager(CmsImageManager imageManager) {
143 this.imageManager = imageManager;
144 }
145 }