X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.app.ui%2Fsrc%2Forg%2Fargeo%2Fapp%2Fui%2FSuiteApp.java;h=a8b9b2e26901c966a4ead4d6b8b4b3ed026516ba;hb=f1b87af2e0de38f1f49ab8fe68f9988018914811;hp=9bfec26ba989f5428c13f40689900a8af47c0f70;hpb=8317c50a86ebb2d50add224816e3dd6103e36150;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 9bfec26..a8b9b2e 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 @@ -1,6 +1,6 @@ package org.argeo.app.ui; -import static org.argeo.api.cms.CmsView.CMS_VIEW_UID_PROPERTY; +import static org.argeo.api.cms.ux.CmsView.CMS_VIEW_UID_PROPERTY; import java.util.Collections; import java.util.HashMap; @@ -14,52 +14,45 @@ import java.util.TreeMap; import java.util.TreeSet; import javax.jcr.Node; -import javax.jcr.Repository; import javax.jcr.RepositoryException; -import javax.jcr.Session; import javax.jcr.nodetype.NodeType; -import javax.naming.InvalidNameException; -import javax.naming.ldap.LdapName; +import javax.xml.namespace.QName; import org.argeo.api.acr.Content; import org.argeo.api.acr.ContentRepository; -import org.argeo.api.acr.ContentSession; import org.argeo.api.acr.spi.ProvidedSession; import org.argeo.api.cms.CmsConstants; +import org.argeo.api.cms.CmsEventSubscriber; import org.argeo.api.cms.CmsLog; import org.argeo.api.cms.CmsSession; -import org.argeo.api.cms.CmsTheme; -import org.argeo.api.cms.CmsUi; -import org.argeo.api.cms.CmsView; +import org.argeo.api.cms.ux.CmsTheme; +import org.argeo.api.cms.ux.CmsUi; +import org.argeo.api.cms.ux.CmsView; import org.argeo.app.api.EntityConstants; import org.argeo.app.api.EntityNames; import org.argeo.app.api.EntityType; import org.argeo.app.api.RankedObject; -import org.argeo.app.core.SuiteUtils; import org.argeo.cms.AbstractCmsApp; import org.argeo.cms.CmsUserManager; import org.argeo.cms.LocaleUtils; import org.argeo.cms.Localized; +import org.argeo.cms.acr.ContentUtils; import org.argeo.cms.jcr.CmsJcrUtils; import org.argeo.cms.jcr.acr.JcrContent; -import org.argeo.cms.jcr.acr.JcrContentProvider; import org.argeo.cms.swt.CmsSwtUtils; +import org.argeo.cms.swt.acr.SwtUiProvider; import org.argeo.cms.swt.dialogs.CmsFeedback; -import org.argeo.cms.ui.CmsUiProvider; import org.argeo.cms.ux.CmsUxUtils; import org.argeo.eclipse.ui.specific.UiContext; -import org.argeo.jcr.Jcr; import org.argeo.jcr.JcrException; import org.argeo.util.LangUtils; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.osgi.framework.Constants; -import org.osgi.service.event.Event; -import org.osgi.service.event.EventHandler; import org.osgi.service.useradmin.User; /** The Argeo Suite App. */ -public class SuiteApp extends AbstractCmsApp implements EventHandler { +public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { private final static CmsLog log = CmsLog.getLog(SuiteApp.class); public final static String PUBLIC_BASE_PATH_PROPERTY = "publicBasePath"; @@ -87,8 +80,9 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { @Deprecated private String defaultThemeId = "org.argeo.app.theme.default"; - private Map> uiProvidersByPid = Collections.synchronizedMap(new HashMap<>()); - private Map> uiProvidersByType = Collections.synchronizedMap(new HashMap<>()); + // TODO use QName as key for byType + private Map> uiProvidersByPid = Collections.synchronizedMap(new HashMap<>()); + private Map> uiProvidersByType = Collections.synchronizedMap(new HashMap<>()); private Map> layersByPid = Collections.synchronizedSortedMap(new TreeMap<>()); private Map> layersByType = Collections.synchronizedSortedMap(new TreeMap<>()); @@ -99,12 +93,16 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { // ACR private ContentRepository contentRepository; - private JcrContentProvider jcrContentProvider; +// private JcrContentProvider jcrContentProvider; // JCR - private Repository repository; +// private Repository repository; public void init(Map properties) { + for (SuiteEvent event : SuiteEvent.values()) { + getCmsContext().getCmsEventBus().addEventSubscriber(event.topic(), this); + } + if (log.isDebugEnabled()) log.info("Argeo Suite App started"); @@ -192,11 +190,11 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { throw new IllegalStateException("UI name should not be null"); CmsView cmsView = CmsSwtUtils.getCmsView(ui); - ContentSession contentSession = CmsUxUtils.getContentSession(contentRepository, cmsView); + ProvidedSession contentSession = (ProvidedSession) CmsUxUtils.getContentSession(contentRepository, cmsView); - CmsUiProvider headerUiProvider = findUiProvider(headerPid); - CmsUiProvider footerUiProvider = findUiProvider(footerPid); - CmsUiProvider leadPaneUiProvider; + SwtUiProvider headerUiProvider = findUiProvider(headerPid); + SwtUiProvider footerUiProvider = findUiProvider(footerPid); + SwtUiProvider leadPaneUiProvider; if (adminUiName.equals(uiName)) { leadPaneUiProvider = findUiProvider(adminLeadPanePid); } else { @@ -211,6 +209,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { if (cmsView.isAnonymous() && publicBasePath == null) {// internal app, must login ui.logout(); + ui.setLoginScreen(true); if (headerUiProvider != null) refreshPart(headerUiProvider, ui.getHeader(), context); ui.refreshBelowHeader(false); @@ -222,25 +221,34 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { } else { if (LOGIN.equals(state)) state = null; + if (ui.isLoginScreen()) { +// if (state == null) +// state = ui.getPostLoginState(); + ui.setLoginScreen(false); +// ui.setPostLoginState(null); + } CmsSession cmsSession = cmsView.getCmsSession(); if (ui.getUserDirNode() == null) { // FIXME NPE on CMSSession when logging in from anonymous if (cmsSession == null || cmsView.isAnonymous()) { assert publicBasePath != null; - Content userDir = contentSession.get(CmsConstants.SYS_WORKSPACE + publicBasePath); + Content userDir = contentSession + .get(ContentUtils.SLASH + CmsConstants.SYS_WORKSPACE + publicBasePath); ui.setUserDir(userDir); // ui.initSessions(getRepository(), publicBasePath); } else { - Session adminSession = null; - try { - adminSession = CmsJcrUtils.openDataAdminSession(getRepository(), null); - Node userDirNode = SuiteUtils.getOrCreateCmsSessionNode(adminSession, cmsSession); - Content userDir = contentSession.get(CmsConstants.SYS_WORKSPACE + userDirNode.getPath()); - ui.setUserDir(userDir); -// ui.initSessions(getRepository(), userDirNode.getPath()); - } finally { - Jcr.logout(adminSession); - } +// Session adminSession = null; +// try { +// adminSession = CmsJcrUtils.openDataAdminSession(getRepository(), null); +// Node userDirNode = SuiteUtils.getOrCreateCmsSessionNode(adminSession, cmsSession); +// Content userDir = contentSession.get(CmsConstants.SYS_WORKSPACE + userDirNode.getPath()); +// ui.setUserDir(userDir); +//// ui.initSessions(getRepository(), userDirNode.getPath()); +// } finally { +// Jcr.logout(adminSession); +// } + Content userDir = contentSession.getSessionRunDir(); + ui.setUserDir(userDir); } } initLocale(cmsSession); @@ -264,7 +272,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { setState(ui, state != null ? state : defaultLayerPid); } } catch (Exception e) { - CmsFeedback.show("Unexpected exception", e); + CmsFeedback.error("Unexpected exception", e); } } @@ -277,12 +285,12 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { } - private void refreshPart(CmsUiProvider uiProvider, Composite part, Content context) { + private void refreshPart(SwtUiProvider uiProvider, Composite part, Content context) { CmsSwtUtils.clear(part); uiProvider.createUiPart(part, context); } - private CmsUiProvider findUiProvider(String pid) { + private SwtUiProvider findUiProvider(String pid) { if (!uiProvidersByPid.containsKey(pid)) return null; return uiProvidersByPid.get(pid).get(); @@ -297,63 +305,80 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { private T findByType(Map> byType, Content content) { if (content == null) throw new IllegalArgumentException("A node should be provided"); - - if(content instanceof JcrContent) { - Node context = ((JcrContent)content).getJcrNode(); - try { - // mixins - Set types = new TreeSet<>(); - for (NodeType mixinType : context.getMixinNodeTypes()) { - String mixinTypeName = mixinType.getName(); - if (byType.containsKey(mixinTypeName)) { - types.add(mixinTypeName); + + if (content instanceof JcrContent) { + Node context = ((JcrContent) content).getJcrNode(); + try { + // mixins + Set types = new TreeSet<>(); + for (NodeType mixinType : context.getMixinNodeTypes()) { + String mixinTypeName = mixinType.getName(); + if (byType.containsKey(mixinTypeName)) { + types.add(mixinTypeName); + } + for (NodeType superType : mixinType.getDeclaredSupertypes()) { + if (byType.containsKey(superType.getName())) { + types.add(superType.getName()); + } + } } - for (NodeType superType : mixinType.getDeclaredSupertypes()) { + // primary node type + NodeType primaryType = context.getPrimaryNodeType(); + String primaryTypeName = primaryType.getName(); + if (byType.containsKey(primaryTypeName)) { + types.add(primaryTypeName); + } + for (NodeType superType : primaryType.getDeclaredSupertypes()) { if (byType.containsKey(superType.getName())) { types.add(superType.getName()); } } - } - // primary node type - NodeType primaryType = context.getPrimaryNodeType(); - String primaryTypeName = primaryType.getName(); - if (byType.containsKey(primaryTypeName)) { - types.add(primaryTypeName); - } - for (NodeType superType : primaryType.getDeclaredSupertypes()) { - if (byType.containsKey(superType.getName())) { - types.add(superType.getName()); - } - } - // entity type - if (context.isNodeType(EntityType.entity.get())) { - if (context.hasProperty(EntityNames.ENTITY_TYPE)) { - String entityTypeName = context.getProperty(EntityNames.ENTITY_TYPE).getString(); - if (byType.containsKey(entityTypeName)) { - types.add(entityTypeName); + // entity type + if (context.isNodeType(EntityType.entity.get())) { + if (context.hasProperty(EntityNames.ENTITY_TYPE)) { + String entityTypeName = context.getProperty(EntityNames.ENTITY_TYPE).getString(); + if (byType.containsKey(entityTypeName)) { + types.add(entityTypeName); + } } } - } // if (context.getPath().equals("/")) {// root node // types.add("nt:folder"); // } - if (CmsJcrUtils.isUserHome(context) && byType.containsKey("nt:folder")) {// home node - types.add("nt:folder"); + if (CmsJcrUtils.isUserHome(context) && byType.containsKey("nt:folder")) {// home node + types.add("nt:folder"); + } + + if (types.size() == 0) + throw new IllegalArgumentException( + "No type found for " + context + " (" + listTypes(context) + ")"); + String type = types.iterator().next(); + if (!byType.containsKey(type)) + throw new IllegalArgumentException("No component found for " + context + " with type " + type); + return byType.get(type).get(); + } catch (RepositoryException e) { + throw new IllegalStateException(e); } - if (types.size() == 0) - throw new IllegalArgumentException("No type found for " + context + " (" + listTypes(context) + ")"); + } else { + + List objectClasses = content.getContentClasses(); + Set types = new TreeSet<>(); + for (QName cc : objectClasses) { + String type = cc.getPrefix() + ":" + cc.getLocalPart(); + if (byType.containsKey(type)) + types.add(type); + } + if (types.size() == 0) { + throw new IllegalArgumentException("No type found for " + content + " (" + objectClasses + ")"); + } String type = types.iterator().next(); if (!byType.containsKey(type)) - throw new IllegalArgumentException("No component found for " + context + " with type " + type); + throw new IllegalArgumentException("No component found for " + content + " with type " + type); return byType.get(type).get(); - } catch (RepositoryException e) { - throw new IllegalStateException(e); - } - - }else { - throw new UnsupportedOperationException("Content "+content.getClass().getName()+" is not supported."); + // throw new UnsupportedOperationException("Content " + + // content.getClass().getName() + " is not supported."); } } @@ -405,6 +430,11 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { return; } SuiteUi suiteUi = (SuiteUi) cmsUi; + if (suiteUi.isLoginScreen()) { +// suiteUi.setPostLoginState(state); + return; + } + Content node = stateToNode(suiteUi, state); if (node == null) { suiteUi.getCmsView().navigateTo(HOME_STATE); @@ -425,7 +455,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { if (state == null || !state.startsWith("/")) return null; - String path=state; + String path = state; // String path = state.substring(1); // String workspace; // if (path.equals("")) { @@ -462,88 +492,89 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { */ @Override - public void handleEvent(Event event) { + public void onEvent(String topic, Map event) { // Specific UI related events SuiteUi ui = getRelatedUi(event); if (ui == null) return; - try { - String appTitle = ""; - if (ui.getTitle() != null) - appTitle = ui.getTitle().lead() + " - "; + ui.getCmsView().runAs(() -> { + try { + String appTitle = ""; + if (ui.getTitle() != null) + appTitle = ui.getTitle().lead() + " - "; // String currentLayerId = ui.getCurrentLayerId(); // SuiteLayer currentLayer = currentLayerId != null ? layersByPid.get(currentLayerId).get() : null; - if (SuiteUiUtils.isTopic(event, SuiteEvent.refreshPart)) { - Content node = getNode(ui, event); - if (node == null) - return; - CmsUiProvider uiProvider = findByType(uiProvidersByType, node); - SuiteLayer layer = findByType(layersByType, node); - ui.switchToLayer(layer, node); - ui.getCmsView().runAs(() -> layer.view(uiProvider, ui.getCurrentWorkArea(), node)); - ui.getCmsView().stateChanged(nodeToState(node), appTitle + CmsUxUtils.getTitle(node)); - } else if (SuiteUiUtils.isTopic(event, SuiteEvent.openNewPart)) { - Content node = getNode(ui, event); - if (node == null) - return; - CmsUiProvider uiProvider = findByType(uiProvidersByType, node); - SuiteLayer layer = findByType(layersByType, node); - ui.switchToLayer(layer, node); - ui.getCmsView().runAs(() -> layer.open(uiProvider, ui.getCurrentWorkArea(), node)); - ui.getCmsView().stateChanged(nodeToState(node), appTitle + CmsUxUtils.getTitle(node)); - } else if (SuiteUiUtils.isTopic(event, SuiteEvent.switchLayer)) { - String layerId = get(event, SuiteEvent.LAYER); - if (layerId != null) { + if (SuiteUiUtils.isTopic(topic, SuiteEvent.refreshPart)) { + Content node = getNode(ui, event); + if (node == null) + return; + SwtUiProvider uiProvider = findByType(uiProvidersByType, node); + SuiteLayer layer = findByType(layersByType, node); + ui.switchToLayer(layer, node); + layer.view(uiProvider, ui.getCurrentWorkArea(), node); + ui.getCmsView().stateChanged(nodeToState(node), appTitle + CmsUxUtils.getTitle(node)); + } else if (SuiteUiUtils.isTopic(topic, SuiteEvent.openNewPart)) { + Content node = getNode(ui, event); + if (node == null) + return; + SwtUiProvider uiProvider = findByType(uiProvidersByType, node); + SuiteLayer layer = findByType(layersByType, node); + ui.switchToLayer(layer, node); + layer.open(uiProvider, ui.getCurrentWorkArea(), node); + ui.getCmsView().stateChanged(nodeToState(node), appTitle + CmsUxUtils.getTitle(node)); + } else if (SuiteUiUtils.isTopic(topic, SuiteEvent.switchLayer)) { + String layerId = get(event, SuiteEvent.LAYER); + 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.getUserDirNode())); - String title = null; - if (layerTitle != null) - title = layerTitle.lead(); - Content nodeFromState = getNode(ui, event); - if (nodeFromState != null && nodeFromState.getPath().equals(ui.getUserDirNode().getPath())) { - // default layer view is forced - String state = defaultLayerPid.equals(layerId) ? "~" : layerId; - ui.getCmsView().stateChanged(state, appTitle + title); - suiteLayer.view(null, workArea, nodeFromState); - } else { - Content layerCurrentContext = suiteLayer.getCurrentContext(workArea); - if (layerCurrentContext != null) { - // layer was already showing a context so we set the state to it - ui.getCmsView().stateChanged(nodeToState(layerCurrentContext), - appTitle + CmsUxUtils.getTitle(layerCurrentContext)); + 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.switchToLayer(layerId, ui.getUserDirNode()); + String title = null; + if (layerTitle != null) + title = layerTitle.lead(); + Content nodeFromState = getNode(ui, event); + if (nodeFromState != null && nodeFromState.getPath().equals(ui.getUserDirNode().getPath())) { + // default layer view is forced + String state = defaultLayerPid.equals(layerId) ? "~" : layerId; + ui.getCmsView().stateChanged(state, appTitle + title); + suiteLayer.view(null, workArea, nodeFromState); } else { - // no context was shown - ui.getCmsView().stateChanged(layerId, appTitle + title); + Content layerCurrentContext = suiteLayer.getCurrentContext(workArea); + if (layerCurrentContext != null) { + // layer was already showing a context so we set the state to it + ui.getCmsView().stateChanged(nodeToState(layerCurrentContext), + appTitle + CmsUxUtils.getTitle(layerCurrentContext)); + } else { + // no context was shown + ui.getCmsView().stateChanged(layerId, appTitle + title); + } + } + } else { + Content node = getNode(ui, event); + if (node != null) { + SuiteLayer layer = findByType(layersByType, node); + ui.switchToLayer(layer, node); } - } - } else { - Content node = getNode(ui, event); - if (node != null) { - SuiteLayer layer = findByType(layersByType, node); - ui.getCmsView().runAs(() -> ui.switchToLayer(layer, node)); } } + } catch (Exception e) { + CmsFeedback.error("Cannot handle event " + topic + " " + event, e); +// log.error("Cannot handle event " + event, e); } - } catch (Exception e) { - log.error("Cannot handle event " + event, e); -// CmsView.getCmsView(ui).exception(e); - } - + }); } - private Content getNode(SuiteUi ui, Event event) { + private Content getNode(SuiteUi ui, Map event) { ProvidedSession contentSession = (ProvidedSession) CmsUxUtils.getContentSession(contentRepository, ui.getCmsView()); - String path = get(event,SuiteEvent.CONTENT_PATH); - + String path = get(event, SuiteEvent.CONTENT_PATH); + // String nodePath = get(event, SuiteEvent.NODE_PATH); if (path != null && path.equals(HOME_STATE)) return ui.getUserDir(); @@ -560,15 +591,16 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { User user = cmsUserManager.getUser(username); if (user == null) return null; - LdapName userDn; - try { - userDn = new LdapName(user.getName()); - } catch (InvalidNameException e) { - throw new IllegalArgumentException("Badly formatted username", e); - } - String userNodePath = SuiteUtils.getUserNodePath(userDn); + node = ContentUtils.roleToContent(cmsUserManager, contentSession, user); +// LdapName userDn; +// try { +// userDn = new LdapName(user.getName()); +// } catch (InvalidNameException e) { +// throw new IllegalArgumentException("Badly formatted username", e); +// } +// String userNodePath = SuiteUtils.getUserNodePath(userDn); // FIXME deal with home path - return null; +// return null; // if (Jcr.itemExists(session, userNodePath)) // node = Jcr.getNode(session, userNodePath); // else { @@ -587,12 +619,12 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { return node; } - private SuiteUi getRelatedUi(Event event) { - return managedUis.get(get(event, CMS_VIEW_UID_PROPERTY)); + private SuiteUi getRelatedUi(Map eventProperties) { + return managedUis.get(get(eventProperties, CMS_VIEW_UID_PROPERTY)); } - public static String get(Event event, String key) { - Object value = event.getProperty(key); + public static String get(Map eventProperties, String key) { + Object value = eventProperties.get(key); if (value == null) return null; // throw new IllegalArgumentException("Property " + key + " must be set"); @@ -604,23 +636,24 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { * Dependency injection. */ - public void addUiProvider(CmsUiProvider uiProvider, Map properties) { + public void addUiProvider(SwtUiProvider uiProvider, Map properties) { if (properties.containsKey(Constants.SERVICE_PID)) { String pid = (String) properties.get(Constants.SERVICE_PID); RankedObject.putIfHigherRank(uiProvidersByPid, pid, uiProvider, properties); } 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); + } } } - public void removeUiProvider(CmsUiProvider uiProvider, Map properties) { + public void removeUiProvider(SwtUiProvider uiProvider, Map properties) { if (properties.containsKey(Constants.SERVICE_PID)) { String pid = (String) properties.get(Constants.SERVICE_PID); if (uiProvidersByPid.containsKey(pid)) { - if (uiProvidersByPid.get(pid).equals(new RankedObject(uiProvider, properties))) { + if (uiProvidersByPid.get(pid).equals(new RankedObject(uiProvider, properties))) { uiProvidersByPid.remove(pid); } } @@ -629,7 +662,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { List types = LangUtils.toStringList(properties.get(EntityConstants.TYPE)); for (String type : types) { if (uiProvidersByType.containsKey(type)) { - if (uiProvidersByType.get(type).equals(new RankedObject(uiProvider, properties))) { + if (uiProvidersByType.get(type).equals(new RankedObject(uiProvider, properties))) { uiProvidersByType.remove(type); } } @@ -637,6 +670,32 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { } } +// public void addLayer(SuiteLayer layer, Map properties) { +// 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); +// for (String type : types) +// RankedObject.putIfHigherRank(layersByType, type, layer, properties); +// } +// } + public void addLayer(SuiteLayer layer, Map properties) { if (properties.containsKey(Constants.SERVICE_PID)) { String pid = (String) properties.get(Constants.SERVICE_PID); @@ -674,13 +733,13 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { this.cmsUserManager = cmsUserManager; } - protected Repository getRepository() { - return repository; - } - - public void setRepository(Repository repository) { - this.repository = repository; - } +// protected Repository getRepository() { +// return repository; +// } +// +// public void setRepository(Repository repository) { +// this.repository = repository; +// } protected ContentRepository getContentRepository() { return contentRepository; @@ -690,8 +749,8 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { this.contentRepository = contentRepository; } - public void setJcrContentProvider(JcrContentProvider jcrContentProvider) { - this.jcrContentProvider = jcrContentProvider; - } +// public void setJcrContentProvider(JcrContentProvider jcrContentProvider) { +// this.jcrContentProvider = jcrContentProvider; +// } }