Introduce separate Knowledge App
authorMathieu Baudier <mbaudier@argeo.org>
Wed, 14 Jun 2023 05:40:21 +0000 (07:40 +0200)
committerMathieu Baudier <mbaudier@argeo.org>
Wed, 14 Jun 2023 05:40:21 +0000 (07:40 +0200)
org.argeo.product.knowledge/OSGI-INF/leadPane.xml [new file with mode: 0644]
org.argeo.product.knowledge/OSGI-INF/swtArgeoApp.xml
org.argeo.product.knowledge/OSGI-INF/termsLayer.xml
org.argeo.product.knowledge/bnd.bnd
org.argeo.product.knowledge/config/leadPane.properties [new file with mode: 0644]
org.argeo.product.knowledge/config/swtArgeoApp.properties
org.argeo.product.knowledge/config/termsEntryArea.properties
org.argeo.product.knowledge/config/termsLayer.properties
swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtAppUi.java
swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtArgeoApp.java
swt/org.argeo.app.ui/OSGI-INF/cmsApp.xml

diff --git a/org.argeo.product.knowledge/OSGI-INF/leadPane.xml b/org.argeo.product.knowledge/OSGI-INF/leadPane.xml
new file mode 100644 (file)
index 0000000..968b65a
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="init" deactivate="destroy" immediate="false" name="argeo.product.knowledge.leadPane">
+   <implementation class="org.argeo.app.swt.ux.DefaultLeadPane"/>
+   <service>
+      <provide interface="org.argeo.cms.swt.acr.SwtUiProvider"/>
+   </service>
+   <property name="service.ranking" type="Integer" value="-1000"/>
+   <properties entry="config/leadPane.properties"/>
+   <property name="defaultLayers" type="String">argeo.product.knowledge.termsLayer
+   </property>
+   <reference bind="addLayer" cardinality="1..n" interface="org.argeo.app.swt.ux.SwtAppLayer" name="SuiteLayer" policy="dynamic" unbind="removeLayer"/>
+</scr:component>
index ad18dd921001673d6021ce823716d06e5250c50a..a278899ea94c207175f2a0f3cdbf4935532739cb 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" name="org.argeo.product.knowledge.swtArgeoApp">
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop" name="org.argeo.product.knowledge.swtArgeoApp">
    <implementation class="org.argeo.app.swt.ux.SwtArgeoApp"/>
    <service>
       <provide interface="org.argeo.api.cms.CmsApp"/>
@@ -11,4 +11,4 @@
    <reference bind="setCmsContext" cardinality="1..1" interface="org.argeo.api.cms.CmsContext" name="CmsContext" policy="static"/>
    <reference bind="setContentRepository" cardinality="1..1" interface="org.argeo.api.acr.ContentRepository" name="ContentRepository" policy="static"/>
    <reference bind="setAppUserState" cardinality="1..1" interface="org.argeo.app.api.AppUserState" name="AppUserState" policy="static"/>
-</scr:component>
\ No newline at end of file
+</scr:component>
index ecfea87a5537d7074f16ddb283112d626b270c83..3fec7efbaaa5d7f11b21b6194dc85325da219f71 100644 (file)
@@ -6,5 +6,5 @@
    </service>
    <property name="service.ranking" type="Integer" value="-1000"/>
    <properties entry="config/termsLayer.properties"/>
-   <reference bind="setEntryArea" cardinality="1..1" interface="org.argeo.cms.swt.acr.SwtUiProvider" name="CmsUiProvider" policy="dynamic" target="(service.pid=argeo.suite.ui.termsEntryArea)"/>
+   <reference bind="setEntryArea" cardinality="1..1" interface="org.argeo.cms.swt.acr.SwtUiProvider" name="CmsUiProvider" policy="dynamic" target="(service.pid=argeo.product.knowledge.termsEntryArea)"/>
 </scr:component>
index d9427096617eac732aadce11ff00704585375be3..a91678c765ae3a22f37159e81fe0faa9d2a759c4 100644 (file)
@@ -1,9 +1,11 @@
 Service-Component:\
 OSGI-INF/swtArgeoApp.xml,\
+OSGI-INF/leadPane.xml,\
 OSGI-INF/termsEntryArea.xml,\
 OSGI-INF/termsLayer.xml,\
 
 Import-Package:\
+org.argeo.cms.swt.acr,\
 org.argeo.app.swt.ux,\
 org.argeo.app.swt.terms,\
 *
