001package com.box.sdkgen.schemas.accesstoken;
002
003import com.box.sdkgen.internal.NullableFieldTracker;
004import com.box.sdkgen.internal.SerializableObject;
005import com.box.sdkgen.schemas.resourcescope.ResourceScope;
006import com.box.sdkgen.serialization.json.EnumWrapper;
007import com.fasterxml.jackson.annotation.JsonFilter;
008import com.fasterxml.jackson.annotation.JsonProperty;
009import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
010import com.fasterxml.jackson.databind.annotation.JsonSerialize;
011import java.util.List;
012import java.util.Objects;
013
014/** A token that can be used to make authenticated API calls. */
015@JsonFilter("nullablePropertyFilter")
016public class AccessToken extends SerializableObject {
017
018  /** The requested access token. */
019  @JsonProperty("access_token")
020  protected String accessToken;
021
022  /** The time in seconds by which this token will expire. */
023  @JsonProperty("expires_in")
024  protected Long expiresIn;
025
026  /** The type of access token returned. */
027  @JsonDeserialize(using = AccessTokenTokenTypeField.AccessTokenTokenTypeFieldDeserializer.class)
028  @JsonSerialize(using = AccessTokenTokenTypeField.AccessTokenTokenTypeFieldSerializer.class)
029  @JsonProperty("token_type")
030  protected EnumWrapper<AccessTokenTokenTypeField> tokenType;
031
032  /**
033   * The permissions that this access token permits, providing a list of resources (files, folders,
034   * etc) and the scopes permitted for each of those resources.
035   */
036  @JsonProperty("restricted_to")
037  protected List<ResourceScope> restrictedTo;
038
039  /**
040   * The refresh token for this access token, which can be used to request a new access token when
041   * the current one expires.
042   */
043  @JsonProperty("refresh_token")
044  protected String refreshToken;
045
046  /**
047   * The type of downscoped access token returned. This is only returned if an access token has been
048   * downscoped.
049   */
050  @JsonDeserialize(
051      using = AccessTokenIssuedTokenTypeField.AccessTokenIssuedTokenTypeFieldDeserializer.class)
052  @JsonSerialize(
053      using = AccessTokenIssuedTokenTypeField.AccessTokenIssuedTokenTypeFieldSerializer.class)
054  @JsonProperty("issued_token_type")
055  protected EnumWrapper<AccessTokenIssuedTokenTypeField> issuedTokenType;
056
057  public AccessToken() {
058    super();
059  }
060
061  protected AccessToken(Builder builder) {
062    super();
063    this.accessToken = builder.accessToken;
064    this.expiresIn = builder.expiresIn;
065    this.tokenType = builder.tokenType;
066    this.restrictedTo = builder.restrictedTo;
067    this.refreshToken = builder.refreshToken;
068    this.issuedTokenType = builder.issuedTokenType;
069    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
070  }
071
072  public String getAccessToken() {
073    return accessToken;
074  }
075
076  public Long getExpiresIn() {
077    return expiresIn;
078  }
079
080  public EnumWrapper<AccessTokenTokenTypeField> getTokenType() {
081    return tokenType;
082  }
083
084  public List<ResourceScope> getRestrictedTo() {
085    return restrictedTo;
086  }
087
088  public String getRefreshToken() {
089    return refreshToken;
090  }
091
092  public EnumWrapper<AccessTokenIssuedTokenTypeField> getIssuedTokenType() {
093    return issuedTokenType;
094  }
095
096  @Override
097  public boolean equals(Object o) {
098    if (this == o) {
099      return true;
100    }
101    if (o == null || getClass() != o.getClass()) {
102      return false;
103    }
104    AccessToken casted = (AccessToken) o;
105    return Objects.equals(accessToken, casted.accessToken)
106        && Objects.equals(expiresIn, casted.expiresIn)
107        && Objects.equals(tokenType, casted.tokenType)
108        && Objects.equals(restrictedTo, casted.restrictedTo)
109        && Objects.equals(refreshToken, casted.refreshToken)
110        && Objects.equals(issuedTokenType, casted.issuedTokenType);
111  }
112
113  @Override
114  public int hashCode() {
115    return Objects.hash(
116        accessToken, expiresIn, tokenType, restrictedTo, refreshToken, issuedTokenType);
117  }
118
119  @Override
120  public String toString() {
121    return "AccessToken{"
122        + "accessToken='"
123        + accessToken
124        + '\''
125        + ", "
126        + "expiresIn='"
127        + expiresIn
128        + '\''
129        + ", "
130        + "tokenType='"
131        + tokenType
132        + '\''
133        + ", "
134        + "restrictedTo='"
135        + restrictedTo
136        + '\''
137        + ", "
138        + "refreshToken='"
139        + refreshToken
140        + '\''
141        + ", "
142        + "issuedTokenType='"
143        + issuedTokenType
144        + '\''
145        + "}";
146  }
147
148  public static class Builder extends NullableFieldTracker {
149
150    protected String accessToken;
151
152    protected Long expiresIn;
153
154    protected EnumWrapper<AccessTokenTokenTypeField> tokenType;
155
156    protected List<ResourceScope> restrictedTo;
157
158    protected String refreshToken;
159
160    protected EnumWrapper<AccessTokenIssuedTokenTypeField> issuedTokenType;
161
162    public Builder accessToken(String accessToken) {
163      this.accessToken = accessToken;
164      return this;
165    }
166
167    public Builder expiresIn(Long expiresIn) {
168      this.expiresIn = expiresIn;
169      return this;
170    }
171
172    public Builder tokenType(AccessTokenTokenTypeField tokenType) {
173      this.tokenType = new EnumWrapper<AccessTokenTokenTypeField>(tokenType);
174      return this;
175    }
176
177    public Builder tokenType(EnumWrapper<AccessTokenTokenTypeField> tokenType) {
178      this.tokenType = tokenType;
179      return this;
180    }
181
182    public Builder restrictedTo(List<ResourceScope> restrictedTo) {
183      this.restrictedTo = restrictedTo;
184      return this;
185    }
186
187    public Builder refreshToken(String refreshToken) {
188      this.refreshToken = refreshToken;
189      return this;
190    }
191
192    public Builder issuedTokenType(AccessTokenIssuedTokenTypeField issuedTokenType) {
193      this.issuedTokenType = new EnumWrapper<AccessTokenIssuedTokenTypeField>(issuedTokenType);
194      return this;
195    }
196
197    public Builder issuedTokenType(EnumWrapper<AccessTokenIssuedTokenTypeField> issuedTokenType) {
198      this.issuedTokenType = issuedTokenType;
199      return this;
200    }
201
202    public AccessToken build() {
203      return new AccessToken(this);
204    }
205  }
206}