1 package org
.argeo
.cms
.util
;
6 import javax
.jcr
.Repository
;
7 import javax
.jcr
.RepositoryException
;
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
.layout
.GridLayout
;
23 import org
.eclipse
.swt
.widgets
.Composite
;
24 import org
.eclipse
.swt
.widgets
.Control
;
26 /** Simple header/body ergonomics. */
27 public class SimpleErgonomics
extends AbstractCmsEntryPoint
{
28 private static final long serialVersionUID
= 8743413921359548523L;
30 private final static Log log
= LogFactory
.getLog(SimpleErgonomics
.class);
32 private boolean uiInitialized
= false;
33 private Composite headerArea
;
34 private Composite leftArea
;
35 private Composite rightArea
;
36 private Composite footerArea
;
37 private Composite bodyArea
;
38 private final CmsUiProvider uiProvider
;
40 private CmsUiProvider header
;
41 private Integer headerHeight
= 0;
42 private Integer footerHeight
= 0;
43 private CmsUiProvider lead
;
44 private CmsUiProvider end
;
45 private CmsUiProvider footer
;
47 private CmsImageManager imageManager
= new ImageManagerImpl();
48 private UxContext uxContext
= null;
50 public SimpleErgonomics(Repository repository
, String workspace
, String defaultPath
, CmsUiProvider uiProvider
,
51 Map
<String
, String
> factoryProperties
) {
52 super(repository
, workspace
, defaultPath
, factoryProperties
);
53 this.uiProvider
= uiProvider
;
57 protected void initUi(Composite parent
) {
58 parent
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
59 parent
.setLayout(CmsUtils
.noSpaceGridLayout(new GridLayout(3, false)));
61 uxContext
= new SimpleUxContext();
62 if (!getUxContext().isMasterData())
63 createAdminArea(parent
);
64 headerArea
= new Composite(parent
, SWT
.NONE
);
65 headerArea
.setLayout(new FillLayout());
66 GridData headerData
= new GridData(SWT
.FILL
, SWT
.FILL
, false, false, 3, 1);
67 headerData
.heightHint
= headerHeight
;
68 headerArea
.setLayoutData(headerData
);
70 // TODO: bi-directional
71 leftArea
= new Composite(parent
, SWT
.NONE
);
72 leftArea
.setLayoutData(new GridData(SWT
.LEAD
, SWT
.TOP
, false, false));
73 leftArea
.setLayout(CmsUtils
.noSpaceGridLayout());
75 bodyArea
= new Composite(parent
, SWT
.NONE
);
76 bodyArea
.setData(RWT
.CUSTOM_VARIANT
, CmsStyles
.CMS_BODY
);
77 bodyArea
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
78 bodyArea
.setLayout(CmsUtils
.noSpaceGridLayout());
80 // TODO: bi-directional
81 rightArea
= new Composite(parent
, SWT
.NONE
);
82 rightArea
.setLayoutData(new GridData(SWT
.END
, SWT
.TOP
, false, false));
83 rightArea
.setLayout(CmsUtils
.noSpaceGridLayout());
85 footerArea
= new Composite(parent
, SWT
.NONE
);
86 // footerArea.setLayout(new FillLayout());
87 GridData footerData
= new GridData(SWT
.FILL
, SWT
.FILL
, false, false, 3, 1);
88 footerData
.heightHint
= footerHeight
;
89 footerArea
.setLayoutData(footerData
);
96 protected void refresh() {
99 if (getState() == null)
103 if (log
.isTraceEnabled())
104 log
.trace("UI refreshed " + getNode());
107 protected void createAdminArea(Composite parent
) {
111 protected void refreshHeader() {
115 for (Control child
: headerArea
.getChildren())
118 header
.createUi(headerArea
, getNode());
119 } catch (RepositoryException e
) {
120 throw new CmsException("Cannot refresh header", e
);
122 headerArea
.layout(true, true);
125 protected void refreshSides() {
126 refresh(headerArea
, header
, CmsStyles
.CMS_HEADER
);
127 refresh(leftArea
, lead
, CmsStyles
.CMS_LEAD
);
128 refresh(rightArea
, end
, CmsStyles
.CMS_END
);
129 refresh(footerArea
, footer
, CmsStyles
.CMS_FOOTER
);
132 private void refresh(Composite area
, CmsUiProvider uiProvider
, String style
) {
133 if (uiProvider
== null)
136 for (Control child
: area
.getChildren())
138 CmsUtils
.style(area
, style
);
140 uiProvider
.createUi(area
, getNode());
141 } catch (RepositoryException e
) {
142 throw new CmsException("Cannot refresh header", e
);
144 area
.layout(true, true);
147 protected void refreshBody() {
149 Throwable exception
= getException();
150 if (exception
!= null) {
151 SystemNotifications systemNotifications
= new SystemNotifications(bodyArea
);
152 systemNotifications
.notifyException(exception
);
159 for (Control child
: bodyArea
.getChildren())
161 bodyArea
.setLayout(CmsUtils
.noSpaceGridLayout());
164 Node node
= getNode();
166 // log.error("Context cannot be null");
168 uiProvider
.createUi(bodyArea
, node
);
169 } catch (RepositoryException e
) {
170 throw new CmsException("Cannot refresh body", e
);
173 bodyArea
.layout(true, true);
177 public UxContext
getUxContext() {
182 public CmsImageManager
getImageManager() {
186 public void setHeader(CmsUiProvider header
) {
187 this.header
= header
;
190 public void setHeaderHeight(Integer headerHeight
) {
191 this.headerHeight
= headerHeight
;
194 public void setImageManager(CmsImageManager imageManager
) {
195 this.imageManager
= imageManager
;
198 public CmsUiProvider
getLead() {
202 public void setLead(CmsUiProvider lead
) {
206 public CmsUiProvider
getEnd() {
210 public void setEnd(CmsUiProvider end
) {
214 public CmsUiProvider
getFooter() {
218 public void setFooter(CmsUiProvider footer
) {
219 this.footer
= footer
;
222 public CmsUiProvider
getHeader() {
226 public void setFooterHeight(Integer footerHeight
) {
227 this.footerHeight
= footerHeight
;