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=63a09f1b7290671d4664471d0b57b46699a1a295;hp=7087783ff55cc258ce5ae9ec3c88ffe15138b0b6;hb=88ea3e9381606ed2a8892ca3ac09495ae48e4e45;hpb=3afd052c9c380355ebfce9455e8fa3993f168fe0 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 7087783..63a09f1 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 @@ -54,16 +54,17 @@ 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; private String pidPrefix; private String headerPid; + private String footerPid; private String leadPanePid; private String loginScreenPid; - + private String defaultLayerPid = "argeo.suite.ui.dashboardLayer"; -// private String RECENT_ITEMS_PID = pidPrefix + "recentItems"; private String defaultUiName = "app"; private String defaultThemeId = "org.argeo.suite.theme.default"; @@ -78,9 +79,6 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { // TODO make more optimal or via CmsSession/CmsView private Map managedUis = new HashMap<>(); -// private Localized defaultTitle; -//// private CmsUiProvider headerPart = null; - public void init(Map properties) { if (log.isDebugEnabled()) log.info("Argeo Suite App started"); @@ -102,6 +100,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { throw new IllegalArgumentException("PID prefix must be set."); headerPid = pidPrefix + "header"; + footerPid = pidPrefix + "footer"; leadPanePid = pidPrefix + "leadPane"; loginScreenPid = pidPrefix + "loginScreen"; } @@ -154,19 +153,30 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { SuiteUi ui = (SuiteUi) parent; CmsView cmsView = CmsView.getCmsView(parent); CmsUiProvider headerUiProvider = findUiProvider(headerPid); -// if (headerUiProvider instanceof Localized) { -// defaultTitle = (Localized) headerUiProvider; -// } + CmsUiProvider footerUiProvider = findUiProvider(footerPid); + 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(headerUiProvider, ui.getHeader(), context); + if (headerUiProvider != null) + refreshPart(headerUiProvider, ui.getHeader(), context); ui.refreshBelowHeader(false); refreshPart(findUiProvider(loginScreenPid), ui.getBelowHeader(), context); + if (footerUiProvider != null) + refreshPart(footerUiProvider, ui.getFooter(), context); ui.layout(true, true); + setState(ui, LOGIN); } else { + if (LOGIN.equals(state)) + state = null; CmsSession cmsSession = cmsView.getCmsSession(); if (ui.getUserDir() == null) { - if (cmsView.isAnonymous()) { + // FIXME NPE on CMSSession when logging in from anonymous + if (cmsSession==null || cmsView.isAnonymous()) { assert publicBasePath != null; ui.initSessions(getRepository(), publicBasePath); } else { @@ -185,13 +195,16 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { if (context == null) context = ui.getUserDir(); - refreshPart(headerUiProvider, ui.getHeader(), context); + if (headerUiProvider != null) + refreshPart(headerUiProvider, ui.getHeader(), context); ui.refreshBelowHeader(true); for (String key : layersByPid.keySet()) { SuiteLayer layer = layersByPid.get(key).get(); ui.addLayer(key, layer); } refreshPart(findUiProvider(leadPanePid), ui.getLeadPane(), context); + if (footerUiProvider != null) + refreshPart(footerUiProvider, ui.getFooter(), context); ui.layout(true, true); setState(parent, state != null ? state : defaultLayerPid); } @@ -216,13 +229,13 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { private CmsUiProvider findUiProvider(String pid) { if (!uiProvidersByPid.containsKey(pid)) - throw new IllegalArgumentException("No UI provider registered as " + pid); + return null; return uiProvidersByPid.get(pid).get(); } private SuiteLayer findLayer(String pid) { if (!layersByPid.containsKey(pid)) - throw new IllegalArgumentException("No UI provider registered as " + pid); + return null; return layersByPid.get(pid).get(); } @@ -281,11 +294,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 @@ -355,6 +375,10 @@ 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 (SuiteUiUtils.isTopic(event, SuiteEvent.refreshPart)) { @@ -365,7 +389,7 @@ 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)); + ui.getCmsView().stateChanged(nodeToState(node), appTitle + Jcr.getTitle(node)); } else if (SuiteUiUtils.isTopic(event, SuiteEvent.openNewPart)) { Node node = getNode(ui, event); if (node == null) @@ -374,7 +398,7 @@ 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)); + 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) { @@ -385,7 +409,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { String title = null; if (layerTitle != null) title = layerTitle.lead(); - ui.getCmsView().stateChanged(layerId, title); + ui.getCmsView().stateChanged(layerId, appTitle + title); } else { Node node = getNode(ui, event); if (node != null) {