]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/ServletHttpContext.java
Move Equinox specific code to the appropriate variant
[lgpl/argeo-commons.git] / org.argeo.cms.lib.jetty / src / org / argeo / cms / jetty / ServletHttpContext.java
1 package org.argeo.cms.jetty;
2
3 import java.util.Collections;
4 import java.util.HashMap;
5 import java.util.Map;
6
7 import javax.websocket.DeploymentException;
8 import javax.websocket.server.ServerContainer;
9 import javax.websocket.server.ServerEndpointConfig;
10
11 import org.argeo.api.cms.CmsLog;
12 import org.argeo.cms.servlet.httpserver.HttpContextServlet;
13 import org.argeo.cms.websocket.server.WebsocketEndpoints;
14 import org.eclipse.jetty.servlet.ServletContextHandler;
15 import org.eclipse.jetty.servlet.ServletHolder;
16
17 import com.sun.net.httpserver.HttpHandler;
18
19 /**
20 * A {@link JettyHttpContext} based on registering a servlet to the root handler
21 * of the {@link JettyHttpServer}, in order to integrate the sessions.
22 */
23 public class ServletHttpContext extends JettyHttpContext {
24 private final static CmsLog log = CmsLog.getLog(ServletHttpContext.class);
25
26 private Map<String, Object> attributes = Collections.synchronizedMap(new HashMap<>());
27
28 public ServletHttpContext(JettyHttpServer httpServer, String path) {
29 super(httpServer, path);
30
31 ServletContextHandler rootContextHandler = httpServer.getRootContextHandler();
32 HttpContextServlet servlet = new HttpContextServlet(this);
33 rootContextHandler.addServlet(new ServletHolder(servlet), path + "*");
34 }
35
36 @Override
37 public void setHandler(HttpHandler handler) {
38 super.setHandler(handler);
39
40 // web socket
41 if (handler instanceof WebsocketEndpoints) {
42 ServerContainer serverContainer = getJettyHttpServer().getRootServerContainer();
43 for (Class<?> clss : ((WebsocketEndpoints) handler).getEndPoints()) {
44 try {
45 serverContainer.addEndpoint(clss);
46 log.debug(() -> "Added web socket " + clss + " to " + getPath());
47 } catch (DeploymentException e) {
48 log.error("Cannot deploy Web Socket " + clss, e);
49 }
50 }
51 }
52 }
53
54 @Override
55 public Map<String, Object> getAttributes() {
56 return attributes;
57 }
58
59 @Override
60 protected ServletContextHandler getServletContextHandler() {
61 return getJettyHttpServer().getRootContextHandler();
62 }
63
64 }