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.ProtocolVersion;
8
9 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
10
11 @JsonDeserialize(builder = Protocol.Builder.class)
12 public final class Protocol {
13
14 private final String name;
15 private final int majorVersion;
16 private final int minorVersion;
17
18 private Protocol(Builder builder) {
19 this.name = builder.name;
20 this.majorVersion = builder.majorVersion;
21 this.minorVersion = builder.minorVersion;
22 }
23
24 public static Protocol build(ProtocolVersion mutable) {
25 Builder builder = builder();
26 builder.withName(mutable.getProtocol());
27 builder.withMajorVersion(mutable.getMajor());
28 builder.withMinorVersion(mutable.getMinor());
29 return builder.build();
30 }
31
32 public static Builder builder() {
33 return new Builder();
34 }
35
36 public static class Builder implements org.apache.commons.lang3.builder.Builder<Protocol> {
37
38 private String name;
39 private int majorVersion;
40 private int minorVersion;
41
42 public Builder withName(String name) {
43 this.name = name;
44 return this;
45 }
46
47 public Builder withMajorVersion(int majorVersion) {
48 this.majorVersion = majorVersion;
49 return this;
50 }
51
52 public Builder withMinorVersion(int minorVersion) {
53 this.minorVersion = minorVersion;
54 return this;
55 }
56
57 @Override
58 public Protocol build() {
59 return validate(new Protocol(this));
60 }
61
62 private static Protocol validate(Protocol instance) {
63 checkNotBlank(instance.name, "name");
64 checkMin(instance.majorVersion, 0, "majorVersion");
65 checkMin(instance.minorVersion, 0, "minorVersion");
66 return instance;
67 }
68
69 }
70
71 public String getName() {
72 return name;
73 }
74
75 public int getMajorVersion() {
76 return majorVersion;
77 }
78
79 public int getMinorVersion() {
80 return minorVersion;
81 }
82
83 @Override
84 public String toString() {
85 return format("%s/%s.%s", name, majorVersion, minorVersion);
86 }
87
88 }