From: Mathieu Baudier Date: Thu, 14 Jan 2021 11:00:46 +0000 (+0100) Subject: Make Suite App more configurable. X-Git-Tag: argeo-suite-2.1.18~38 X-Git-Url: https://git.argeo.org/?p=gpl%2Fargeo-suite.git;a=commitdiff_plain;h=9cfd54a608937b5373c6ac880a9874aa542bb2a1 Make Suite App more configurable. --- diff --git a/org.argeo.suite.core/src/org/argeo/suite/core/CustomMaintenanceService.java b/org.argeo.suite.core/src/org/argeo/suite/core/CustomMaintenanceService.java index 2fd15d1..8847032 100644 --- a/org.argeo.suite.core/src/org/argeo/suite/core/CustomMaintenanceService.java +++ b/org.argeo.suite.core/src/org/argeo/suite/core/CustomMaintenanceService.java @@ -34,7 +34,7 @@ public abstract class CustomMaintenanceService extends AbstractMaintenanceServic if (!typologies.isEmpty()) { Node termsBase = JcrUtils.getOrAdd(customBaseNode, EntityType.terms.name(), EntityType.typologies.get()); for (String terms : typologies) { - loadTerms(customBaseNode, terms); + loadTerms(termsBase, terms); } termsBase.getSession().save(); } diff --git a/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java b/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java index b4ba8d2..1c7398f 100644 --- a/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java +++ b/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java @@ -51,15 +51,21 @@ import org.osgi.service.useradmin.User; public class SuiteApp extends AbstractCmsApp implements EventHandler { private final static Log log = LogFactory.getLog(SuiteApp.class); - public final static String PID_PREFIX = "argeo.suite.ui."; - public final static String HEADER_PID = PID_PREFIX + "header"; - public final static String LEAD_PANE_PID = PID_PREFIX + "leadPane"; - public final static String LOGIN_SCREEN_PID = PID_PREFIX + "loginScreen"; - public final static String DASHBOARD_PID = PID_PREFIX + "dashboard"; - public final static String RECENT_ITEMS_PID = PID_PREFIX + "recentItems"; + 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 DEFAULT_UI_NAME = "app"; - private final static String DEFAULT_THEME_ID = "org.argeo.suite.theme.default"; + private String publicBasePath = null; + + private String pidPrefix; + private String headerPid; + private String leadPanePid; + private String loginScreenPid; +// private String DASHBOARD_PID = pidPrefix + "dashboard"; +// private String RECENT_ITEMS_PID = pidPrefix + "recentItems"; + + private String defaultUiName = "app"; + private String defaultThemeId = "org.argeo.suite.theme.default"; private Map> uiProvidersByPid = Collections.synchronizedMap(new HashMap<>()); private Map> uiProvidersByType = Collections.synchronizedMap(new HashMap<>()); @@ -73,12 +79,32 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { // private CmsUiProvider headerPart = null; - public void init(Map properties) { + public void init(Map properties) { if (log.isDebugEnabled()) log.info("Argeo Suite App started"); + + if (properties.containsKey(DEFAULT_UI_NAME_PROPERTY)) + defaultUiName = LangUtils.get(properties, DEFAULT_UI_NAME_PROPERTY); + if (properties.containsKey(DEFAULT_THEME_ID_PROPERTY)) + defaultThemeId = LangUtils.get(properties, DEFAULT_THEME_ID_PROPERTY); + publicBasePath = LangUtils.get(properties, PUBLIC_BASE_PATH_PROPERTY); + + if (properties.containsKey(Constants.SERVICE_PID)) { + String servicePid = properties.get(Constants.SERVICE_PID).toString(); + if (servicePid.endsWith(".app")) { + pidPrefix = servicePid.substring(0, servicePid.length() - "app".length()); + } + } + + if (pidPrefix == null) + throw new IllegalArgumentException("PID prefix must be set."); + + headerPid = pidPrefix + "header"; + leadPanePid = pidPrefix + "leadPane"; + loginScreenPid = pidPrefix + "loginScreen"; } - public void destroy(Map properties) { + public void destroy(Map properties) { for (SuiteUi ui : managedUis.values()) if (!ui.isDisposed()) ui.dispose(); @@ -90,7 +116,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { @Override public Set getUiNames() { HashSet uiNames = new HashSet<>(); - uiNames.add(DEFAULT_UI_NAME); + uiNames.add(defaultUiName); return uiNames; } @@ -117,8 +143,7 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { @Override public String getThemeId(String uiName) { - // TODO make it configurable - return DEFAULT_THEME_ID; + return defaultThemeId; } @Override @@ -126,23 +151,28 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { try { Node context = null; SuiteUi ui = (SuiteUi) parent; - refreshPart(findUiProvider(HEADER_PID), ui.getHeader(), context); CmsView cmsView = CmsView.getCmsView(parent); - if (cmsView.isAnonymous()) { + if (cmsView.isAnonymous() && publicBasePath == null) {// internal app, must login ui.logout(); + refreshPart(findUiProvider(headerPid), ui.getHeader(), context); ui.refreshBelowHeader(false); - refreshPart(findUiProvider(LOGIN_SCREEN_PID), ui.getBelowHeader(), context); + refreshPart(findUiProvider(loginScreenPid), ui.getBelowHeader(), context); ui.layout(true, true); } else { CmsSession cmsSession = cmsView.getCmsSession(); if (ui.getUserDir() == null) { - Session adminSession = null; - try { - adminSession = NodeUtils.openDataAdminSession(getRepository(), null); - Node userDir = SuiteUtils.getOrCreateCmsSessionNode(adminSession, cmsSession); - ui.initSessions(getRepository(), userDir.getPath()); - } finally { - Jcr.logout(adminSession); + if (cmsView.isAnonymous()) { + assert publicBasePath != null; + ui.initSessions(getRepository(), publicBasePath); + } else { + Session adminSession = null; + try { + adminSession = NodeUtils.openDataAdminSession(getRepository(), null); + Node userDir = SuiteUtils.getOrCreateCmsSessionNode(adminSession, cmsSession); + ui.initSessions(getRepository(), userDir.getPath()); + } finally { + Jcr.logout(adminSession); + } } } initLocale(cmsSession); @@ -150,12 +180,13 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { if (context == null) context = ui.getUserDir(); + refreshPart(findUiProvider(headerPid), ui.getHeader(), context); ui.refreshBelowHeader(true); for (String key : layersByPid.keySet()) { SuiteLayer layer = layersByPid.get(key).get(); ui.addLayer(key, layer); } - refreshPart(findUiProvider(LEAD_PANE_PID), ui.getLeadPane(), context); + refreshPart(findUiProvider(leadPanePid), ui.getLeadPane(), context); ui.layout(true, true); setState(parent, state); } @@ -165,6 +196,8 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { } private void initLocale(CmsSession cmsSession) { + if (cmsSession == null) + return; Locale locale = cmsSession.getLocale(); UiContext.setLocale(locale); LocaleUtils.setThreadLocale(locale); @@ -308,6 +341,8 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler { // Specific UI related events SuiteUi ui = getRelatedUi(event); + if (ui == null) + return; try { // String currentLayerId = ui.getCurrentLayerId(); // SuiteLayer currentLayer = currentLayerId != null ? layersByPid.get(currentLayerId).get() : null; diff --git a/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteStyle.java b/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteStyle.java index 98751a4..e3ae0c7 100644 --- a/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteStyle.java +++ b/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteStyle.java @@ -9,7 +9,7 @@ public enum SuiteStyle implements CmsStyle { // Recent items recentItems, // Lead pane - leadPane, leadPaneItem, + leadPane, leadPaneItem, leadPaneSectionTitle, leadPaneSubSectionTitle, // Group composite titleContainer, titleLabel, subTitleLabel, formLine, formColumn, navigationBar, navigationTitle, navigationButton, // Forms elements diff --git a/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java b/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java index 38904a4..ae27815 100644 --- a/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java +++ b/org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java @@ -43,6 +43,7 @@ class SuiteUi extends Composite { this.setLayout(CmsUiUtils.noSpaceGridLayout()); header = new Composite(this, SWT.NONE); + header.setLayout(CmsUiUtils.noSpaceGridLayout()); CmsUiUtils.style(header, SuiteStyle.header); header.setLayoutData(CmsUiUtils.fillWidth()); @@ -64,9 +65,10 @@ class SuiteUi extends Composite { dynamicArea = new Composite(belowHeader, SWT.NONE); } leadPane.setLayoutData(CmsUiUtils.fillHeight()); + leadPane.setLayout(CmsUiUtils.noSpaceGridLayout()); CmsUiUtils.style(leadPane, SuiteStyle.leadPane); - dynamicArea.setLayoutData(CmsUiUtils.fillAll()); + dynamicArea.setLayoutData(CmsUiUtils.fillAll()); dynamicArea.setLayout(new FormLayout()); } else { diff --git a/publishing/org.argeo.publishing.ui/bnd.bnd b/publishing/org.argeo.publishing.ui/bnd.bnd index 8d34250..03c44b6 100644 --- a/publishing/org.argeo.publishing.ui/bnd.bnd +++ b/publishing/org.argeo.publishing.ui/bnd.bnd @@ -1,5 +1,7 @@ Import-Package:\ javax.jcr.nodetype,\ +org.osgi.service.event,\ +org.argeo.suite.ui,\ org.argeo.api,\ org.eclipse.swt,\ org.eclipse.jface.viewers,\ diff --git a/publishing/org.argeo.publishing.ui/src/org/argeo/publishing/ui/PublishingApp.java b/publishing/org.argeo.publishing.ui/src/org/argeo/publishing/ui/PublishingApp.java index 22bd2bb..a1f0873 100644 --- a/publishing/org.argeo.publishing.ui/src/org/argeo/publishing/ui/PublishingApp.java +++ b/publishing/org.argeo.publishing.ui/src/org/argeo/publishing/ui/PublishingApp.java @@ -1,5 +1,8 @@ package org.argeo.publishing.ui; +import static org.argeo.suite.ui.SuiteApp.DEFAULT_THEME_ID_PROPERTY; +import static org.argeo.suite.ui.SuiteApp.DEFAULT_UI_NAME_PROPERTY; + import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -18,6 +21,7 @@ import org.argeo.docbook.ui.DocBookTypes; import org.argeo.docbook.ui.DocumentPage; import org.argeo.jcr.Jcr; import org.argeo.jcr.JcrUtils; +import org.argeo.util.LangUtils; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; @@ -32,12 +36,17 @@ public class PublishingApp extends AbstractCmsApp { private String pid; private String defaultThemeId; + private String defaultUiName = ""; private CmsUiProvider landingPage; public void init(Map properties) { - defaultThemeId = properties.get("defaultThemeId"); + if (properties.containsKey(DEFAULT_UI_NAME_PROPERTY)) + defaultUiName = LangUtils.get(properties, DEFAULT_UI_NAME_PROPERTY); + if (properties.containsKey(DEFAULT_THEME_ID_PROPERTY)) + defaultThemeId = LangUtils.get(properties, DEFAULT_THEME_ID_PROPERTY); pid = properties.get(Constants.SERVICE_PID); + if (log.isDebugEnabled()) log.info("Publishing App " + pid + " started"); } @@ -51,7 +60,7 @@ public class PublishingApp extends AbstractCmsApp { @Override public Set getUiNames() { Set uiNames = new HashSet<>(); - uiNames.add(""); + uiNames.add(defaultUiName); return uiNames; } diff --git a/publishing/org.argeo.publishing.ui/src/org/argeo/publishing/ui/PublishingStyle.java b/publishing/org.argeo.publishing.ui/src/org/argeo/publishing/ui/PublishingStyle.java index 95ca69d..f6381dd 100644 --- a/publishing/org.argeo.publishing.ui/src/org/argeo/publishing/ui/PublishingStyle.java +++ b/publishing/org.argeo.publishing.ui/src/org/argeo/publishing/ui/PublishingStyle.java @@ -4,14 +4,14 @@ import org.argeo.cms.ui.util.CmsStyle; /** Publishing styles. */ public enum PublishingStyle implements CmsStyle { - - page,coverTitle,coverSubTitle,coverTagline,bannerLine1,bannerLine2, - + // general + page, coverTitle, coverSubTitle, coverTagline, bannerLine1, bannerLine2, + // meta data + tag, menu, // text style - title,subTitle,chapo,para,sectionTitle,subSectionTitle, - + title, subTitle, chapo, para, sectionTitle, subSectionTitle, // composite style - framed,line; + framed, line; @Override public String getClassPrefix() {