1 package org.metricshub.http;
2
3 /*-
4 * ╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲
5 * HTTP Java Client
6 * ჻჻჻჻჻჻
7 * Copyright (C) 2023 MetricsHub
8 * ჻჻჻჻჻჻
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
12 *
13 * http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱╲╱
21 */
22
23 /**
24 * Represents an HTTP Response in a simplified way
25 * <ul>
26 * <li>Status code (200, 400, etc.)</li>
27 * <li>Header (Content-type: application/json, etc.)</li>
28 * <li>Body</li>
29 * </ul>
30 */
31 public class HttpResponse {
32
33 private int statusCode;
34 private StringBuilder body;
35 private StringBuilder header;
36
37 /**
38 * Create a new HTTP Response
39 */
40 public HttpResponse() {
41 statusCode = 0;
42 header = new StringBuilder();
43 body = new StringBuilder();
44 }
45
46 /**
47 * @return HTTP status code (200, 300, etc.)
48 */
49 public int getStatusCode() {
50 return statusCode;
51 }
52
53 /**
54 * Sets the HTTP status code
55 *
56 * @param code HTTP status code (200, 302, etc.)
57 */
58 public void setStatusCode(int code) {
59 statusCode = code;
60 }
61
62 /**
63 * Get the HTTP header as a single string like below:
64 * <pre>
65 * Content-type: text/html
66 * Content-length: 34094
67 * </pre>
68 * @return the HTTP header
69 */
70 public String getHeader() {
71 return header.toString();
72 }
73
74 /**
75 * Add one header value
76 * @param name Header name (e.g. "Content-type")
77 * @param value Header value (e.g. "text/html")
78 */
79 public void appendHeader(String name, String value) {
80 if (name != null && value != null && !name.isEmpty() && !value.isEmpty()) {
81 header.append(name).append(": ").append(value).append("\n");
82 }
83 }
84
85 /**
86 * @return the body of the HTTP response
87 */
88 public String getBody() {
89 return body.toString();
90 }
91
92 /**
93 * Append content to the body of the HTTP response
94 *
95 * @param data Data to append
96 */
97 public void appendBody(String data) {
98 body.append(data);
99 }
100
101 /**
102 * @return the entire HTTP response, header and body
103 */
104 @Override
105 public String toString() {
106 return new StringBuilder().append(header).append("\n").append(body).toString();
107 }
108 }