From 54f1b61c22528ac114e56d2e1ca0050cbebd705d Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Wed, 14 Jun 2023 07:40:21 +0200 Subject: [PATCH] Introduce separate Knowledge App --- .../OSGI-INF/leadPane.xml | 12 ++++ .../OSGI-INF/swtArgeoApp.xml | 4 +- .../OSGI-INF/termsLayer.xml | 2 +- org.argeo.product.knowledge/bnd.bnd | 2 + .../config/leadPane.properties | 1 + .../config/swtArgeoApp.properties | 2 + .../config/termsEntryArea.properties | 2 +- .../config/termsLayer.properties | 3 +- .../src/org/argeo/app/swt/ux/SwtAppUi.java | 4 ++ .../src/org/argeo/app/swt/ux/SwtArgeoApp.java | 60 ++++++++++++------- swt/org.argeo.app.ui/OSGI-INF/cmsApp.xml | 2 +- 11 files changed, 67 insertions(+), 27 deletions(-) create mode 100644 org.argeo.product.knowledge/OSGI-INF/leadPane.xml create mode 100644 org.argeo.product.knowledge/config/leadPane.properties diff --git a/org.argeo.product.knowledge/OSGI-INF/leadPane.xml b/org.argeo.product.knowledge/OSGI-INF/leadPane.xml new file mode 100644 index 0000000..968b65a --- /dev/null +++ b/org.argeo.product.knowledge/OSGI-INF/leadPane.xml @@ -0,0 +1,12 @@ + + + + + + + + + argeo.product.knowledge.termsLayer + + + diff --git a/org.argeo.product.knowledge/OSGI-INF/swtArgeoApp.xml b/org.argeo.product.knowledge/OSGI-INF/swtArgeoApp.xml index ad18dd9..a278899 100644 --- a/org.argeo.product.knowledge/OSGI-INF/swtArgeoApp.xml +++ b/org.argeo.product.knowledge/OSGI-INF/swtArgeoApp.xml @@ -1,5 +1,5 @@ - + @@ -11,4 +11,4 @@ - \ No newline at end of file + diff --git a/org.argeo.product.knowledge/OSGI-INF/termsLayer.xml b/org.argeo.product.knowledge/OSGI-INF/termsLayer.xml index ecfea87..3fec7ef 100644 --- a/org.argeo.product.knowledge/OSGI-INF/termsLayer.xml +++ b/org.argeo.product.knowledge/OSGI-INF/termsLayer.xml @@ -6,5 +6,5 @@ - + diff --git a/org.argeo.product.knowledge/bnd.bnd b/org.argeo.product.knowledge/bnd.bnd index d942709..a91678c 100644 --- a/org.argeo.product.knowledge/bnd.bnd +++ b/org.argeo.product.knowledge/bnd.bnd @@ -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 index 0000000..ce3538f --- /dev/null +++ b/org.argeo.product.knowledge/config/leadPane.properties @@ -0,0 +1 @@ +service.pid=argeo.product.knowledge.leadPane diff --git a/org.argeo.product.knowledge/config/swtArgeoApp.properties b/org.argeo.product.knowledge/config/swtArgeoApp.properties index 96e1d31..d93d41c 100644 --- a/org.argeo.product.knowledge/config/swtArgeoApp.properties +++ b/org.argeo.product.knowledge/config/swtArgeoApp.properties @@ -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 diff --git a/org.argeo.product.knowledge/config/termsEntryArea.properties b/org.argeo.product.knowledge/config/termsEntryArea.properties index cd31517..2a36034 100644 --- a/org.argeo.product.knowledge/config/termsEntryArea.properties +++ b/org.argeo.product.knowledge/config/termsEntryArea.properties @@ -1 +1 @@ -service.pid=argeo.suite.ui.termsEntryArea +service.pid=argeo.product.knowledge.termsEntryArea diff --git a/org.argeo.product.knowledge/config/termsLayer.properties b/org.argeo.product.knowledge/config/termsLayer.properties index 2c0532e..be7abcc 100644 --- a/org.argeo.product.knowledge/config/termsLayer.properties +++ b/org.argeo.product.knowledge/config/termsLayer.properties @@ -1,4 +1,5 @@ -service.pid=argeo.suite.ui.termsLayer +service.pid=argeo.product.knowledge.termsLayer + title=Terms icon=dashboard diff --git a/swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtAppUi.java b/swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtAppUi.java index 3005303..f5ad257 100644 --- a/swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtAppUi.java +++ b/swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtAppUi.java @@ -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); diff --git a/swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtArgeoApp.java b/swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtArgeoApp.java index 0b6c34d..6d2dfce 100644 --- a/swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtArgeoApp.java +++ b/swt/org.argeo.app.swt/src/org/argeo/app/swt/ux/SwtArgeoApp.java @@ -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 properties) { + public void start(Map 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 properties) { + public void stop(Map 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; diff --git a/swt/org.argeo.app.ui/OSGI-INF/cmsApp.xml b/swt/org.argeo.app.ui/OSGI-INF/cmsApp.xml index 7a516fc..604f9f9 100644 --- a/swt/org.argeo.app.ui/OSGI-INF/cmsApp.xml +++ b/swt/org.argeo.app.ui/OSGI-INF/cmsApp.xml @@ -1,5 +1,5 @@ - + -- 2.30.2