]>
git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.app.ui/src/org/argeo/app/ui/SuiteUi.java
1 package org
.argeo
.app
.ui
;
3 import java
.util
.HashMap
;
7 import javax
.jcr
.Repository
;
8 import javax
.jcr
.RepositoryException
;
9 import javax
.jcr
.Session
;
11 import org
.argeo
.api
.cms
.CmsUi
;
12 import org
.argeo
.api
.cms
.CmsView
;
13 import org
.argeo
.api
.cms
.CmsLog
;
14 import org
.argeo
.api
.cms
.CmsConstants
;
15 import org
.argeo
.cms
.Localized
;
16 import org
.argeo
.cms
.swt
.CmsSwtUtils
;
17 import org
.argeo
.jcr
.Jcr
;
18 import org
.eclipse
.swt
.SWT
;
19 import org
.eclipse
.swt
.layout
.FormLayout
;
20 import org
.eclipse
.swt
.widgets
.Composite
;
22 /** The view for the default ergonomics of Argeo Suite. */
23 class SuiteUi
extends Composite
implements CmsUi
{
24 private static final long serialVersionUID
= 6207018859086689108L;
25 private final static CmsLog log
= CmsLog
.getLog(SuiteUi
.class);
27 private Localized title
;
28 private Composite header
;
29 private Composite footer
;
30 private Composite belowHeader
;
31 private Composite leadPane
;
32 private Composite sidePane
;
33 private Composite dynamicArea
;
35 private Session sysSession
;
36 private Session homeSession
;
39 private Map
<String
, SuiteLayer
> layers
= new HashMap
<>();
40 private Map
<String
, Composite
> workAreas
= new HashMap
<>();
41 private String currentLayerId
= null;
43 private CmsView cmsView
;
45 public SuiteUi(Composite parent
, int style
) {
47 cmsView
= CmsSwtUtils
.getCmsView(parent
);
48 this.setLayout(CmsSwtUtils
.noSpaceGridLayout());
50 header
= new Composite(this, SWT
.NONE
);
51 header
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
52 CmsSwtUtils
.style(header
, SuiteStyle
.header
);
53 header
.setLayoutData(CmsSwtUtils
.fillWidth());
55 belowHeader
= new Composite(this, SWT
.NONE
);
56 belowHeader
.setLayoutData(CmsSwtUtils
.fillAll());
58 footer
= new Composite(this, SWT
.NONE
);
59 footer
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
60 CmsSwtUtils
.style(footer
, SuiteStyle
.footer
);
61 footer
.setLayoutData(CmsSwtUtils
.fillWidth());
64 public void refreshBelowHeader(boolean initApp
) {
65 CmsSwtUtils
.clear(belowHeader
);
66 int style
= getStyle();
68 belowHeader
.setLayout(CmsSwtUtils
.noSpaceGridLayout(3));
70 if (SWT
.RIGHT_TO_LEFT
== (style
& SWT
.RIGHT_TO_LEFT
)) {// arabic, hebrew, etc.
71 sidePane
= new Composite(belowHeader
, SWT
.NONE
);
72 sidePane
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
73 sidePane
.setLayoutData(CmsSwtUtils
.fillHeight());
74 dynamicArea
= new Composite(belowHeader
, SWT
.NONE
);
75 leadPane
= new Composite(belowHeader
, SWT
.NONE
);
77 leadPane
= new Composite(belowHeader
, SWT
.NONE
);
78 dynamicArea
= new Composite(belowHeader
, SWT
.NONE
);
79 sidePane
= new Composite(belowHeader
, SWT
.NONE
);
80 sidePane
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
81 sidePane
.setLayoutData(CmsSwtUtils
.fillHeight());
83 leadPane
.setLayoutData(CmsSwtUtils
.fillHeight());
84 leadPane
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
85 CmsSwtUtils
.style(leadPane
, SuiteStyle
.leadPane
);
87 dynamicArea
.setLayoutData(CmsSwtUtils
.fillAll());
88 dynamicArea
.setLayout(new FormLayout());
91 belowHeader
.setLayout(CmsSwtUtils
.noSpaceGridLayout());
99 Composite
getCurrentWorkArea() {
100 if (currentLayerId
== null)
101 throw new IllegalStateException("No current layer");
102 return workAreas
.get(currentLayerId
);
105 String
getCurrentLayerId() {
106 return currentLayerId
;
109 private Composite
getLayer(String id
, Node context
) {
110 if (!layers
.containsKey(id
))
112 if (!workAreas
.containsKey(id
))
113 initLayer(id
, layers
.get(id
), context
);
114 return workAreas
.get(id
);
117 Composite
switchToLayer(String layerId
, Node context
) {
118 Composite current
= null;
119 if (currentLayerId
!= null) {
120 current
= getCurrentWorkArea();
121 if (currentLayerId
.equals(layerId
))
124 if (context
== null) {
125 if (!cmsView
.isAnonymous())
128 Composite toShow
= getLayer(layerId
, context
);
129 if (toShow
!= null) {
130 currentLayerId
= layerId
;
132 // getDisplay().syncExec(() -> {
133 if (!toShow
.isDisposed()) {
134 toShow
.moveAbove(null);
136 log
.warn("Cannot show work area because it is disposed.");
137 toShow
= initLayer(layerId
, layers
.get(layerId
), context
);
138 toShow
.moveAbove(null);
140 dynamicArea
.layout(true, true);
149 Composite
switchToLayer(SuiteLayer layer
, Node context
) {
150 // TODO make it more robust
151 for (String layerId
: layers
.keySet()) {
152 SuiteLayer l
= layers
.get(layerId
);
154 return switchToLayer(layerId
, context
);
157 throw new IllegalArgumentException("Layer is not registered.");
160 void addLayer(String id
, SuiteLayer layer
) {
161 layers
.put(id
, layer
);
164 void removeLayer(String id
) {
166 if (workAreas
.containsKey(id
)) {
167 Composite workArea
= workAreas
.remove(id
);
168 if (!workArea
.isDisposed())
173 protected Composite
initLayer(String id
, SuiteLayer layer
, Node context
) {
174 Composite workArea
= cmsView
.doAs(() -> (Composite
) layer
.createUiPart(dynamicArea
, context
));
175 CmsSwtUtils
.style(workArea
, SuiteStyle
.workArea
);
176 workArea
.setLayoutData(CmsSwtUtils
.coverAll());
177 workAreas
.put(id
, workArea
);
181 synchronized void logout() {
183 Jcr
.logout(sysSession
);
184 Jcr
.logout(homeSession
);
185 currentLayerId
= null;
193 Composite
getHeader() {
197 Composite
getFooter() {
201 Composite
getLeadPane() {
205 Composite
getSidePane() {
209 Composite
getBelowHeader() {
213 // Session getSysSession() {
214 // return sysSession;
217 synchronized void initSessions(Repository repository
, String userDirPath
) throws RepositoryException
{
218 this.sysSession
= repository
.login();
219 this.homeSession
= repository
.login(CmsConstants
.HOME_WORKSPACE
);
220 userDir
= sysSession
.getNode(userDirPath
);
221 addDisposeListener((e
) -> {
222 Jcr
.logout(sysSession
);
223 Jcr
.logout(homeSession
);
231 Session
getSysSession() {
235 Session
getSession(String workspaceName
) {
236 if (workspaceName
== null)
238 if (CmsConstants
.SYS_WORKSPACE
.equals(workspaceName
))
240 else if (CmsConstants
.HOME_WORKSPACE
.equals(workspaceName
))
243 throw new IllegalArgumentException("Unknown workspace " + workspaceName
);
246 public CmsView
getCmsView() {
250 public Localized
getTitle() {
254 public void setTitle(Localized title
) {