1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.hc.core5.http.io.support;
28
29 import java.io.IOException;
30
31 import org.apache.hc.core5.annotation.Contract;
32 import org.apache.hc.core5.annotation.ThreadingBehavior;
33 import org.apache.hc.core5.http.ClassicHttpRequest;
34 import org.apache.hc.core5.http.ClassicHttpResponse;
35 import org.apache.hc.core5.http.HttpException;
36 import org.apache.hc.core5.http.HttpRequestMapper;
37 import org.apache.hc.core5.http.HttpResponseFactory;
38 import org.apache.hc.core5.http.HttpStatus;
39 import org.apache.hc.core5.http.impl.io.DefaultClassicHttpResponseFactory;
40 import org.apache.hc.core5.http.io.HttpFilterChain;
41 import org.apache.hc.core5.http.io.HttpFilterHandler;
42 import org.apache.hc.core5.http.io.HttpRequestHandler;
43 import org.apache.hc.core5.http.protocol.HttpContext;
44 import org.apache.hc.core5.util.Args;
45
46
47
48
49
50
51
52
53 @Contract(threading = ThreadingBehavior.STATELESS)
54 public final class TerminalServerFilter implements HttpFilterHandler {
55
56 private final HttpRequestMapper<HttpRequestHandler> handlerMapper;
57 private final HttpResponseFactory<ClassicHttpResponse> responseFactory;
58
59 public TerminalServerFilter(
60 final HttpRequestMapper<HttpRequestHandler> handlerMapper,
61 final HttpResponseFactory<ClassicHttpResponse> responseFactory) {
62 this.handlerMapper = Args.notNull(handlerMapper, "Handler mapper");
63 this.responseFactory = responseFactory != null ? responseFactory : DefaultClassicHttpResponseFactory.INSTANCE;
64 }
65
66 @Override
67 public void handle(
68 final ClassicHttpRequest request,
69 final HttpFilterChain.ResponseTrigger responseTrigger,
70 final HttpContext context,
71 final HttpFilterChain chain) throws HttpException, IOException {
72 final ClassicHttpResponse response = responseFactory.newHttpResponse(HttpStatus.SC_OK);
73 final HttpRequestHandler handler = handlerMapper.resolve(request, context);
74 if (handler != null) {
75 handler.handle(request, response, context);
76 } else {
77 response.setCode(HttpStatus.SC_NOT_IMPLEMENTED);
78 }
79 responseTrigger.submitResponse(response);
80 }
81 }