Skip to content

Commit 17c8d1d

Browse files
committed
Update RouteMap class to take a list of responders
1 parent 6632182 commit 17c8d1d

File tree

5 files changed

+42
-34
lines changed

5 files changed

+42
-34
lines changed

src/main/java/httpserver/ResponderSupplierFactory.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,15 @@ public ResponderSupplier makeResponderSupplier() {
2828
}
2929

3030
private RouteMap getRouteMap() {
31-
Map<String, Responder> routeMap = new HashMap<>();
32-
routeMap.put("/coffee", new CoffeeResponder());
33-
routeMap.put("/tea", new TeaResponder());
34-
routeMap.put("/logs", new LogsResponder());
35-
routeMap.put("/cookie", new CookieResponder());
36-
routeMap.put("/eat_cookie", new EatCookieResponder());
37-
routeMap.put("/parameters", new ParametersResponder());
38-
routeMap.put("/form", new FormGetResponder(new PathExaminer(), new FileOperator()));
39-
return new RouteMap(routeMap);
31+
Responder[] responderList = new Responder[]{
32+
new CoffeeResponder(),
33+
new TeaResponder(),
34+
new LogsResponder(),
35+
new CookieResponder(),
36+
new EatCookieResponder(),
37+
new ParametersResponder(),
38+
new FormGetResponder(new PathExaminer(), new FileOperator())
39+
};
40+
return new RouteMap(responderList);
4041
}
4142
}

src/main/java/httpserver/responder/GetResponder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ public GetResponder(RouteMap getRouteMap, PathExaminer pathExaminer, Html html)
2828
public Response respond(AppConfig appConfig, Request request) throws IOException {
2929
String requestPathString = request.getPathString();
3030

31-
if (specialCaseRouteMap.contains(requestPathString)) {
32-
return specialCaseRouteMap.getResponder(requestPathString).respond(appConfig, request);
31+
if (specialCaseRouteMap.hasRoute(requestPathString)) {
32+
return specialCaseRouteMap.getResponderForRoute(requestPathString).respond(appConfig, request);
3333
}
3434

3535
Path root = appConfig.getRoot();
Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,28 @@
11
package httpserver.responder;
22

3-
import java.util.Map;
4-
53
public class RouteMap {
6-
private final Map<String, Responder> routeStringToResponder;
74

8-
public RouteMap(Map<String, Responder> routes) {
9-
this.routeStringToResponder = routes;
5+
private final Responder[] responders;
6+
7+
public RouteMap(Responder[] routes) {
8+
this.responders = routes;
109
}
1110

12-
public boolean contains(String routeString) {
13-
return routeStringToResponder.containsKey(routeString);
11+
public boolean hasRoute(String routeString) {
12+
for (Responder responder: responders) {
13+
if (responder.allowed(routeString)) {
14+
return true;
15+
}
16+
}
17+
return false;
1418
}
1519

16-
public Responder getResponder(String routeString) {
17-
return routeStringToResponder.get(routeString);
20+
public Responder getResponderForRoute(String routeString) {
21+
for (Responder responder: responders) {
22+
if (responder.allowed(routeString)) {
23+
return responder;
24+
}
25+
}
26+
return null;
1827
}
1928
}

src/test/java/httpserver/responder/GetResponderTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,14 +48,14 @@ public void returns404ForBadPath() throws Exception {
4848
@Test
4949
public void ifPathInRouteMapGetsResponderAndCallsRespond() throws Exception {
5050
Responder responderMock = mock(Responder.class);
51-
when(routeMapMock.contains("/example_route")).thenReturn(true);
52-
when(routeMapMock.getResponder("/example_route")).thenReturn(responderMock);
51+
when(routeMapMock.hasRoute("/example_route")).thenReturn(true);
52+
when(routeMapMock.getResponderForRoute("/example_route")).thenReturn(responderMock);
5353
Request request = new Request("GET", "/example_route", new Header[0], "");
5454

5555
getResponder.respond(appConfigMock, request);
5656

57-
verify(routeMapMock).contains("/example_route");
58-
verify(routeMapMock).getResponder("/example_route");
57+
verify(routeMapMock).hasRoute("/example_route");
58+
verify(routeMapMock).getResponderForRoute("/example_route");
5959
verify(responderMock).respond(appConfigMock, request);
6060
}
6161

src/test/java/httpserver/responder/RouteMapTest.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,31 @@
22

33
import org.junit.Test;
44

5-
import java.util.HashMap;
6-
import java.util.Map;
7-
85
import static org.junit.Assert.*;
96
import static org.mockito.Mockito.*;
107

118
public class RouteMapTest {
129

13-
private final Map<String, Responder> routes;
1410
private final Responder responderMock;
1511
private final RouteMap routeMap;
12+
private final Responder[] routes;
1613

1714
public RouteMapTest() {
1815
responderMock = mock(Responder.class);
19-
routes = new HashMap<>();
20-
routes.put("GET", responderMock);
16+
when(responderMock.allowed("GET")).thenReturn(true);
17+
when(responderMock.allowed("AAA")).thenReturn(false);
18+
routes = new Responder[]{responderMock};
2119
routeMap = new RouteMap(routes);
2220
}
2321

2422
@Test
25-
public void containsRouteReturnsTrue() throws Exception {
26-
assertTrue(routeMap.contains("GET"));
27-
assertFalse(routeMap.contains("AAA"));
23+
public void containsRoute() throws Exception {
24+
assertTrue(routeMap.hasRoute("GET"));
25+
assertFalse(routeMap.hasRoute("AAA"));
2826
}
2927

3028
@Test
3129
public void returnsResponderForRoute() throws Exception {
32-
assertEquals(responderMock, routeMap.getResponder("GET"));
30+
assertEquals(responderMock, routeMap.getResponderForRoute("GET"));
3331
}
3432
}

0 commit comments

Comments
 (0)