Fix plain Argeo Suite.
[gpl/argeo-suite.git] / org.argeo.suite.ui / src / org / argeo / suite / ui / DefaultLeadPane.java
index ed7f9aaf54f75a6737202753787a74334acc9f94..7f2fe9fb53d6a6f5019d87817783d94601b8af15 100644 (file)
@@ -1,5 +1,6 @@
 package org.argeo.suite.ui;
 
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.Map;
 import java.util.TreeMap;
@@ -9,7 +10,9 @@ import javax.jcr.RepositoryException;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.argeo.api.NodeConstants;
 import org.argeo.cms.Localized;
+import org.argeo.cms.auth.CurrentUser;
 import org.argeo.cms.ui.CmsTheme;
 import org.argeo.cms.ui.CmsUiProvider;
 import org.argeo.cms.ui.CmsView;
@@ -30,11 +33,12 @@ public class DefaultLeadPane implements CmsUiProvider {
        private final static Log log = LogFactory.getLog(DefaultLeadPane.class);
 
        public static enum Property {
-               defaultLayers;
+               defaultLayers, adminLayers;
        }
 
        private Map<String, RankedObject<SuiteLayer>> layers = Collections.synchronizedSortedMap(new TreeMap<>());
        private String[] defaultLayers;
+       private String[] adminLayers;
 
        @Override
        public Control createUi(Composite parent, Node node) throws RepositoryException {
@@ -68,6 +72,30 @@ public class DefaultLeadPane implements CmsUiProvider {
                        }
                }
 
+               // TODO factorise
+               boolean isAdmin = cmsView.doAs(() -> CurrentUser.isInRole(NodeConstants.ROLE_USER_ADMIN));
+               if (isAdmin && adminLayers != null)
+                       for (String layerId : adminLayers) {
+                               if (layers.containsKey(layerId)) {
+                                       RankedObject<SuiteLayer> layerObj = layers.get(layerId);
+
+                                       // TODO deal with i10n
+                                       String titleStr = (String) layerObj.getProperties().get(SuiteLayer.Property.title.name());
+                                       Localized title = null;
+                                       if (titleStr != null)
+                                               title = new Localized.Untranslated(titleStr);
+
+                                       String iconName = (String) layerObj.getProperties().get(SuiteLayer.Property.icon.name());
+                                       SuiteIcon icon = null;
+                                       if (iconName != null)
+                                               icon = SuiteIcon.valueOf(iconName);
+
+                                       Button b = createButton(parent, layerId, title, icon);
+                                       if (first == null)
+                                               first = b;
+                               }
+                       }
+
 //             Button dashboardB = createButton(parent, SuiteMsg.dashboard.name(), SuiteMsg.dashboard, SuiteIcon.dashboard);
                if (!cmsView.isAnonymous()) {
 //                     createButton(parent, SuiteMsg.documents.name(), SuiteMsg.documents, SuiteIcon.documents);
@@ -100,7 +128,10 @@ public class DefaultLeadPane implements CmsUiProvider {
                if (defaultLayers == null)
                        throw new IllegalArgumentException("Default layers must be set.");
                if (log.isDebugEnabled())
-                       log.debug("Default layers: " + defaultLayers);
+                       log.debug("Default layers: " + Arrays.asList(defaultLayers));
+               adminLayers = (String[]) properties.get(Property.adminLayers.toString());
+               if (log.isDebugEnabled() && adminLayers != null)
+                       log.debug("Admin layers: " + Arrays.asList(adminLayers));
        }
 
        public void addLayer(SuiteLayer layer, Map<String, Object> properties) {
@@ -110,4 +141,14 @@ public class DefaultLeadPane implements CmsUiProvider {
                }
        }
 
+       public void removeLayer(SuiteLayer layer, Map<String, Object> properties) {
+               if (properties.containsKey(Constants.SERVICE_PID)) {
+                       String pid = (String) properties.get(Constants.SERVICE_PID);
+                       if (layers.containsKey(pid)) {
+                               if (layers.get(pid).equals(new RankedObject<SuiteLayer>(layer, properties))) {
+                                       layers.remove(pid);
+                               }
+                       }
+               }
+       }
 }