|
1 | 1 | package httpserver; |
2 | 2 |
|
3 | | -import httpserver.responder.Responder; |
| 3 | +import httpserver.request.Request; |
| 4 | +import httpserver.responder.MethodResponder; |
4 | 5 |
|
5 | | -import java.util.HashMap; |
6 | | -import java.util.Map; |
| 6 | +import java.util.ArrayList; |
| 7 | +import java.util.List; |
7 | 8 |
|
8 | 9 | public class ResponderSupplier { |
9 | | - private final Responder invalidMethodResponder; |
10 | | - private final Map<Method, Responder> methodResponderMap; |
| 10 | + private final MethodResponder invalidMethodResponder; |
| 11 | + private final List<MethodResponder> methodResponders; |
11 | 12 |
|
12 | | - public ResponderSupplier(Responder invalidMethodResponder) { |
| 13 | + public ResponderSupplier(MethodResponder invalidMethodResponder) { |
13 | 14 | this.invalidMethodResponder = invalidMethodResponder; |
14 | | - this.methodResponderMap = new HashMap<>(); |
| 15 | + this.methodResponders = new ArrayList<>(); |
15 | 16 | } |
16 | 17 |
|
17 | | - public Responder responderForMethodString(String methodString) { |
18 | | - Method method; |
19 | | - try { |
20 | | - method = Method.valueOf(methodString); |
21 | | - } catch (IllegalArgumentException e) { |
22 | | - return invalidMethodResponder; |
| 18 | + public MethodResponder supplyResponder(Request request) { |
| 19 | + for (MethodResponder methodResponder: methodResponders) { |
| 20 | + if (methodResponder.handles(request)) { |
| 21 | + return methodResponder; |
| 22 | + } |
23 | 23 | } |
24 | | - return methodResponderMap.get(method); |
| 24 | + return invalidMethodResponder; |
25 | 25 | } |
26 | 26 |
|
27 | | - public void registerResponder(Method method, Responder responder) { |
28 | | - this.methodResponderMap.put(method, responder); |
| 27 | + public void registerResponder(MethodResponder methodResponder) { |
| 28 | + this.methodResponders.add(methodResponder); |
| 29 | + } |
| 30 | + |
| 31 | + public List<MethodResponder> allResponders() { |
| 32 | + return methodResponders; |
29 | 33 | } |
30 | 34 | } |
0 commit comments