001package org.kuali.common.httplib.api.model; 002 003import static java.lang.String.format; 004import static org.kuali.common.jute.base.Precondition.checkMin; 005import static org.kuali.common.jute.base.Precondition.checkNotBlank; 006 007import org.apache.http.ProtocolVersion; 008 009import com.fasterxml.jackson.databind.annotation.JsonDeserialize; 010 011@JsonDeserialize(builder = Protocol.Builder.class) 012public final class Protocol { 013 014 private final String name; 015 private final int majorVersion; 016 private final int minorVersion; 017 018 private Protocol(Builder builder) { 019 this.name = builder.name; 020 this.majorVersion = builder.majorVersion; 021 this.minorVersion = builder.minorVersion; 022 } 023 024 public static Protocol build(ProtocolVersion mutable) { 025 Builder builder = builder(); 026 builder.withName(mutable.getProtocol()); 027 builder.withMajorVersion(mutable.getMajor()); 028 builder.withMinorVersion(mutable.getMinor()); 029 return builder.build(); 030 } 031 032 public static Builder builder() { 033 return new Builder(); 034 } 035 036 public static class Builder implements org.apache.commons.lang3.builder.Builder<Protocol> { 037 038 private String name; 039 private int majorVersion; 040 private int minorVersion; 041 042 public Builder withName(String name) { 043 this.name = name; 044 return this; 045 } 046 047 public Builder withMajorVersion(int majorVersion) { 048 this.majorVersion = majorVersion; 049 return this; 050 } 051 052 public Builder withMinorVersion(int minorVersion) { 053 this.minorVersion = minorVersion; 054 return this; 055 } 056 057 @Override 058 public Protocol build() { 059 return validate(new Protocol(this)); 060 } 061 062 private static Protocol validate(Protocol instance) { 063 checkNotBlank(instance.name, "name"); 064 checkMin(instance.majorVersion, 0, "majorVersion"); 065 checkMin(instance.minorVersion, 0, "minorVersion"); 066 return instance; 067 } 068 069 } 070 071 public String getName() { 072 return name; 073 } 074 075 public int getMajorVersion() { 076 return majorVersion; 077 } 078 079 public int getMinorVersion() { 080 return minorVersion; 081 } 082 083 @Override 084 public String toString() { 085 return format("%s/%s.%s", name, majorVersion, minorVersion); 086 } 087 088}