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=d59edd59969ba9e79a27bd2f91809d47159ec240;hpb=e2156d0cc52962cec52bf2bd57eca6093f7877bf;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 d59edd5..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 @@ -40,8 +40,8 @@ import org.argeo.cms.acr.ContentUtils; import org.argeo.cms.jcr.CmsJcrUtils; import org.argeo.cms.jcr.acr.JcrContent; 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.JcrException; @@ -80,8 +80,9 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { @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<>()); @@ -191,9 +192,9 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { 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 { @@ -208,6 +209,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { 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); @@ -219,6 +221,12 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { } 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 @@ -264,7 +272,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); } } @@ -277,12 +285,12 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { } - 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(); @@ -362,8 +370,9 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { if (byType.containsKey(type)) types.add(type); } - if (types.size() == 0) + 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 " + content + " with type " + type); @@ -421,6 +430,11 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { 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); @@ -496,7 +510,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { Content node = getNode(ui, event); if (node == null) return; - CmsUiProvider uiProvider = findByType(uiProvidersByType, node); + SwtUiProvider uiProvider = findByType(uiProvidersByType, node); SuiteLayer layer = findByType(layersByType, node); ui.switchToLayer(layer, node); layer.view(uiProvider, ui.getCurrentWorkArea(), node); @@ -505,7 +519,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { Content node = getNode(ui, event); if (node == null) return; - CmsUiProvider uiProvider = findByType(uiProvidersByType, node); + SwtUiProvider uiProvider = findByType(uiProvidersByType, node); SuiteLayer layer = findByType(layersByType, node); ui.switchToLayer(layer, node); layer.open(uiProvider, ui.getCurrentWorkArea(), node); @@ -549,8 +563,8 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { } } } catch (Exception e) { - log.error("Cannot handle event " + event, e); -// CmsView.getCmsView(ui).exception(e); + CmsFeedback.error("Cannot handle event " + topic + " " + event, e); +// log.error("Cannot handle event " + event, e); } }); } @@ -622,23 +636,24 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { * 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); } } @@ -647,7 +662,7 @@ public class SuiteApp extends AbstractCmsApp implements CmsEventSubscriber { 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); } } @@ -655,6 +670,32 @@ 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);