Skip to content

Commit e18663a

Browse files
committed
Extract private inner class and tidy up RequestParser
1 parent da364dc commit e18663a

File tree

1 file changed

+48
-26
lines changed

1 file changed

+48
-26
lines changed

src/main/java/httpserver/RequestParser.java

Lines changed: 48 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,47 +16,57 @@ public RequestParser(AppConfig appConfig) {
1616
}
1717

1818
public Request parse(InputStream inputStream) throws IOException {
19-
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(inputStream));
19+
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
2020

21-
String firstLine = bufferedReader.readLine();
22-
23-
String[] parts = parseFirstLine(firstLine);
24-
String method = parts[0];
25-
String path = parts[1];
26-
String queryString = parts[2];
21+
RequestLine requestLine = getRequestLine(bufferedReader);
2722

28-
Header[] headers = parseHeaders(bufferedReader);
29-
log(firstLine, headers);
23+
Header[] headers = getHeaders(bufferedReader);
3024

3125
String body = getBody(bufferedReader);
3226

33-
return new Request(method, path, headers, queryString, body);
27+
return new Request(requestLine.getMethod(),
28+
requestLine.getPath(),
29+
headers,
30+
requestLine.getQueryString(),
31+
body);
3432
}
3533

36-
private String getBody(BufferedReader bufferedReader) throws IOException {
37-
String output = "";
38-
int counter = 0;
39-
while (counter < contentLength) {
40-
output = output + (char)bufferedReader.read();
41-
counter = counter + 1;
42-
}
43-
return output;
34+
private RequestLine getRequestLine(BufferedReader bufferedReader) throws IOException {
35+
String firstLine = bufferedReader.readLine();
36+
logger.log(firstLine);
37+
return parseRequestLine(firstLine);
4438
}
4539

46-
private void log(String firstLine, Header[] headers) {
47-
logger.log(firstLine);
48-
for (Header header: headers) {
49-
logger.log(header.toString());
40+
private class RequestLine {
41+
private final String method;
42+
private final String path;
43+
private final String queryString;
44+
45+
private String getMethod() {
46+
return method;
47+
}
48+
49+
private String getPath() {
50+
return path;
51+
}
52+
53+
private String getQueryString() {
54+
return queryString;
55+
}
56+
57+
private RequestLine(String method, String path, String queryString) {
58+
this.method = method;
59+
this.path = path;
60+
this.queryString = queryString;
5061
}
51-
logger.log("");
5262
}
5363

54-
private String[] parseFirstLine(String firstLine) {
64+
private RequestLine parseRequestLine(String firstLine) {
5565
String[] parts = firstLine.split(" ");
5666
String method = parts[0];
5767
String path = pathToParts(parts[1])[0];
5868
String queryString = pathToParts(parts[1])[1];
59-
return new String[]{method, new UrlDecoder().decode(path), queryString};
69+
return new RequestLine(method, new UrlDecoder().decode(path), queryString);
6070
}
6171

6272
private String[] pathToParts(String pathString) {
@@ -69,14 +79,16 @@ private String[] pathToParts(String pathString) {
6979
return pathParts;
7080
}
7181

72-
private Header[] parseHeaders(BufferedReader in) throws IOException {
82+
private Header[] getHeaders(BufferedReader in) throws IOException {
7383
List<Header> headers = new ArrayList<>();
7484
String inputLine;
7585

7686
while (!(inputLine = in.readLine()).equals("")) {
87+
logger.log(inputLine);
7788
Header header = parseHeader(inputLine);
7889
headers.add(header);
7990
}
91+
logger.log("\r\n");
8092

8193
return headers.toArray(new Header[0]);
8294
}
@@ -88,4 +100,14 @@ private Header parseHeader(String inputLine) {
88100
}
89101
return new Header(parts[0], parts[1]);
90102
}
103+
104+
private String getBody(BufferedReader bufferedReader) throws IOException {
105+
StringBuilder stringBuilder = new StringBuilder();
106+
int counter = 0;
107+
while (counter < contentLength) {
108+
stringBuilder.append((char)bufferedReader.read());
109+
counter = counter + 1;
110+
}
111+
return stringBuilder.toString();
112+
}
91113
}

0 commit comments

Comments
 (0)