\ No newline at end of file
diff --git a/org.argeo.product.knowledge/config/leadPane.properties b/org.argeo.product.knowledge/config/leadPane.properties
new file mode 100644 (file)
index 0000000..ce3538f
--- /dev/null
@@ -0,0 +1 @@
+service.pid=argeo.product.knowledge.leadPane
index 96e1d314fdccdd761dc87acba7d3637a7c5bb9ce..d93d41c7c36498ba5ef887f7f6d2954ec89aa55d 100644 (file)
@@ -1,5 +1,7 @@
 service.pid=argeo.product.knowledge.swtArgeoApp
 
+sharedPidPrefix=argeo.suite.ui
+
 event.topics=argeo/suite/*
 
 argeo.cms.app.contextName=argeo/knowledge
\ No newline at end of file
index cd31517b975504ddecea2cda355aaae73c98508e..2a360344ce97f736b90a5da4f32ea63bfb2175ce 100644 (file)
@@ -1 +1 @@
-service.pid=argeo.suite.ui.termsEntryArea
+service.pid=argeo.product.knowledge.termsEntryArea
index 2c0532ee2c07fb7dc821a640864bca294e262fb0..be7abcc9ccd082edc123d138b8014999255dfe8b 100644 (file)
@@ -1,4 +1,5 @@
-service.pid=argeo.suite.ui.termsLayer
+service.pid=argeo.product.knowledge.termsLayer
+
 title=Terms
 icon=dashboard
 
index 30053033b9c5d7b6fe66d760b78444ec3ef606ac..f5ad2572e7a1f46b10ba0c11c9a71238e6e18d03 100644 (file)
@@ -16,6 +16,10 @@ import org.eclipse.swt.widgets.Composite;
 
 /** The view for the default UX of Argeo Suite. */
 public class SwtAppUi extends CmsSwtUi implements AppUi {
+       static enum Structural {
+               header, footer, leadPane, sidePane, loginScreen, adminLeadPane;
+       }
+
        private static final long serialVersionUID = 6207018859086689108L;
        private final static CmsLog log = CmsLog.getLog(SwtAppUi.class);
 
index 0b6c34d33e38f53d17d496eb7fef07c5023b29ac..6d2dfcedbedaec9f072587020185287ff666bad7 100644 (file)
@@ -55,17 +55,21 @@ public class SwtArgeoApp extends AbstractArgeoApp implements CmsEventSubscriber
        public final static String DEFAULT_UI_NAME_PROPERTY = "defaultUiName";
        public final static String DEFAULT_THEME_ID_PROPERTY = "defaultThemeId";
        public final static String DEFAULT_LAYER_PROPERTY = "defaultLayer";
+       public final static String SHARED_PID_PREFIX_PROPERTY = "sharedPidPrefix";
+
        private final static String LOGIN = "login";
        private final static String HOME_STATE = "~";
 
        private String publicBasePath = null;
 
        private String pidPrefix;
-       private String headerPid;
-       private String footerPid;
-       private String leadPanePid;
-       private String adminLeadPanePid;
-       private String loginScreenPid;
+       private String sharedPidPrefix;
+
+//     private String headerPid;
+//     private String footerPid;
+//     private String leadPanePid;
+//     private String adminLeadPanePid;
+//     private String loginScreenPid;
 
        private String defaultUiName = "app";
        private String adminUiName = "admin";
@@ -93,7 +97,7 @@ public class SwtArgeoApp extends AbstractArgeoApp implements CmsEventSubscriber
        // JCR
 //     private Repository repository;
 
-       public void init(Map<String, Object> properties) {
+       public void start(Map<String, Object> properties) {
                for (SuiteUxEvent event : SuiteUxEvent.values()) {
                        getCmsContext().getCmsEventBus().addEventSubscriber(event.topic(), this);
                }
@@ -107,26 +111,28 @@ public class SwtArgeoApp extends AbstractArgeoApp implements CmsEventSubscriber
                        defaultThemeId = LangUtils.get(properties, DEFAULT_THEME_ID_PROPERTY);
                if (properties.containsKey(DEFAULT_LAYER_PROPERTY))
                        defaultLayerPid = LangUtils.get(properties, DEFAULT_LAYER_PROPERTY);
+               sharedPidPrefix = LangUtils.get(properties, SHARED_PID_PREFIX_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());
+                       int lastDotIndex = servicePid.lastIndexOf('.');
+                       if (lastDotIndex >= 0) {
+                               pidPrefix = servicePid.substring(0, lastDotIndex);
                        }
                }
 
-               if (pidPrefix == null)
-                       throw new IllegalArgumentException("PID prefix must be set.");
+//             if (pidPrefix == null)
+//                     throw new IllegalArgumentException("PID prefix must be set.");
 
-               headerPid = pidPrefix + "header";
-               footerPid = pidPrefix + "footer";
-               leadPanePid = pidPrefix + "leadPane";
-               adminLeadPanePid = pidPrefix + "adminLeadPane";
-               loginScreenPid = pidPrefix + "loginScreen";
+//             headerPid = pidPrefix + "header";
+//             footerPid = pidPrefix + "footer";
+//             leadPanePid = pidPrefix + "leadPane";
+//             adminLeadPanePid = pidPrefix + "adminLeadPane";
+//             loginScreenPid = pidPrefix + "loginScreen";
        }
 
-       public void destroy(Map<String, Object> properties) {
+       public void stop(Map<String, Object> properties) {
                for (SwtAppUi ui : managedUis.values())
                        if (!ui.isDisposed()) {
                                ui.getDisplay().syncExec(() -> ui.dispose());
@@ -187,13 +193,13 @@ public class SwtArgeoApp extends AbstractArgeoApp implements CmsEventSubscriber
 
                        ProvidedSession contentSession = (ProvidedSession) CmsUxUtils.getContentSession(contentRepository, cmsView);
 
-                       SwtUiProvider headerUiProvider = findUiProvider(headerPid);
-                       SwtUiProvider footerUiProvider = findUiProvider(footerPid);
+                       SwtUiProvider headerUiProvider = findStructuralUiProvider(SwtAppUi.Structural.header.name());
+                       SwtUiProvider footerUiProvider = findStructuralUiProvider(SwtAppUi.Structural.footer.name());
                        SwtUiProvider leadPaneUiProvider;
                        if (adminUiName.equals(uiName)) {
-                               leadPaneUiProvider = findUiProvider(adminLeadPanePid);
+                               leadPaneUiProvider = findStructuralUiProvider(SwtAppUi.Structural.adminLeadPane.name());
                        } else {
-                               leadPaneUiProvider = findUiProvider(leadPanePid);
+                               leadPaneUiProvider = findStructuralUiProvider(SwtAppUi.Structural.leadPane.name());
                        }
 
                        Localized appTitle = null;
@@ -208,7 +214,8 @@ public class SwtArgeoApp extends AbstractArgeoApp implements CmsEventSubscriber
                                if (headerUiProvider != null)
                                        refreshPart(headerUiProvider, ui.getHeader(), context);
                                ui.refreshBelowHeader(false);
-                               refreshPart(findUiProvider(loginScreenPid), ui.getBelowHeader(), context);
+                               SwtUiProvider loginScreenUiProvider = findStructuralUiProvider(SwtAppUi.Structural.loginScreen.name());
+                               refreshPart(loginScreenUiProvider, ui.getBelowHeader(), context);
                                if (footerUiProvider != null)
                                        refreshPart(footerUiProvider, ui.getFooter(), context);
                                ui.layout(true, true);
@@ -278,6 +285,17 @@ public class SwtArgeoApp extends AbstractArgeoApp implements CmsEventSubscriber
                uiProvider.createUiPart(part, context);
        }
 
+       private SwtUiProvider findStructuralUiProvider(String suffix) {
+               SwtUiProvider res = null;
+               if (pidPrefix != null)
+                       res = findUiProvider(pidPrefix + "." + suffix);
+               if (res != null)
+                       return res;
+               if (sharedPidPrefix != null)
+                       res = findUiProvider(sharedPidPrefix + "." + suffix);
+               return res;
+       }
+
        private SwtUiProvider findUiProvider(String pid) {
                if (!uiProvidersByPid.containsKey(pid))
                        return null;
index 7a516fcfd896de79bf061bc4ea611a052e46b26b..604f9f97aca32e7de305d8117d537bdf139a3a4a 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="init" deactivate="destroy" name="Argeo Suite App">
+<scr:component xmlns:scr="http://www.osgi.org/xmlns/scr/v1.1.0" activate="start" deactivate="stop" name="Argeo Suite App">
    <implementation class="org.argeo.app.swt.ux.SwtArgeoApp"/>
    <service>
       <provide interface="org.argeo.api.cms.CmsApp"/>