]>
git.argeo.org Git - gpl/argeo-suite.git/blob - org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java
3d1e938eaacd3bbd59e251c1ffe6c14ef09515d4
1 package org
.argeo
.suite
.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
.NodeConstants
;
12 import org
.argeo
.api
.NodeUtils
;
13 import org
.argeo
.cms
.ui
.CmsView
;
14 import org
.argeo
.cms
.ui
.util
.CmsUiUtils
;
15 import org
.argeo
.jcr
.Jcr
;
16 import org
.eclipse
.swt
.SWT
;
17 import org
.eclipse
.swt
.layout
.FormLayout
;
18 import org
.eclipse
.swt
.widgets
.Composite
;
20 /** The {@link CmsView} for the work ergonomics of Argeo Suite. */
21 class SuiteUi
extends Composite
{
22 private static final long serialVersionUID
= 6207018859086689108L;
24 private Composite header
;
25 private Composite belowHeader
;
26 private Composite leadPane
;
27 private Composite dynamicArea
;
29 private Session sysSession
;
30 private Session homeSession
;
31 private Node userHome
;
33 private Map
<String
, SuiteLayer
> layers
= new HashMap
<>();
34 private Map
<String
, Composite
> workAreas
= new HashMap
<>();
35 private String currentLayerId
= null;
37 private CmsView cmsView
;
39 public SuiteUi(Composite parent
, int style
) {
41 cmsView
= CmsView
.getCmsView(parent
);
42 this.setLayout(CmsUiUtils
.noSpaceGridLayout());
44 header
= new Composite(this, SWT
.NONE
);
45 CmsUiUtils
.style(header
, SuiteStyle
.header
);
46 header
.setLayoutData(CmsUiUtils
.fillWidth());
48 belowHeader
= new Composite(this, SWT
.NONE
);
49 belowHeader
.setLayoutData(CmsUiUtils
.fillAll());
52 public void refreshBelowHeader(boolean initApp
) {
53 CmsUiUtils
.clear(belowHeader
);
54 int style
= getStyle();
56 belowHeader
.setLayout(CmsUiUtils
.noSpaceGridLayout(2));
58 if (SWT
.RIGHT_TO_LEFT
== (style
& SWT
.RIGHT_TO_LEFT
)) {// arabic, hebrew, etc.
59 dynamicArea
= new Composite(belowHeader
, SWT
.NONE
);
60 leadPane
= new Composite(belowHeader
, SWT
.NONE
);
62 leadPane
= new Composite(belowHeader
, SWT
.NONE
);
63 dynamicArea
= new Composite(belowHeader
, SWT
.NONE
);
65 leadPane
.setLayoutData(CmsUiUtils
.fillHeight());
66 CmsUiUtils
.style(leadPane
, SuiteStyle
.leadPane
);
67 dynamicArea
.setLayoutData(CmsUiUtils
.fillAll());
69 dynamicArea
.setLayout(new FormLayout());
72 belowHeader
.setLayout(CmsUiUtils
.noSpaceGridLayout());
80 Composite
getCurrentWorkArea() {
81 if (currentLayerId
== null)
82 throw new IllegalStateException("No current layer");
83 return workAreas
.get(currentLayerId
);
86 String
getCurrentLayerId() {
87 return currentLayerId
;
90 private Composite
getLayer(String id
, Node context
) {
91 if (!layers
.containsKey(id
))
92 throw new IllegalArgumentException("No layer " + id
+ " is available.");
93 if (!workAreas
.containsKey(id
))
94 initLayer(id
, layers
.get(id
), context
);
95 return workAreas
.get(id
);
98 Composite
switchToLayer(String layer
, Node context
) {
99 if (currentLayerId
!= null) {
100 Composite current
= getCurrentWorkArea();
101 if (currentLayerId
.equals(layer
))
104 if (context
== null) {
105 if (!cmsView
.isAnonymous())
108 Composite toShow
= getLayer(layer
, context
);
110 getDisplay().syncExec(() -> {
111 toShow
.moveAbove(null);
112 dynamicArea
.layout(true, true);
114 currentLayerId
= layer
;
118 void addLayer(String id
, SuiteLayer layer
) {
119 layers
.put(id
, layer
);
122 void removeLayer(String id
) {
124 if (workAreas
.containsKey(id
)) {
125 Composite workArea
= workAreas
.remove(id
);
126 if (!workArea
.isDisposed())
131 protected Composite
initLayer(String id
, SuiteLayer layer
, Node context
) {
132 Composite workArea
= cmsView
.doAs(() -> (Composite
) layer
.createUiPart(dynamicArea
, context
));
133 workArea
.setLayoutData(CmsUiUtils
.coverAll());
134 workAreas
.put(id
, workArea
);
142 Composite
getHeader() {
146 Composite
getLeadPane() {
150 Composite
getBelowHeader() {
154 // Session getSysSession() {
155 // return sysSession;
158 void initSessions(Repository repository
) throws RepositoryException
{
159 this.sysSession
= repository
.login();
160 this.homeSession
= repository
.login(NodeConstants
.HOME_WORKSPACE
);
161 userHome
= NodeUtils
.getUserHome(homeSession
);
162 addDisposeListener((e
) -> {
163 Jcr
.logout(sysSession
);
164 Jcr
.logout(homeSession
);
172 Session
getSysSession() {
176 Session
getSession(String workspaceName
) {
177 if (workspaceName
== null)
179 if (NodeConstants
.SYS_WORKSPACE
.equals(workspaceName
))
181 else if (NodeConstants
.HOME_WORKSPACE
.equals(workspaceName
))
184 throw new IllegalArgumentException("Unknown workspace " + workspaceName
);