1 package org
.argeo
.cms
.web
;
7 import javax
.jcr
.Repository
;
8 import javax
.jcr
.RepositoryException
;
10 import org
.apache
.commons
.logging
.Log
;
11 import org
.apache
.commons
.logging
.LogFactory
;
12 import org
.argeo
.api
.cms
.CmsImageManager
;
13 import org
.argeo
.api
.cms
.UxContext
;
14 import org
.argeo
.cms
.CmsException
;
15 import org
.argeo
.cms
.swt
.CmsStyles
;
16 import org
.argeo
.cms
.swt
.CmsSwtUtils
;
17 import org
.argeo
.cms
.swt
.SimpleSwtUxContext
;
18 import org
.argeo
.cms
.ui
.CmsUiProvider
;
19 import org
.argeo
.cms
.ui
.util
.DefaultImageManager
;
20 import org
.argeo
.cms
.ui
.util
.SystemNotifications
;
21 import org
.eclipse
.rap
.rwt
.RWT
;
22 import org
.eclipse
.swt
.SWT
;
23 import org
.eclipse
.swt
.layout
.FillLayout
;
24 import org
.eclipse
.swt
.layout
.GridData
;
25 import org
.eclipse
.swt
.layout
.GridLayout
;
26 import org
.eclipse
.swt
.widgets
.Composite
;
27 import org
.eclipse
.swt
.widgets
.Control
;
29 /** Simple header/body ergonomics. */
31 public class SimpleErgonomics
extends AbstractCmsEntryPoint
{
32 private static final long serialVersionUID
= 8743413921359548523L;
34 private final static Log log
= LogFactory
.getLog(SimpleErgonomics
.class);
36 private boolean uiInitialized
= false;
37 private Composite headerArea
;
38 private Composite leftArea
;
39 private Composite rightArea
;
40 private Composite footerArea
;
41 private Composite bodyArea
;
42 private final CmsUiProvider uiProvider
;
44 private CmsUiProvider header
;
45 private Integer headerHeight
= 0;
46 private Integer footerHeight
= 0;
47 private CmsUiProvider lead
;
48 private CmsUiProvider end
;
49 private CmsUiProvider footer
;
51 private CmsImageManager imageManager
= new DefaultImageManager();
52 private UxContext uxContext
= null;
55 public SimpleErgonomics(Repository repository
, String workspace
, String defaultPath
, CmsUiProvider uiProvider
,
56 Map
<String
, String
> factoryProperties
) {
57 super(repository
, workspace
, defaultPath
, factoryProperties
);
58 this.uiProvider
= uiProvider
;
62 protected void initUi(Composite parent
) {
63 uid
= UUID
.randomUUID().toString();
64 parent
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
65 parent
.setLayout(CmsSwtUtils
.noSpaceGridLayout(new GridLayout(3, false)));
67 uxContext
= new SimpleSwtUxContext();
68 if (!getUxContext().isMasterData())
69 createAdminArea(parent
);
70 headerArea
= new Composite(parent
, SWT
.NONE
);
71 headerArea
.setLayout(new FillLayout());
72 GridData headerData
= new GridData(SWT
.FILL
, SWT
.FILL
, false, false, 3, 1);
73 headerData
.heightHint
= headerHeight
;
74 headerArea
.setLayoutData(headerData
);
76 // TODO: bi-directional
77 leftArea
= new Composite(parent
, SWT
.NONE
);
78 leftArea
.setLayoutData(new GridData(SWT
.LEAD
, SWT
.TOP
, false, false));
79 leftArea
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
81 bodyArea
= new Composite(parent
, SWT
.NONE
);
82 bodyArea
.setData(RWT
.CUSTOM_VARIANT
, CmsStyles
.CMS_BODY
);
83 bodyArea
.setLayoutData(new GridData(SWT
.FILL
, SWT
.FILL
, true, true));
84 bodyArea
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
86 // TODO: bi-directional
87 rightArea
= new Composite(parent
, SWT
.NONE
);
88 rightArea
.setLayoutData(new GridData(SWT
.END
, SWT
.TOP
, false, false));
89 rightArea
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
91 footerArea
= new Composite(parent
, SWT
.NONE
);
92 // footerArea.setLayout(new FillLayout());
93 GridData footerData
= new GridData(SWT
.FILL
, SWT
.FILL
, false, false, 3, 1);
94 footerData
.heightHint
= footerHeight
;
95 footerArea
.setLayoutData(footerData
);
102 protected void refresh() {
105 if (getState() == null)
109 if (log
.isTraceEnabled())
110 log
.trace("UI refreshed " + getNode());
113 protected void createAdminArea(Composite parent
) {
117 protected void refreshHeader() {
121 for (Control child
: headerArea
.getChildren())
124 header
.createUi(headerArea
, getNode());
125 } catch (RepositoryException e
) {
126 throw new CmsException("Cannot refresh header", e
);
128 headerArea
.layout(true, true);
131 protected void refreshSides() {
132 refresh(headerArea
, header
, CmsStyles
.CMS_HEADER
);
133 refresh(leftArea
, lead
, CmsStyles
.CMS_LEAD
);
134 refresh(rightArea
, end
, CmsStyles
.CMS_END
);
135 refresh(footerArea
, footer
, CmsStyles
.CMS_FOOTER
);
138 private void refresh(Composite area
, CmsUiProvider uiProvider
, String style
) {
139 if (uiProvider
== null)
142 for (Control child
: area
.getChildren())
144 CmsSwtUtils
.style(area
, style
);
146 uiProvider
.createUi(area
, getNode());
147 } catch (RepositoryException e
) {
148 throw new CmsException("Cannot refresh header", e
);
150 area
.layout(true, true);
153 protected void refreshBody() {
155 Throwable exception
= getException();
156 if (exception
!= null) {
157 SystemNotifications systemNotifications
= new SystemNotifications(bodyArea
);
158 systemNotifications
.notifyException(exception
);
165 for (Control child
: bodyArea
.getChildren())
167 bodyArea
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
170 Node node
= getNode();
172 // log.error("Context cannot be null");
174 uiProvider
.createUi(bodyArea
, node
);
175 } catch (RepositoryException e
) {
176 throw new CmsException("Cannot refresh body", e
);
179 bodyArea
.layout(true, true);
183 public UxContext
getUxContext() {
187 public String
getUid() {
191 public CmsImageManager
getImageManager() {
195 public void setHeader(CmsUiProvider header
) {
196 this.header
= header
;
199 public void setHeaderHeight(Integer headerHeight
) {
200 this.headerHeight
= headerHeight
;
203 public void setImageManager(CmsImageManager imageManager
) {
204 this.imageManager
= imageManager
;
207 public CmsUiProvider
getLead() {
211 public void setLead(CmsUiProvider lead
) {
215 public CmsUiProvider
getEnd() {
219 public void setEnd(CmsUiProvider end
) {
223 public CmsUiProvider
getFooter() {
227 public void setFooter(CmsUiProvider footer
) {
228 this.footer
= footer
;
231 public CmsUiProvider
getHeader() {
235 public void setFooterHeight(Integer footerHeight
) {
236 this.footerHeight
= footerHeight
;