Adapt to changes in Argeo TP
[lgpl/argeo-commons.git] / org.argeo.cms.lib.jetty / src / org / argeo / cms / jetty / CmsJettyServer.java
index 4927e6f1006ab5da0d7b9eac079bbc31052c7a73..8e6db220c18c9ea2fec39c6798879109b558b317 100644 (file)
@@ -3,45 +3,26 @@ package org.argeo.cms.jetty;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.util.Map;
+import java.util.concurrent.CompletableFuture;
 
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 import javax.websocket.DeploymentException;
 import javax.websocket.server.ServerContainer;
-import javax.websocket.server.ServerEndpointConfig;
-import com.sun.net.httpserver.Authenticator;
-import com.sun.net.httpserver.HttpContext;
-
-import org.argeo.api.cms.CmsState;
-import org.argeo.cms.CmsDeployProperty;
-import org.argeo.cms.websocket.server.CmsWebSocketConfigurator;
-import org.argeo.cms.websocket.server.TestEndpoint;
-import org.eclipse.jetty.server.session.SessionHandler;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer;
-import org.eclipse.jetty.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer.Configurator;
 
+import org.eclipse.jetty.ee8.nested.SessionHandler;
+import org.eclipse.jetty.ee8.servlet.ServletContextHandler;
+import org.eclipse.jetty.ee8.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer;
+import org.eclipse.jetty.ee8.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer.Configurator;
+
+/** A {@link JettyHttpServer} which is compatible with Equinox servlets. */
 public class CmsJettyServer extends JettyHttpServer {
        private static final String CONTEXT_TEMPDIR = "javax.servlet.context.tempdir";
        // Equinox compatibility
        private static final String INTERNAL_CONTEXT_CLASSLOADER = "org.eclipse.equinox.http.jetty.internal.ContextClassLoader";
-//     private static final CmsLog log = CmsLog.getLog(CmsJettyServer.class);
-
-//     private Server server;
-//     private Path tempDir;
-//
-//     private ServerConnector httpConnector;
-//     private ServerConnector httpsConnector;
        private Path tempDir;
 
-       // WebSocket
-//     private ServerContainer wsServerContainer;
-       private ServerEndpointConfig.Configurator wsEndpointConfigurator;
-
-       private CmsState cmsState;
-
-//     private Authenticator defaultAuthenticator;
+       private CompletableFuture<ServerContainer> serverContainer = new CompletableFuture<>();
 
        protected void addServlets(ServletContextHandler servletContextHandler) throws ServletException {
        }
@@ -56,6 +37,7 @@ public class CmsJettyServer extends JettyHttpServer {
                super.start();
        }
 
+       @Override
        protected ServletContextHandler createRootContextHandler() {
                ServletContextHandler servletContextHandler = new ServletContextHandler();
                servletContextHandler.setAttribute(INTERNAL_CONTEXT_CLASSLOADER,
@@ -68,59 +50,30 @@ public class CmsJettyServer extends JettyHttpServer {
                handler.setMaxInactiveInterval(-1);
                servletContextHandler.setSessionHandler(handler);
 
-               return servletContextHandler;
-       }
-
-       @Override
-       protected void configureRootContextHandler(ServletContextHandler servletContextHandler) throws ServletException {
-               addServlets(servletContextHandler);
-               enableWebSocket(servletContextHandler);
+               JavaxWebSocketServletContainerInitializer.configure(servletContextHandler, new Configurator() {
 
-       }
+                       @Override
+                       public void accept(ServletContext servletContext, ServerContainer serverContainer)
+                                       throws DeploymentException {
+                               CmsJettyServer.this.serverContainer.complete(serverContainer);
+                       }
+               });
 
-//     @Override
-//     public synchronized HttpContext createContext(String path) {
-//             HttpContext httpContext = super.createContext(path);
-//             httpContext.setAuthenticator(defaultAuthenticator);
-//             return httpContext;
-//     }
-
-       protected void enableWebSocket(ServletContextHandler servletContextHandler) {
-               String webSocketEnabled = getDeployProperty(CmsDeployProperty.WEBSOCKET_ENABLED);
-               // web socket
-               if (webSocketEnabled != null && webSocketEnabled.equals(Boolean.toString(true))) {
-//                     JavaxWebSocketServletContainerInitializer.configure(servletContextHandler, new Configurator() {
-//
-//                             @Override
-//                             public void accept(ServletContext servletContext, ServerContainer serverContainer)
-//                                             throws DeploymentException {
-////                                   wsServerContainer = serverContainer;
-//
-//                                     CmsWebSocketConfigurator wsEndpointConfigurator = new CmsWebSocketConfigurator();
-//
-//                                     ServerEndpointConfig config = ServerEndpointConfig.Builder
-//                                                     .create(TestEndpoint.class, "/ws/test/events/{topic}").configurator(wsEndpointConfigurator)
-//                                                     .build();
-//                                     try {
-//                                             serverContainer.addEndpoint(config);
-//                                     } catch (DeploymentException e) {
-//                                             throw new IllegalStateException("Cannot initalise the WebSocket server runtime.", e);
-//                                     }
-//                             }
-//                     });
-               }
+               return servletContextHandler;
        }
 
-       protected String getDeployProperty(CmsDeployProperty deployProperty) {
-               return cmsState.getDeployProperty(deployProperty.getProperty());
+       @Override
+       protected ServerContainer getRootServerContainer() {
+               return serverContainer.join();
        }
 
-       public void setCmsState(CmsState cmsState) {
-               this.cmsState = cmsState;
+       @Override
+       protected void configureRootContextHandler(ServletContextHandler servletContextHandler) throws ServletException {
+               addServlets(servletContextHandler);
        }
 
-//     public void setDefaultAuthenticator(Authenticator defaultAuthenticator) {
-//             this.defaultAuthenticator = defaultAuthenticator;
-//     }
+       /*
+        * WEB SOCKET
+        */
 
 }