Use released Argeo Maven plugin
[gpl/argeo-suite.git] / core / org.argeo.suite.ui / src / org / argeo / suite / ui / SuiteApp.java
index 0343f710592b9f77784a70480663fef3b3fc77dc..e499463781ac7a59795839abb2a929e49c8f1286 100644 (file)
@@ -8,6 +8,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.TreeSet;
@@ -65,11 +66,13 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
        private String headerPid;
        private String footerPid;
        private String leadPanePid;
+       private String adminLeadPanePid;
        private String loginScreenPid;
 
        private String defaultLayerPid = "argeo.suite.ui.dashboardLayer";
 
        private String defaultUiName = "app";
+       private String adminUiName = "admin";
        private String defaultThemeId = "org.argeo.suite.theme.default";
 
        private Map<String, RankedObject<CmsUiProvider>> uiProvidersByPid = Collections.synchronizedMap(new HashMap<>());
@@ -107,6 +110,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
                headerPid = pidPrefix + "header";
                footerPid = pidPrefix + "footer";
                leadPanePid = pidPrefix + "leadPane";
+               adminLeadPanePid = pidPrefix + "adminLeadPane";
                loginScreenPid = pidPrefix + "loginScreen";
        }
 
@@ -123,6 +127,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
        public Set<String> getUiNames() {
                HashSet<String> uiNames = new HashSet<>();
                uiNames.add(defaultUiName);
+               uiNames.add(adminUiName);
                return uiNames;
        }
 
@@ -156,10 +161,19 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
                try {
                        Node context = null;
                        SuiteUi ui = (SuiteUi) parent;
+
+                       String uiName = Objects.toString(ui.getParent().getData(UI_NAME_PROPERTY), null);
+                       if (uiName == null)
+                               throw new IllegalStateException("UI name should not be null");
                        CmsView cmsView = CmsView.getCmsView(parent);
                        CmsUiProvider headerUiProvider = findUiProvider(headerPid);
                        CmsUiProvider footerUiProvider = findUiProvider(footerPid);
-                       CmsUiProvider leadPaneUiProvider = findUiProvider(leadPanePid);
+                       CmsUiProvider leadPaneUiProvider;
+                       if (adminUiName.equals(uiName)) {
+                               leadPaneUiProvider = findUiProvider(adminLeadPanePid);
+                       } else {
+                               leadPaneUiProvider = findUiProvider(leadPanePid);
+                       }
 
                        Localized appTitle = null;
                        if (headerUiProvider instanceof DefaultHeader) {
@@ -336,22 +350,18 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
                if (!state.startsWith("/")) {
                        if (parent instanceof SuiteUi) {
                                SuiteUi ui = (SuiteUi) parent;
-                               if (LOGIN.equals(state) || state.equals(HOME_STATE)) {
+                               if (LOGIN.equals(state)) {
                                        String appTitle = "";
                                        if (ui.getTitle() != null)
                                                appTitle = ui.getTitle().lead();
                                        ui.getCmsView().stateChanged(state, appTitle);
                                        return;
                                }
-                               String currentLayerId = ui.getCurrentLayerId();
-//                             if (state.equals(currentLayerId))
-//                                     return; // does nothing
-//                             else {
                                Map<String, Object> properties = new HashMap<>();
-                               properties.put(SuiteEvent.LAYER, state);
+                               String layerId = HOME_STATE.equals(state) ? defaultLayerPid : state;
+                               properties.put(SuiteEvent.LAYER, layerId);
                                properties.put(SuiteEvent.NODE_PATH, HOME_STATE);
                                ui.getCmsView().sendEvent(SuiteEvent.switchLayer.topic(), properties);
-//                             }
                        }
                        return;
                }
@@ -443,6 +453,8 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
                                if (layerId != null) {
 //                                     ui.switchToLayer(layerId, ui.getUserDir());
                                        SuiteLayer suiteLayer = findLayer(layerId);
+                                       if (suiteLayer == null)
+                                               throw new IllegalArgumentException("No layer '" + layerId + "' available.");
                                        Localized layerTitle = suiteLayer.getTitle();
                                        // FIXME make sure we don't rebuild the work area twice
                                        Composite workArea = ui.getCmsView().doAs(() -> ui.switchToLayer(layerId, ui.getUserDir()));
@@ -452,7 +464,8 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
                                        Node nodeFromState = getNode(ui, event);
                                        if (nodeFromState != null && nodeFromState.getPath().equals(ui.getUserDir().getPath())) {
                                                // default layer view is forced
-                                               ui.getCmsView().stateChanged(layerId, appTitle + title);
+                                               String state = defaultLayerPid.equals(layerId) ? "~" : layerId;
+                                               ui.getCmsView().stateChanged(state, appTitle + title);
                                                suiteLayer.view(null, workArea, nodeFromState);
                                        } else {
                                                Node layerCurrentContext = suiteLayer.getCurrentContext(workArea);