1 package org.kuali.common.httplib.api.model;
2
3 import static java.lang.String.format;
4 import static org.kuali.common.jute.base.Precondition.checkMin;
5 import static org.kuali.common.jute.base.Precondition.checkNotBlank;
6
7 import org.apache.http.HttpStatus;
8 import org.apache.http.StatusLine;
9
10 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
11
12 @JsonDeserialize(builder = ResponseStatus.Builder.class)
13 public final class ResponseStatus {
14
15 public static final int HTTP_STATUS_CODE_MIN_VALUE = HttpStatus.SC_CONTINUE;
16
17 private final int code;
18 private final String text;
19
20 private ResponseStatus(Builder builder) {
21 this.code = builder.code;
22 this.text = builder.text;
23 }
24
25 public static ResponseStatus build(org.apache.http.HttpResponse mutable) {
26 StatusLine status = mutable.getStatusLine();
27 return build(status.getStatusCode(), status.getReasonPhrase());
28 }
29
30 public static ResponseStatus build(int code, String text) {
31 return builder().withCode(code).withText(text).build();
32 }
33
34 public static Builder builder() {
35 return new Builder();
36 }
37
38 public static class Builder implements org.apache.commons.lang3.builder.Builder<ResponseStatus> {
39
40 private int code;
41 private String text;
42
43 public Builder withCode(int code) {
44 this.code = code;
45 return this;
46 }
47
48 public Builder withText(String text) {
49 this.text = text;
50 return this;
51 }
52
53 @Override
54 public ResponseStatus build() {
55 return validate(new ResponseStatus(this));
56 }
57
58 private static ResponseStatus validate(ResponseStatus instance) {
59 checkMin(instance.code, HTTP_STATUS_CODE_MIN_VALUE, "code");
60 checkNotBlank(instance.text, "text");
61 return instance;
62 }
63
64 }
65
66 public int getCode() {
67 return code;
68 }
69
70 public String getText() {
71 return text;
72 }
73
74 @Override
75 public String toString() {
76 return format("%s %s", code, text);
77 }
78
79 }