From ed37119631fa2b14b38d374914f94e8073946042 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Thu, 3 Nov 2022 09:05:34 +0100 Subject: [PATCH] Simplify CMS RCP --- .../OSGI-INF/cmsRcpDisplayFactory.xml | 2 +- ...vletFactory.xml => cmsRcpHttpLauncher.xml} | 4 +-- swt/rcp/org.argeo.cms.swt.rcp/bnd.bnd | 3 +- .../org.argeo.cms.swt.rcp/build.properties | 2 +- .../cms/ui/rcp/CmsRcpDisplayFactory.java | 32 ++++++++++------- ...etFactory.java => CmsRcpHttpLauncher.java} | 7 ++-- .../cms/ui/rcp/servlet/CmsRcpServlet.java | 36 ------------------- 7 files changed, 28 insertions(+), 58 deletions(-) rename swt/rcp/org.argeo.cms.swt.rcp/OSGI-INF/{cmsRcpServletFactory.xml => cmsRcpHttpLauncher.xml} (71%) rename swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/{servlet/CmsRcpServletFactory.java => CmsRcpHttpLauncher.java} (94%) delete mode 100644 swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/servlet/CmsRcpServlet.java diff --git a/swt/rcp/org.argeo.cms.swt.rcp/OSGI-INF/cmsRcpDisplayFactory.xml b/swt/rcp/org.argeo.cms.swt.rcp/OSGI-INF/cmsRcpDisplayFactory.xml index a0c0f0f5c..8b1d14684 100644 --- a/swt/rcp/org.argeo.cms.swt.rcp/OSGI-INF/cmsRcpDisplayFactory.xml +++ b/swt/rcp/org.argeo.cms.swt.rcp/OSGI-INF/cmsRcpDisplayFactory.xml @@ -1,4 +1,4 @@ - + diff --git a/swt/rcp/org.argeo.cms.swt.rcp/OSGI-INF/cmsRcpServletFactory.xml b/swt/rcp/org.argeo.cms.swt.rcp/OSGI-INF/cmsRcpHttpLauncher.xml similarity index 71% rename from swt/rcp/org.argeo.cms.swt.rcp/OSGI-INF/cmsRcpServletFactory.xml rename to swt/rcp/org.argeo.cms.swt.rcp/OSGI-INF/cmsRcpHttpLauncher.xml index 5f6b94e04..03abe196c 100644 --- a/swt/rcp/org.argeo.cms.swt.rcp/OSGI-INF/cmsRcpServletFactory.xml +++ b/swt/rcp/org.argeo.cms.swt.rcp/OSGI-INF/cmsRcpHttpLauncher.xml @@ -1,6 +1,6 @@ - - + + diff --git a/swt/rcp/org.argeo.cms.swt.rcp/bnd.bnd b/swt/rcp/org.argeo.cms.swt.rcp/bnd.bnd index 91f0a8a37..5cf5164e1 100644 --- a/swt/rcp/org.argeo.cms.swt.rcp/bnd.bnd +++ b/swt/rcp/org.argeo.cms.swt.rcp/bnd.bnd @@ -1,3 +1,4 @@ +Bundle-SymbolicName: org.argeo.cms.swt.rcp;singleton=true Import-Package:\ org.argeo.cms.auth,\ @@ -8,5 +9,5 @@ org.w3c.css.sac,\ Service-Component:\ OSGI-INF/cmsRcpDisplayFactory.xml,\ -OSGI-INF/cmsRcpServletFactory.xml +OSGI-INF/cmsRcpHttpLauncher.xml diff --git a/swt/rcp/org.argeo.cms.swt.rcp/build.properties b/swt/rcp/org.argeo.cms.swt.rcp/build.properties index 5eef7058e..4ed1d4748 100644 --- a/swt/rcp/org.argeo.cms.swt.rcp/build.properties +++ b/swt/rcp/org.argeo.cms.swt.rcp/build.properties @@ -2,5 +2,5 @@ output.. = bin/ bin.includes = META-INF/,\ .,\ OSGI-INF/,\ - OSGI-INF/cmsRcpServletFactory.xml + OSGI-INF/cmsRcpHttpLauncher.xml source.. = src/ diff --git a/swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/CmsRcpDisplayFactory.java b/swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/CmsRcpDisplayFactory.java index 950accece..e94825db8 100644 --- a/swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/CmsRcpDisplayFactory.java +++ b/swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/CmsRcpDisplayFactory.java @@ -1,5 +1,7 @@ package org.argeo.cms.ui.rcp; +import java.lang.System.Logger; +import java.lang.System.Logger.Level; import java.nio.file.Path; import org.argeo.api.cms.CmsApp; @@ -9,6 +11,8 @@ import org.eclipse.swt.widgets.Display; /** Creates the SWT {@link Display} in a dedicated thread. */ public class CmsRcpDisplayFactory { + private final static Logger logger = System.getLogger(CmsRcpDisplayFactory.class.getName()); + /** File name in a run directory */ private final static String ARGEO_RCP_URL = "argeo.rcp.url"; @@ -50,20 +54,22 @@ public class CmsRcpDisplayFactory { @Override public void run() { - display = Display.getDefault(); - display.setRuntimeExceptionHandler((e) -> e.printStackTrace()); - display.setErrorHandler((e) -> e.printStackTrace()); - -// for (String contextName : cmsApps.keySet()) { -// openCmsApp(contextName); -// } - - while (!shutdown) { - if (!display.readAndDispatch()) - display.sleep(); + try { + display = Display.getDefault(); + display.setRuntimeExceptionHandler((e) -> e.printStackTrace()); + display.setErrorHandler((e) -> e.printStackTrace()); + + while (!shutdown) { + if (!display.readAndDispatch()) + display.sleep(); + } + display.dispose(); + display = null; + } catch (UnsatisfiedLinkError e) { + logger.log(Level.ERROR, + "Cannot load SWT, probably because the OSGi framework has been refresh. Restart the application.", + e); } - display.dispose(); - display = null; } } diff --git a/swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/servlet/CmsRcpServletFactory.java b/swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/CmsRcpHttpLauncher.java similarity index 94% rename from swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/servlet/CmsRcpServletFactory.java rename to swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/CmsRcpHttpLauncher.java index 778cd1b21..6246b0d0d 100644 --- a/swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/servlet/CmsRcpServletFactory.java +++ b/swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/CmsRcpHttpLauncher.java @@ -1,4 +1,4 @@ -package org.argeo.cms.ui.rcp.servlet; +package org.argeo.cms.ui.rcp; import static java.lang.System.Logger.Level.DEBUG; @@ -15,15 +15,14 @@ import java.util.Map; import java.util.concurrent.CompletableFuture; import org.argeo.api.cms.CmsApp; -import org.argeo.cms.ui.rcp.CmsRcpDisplayFactory; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; /** Publishes one {@link CmsRcpServlet} per {@link CmsApp}. */ -public class CmsRcpServletFactory { - private final static Logger logger = System.getLogger(CmsRcpServletFactory.class.getName()); +public class CmsRcpHttpLauncher { + private final static Logger logger = System.getLogger(CmsRcpHttpLauncher.class.getName()); private CompletableFuture httpServer = new CompletableFuture<>(); public void init() { diff --git a/swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/servlet/CmsRcpServlet.java b/swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/servlet/CmsRcpServlet.java deleted file mode 100644 index 8579527c1..000000000 --- a/swt/rcp/org.argeo.cms.swt.rcp/src/org/argeo/cms/ui/rcp/servlet/CmsRcpServlet.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.argeo.cms.ui.rcp.servlet; - -import java.io.IOException; -import java.lang.System.Logger; -import java.lang.System.Logger.Level; -import java.util.Objects; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.argeo.api.cms.CmsApp; -import org.argeo.cms.ui.rcp.CmsRcpDisplayFactory; - -/** Open the related app when called. */ -public class CmsRcpServlet extends HttpServlet { - private static final long serialVersionUID = -3944472431354848923L; - private final static Logger logger = System.getLogger(CmsRcpServlet.class.getName()); - - private CmsApp cmsApp; - - public CmsRcpServlet(CmsApp cmsApp) { - Objects.requireNonNull(cmsApp); - this.cmsApp = cmsApp; - } - - @Override - protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { - String path = req.getPathInfo(); - String uiName = path != null ? path.substring(path.lastIndexOf('/') + 1) : ""; - CmsRcpDisplayFactory.openCmsApp(cmsApp, uiName, null); - logger.log(Level.DEBUG, "Opened RCP UI " + uiName + " of CMS App " + req.getServletPath()); - } - -} -- 2.30.2