X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=swt%2Forg.argeo.app.ui%2Fsrc%2Forg%2Fargeo%2Fapp%2Fui%2FSuiteApp.java;h=0bfd20b69b845b921e479ed5caf2528f6964d70d;hb=5cb7c83838117e3424d9dd2a5244d203df413f59;hp=a8b9b2e26901c966a4ead4d6b8b4b3ed026516ba;hpb=d917d2b10162a29cddaf8c81c362efa37abcaab9;p=gpl%2Fargeo-suite.git diff --git a/swt/org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java b/swt/org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java index a8b9b2e..0bfd20b 100644 --- a/swt/org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java +++ b/swt/org.argeo.app.ui/src/org/argeo/app/ui/SuiteApp.java @@ -99,7 +99,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { // private Repository repository; public void init(Map properties) { - for (SuiteEvent event : SuiteEvent.values()) { + for (SuiteUxEvent event : SuiteUxEvent.values()) { getCmsContext().getCmsEventBus().addEventSubscriber(event.topic(), this); } @@ -222,31 +222,17 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { 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) { + if (ui.getUserDir() == null) { // FIXME NPE on CMSSession when logging in from anonymous if (cmsSession == null || cmsView.isAnonymous()) { assert publicBasePath != null; 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); -// } Content userDir = contentSession.getSessionRunDir(); ui.setUserDir(userDir); } @@ -254,7 +240,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { initLocale(cmsSession); context = stateToNode(ui, state); if (context == null) - context = ui.getUserDirNode(); + context = ui.getUserDir(); if (headerUiProvider != null) refreshPart(headerUiProvider, ui.getHeader(), context); @@ -343,9 +329,6 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { } } -// if (context.getPath().equals("/")) {// root node -// types.add("nt:folder"); -// } if (CmsJcrUtils.isUserHome(context) && byType.containsKey("nt:folder")) {// home node types.add("nt:folder"); } @@ -362,7 +345,6 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { } } else { - List objectClasses = content.getContentClasses(); Set types = new TreeSet<>(); for (QName cc : objectClasses) { @@ -377,8 +359,6 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { if (!byType.containsKey(type)) throw new IllegalArgumentException("No component found for " + content + " with type " + type); return byType.get(type).get(); - // throw new UnsupportedOperationException("Content " + - // content.getClass().getName() + " is not supported."); } } @@ -423,15 +403,14 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { } Map properties = new HashMap<>(); 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); + properties.put(SuiteUxEvent.LAYER, layerId); + properties.put(SuiteUxEvent.CONTENT_PATH, HOME_STATE); + ui.getCmsView().sendEvent(SuiteUxEvent.switchLayer.topic(), properties); } return; } SuiteUi suiteUi = (SuiteUi) cmsUi; if (suiteUi.isLoginScreen()) { -// suiteUi.setPostLoginState(state); return; } @@ -439,8 +418,8 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { if (node == null) { suiteUi.getCmsView().navigateTo(HOME_STATE); } else { - suiteUi.getCmsView().sendEvent(SuiteEvent.switchLayer.topic(), SuiteEvent.eventProperties(node)); - suiteUi.getCmsView().sendEvent(SuiteEvent.refreshPart.topic(), SuiteEvent.eventProperties(node)); + suiteUi.getCmsView().sendEvent(SuiteUxEvent.switchLayer.topic(), SuiteUxEvent.eventProperties(node)); + suiteUi.getCmsView().sendEvent(SuiteUxEvent.refreshPart.topic(), SuiteUxEvent.eventProperties(node)); } } @@ -456,35 +435,10 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { return null; String path = state; -// String path = state.substring(1); -// String workspace; -// if (path.equals("")) { -// workspace = null; -// path = "/"; -// } else { -// int index = path.indexOf('/'); -// if (index == 0) { -// log.error("Cannot interpret " + state); -//// cmsView.navigateTo("~"); -// return null; -// } else if (index > 0) { -// workspace = path.substring(0, index); -// path = path.substring(index); -// } else {// index<0, assuming root node -// workspace = path; -// path = "/"; -// } -// } ProvidedSession contentSession = (ProvidedSession) CmsUxUtils.getContentSession(contentRepository, suiteUi.getCmsView()); return contentSession.get(path); -// Session session = jcrContentProvider.getJcrSession(contentSession, workspace); -//// Session session = suiteUi.getSession(workspace); -// if (session == null) -// return null; -// Node node = Jcr.getNode(session, path); -// return node; } /* @@ -504,10 +458,8 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { if (ui.getTitle() != null) appTitle = ui.getTitle().lead() + " - "; -// String currentLayerId = ui.getCurrentLayerId(); -// SuiteLayer currentLayer = currentLayerId != null ? layersByPid.get(currentLayerId).get() : null; - if (SuiteUiUtils.isTopic(topic, SuiteEvent.refreshPart)) { - Content node = getNode(ui, event); + if (SuiteUiUtils.isTopic(topic, SuiteUxEvent.refreshPart)) { + Content node = getContentFromEvent(ui, event); if (node == null) return; SwtUiProvider uiProvider = findByType(uiProvidersByType, node); @@ -515,8 +467,8 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { 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); + } else if (SuiteUiUtils.isTopic(topic, SuiteUxEvent.openNewPart)) { + Content node = getContentFromEvent(ui, event); if (node == null) return; SwtUiProvider uiProvider = findByType(uiProvidersByType, node); @@ -524,28 +476,27 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { 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); + } else if (SuiteUiUtils.isTopic(topic, SuiteUxEvent.switchLayer)) { + String layerId = get(event, SuiteUxEvent.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.switchToLayer(layerId, ui.getUserDirNode()); + Composite workArea = ui.switchToLayer(layerId, ui.getUserDir()); String title = null; if (layerTitle != null) title = layerTitle.lead(); - Content nodeFromState = getNode(ui, event); - if (nodeFromState != null && nodeFromState.getPath().equals(ui.getUserDirNode().getPath())) { + Content nodeFromState = getContentFromEvent(ui, event); + if (nodeFromState != null && nodeFromState.getPath().equals(ui.getUserDir().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) { + if (layerCurrentContext != null && !layerCurrentContext.equals(ui.getUserDir())) { // layer was already showing a context so we set the state to it ui.getCmsView().stateChanged(nodeToState(layerCurrentContext), appTitle + CmsUxUtils.getTitle(layerCurrentContext)); @@ -555,7 +506,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { } } } else { - Content node = getNode(ui, event); + Content node = getContentFromEvent(ui, event); if (node != null) { SuiteLayer layer = findByType(layersByType, node); ui.switchToLayer(layer, node); @@ -569,50 +520,24 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { }); } - private Content getNode(SuiteUi ui, Map event) { + protected Content getContentFromEvent(SuiteUi ui, Map event) { ProvidedSession contentSession = (ProvidedSession) CmsUxUtils.getContentSession(contentRepository, ui.getCmsView()); - String path = get(event, SuiteEvent.CONTENT_PATH); + String path = get(event, SuiteUxEvent.CONTENT_PATH); -// String nodePath = get(event, SuiteEvent.NODE_PATH); - if (path != null && path.equals(HOME_STATE)) + if (path != null && (path.equals(HOME_STATE) || path.equals(""))) return ui.getUserDir(); -// String workspace = get(event, SuiteEvent.WORKSPACE); - -// Session session = jcrContentProvider.getJcrSession(contentSession, workspace); -//// Session session = ui.getSession(workspace); Content node; if (path == null) { // look for a user - String username = get(event, SuiteEvent.USERNAME); + String username = get(event, SuiteUxEvent.USERNAME); if (username == null) return null; User user = cmsUserManager.getUser(username); if (user == null) return null; 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; -// if (Jcr.itemExists(session, userNodePath)) -// node = Jcr.getNode(session, userNodePath); -// else { -// Session adminSession = null; -// try { -// adminSession = CmsJcrUtils.openDataAdminSession(getRepository(), workspace); -// SuiteUtils.getOrCreateUserNode(adminSession, userDn); -// } finally { -// Jcr.logout(adminSession); -// } -// node = Jcr.getNode(session, userNodePath); -// } } else { node = contentSession.get(path); } @@ -627,7 +552,6 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { Object value = eventProperties.get(key); if (value == null) return null; -// throw new IllegalArgumentException("Property " + key + " must be set"); return value.toString(); } @@ -670,32 +594,6 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { } } -// 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); @@ -733,14 +631,6 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { this.cmsUserManager = cmsUserManager; } -// protected Repository getRepository() { -// return repository; -// } -// -// public void setRepository(Repository repository) { -// this.repository = repository; -// } - protected ContentRepository getContentRepository() { return contentRepository; } @@ -748,9 +638,4 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { public void setContentRepository(ContentRepository contentRepository) { this.contentRepository = contentRepository; } - -// public void setJcrContentProvider(JcrContentProvider jcrContentProvider) { -// this.jcrContentProvider = jcrContentProvider; -// } - }