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=2752f591462f846423020ef1c1989766b20cd554;hp=1b94bdad12ca880806de1643c37d27fbc6f0cc52;hpb=4e548693acc16f97b74eaaa95d6841054a172b85;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 1b94bdad1..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,21 +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 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 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()) { @@ -69,6 +81,40 @@ public class CmsDeploymentImpl implements CmsDeployment { httpExpected = httpPort != null || httpsPort != null; } + 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; // }