Skip to content

Commit 4a18ff2

Browse files
committed
Refactor Response to be abstract class instead of interface
1 parent 2545f0d commit 4a18ff2

File tree

10 files changed

+49
-87
lines changed

10 files changed

+49
-87
lines changed

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,9 @@ private String htmlLinksForContents(Path root, Path[] paths) {
6363

6464
private Response responseForFile(Path path) {
6565
byte[] payload = pathExaminer.fileContents(path);
66-
Header[] headers = new Header[]{new ContentTypeHeader(path)};
67-
return new OkResponse(payload, headers);
66+
OkResponse okResponse = new OkResponse(payload);
67+
okResponse.setHeader(new ContentTypeHeader(path));
68+
return okResponse;
6869
}
6970

7071
private Map<String, Responder> getRouteMap() {

src/main/java/httpserver/responder/LogsResponder.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import httpserver.AppConfig;
44
import httpserver.Authorizer;
5-
import httpserver.Header;
65
import httpserver.Request;
76
import httpserver.response.OkResponse;
87
import httpserver.response.Response;
@@ -13,7 +12,7 @@ public class LogsResponder implements Responder {
1312
public Response respond(AppConfig appConfig, Request request) {
1413
if (new Authorizer().authorize(request)) {
1514
byte[] log = appConfig.getLogger().readLog();
16-
return new OkResponse(log, new Header[0]);
15+
return new OkResponse(log);
1716
} else {
1817
return new UnauthorizedResponse();
1918
}
Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,11 @@
11
package httpserver.response;
22

3-
import httpserver.Header;
3+
public class FourEighteenResponse extends Response {
4+
public FourEighteenResponse() {
5+
super.setPayload("I'm a teapot".getBytes());
6+
}
47

5-
public class FourEighteenResponse implements Response {
6-
@Override
78
public int getStatusCode() {
89
return 418;
910
}
10-
11-
@Override
12-
public byte[] getPayload() {
13-
return "I'm a teapot".getBytes();
14-
}
15-
16-
@Override
17-
public Header[] getHeaders() {
18-
return new Header[0];
19-
}
2011
}
Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,7 @@
11
package httpserver.response;
22

3-
import httpserver.Header;
4-
5-
public class MethodNotAllowedResponse implements Response {
6-
@Override
3+
public class MethodNotAllowedResponse extends Response {
74
public int getStatusCode() {
85
return 405;
96
}
10-
11-
@Override
12-
public byte[] getPayload() {
13-
return new byte[0];
14-
}
15-
16-
@Override
17-
public Header[] getHeaders() {
18-
return new Header[0];
19-
}
207
}
Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,7 @@
11
package httpserver.response;
22

3-
import httpserver.Header;
4-
5-
public class NotFoundResponse implements Response {
6-
@Override
3+
public class NotFoundResponse extends Response {
74
public int getStatusCode() {
85
return 404;
96
}
10-
11-
@Override
12-
public byte[] getPayload() {
13-
return new byte[0];
14-
}
15-
16-
@Override
17-
public Header[] getHeaders() {
18-
return new Header[0];
19-
}
207
}
Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,12 @@
11
package httpserver.response;
22

3-
import httpserver.Header;
4-
5-
public class OkResponse implements Response {
6-
private final byte[] payload;
7-
private final Header[] headers;
3+
public class OkResponse extends Response {
84

95
public OkResponse(byte[] payload) {
10-
this.payload = payload;
11-
this.headers = new Header[0];
12-
}
13-
14-
public OkResponse(byte[] payload, Header[] headers) {
15-
this.payload = payload;
16-
this.headers = headers;
6+
super.setPayload(payload);
177
}
188

19-
@Override
209
public int getStatusCode() {
2110
return 200;
2211
}
23-
24-
@Override
25-
public byte[] getPayload() {
26-
return payload;
27-
}
28-
29-
public Header[] getHeaders() {
30-
return this.headers;
31-
}
3212
}

src/main/java/httpserver/response/Response.java

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

33
import httpserver.Header;
44

5-
public interface Response {
6-
int getStatusCode();
5+
import java.util.ArrayList;
6+
import java.util.List;
77

8-
byte[] getPayload();
8+
public abstract class Response {
9+
private byte[] payload;
10+
private final List<Header> headers;
911

10-
Header[] getHeaders();
12+
public Response() {
13+
this.payload = new byte[0];
14+
this.headers = new ArrayList<>();
15+
}
16+
17+
public abstract int getStatusCode();
18+
19+
public byte[] getPayload() {
20+
return payload;
21+
}
22+
23+
public void setPayload(byte[] newPayload) {
24+
payload = newPayload;
25+
}
26+
27+
public Header[] getHeaders() {
28+
return headers.toArray(new Header[0]);
29+
}
30+
31+
public void setHeader(Header header) {
32+
headers.add(header);
33+
}
1134
}

src/main/java/httpserver/response/UnauthorizedResponse.java

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,12 @@
22

33
import httpserver.Header;
44

5-
public class UnauthorizedResponse implements Response {
6-
@Override
7-
public int getStatusCode() {
8-
return 401;
9-
}
10-
11-
@Override
12-
public byte[] getPayload() {
13-
return new byte[0];
5+
public class UnauthorizedResponse extends Response {
6+
public UnauthorizedResponse() {
7+
super.setHeader(new Header("WWW-Authenticate", "Basic realm=\"\""));
148
}
159

16-
@Override
17-
public Header[] getHeaders() {
18-
return new Header[]{new Header("WWW-Authenticate", "Basic realm=\"\"")};
10+
public int getStatusCode() {
11+
return 401;
1912
}
2013
}

src/test/java/httpserver/ResponseWriterTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ public void writes200RequestWithPayload() throws Exception {
3636
public void writesResponseHeaders() throws Exception {
3737
Header headerMock = mock(Header.class);
3838
when(headerMock.toString()).thenReturn("example: header");
39-
Header[] headers = new Header[]{headerMock};
40-
Response response = new OkResponse("example".getBytes(), headers);
39+
Response response = new OkResponse("example".getBytes());
40+
response.setHeader(headerMock);
4141

4242
String output = outputForResponse(response);
4343

src/test/java/httpserver/response/OkResponseTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,9 @@ public class OkResponseTest {
1313
public OkResponseTest() {
1414
Header header1 = new Header("header1", "value");
1515
Header header2 = new Header("header2", "v");
16-
Header[] headers = new Header[]{header1, header2};
17-
this.okResponse = new OkResponse("test payload".getBytes(), headers);
16+
this.okResponse = new OkResponse("test payload".getBytes());
17+
okResponse.setHeader(header1);
18+
okResponse.setHeader(header2);
1819
}
1920

2021
@Test

0 commit comments

Comments
 (0)