X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=blobdiff_plain;f=core%2Forg.argeo.suite.ui%2Fsrc%2Forg%2Fargeo%2Fsuite%2Fui%2FDefaultLeadPane.java;fp=core%2Forg.argeo.suite.ui%2Fsrc%2Forg%2Fargeo%2Fsuite%2Fui%2FDefaultLeadPane.java;h=a207e7a7453da85272bd20a88efedb183256d111;hp=0000000000000000000000000000000000000000;hb=418ea1efbf3f0d6b706603c6ff1c0fdd17314773;hpb=70010c4afc5799622fcad5b075740d94da074798 diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultLeadPane.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultLeadPane.java new file mode 100644 index 0000000..a207e7a --- /dev/null +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/DefaultLeadPane.java @@ -0,0 +1,130 @@ +package org.argeo.suite.ui; + +import java.util.Arrays; +import java.util.Collections; +import java.util.Map; +import java.util.TreeMap; + +import javax.jcr.Node; +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.CmsUiProvider; +import org.argeo.cms.ui.CmsView; +import org.argeo.suite.RankedObject; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.osgi.framework.Constants; + +/** Side pane listing various perspectives. */ +public class DefaultLeadPane implements CmsUiProvider { + private final static Log log = LogFactory.getLog(DefaultLeadPane.class); + + public static enum Property { + defaultLayers, adminLayers; + } + + private Map> layers = Collections.synchronizedSortedMap(new TreeMap<>()); + private String[] defaultLayers; + private String[] adminLayers; + + @Override + public Control createUi(Composite parent, Node node) throws RepositoryException { + CmsView cmsView = CmsView.getCmsView(parent); + GridLayout layout = new GridLayout(); + layout.verticalSpacing = 10; + layout.marginTop = 10; + layout.marginLeft = 10; + layout.marginRight = 10; + parent.setLayout(layout); + + Button first = null; + for (String layerId : defaultLayers) { + if (layers.containsKey(layerId)) { + RankedObject 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 = SuiteUiUtils.createLayerButton(parent, layerId, title, icon); + if (first == null) + first = b; + } + } + + // 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 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 = SuiteUiUtils.createLayerButton(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); +// createButton(parent, SuiteMsg.people.name(), SuiteMsg.people, SuiteIcon.people); +// createButton(parent, SuiteMsg.locations.name(), SuiteMsg.locations, SuiteIcon.location); + } + return first; + } + + public void init(Map properties) { + defaultLayers = (String[]) properties.get(Property.defaultLayers.toString()); + if (defaultLayers == null) + throw new IllegalArgumentException("Default layers must be set."); + if (log.isDebugEnabled()) + 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 properties) { + if (properties.containsKey(Constants.SERVICE_PID)) { + String pid = (String) properties.get(Constants.SERVICE_PID); + RankedObject.putIfHigherRank(layers, pid, layer, properties); + } + } + + public void removeLayer(SuiteLayer layer, Map 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(layer, properties))) { + layers.remove(pid); + } + } + } + } +}