001package com.box.sdkgen.schemas.termsofserviceuserstatus;
002
003import com.box.sdkgen.internal.NullableFieldTracker;
004import com.box.sdkgen.internal.SerializableObject;
005import com.box.sdkgen.internal.utils.DateTimeUtils;
006import com.box.sdkgen.schemas.termsofservicebase.TermsOfServiceBase;
007import com.box.sdkgen.schemas.usermini.UserMini;
008import com.box.sdkgen.serialization.json.EnumWrapper;
009import com.fasterxml.jackson.annotation.JsonFilter;
010import com.fasterxml.jackson.annotation.JsonProperty;
011import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
012import com.fasterxml.jackson.databind.annotation.JsonSerialize;
013import java.time.OffsetDateTime;
014import java.util.Objects;
015
016/** The association between a Terms of Service and a user. */
017@JsonFilter("nullablePropertyFilter")
018public class TermsOfServiceUserStatus extends SerializableObject {
019
020  /** The unique identifier for this terms of service user status. */
021  protected final String id;
022
023  /** The value will always be `terms_of_service_user_status`. */
024  @JsonDeserialize(
025      using = TermsOfServiceUserStatusTypeField.TermsOfServiceUserStatusTypeFieldDeserializer.class)
026  @JsonSerialize(
027      using = TermsOfServiceUserStatusTypeField.TermsOfServiceUserStatusTypeFieldSerializer.class)
028  protected EnumWrapper<TermsOfServiceUserStatusTypeField> type;
029
030  protected TermsOfServiceBase tos;
031
032  protected UserMini user;
033
034  /** If the user has accepted the terms of services. */
035  @JsonProperty("is_accepted")
036  protected Boolean isAccepted;
037
038  /** When the legal item was created. */
039  @JsonProperty("created_at")
040  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
041  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
042  protected OffsetDateTime createdAt;
043
044  /** When the legal item was modified. */
045  @JsonProperty("modified_at")
046  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
047  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
048  protected OffsetDateTime modifiedAt;
049
050  public TermsOfServiceUserStatus(@JsonProperty("id") String id) {
051    super();
052    this.id = id;
053    this.type =
054        new EnumWrapper<TermsOfServiceUserStatusTypeField>(
055            TermsOfServiceUserStatusTypeField.TERMS_OF_SERVICE_USER_STATUS);
056  }
057
058  protected TermsOfServiceUserStatus(Builder builder) {
059    super();
060    this.id = builder.id;
061    this.type = builder.type;
062    this.tos = builder.tos;
063    this.user = builder.user;
064    this.isAccepted = builder.isAccepted;
065    this.createdAt = builder.createdAt;
066    this.modifiedAt = builder.modifiedAt;
067    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
068  }
069
070  public String getId() {
071    return id;
072  }
073
074  public EnumWrapper<TermsOfServiceUserStatusTypeField> getType() {
075    return type;
076  }
077
078  public TermsOfServiceBase getTos() {
079    return tos;
080  }
081
082  public UserMini getUser() {
083    return user;
084  }
085
086  public Boolean getIsAccepted() {
087    return isAccepted;
088  }
089
090  public OffsetDateTime getCreatedAt() {
091    return createdAt;
092  }
093
094  public OffsetDateTime getModifiedAt() {
095    return modifiedAt;
096  }
097
098  @Override
099  public boolean equals(Object o) {
100    if (this == o) {
101      return true;
102    }
103    if (o == null || getClass() != o.getClass()) {
104      return false;
105    }
106    TermsOfServiceUserStatus casted = (TermsOfServiceUserStatus) o;
107    return Objects.equals(id, casted.id)
108        && Objects.equals(type, casted.type)
109        && Objects.equals(tos, casted.tos)
110        && Objects.equals(user, casted.user)
111        && Objects.equals(isAccepted, casted.isAccepted)
112        && Objects.equals(createdAt, casted.createdAt)
113        && Objects.equals(modifiedAt, casted.modifiedAt);
114  }
115
116  @Override
117  public int hashCode() {
118    return Objects.hash(id, type, tos, user, isAccepted, createdAt, modifiedAt);
119  }
120
121  @Override
122  public String toString() {
123    return "TermsOfServiceUserStatus{"
124        + "id='"
125        + id
126        + '\''
127        + ", "
128        + "type='"
129        + type
130        + '\''
131        + ", "
132        + "tos='"
133        + tos
134        + '\''
135        + ", "
136        + "user='"
137        + user
138        + '\''
139        + ", "
140        + "isAccepted='"
141        + isAccepted
142        + '\''
143        + ", "
144        + "createdAt='"
145        + createdAt
146        + '\''
147        + ", "
148        + "modifiedAt='"
149        + modifiedAt
150        + '\''
151        + "}";
152  }
153
154  public static class Builder extends NullableFieldTracker {
155
156    protected final String id;
157
158    protected EnumWrapper<TermsOfServiceUserStatusTypeField> type;
159
160    protected TermsOfServiceBase tos;
161
162    protected UserMini user;
163
164    protected Boolean isAccepted;
165
166    protected OffsetDateTime createdAt;
167
168    protected OffsetDateTime modifiedAt;
169
170    public Builder(String id) {
171      super();
172      this.id = id;
173    }
174
175    public Builder type(TermsOfServiceUserStatusTypeField type) {
176      this.type = new EnumWrapper<TermsOfServiceUserStatusTypeField>(type);
177      return this;
178    }
179
180    public Builder type(EnumWrapper<TermsOfServiceUserStatusTypeField> type) {
181      this.type = type;
182      return this;
183    }
184
185    public Builder tos(TermsOfServiceBase tos) {
186      this.tos = tos;
187      return this;
188    }
189
190    public Builder user(UserMini user) {
191      this.user = user;
192      return this;
193    }
194
195    public Builder isAccepted(Boolean isAccepted) {
196      this.isAccepted = isAccepted;
197      return this;
198    }
199
200    public Builder createdAt(OffsetDateTime createdAt) {
201      this.createdAt = createdAt;
202      return this;
203    }
204
205    public Builder modifiedAt(OffsetDateTime modifiedAt) {
206      this.modifiedAt = modifiedAt;
207      return this;
208    }
209
210    public TermsOfServiceUserStatus build() {
211      if (this.type == null) {
212        this.type =
213            new EnumWrapper<TermsOfServiceUserStatusTypeField>(
214                TermsOfServiceUserStatusTypeField.TERMS_OF_SERVICE_USER_STATUS);
215      }
216      return new TermsOfServiceUserStatus(this);
217    }
218  }
219}