From: Mathieu Baudier Date: Mon, 19 Jul 2021 11:15:33 +0000 (+0200) Subject: Improve CMS web app lifecycle. X-Git-Tag: argeo-commons-2.1.103~10 X-Git-Url: https://git.argeo.org/?p=lgpl%2Fargeo-commons.git;a=commitdiff_plain;h=c5d120d226b31b3d930fc3006c56ac9e4d29ed2a Improve CMS web app lifecycle. --- diff --git a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebApp.java b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebApp.java index dda02646d..66333858d 100644 --- a/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebApp.java +++ b/org.argeo.cms.ui.rap/src/org/argeo/cms/web/CmsWebApp.java @@ -19,6 +19,7 @@ import org.eclipse.rap.rwt.application.Application.OperationMode; import org.eclipse.rap.rwt.client.WebClient; import org.eclipse.swt.widgets.Display; import org.osgi.framework.BundleContext; +import org.osgi.framework.Constants; import org.osgi.framework.ServiceRegistration; import org.osgi.service.event.EventAdmin; @@ -28,6 +29,7 @@ public class CmsWebApp implements ApplicationConfiguration, ExceptionHandler, Cm private BundleContext bundleContext; private CmsApp cmsApp; + private String cmsAppId; private EventAdmin eventAdmin; private ServiceRegistration rwtAppReg; @@ -38,13 +40,17 @@ public class CmsWebApp implements ApplicationConfiguration, ExceptionHandler, Cm public void init(BundleContext bundleContext, Map properties) { this.bundleContext = bundleContext; contextName = properties.get(CONTEXT_NAME); - if (cmsApp != null) - themingUpdated(); + if (cmsApp != null) { + if (cmsApp.allThemesAvailable()) + publishWebApp(); + } } public void destroy(BundleContext bundleContext, Map properties) { - if (cmsApp != null) + if (cmsApp != null) { cmsApp.removeCmsAppListener(this); + cmsApp = null; + } } @Override @@ -110,10 +116,17 @@ public class CmsWebApp implements ApplicationConfiguration, ExceptionHandler, Cm public void setCmsApp(CmsApp cmsApp, Map properties) { this.cmsApp = cmsApp; + this.cmsAppId = properties.get(Constants.SERVICE_PID); this.cmsApp.addCmsAppListener(this); } public void unsetCmsApp(CmsApp cmsApp, Map properties) { + String cmsAppId = properties.get(Constants.SERVICE_PID); + if (!cmsAppId.equals(this.cmsAppId)) + return; + if (this.cmsApp != null) { + this.cmsApp.removeCmsAppListener(this); + } if (rwtAppReg != null) rwtAppReg.unregister(); this.cmsApp = null; @@ -121,6 +134,11 @@ public class CmsWebApp implements ApplicationConfiguration, ExceptionHandler, Cm @Override public void themingUpdated() { + if (cmsApp != null && cmsApp.allThemesAvailable()) + publishWebApp(); + } + + protected void publishWebApp() { Dictionary regProps = LangUtils.dict(CONTEXT_NAME, contextName); if (rwtAppReg != null) rwtAppReg.unregister(); diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/AbstractCmsApp.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/AbstractCmsApp.java index e760a1018..77cd98383 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/AbstractCmsApp.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/AbstractCmsApp.java @@ -30,7 +30,8 @@ public abstract class AbstractCmsApp implements CmsApp { return themes.get(themeId); } - protected boolean allThemesAvailable() { + @Override + public boolean allThemesAvailable() { boolean themeMissing = false; uiNames: for (String uiName : getUiNames()) { String themeId = getThemeId(uiName); diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsApp.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsApp.java index 3e445ce7b..bd7b00334 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsApp.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/CmsApp.java @@ -25,6 +25,8 @@ public interface CmsApp { CmsTheme getTheme(String uiName); + boolean allThemesAvailable(); + void addCmsAppListener(CmsAppListener listener); void removeCmsAppListener(CmsAppListener listener);