X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fruntime%2FCmsDeploymentImpl.java;h=497ed923fa5f9ee2ae9bd46890f27ce39eae7754;hb=bfb5eb067a6796c0ee2a575b1e2431220352513a;hp=2353250c5bf88284aab165b54109122e79c03770;hpb=dca2b13e0e3ca3e7a9469e089b980c48c880ad1a;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsDeploymentImpl.java b/org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsDeploymentImpl.java index 2353250c5..497ed923f 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsDeploymentImpl.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/runtime/CmsDeploymentImpl.java @@ -1,22 +1,33 @@ package org.argeo.cms.internal.runtime; +import static org.argeo.api.cms.CmsConstants.CONTEXT_PATH; + +import java.util.Map; +import java.util.TreeMap; + +import org.argeo.api.cms.CmsConstants; import org.argeo.api.cms.CmsDeployment; import org.argeo.api.cms.CmsLog; import org.argeo.api.cms.CmsState; import org.argeo.cms.CmsDeployProperty; -import org.osgi.service.http.HttpService; + +import com.sun.net.httpserver.HttpHandler; +import com.sun.net.httpserver.HttpServer; /** Implementation of a CMS deployment. */ public class CmsDeploymentImpl implements CmsDeployment { private final CmsLog log = CmsLog.getLog(getClass()); // Readiness - private boolean httpExpected = false; - private HttpService httpService; +// private HttpService httpService; private CmsState cmsState; // private DeployConfig deployConfig; + private boolean httpExpected = false; + private HttpServer httpServer; + private Map httpHandlers = new TreeMap<>(); + public void start() { // httpExpected = deployConfig.getProps(KernelConstants.JETTY_FACTORY_PID, "default") != null; // if (deployConfig.hasDomain()) { @@ -40,9 +51,9 @@ public class CmsDeploymentImpl implements CmsDeployment { // return deployConfig.getProps(factoryPid, cn); // } - public boolean isHttpAvailableOrNotExpected() { - return (httpExpected ? httpService != null : true); - } +// public boolean isHttpAvailableOrNotExpected() { +// return (httpExpected ? httpService != null : true); +// } // private void loadIpaJaasConfiguration() { // if (System.getProperty(KernelConstants.JAAS_CONFIG_PROP) == null) { @@ -70,8 +81,42 @@ public class CmsDeploymentImpl implements CmsDeployment { httpExpected = httpPort != null || httpsPort != null; } - public void setHttpService(HttpService httpService) { - this.httpService = httpService; + public void setHttpServer(HttpServer httpServer) { + this.httpServer = httpServer; + // create contexts whose handles had already been published + for (String contextPath : httpHandlers.keySet()) { + HttpHandler httpHandler = httpHandlers.get(contextPath); + httpServer.createContext(contextPath, httpHandler); + log.debug(() -> "Added handler " + contextPath + " : " + httpHandler.getClass().getName()); + } + } + + public void addHttpHandler(HttpHandler httpHandler, Map properties) { + final String contextPath = properties.get(CONTEXT_PATH); + if (contextPath == null) { + log.warn("Property " + CONTEXT_PATH + " not set on HTTP handler " + properties + ". Ignoring it."); + return; + } + httpHandlers.put(contextPath, httpHandler); + if (httpServer == null) + return; + httpServer.createContext(contextPath, httpHandler); + log.debug(() -> "Added handler " + contextPath + " : " + httpHandler.getClass().getName()); + } + public void removeHttpHandler(HttpHandler httpHandler, Map properties) { + final String contextPath = properties.get(CmsConstants.CONTEXT_PATH); + if (contextPath == null) + return; // ignore silently + httpHandlers.remove(contextPath); + if (httpServer == null) + return; + httpServer.removeContext(contextPath); + log.debug(() -> "Removed handler " + contextPath + " : " + httpHandler.getClass().getName()); + } +// public void setHttpService(HttpService httpService) { +// this.httpService = httpService; +// } + }