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