]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms.lib.jetty/src/org/argeo/cms/jetty/JettyHttpContext.java
Move Equinox specific code to the appropriate variant
[lgpl/argeo-commons.git] / org.argeo.cms.lib.jetty / src / org / argeo / cms / jetty / JettyHttpContext.java
1 package org.argeo.cms.jetty;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Objects;
6
7 import javax.servlet.ServletContext;
8 import javax.websocket.DeploymentException;
9 import javax.websocket.server.ServerContainer;
10
11 import org.argeo.cms.websocket.server.WebsocketEndpoints;
12 import org.eclipse.jetty.servlet.ServletContextHandler;
13 import org.eclipse.jetty.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer;
14 import org.eclipse.jetty.websocket.javax.server.config.JavaxWebSocketServletContainerInitializer.Configurator;
15
16 import com.sun.net.httpserver.Authenticator;
17 import com.sun.net.httpserver.Filter;
18 import com.sun.net.httpserver.HttpContext;
19 import com.sun.net.httpserver.HttpHandler;
20 import com.sun.net.httpserver.HttpServer;
21
22 /**
23 * An @{HttpContext} implementation based on Jetty. It supports web sockets if
24 * the handler implements {@link WebsocketEndpoints}.
25 */
26 abstract class JettyHttpContext extends HttpContext {
27 private final JettyHttpServer httpServer;
28 private final String path;
29 private final List<Filter> filters = new ArrayList<>();
30
31 private HttpHandler handler;
32 private Authenticator authenticator;
33
34 public JettyHttpContext(JettyHttpServer httpServer, String path) {
35 this.httpServer = httpServer;
36 if (!path.endsWith("/"))
37 throw new IllegalArgumentException("Path " + path + " should end with a /");
38 this.path = path;
39 }
40
41 protected abstract ServletContextHandler getServletContextHandler();
42
43 @Override
44 public HttpHandler getHandler() {
45 return handler;
46 }
47
48 @Override
49 public void setHandler(HttpHandler handler) {
50 if (this.handler != null)
51 throw new IllegalArgumentException("Handler is already set");
52 Objects.requireNonNull(handler);
53 this.handler = handler;
54 }
55
56 @Override
57 public String getPath() {
58 return path;
59 }
60
61 @Override
62 public HttpServer getServer() {
63 return getJettyHttpServer();
64 }
65
66 protected JettyHttpServer getJettyHttpServer() {
67 return httpServer;
68 }
69
70 @Override
71 public List<Filter> getFilters() {
72 return filters;
73 }
74
75 @Override
76 public Authenticator setAuthenticator(Authenticator auth) {
77 Authenticator previousAuthenticator = authenticator;
78 this.authenticator = auth;
79 return previousAuthenticator;
80 }
81
82 @Override
83 public Authenticator getAuthenticator() {
84 return authenticator;
85 }
86
87 }