1 package org
.argeo
.cms
.web
;
7 import javax
.jcr
.Repository
;
8 import javax
.jcr
.RepositoryException
;
10 import org
.argeo
.api
.cms
.CmsLog
;
11 import org
.argeo
.api
.cms
.ux
.CmsImageManager
;
12 import org
.argeo
.api
.cms
.ux
.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
;
28 /** Simple header/body ergonomics. */
30 public class SimpleErgonomics
extends AbstractCmsEntryPoint
{
31 private static final long serialVersionUID
= 8743413921359548523L;
33 private final static CmsLog log
= CmsLog
.getLog(SimpleErgonomics
.class);
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
;
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
;
50 private CmsImageManager imageManager
= new DefaultImageManager();
51 private UxContext uxContext
= null;
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
;
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)));
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
);
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());
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());
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());
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
);
101 protected void refresh() {
104 if (getState() == null)
108 if (log
.isTraceEnabled())
109 log
.trace("UI refreshed " + getNode());
112 protected void createAdminArea(Composite parent
) {
116 protected void refreshHeader() {
120 for (Control child
: headerArea
.getChildren())
123 header
.createUi(headerArea
, getNode());
124 } catch (RepositoryException e
) {
125 throw new CmsException("Cannot refresh header", e
);
127 headerArea
.layout(true, true);
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
);
137 private void refresh(Composite area
, CmsUiProvider uiProvider
, String style
) {
138 if (uiProvider
== null)
141 for (Control child
: area
.getChildren())
143 CmsSwtUtils
.style(area
, style
);
145 uiProvider
.createUi(area
, getNode());
146 } catch (RepositoryException e
) {
147 throw new CmsException("Cannot refresh header", e
);
149 area
.layout(true, true);
152 protected void refreshBody() {
154 Throwable exception
= getException();
155 if (exception
!= null) {
156 SystemNotifications systemNotifications
= new SystemNotifications(bodyArea
);
157 systemNotifications
.notifyException(exception
);
164 for (Control child
: bodyArea
.getChildren())
166 bodyArea
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
169 Node node
= getNode();
171 // log.error("Context cannot be null");
173 uiProvider
.createUi(bodyArea
, node
);
174 } catch (RepositoryException e
) {
175 throw new CmsException("Cannot refresh body", e
);
178 bodyArea
.layout(true, true);
182 public UxContext
getUxContext() {
186 public String
getUid() {
190 public CmsImageManager
getImageManager() {
194 public void setHeader(CmsUiProvider header
) {
195 this.header
= header
;
198 public void setHeaderHeight(Integer headerHeight
) {
199 this.headerHeight
= headerHeight
;
202 public void setImageManager(CmsImageManager imageManager
) {
203 this.imageManager
= imageManager
;
206 public CmsUiProvider
getLead() {
210 public void setLead(CmsUiProvider lead
) {
214 public CmsUiProvider
getEnd() {
218 public void setEnd(CmsUiProvider end
) {
222 public CmsUiProvider
getFooter() {
226 public void setFooter(CmsUiProvider footer
) {
227 this.footer
= footer
;
230 public CmsUiProvider
getHeader() {
234 public void setFooterHeight(Integer footerHeight
) {
235 this.footerHeight
= footerHeight
;