X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.app.ui%2Fsrc%2Forg%2Fargeo%2Fapp%2Fui%2FSuiteApp.java;fp=org.argeo.app.ui%2Fsrc%2Forg%2Fargeo%2Fapp%2Fui%2FSuiteApp.java;h=9ad2673fc1216d79746a5de580c2a6b7f56dc359;hb=e43d6397b40323e6d23ac52500d022cc2dc622f1;hp=271010dbd32c226fd3efc996b8aacc0b75714bbb;hpb=e7e520aeec2aad034b86789f1bc1b14beba51060;p=gpl%2Fargeo-suite.git diff --git a/org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java b/org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java index 271010d..9ad2673 100644 --- a/org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java +++ b/org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java @@ -2,6 +2,7 @@ package org.argeo.app.ui; import static org.argeo.api.cms.ux.CmsView.CMS_VIEW_UID_PROPERTY; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -265,7 +266,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { setState(ui, state != null ? state : defaultLayerPid); } } catch (Exception e) { - CmsFeedback.show("Unexpected exception", e); + CmsFeedback.error("Unexpected exception", e); } } @@ -551,7 +552,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { } } } catch (Exception e) { - CmsFeedback.show("Cannot handle event " + event, e); + CmsFeedback.error("Cannot handle event " + event, e); // log.error("Cannot handle event " + event, e); } }); @@ -631,8 +632,9 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { } if (properties.containsKey(EntityConstants.TYPE)) { List types = LangUtils.toStringList(properties.get(EntityConstants.TYPE)); - for (String type : types) + for (String type : types) { RankedObject.putIfHigherRank(uiProvidersByType, type, uiProvider, properties); + } } } @@ -658,12 +660,26 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { } public void addLayer(SuiteLayer layer, Map properties) { - if (properties.containsKey(Constants.SERVICE_PID)) { - String pid = (String) properties.get(Constants.SERVICE_PID); + if (!properties.containsKey(Constants.SERVICE_PID)) + throw new IllegalArgumentException("A layer must have an ID"); + String pid = (String) properties.get(Constants.SERVICE_PID); + List types = properties.containsKey(EntityConstants.TYPE) + ? LangUtils.toStringList(properties.get(EntityConstants.TYPE)) + : new ArrayList<>(); + if (types.isEmpty()) { + RankedObject.putIfHigherRank(layersByPid, pid, layer, properties); + } else { + if (layersByPid.containsKey(pid)) { + RankedObject current = layersByPid.get(pid); + List currentTypes = current.getProperties().containsKey(EntityConstants.TYPE) + ? LangUtils.toStringList(current.getProperties().get(EntityConstants.TYPE)) + : new ArrayList<>(); + if (!types.containsAll(currentTypes)) { + throw new IllegalArgumentException("Higher-ranked layer " + pid + " contains only types " + types + + ", while it must override all " + currentTypes); + } + } RankedObject.putIfHigherRank(layersByPid, pid, layer, properties); - } - if (properties.containsKey(EntityConstants.TYPE)) { - List types = LangUtils.toStringList(properties.get(EntityConstants.TYPE)); for (String type : types) RankedObject.putIfHigherRank(layersByType, type, layer, properties); }