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%2FSuiteApp.java;h=e8bfa5f0ba48f922e8ad072f0be5134400257e83;hp=dc8060b3ad6d2bed0f91cf4defcb9eb7422e0f3a;hb=bf2b76df49da4a94e37d539ef15d676a9fa58359;hpb=475324c72691c723253f2f0edd7a411a101c04ae diff --git a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java index dc8060b..e8bfa5f 100644 --- a/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java +++ b/core/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java @@ -24,13 +24,13 @@ import org.apache.commons.logging.LogFactory; import org.argeo.api.NodeUtils; import org.argeo.cms.CmsUserManager; import org.argeo.cms.LocaleUtils; +import org.argeo.cms.Localized; import org.argeo.cms.auth.CmsSession; import org.argeo.cms.ui.AbstractCmsApp; import org.argeo.cms.ui.CmsTheme; import org.argeo.cms.ui.CmsUiProvider; import org.argeo.cms.ui.CmsView; import org.argeo.cms.ui.dialogs.CmsFeedback; -import org.argeo.cms.ui.util.CmsEvent; import org.argeo.cms.ui.util.CmsUiUtils; import org.argeo.eclipse.ui.specific.UiContext; import org.argeo.entity.EntityConstants; @@ -54,6 +54,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { public final static String PUBLIC_BASE_PATH_PROPERTY = "publicBasePath"; public final static String DEFAULT_UI_NAME_PROPERTY = "defaultUiName"; public final static String DEFAULT_THEME_ID_PROPERTY = "defaultThemeId"; + private final static String LOGIN = "login"; private String publicBasePath = null; @@ -61,8 +62,8 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { private String headerPid; private String leadPanePid; private String loginScreenPid; -// private String DASHBOARD_PID = pidPrefix + "dashboard"; -// private String RECENT_ITEMS_PID = pidPrefix + "recentItems"; + + private String defaultLayerPid = "argeo.suite.ui.dashboardLayer"; private String defaultUiName = "app"; private String defaultThemeId = "org.argeo.suite.theme.default"; @@ -77,8 +78,6 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { // TODO make more optimal or via CmsSession/CmsView private Map managedUis = new HashMap<>(); -// private CmsUiProvider headerPart = null; - public void init(Map properties) { if (log.isDebugEnabled()) log.info("Argeo Suite App started"); @@ -151,12 +150,20 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { Node context = null; SuiteUi ui = (SuiteUi) parent; CmsView cmsView = CmsView.getCmsView(parent); + CmsUiProvider headerUiProvider = findUiProvider(headerPid); + Localized appTitle = null; + if (headerUiProvider instanceof DefaultHeader) { + appTitle = ((DefaultHeader) headerUiProvider).getTitle(); + } + ui.setTitle(appTitle); + if (cmsView.isAnonymous() && publicBasePath == null) {// internal app, must login ui.logout(); - refreshPart(findUiProvider(headerPid), ui.getHeader(), context); + refreshPart(headerUiProvider, ui.getHeader(), context); ui.refreshBelowHeader(false); refreshPart(findUiProvider(loginScreenPid), ui.getBelowHeader(), context); ui.layout(true, true); + setState(ui, LOGIN); } else { CmsSession cmsSession = cmsView.getCmsSession(); if (ui.getUserDir() == null) { @@ -179,7 +186,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { if (context == null) context = ui.getUserDir(); - refreshPart(findUiProvider(headerPid), ui.getHeader(), context); + refreshPart(headerUiProvider, ui.getHeader(), context); ui.refreshBelowHeader(true); for (String key : layersByPid.keySet()) { SuiteLayer layer = layersByPid.get(key).get(); @@ -187,7 +194,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { } refreshPart(findUiProvider(leadPanePid), ui.getLeadPane(), context); ui.layout(true, true); - setState(parent, state); + setState(parent, state != null ? state : defaultLayerPid); } } catch (Exception e) { CmsFeedback.show("Unexpected exception", e); @@ -214,6 +221,12 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { return uiProvidersByPid.get(pid).get(); } + private SuiteLayer findLayer(String pid) { + if (!layersByPid.containsKey(pid)) + throw new IllegalArgumentException("No UI provider registered as " + pid); + return layersByPid.get(pid).get(); + } + private T findByType(Map> byType, Node context) { if (context == null) throw new IllegalArgumentException("A node should be provided"); @@ -269,11 +282,18 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { @Override public void setState(Composite parent, String state) { - if (state == null || state.equals("~")) + if (state == null) return; - if (!state.startsWith("/") && !state.equals("~")) { + if (!state.startsWith("/")) { if (parent instanceof SuiteUi) { SuiteUi ui = (SuiteUi) parent; + if (LOGIN.equals(state) || state.equals("~")) { + String appTitle = ""; + if (ui.getTitle() != null) + appTitle = ui.getTitle().lead(); + ui.getCmsView().stateChanged(state, appTitle); + return; + } String currentLayerId = ui.getCurrentLayerId(); if (state.equals(currentLayerId)) return; // does nothing @@ -343,9 +363,13 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { if (ui == null) return; 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 (isTopic(event, SuiteEvent.refreshPart)) { + if (SuiteUiUtils.isTopic(event, SuiteEvent.refreshPart)) { Node node = getNode(ui, event); if (node == null) return; @@ -353,8 +377,8 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { SuiteLayer layer = findByType(layersByType, node); ui.switchToLayer(layer, node); ui.getCmsView().runAs(() -> layer.view(uiProvider, ui.getCurrentWorkArea(), node)); - ui.getCmsView().stateChanged(nodeToState(node), Jcr.getTitle(node)); - } else if (isTopic(event, SuiteEvent.openNewPart)) { + ui.getCmsView().stateChanged(nodeToState(node), appTitle + Jcr.getTitle(node)); + } else if (SuiteUiUtils.isTopic(event, SuiteEvent.openNewPart)) { Node node = getNode(ui, event); if (node == null) return; @@ -362,13 +386,18 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { SuiteLayer layer = findByType(layersByType, node); ui.switchToLayer(layer, node); ui.getCmsView().runAs(() -> layer.open(uiProvider, ui.getCurrentWorkArea(), node)); - ui.getCmsView().stateChanged(nodeToState(node), Jcr.getTitle(node)); - } else if (isTopic(event, SuiteEvent.switchLayer)) { + ui.getCmsView().stateChanged(nodeToState(node), appTitle + Jcr.getTitle(node)); + } else if (SuiteUiUtils.isTopic(event, SuiteEvent.switchLayer)) { String layerId = get(event, SuiteEvent.LAYER); if (layerId != null) { // ui.switchToLayer(layerId, ui.getUserDir()); + SuiteLayer suiteLayer = findLayer(layerId); + Localized layerTitle = suiteLayer.getTitle(); ui.getCmsView().runAs(() -> ui.switchToLayer(layerId, ui.getUserDir())); - ui.getCmsView().navigateTo(layerId); + String title = null; + if (layerTitle != null) + title = layerTitle.lead(); + ui.getCmsView().stateChanged(layerId, appTitle + title); } else { Node node = getNode(ui, event); if (node != null) { @@ -426,11 +455,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { return managedUis.get(get(event, CMS_VIEW_UID_PROPERTY)); } - private static boolean isTopic(Event event, CmsEvent cmsEvent) { - return event.getTopic().equals(cmsEvent.topic()); - } - - private static String get(Event event, String key) { + public static String get(Event event, String key) { Object value = event.getProperty(key); if (value == null) return null;