1 package org
.argeo
.cms
.jetty
;
3 import java
.util
.AbstractMap
;
4 import java
.util
.ArrayList
;
5 import java
.util
.Enumeration
;
6 import java
.util
.HashSet
;
9 import java
.util
.Objects
;
12 import org
.argeo
.cms
.servlet
.httpserver
.HttpContextServlet
;
13 import org
.eclipse
.jetty
.server
.Handler
;
14 import org
.eclipse
.jetty
.server
.handler
.ContextHandler
;
15 import org
.eclipse
.jetty
.servlet
.ServletContextHandler
;
16 import org
.eclipse
.jetty
.servlet
.ServletHolder
;
18 import com
.sun
.net
.httpserver
.Authenticator
;
19 import com
.sun
.net
.httpserver
.Filter
;
20 import com
.sun
.net
.httpserver
.HttpContext
;
21 import com
.sun
.net
.httpserver
.HttpHandler
;
22 import com
.sun
.net
.httpserver
.HttpServer
;
24 /** Trivial implementation of @{HttpContext}. */
25 class JettyHttpContext
extends HttpContext
{
26 private final JettyHttpServer httpServer
;
27 private final String path
;
28 private final ContextHandler contextHandler
;
29 private final ContextAttributes attributes
;
30 private final List
<Filter
> filters
= new ArrayList
<>();
32 private HttpHandler handler
;
33 private Authenticator authenticator
;
35 public JettyHttpContext(JettyHttpServer httpServer
, String path
) {
36 this.httpServer
= httpServer
;
39 ServletContextHandler servletContextHandler
= new ServletContextHandler();
40 servletContextHandler
.setContextPath(path
);
41 HttpContextServlet servlet
= new HttpContextServlet(this);
42 servletContextHandler
.addServlet(new ServletHolder(servlet
), "/*");
43 contextHandler
= servletContextHandler
;
45 attributes
= new ContextAttributes();
49 public HttpHandler
getHandler() {
54 public void setHandler(HttpHandler handler
) {
55 if (this.handler
!= null)
56 throw new IllegalArgumentException("Handler is already set");
57 Objects
.requireNonNull(handler
);
58 this.handler
= handler
;
60 if (httpServer
.isStarted())
62 contextHandler
.start();
63 } catch (Exception e
) {
64 throw new IllegalStateException("Cannot start context handler", e
);
69 public String
getPath() {
74 public HttpServer
getServer() {
79 public Map
<String
, Object
> getAttributes() {
84 public List
<Filter
> getFilters() {
89 public Authenticator
setAuthenticator(Authenticator auth
) {
90 Authenticator previousAuthenticator
= authenticator
;
91 this.authenticator
= auth
;
92 return previousAuthenticator
;
96 public Authenticator
getAuthenticator() {
100 public Handler
getContextHandler() {
101 return contextHandler
;
104 private class ContextAttributes
extends AbstractMap
<String
, Object
> {
106 public Set
<Entry
<String
, Object
>> entrySet() {
107 Set
<Entry
<String
, Object
>> entries
= new HashSet
<>();
108 for (Enumeration
<String
> keys
= contextHandler
.getAttributeNames(); keys
.hasMoreElements();) {
109 entries
.add(new ContextAttributeEntry(keys
.nextElement()));
115 public Object
put(String key
, Object value
) {
116 Object previousValue
= get(key
);
117 contextHandler
.setAttribute(key
, value
);
118 return previousValue
;
121 private class ContextAttributeEntry
implements Map
.Entry
<String
, Object
> {
122 private final String key
;
124 public ContextAttributeEntry(String key
) {
129 public String
getKey() {
134 public Object
getValue() {
135 return contextHandler
.getAttribute(key
);
139 public Object
setValue(Object value
) {
140 Object previousValue
= getValue();
141 contextHandler
.setAttribute(key
, value
);
142 return previousValue
;