Make Suite App more configurable.
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 14 Jan 2021 11:00:46 +0000 (12:00 +0100)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 14 Jan 2021 11:00:46 +0000 (12:00 +0100)
org.argeo.suite.core/src/org/argeo/suite/core/CustomMaintenanceService.java
org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteApp.java
org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteStyle.java
org.argeo.suite.ui/src/org/argeo/suite/ui/SuiteUi.java
publishing/org.argeo.publishing.ui/bnd.bnd
publishing/org.argeo.publishing.ui/src/org/argeo/publishing/ui/PublishingApp.java
publishing/org.argeo.publishing.ui/src/org/argeo/publishing/ui/PublishingStyle.java

index 2fd15d1575903b450255ee1a7ef41ad2b7bff20c..88470323af2bb86a1fccd3d29117c64a471508a5 100644 (file)
@@ -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();
                }
index b4ba8d270f12e70c751a49db3230957454e0597d..1c7398f31a5e9986927a402efccf92ed6b3804e0 100644 (file)
@@ -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<String, RankedObject<CmsUiProvider>> uiProvidersByPid = Collections.synchronizedMap(new HashMap<>());
        private Map<String, RankedObject<CmsUiProvider>> uiProvidersByType = Collections.synchronizedMap(new HashMap<>());
@@ -73,12 +79,32 @@ public class SuiteApp extends AbstractCmsApp implements EventHandler {
 
 //     private CmsUiProvider headerPart = null;
 
-       public void init(Map<String, String> properties) {
+       public void init(Map<String, Object> 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<String, String> properties) {
+       public void destroy(Map<String, Object> 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<String> getUiNames() {
                HashSet<String> 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;
index 98751a44aafd69d589acc4b1b8cce024c2332d6b..e3ae0c7832c55c67af641f42d74d3b792d21663f 100644 (file)
@@ -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
index 38904a40370c6cb6afb63fd8734e12dea6759a45..ae278157f85f63de84ea03a110bfe20174fd9043 100644 (file)
@@ -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 {
index 8d342507dd87b00f415b256348ebd1f3cf8275e9..03c44b6b9cc065739da2611fd0292022801e952d 100644 (file)
@@ -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,\
index 22bd2bbe18d06b93b7a633ac9b2d7b4fc34f478e..a1f08731a9cf00ef0ca6d5ef35ff84743a977281 100644 (file)
@@ -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<String, String> 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<String> getUiNames() {
                Set<String> uiNames = new HashSet<>();
-               uiNames.add("");
+               uiNames.add(defaultUiName);
                return uiNames;
        }
 
index 95ca69dcd6199f62f41def0fce7d594af66f5b79..f6381dd00d66dd493ef8af649d7558210ce2b145 100644 (file)
@@ -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() {