001package com.box.sdkgen.schemas.statusskillcard;
002
003import com.box.sdkgen.internal.NullableFieldTracker;
004import com.box.sdkgen.internal.SerializableObject;
005import com.box.sdkgen.internal.utils.DateTimeUtils;
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.time.OffsetDateTime;
012import java.util.Objects;
013
014/** A Box Skill metadata card that puts a status message in the metadata sidebar. */
015@JsonFilter("nullablePropertyFilter")
016public class StatusSkillCard extends SerializableObject {
017
018  /** The optional date and time this card was created at. */
019  @JsonProperty("created_at")
020  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
021  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
022  protected OffsetDateTime createdAt;
023
024  /** The value will always be `skill_card`. */
025  @JsonDeserialize(using = StatusSkillCardTypeField.StatusSkillCardTypeFieldDeserializer.class)
026  @JsonSerialize(using = StatusSkillCardTypeField.StatusSkillCardTypeFieldSerializer.class)
027  protected EnumWrapper<StatusSkillCardTypeField> type;
028
029  /** The value will always be `status`. */
030  @JsonDeserialize(
031      using = StatusSkillCardSkillCardTypeField.StatusSkillCardSkillCardTypeFieldDeserializer.class)
032  @JsonSerialize(
033      using = StatusSkillCardSkillCardTypeField.StatusSkillCardSkillCardTypeFieldSerializer.class)
034  @JsonProperty("skill_card_type")
035  protected EnumWrapper<StatusSkillCardSkillCardTypeField> skillCardType;
036
037  /** The title of the card. */
038  @JsonProperty("skill_card_title")
039  protected StatusSkillCardSkillCardTitleField skillCardTitle;
040
041  /**
042   * Sets the status of the skill. This can be used to show a message to the user while the Skill is
043   * processing the data, or if it was not able to process the file.
044   */
045  protected final StatusSkillCardStatusField status;
046
047  /** The service that applied this metadata. */
048  protected final StatusSkillCardSkillField skill;
049
050  /**
051   * The invocation of this service, used to track which instance of a service applied the metadata.
052   */
053  protected final StatusSkillCardInvocationField invocation;
054
055  public StatusSkillCard(
056      @JsonProperty("status") StatusSkillCardStatusField status,
057      @JsonProperty("skill") StatusSkillCardSkillField skill,
058      @JsonProperty("invocation") StatusSkillCardInvocationField invocation) {
059    super();
060    this.status = status;
061    this.skill = skill;
062    this.invocation = invocation;
063    this.type = new EnumWrapper<StatusSkillCardTypeField>(StatusSkillCardTypeField.SKILL_CARD);
064    this.skillCardType =
065        new EnumWrapper<StatusSkillCardSkillCardTypeField>(
066            StatusSkillCardSkillCardTypeField.STATUS);
067  }
068
069  protected StatusSkillCard(Builder builder) {
070    super();
071    this.createdAt = builder.createdAt;
072    this.type = builder.type;
073    this.skillCardType = builder.skillCardType;
074    this.skillCardTitle = builder.skillCardTitle;
075    this.status = builder.status;
076    this.skill = builder.skill;
077    this.invocation = builder.invocation;
078    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
079  }
080
081  public OffsetDateTime getCreatedAt() {
082    return createdAt;
083  }
084
085  public EnumWrapper<StatusSkillCardTypeField> getType() {
086    return type;
087  }
088
089  public EnumWrapper<StatusSkillCardSkillCardTypeField> getSkillCardType() {
090    return skillCardType;
091  }
092
093  public StatusSkillCardSkillCardTitleField getSkillCardTitle() {
094    return skillCardTitle;
095  }
096
097  public StatusSkillCardStatusField getStatus() {
098    return status;
099  }
100
101  public StatusSkillCardSkillField getSkill() {
102    return skill;
103  }
104
105  public StatusSkillCardInvocationField getInvocation() {
106    return invocation;
107  }
108
109  @Override
110  public boolean equals(Object o) {
111    if (this == o) {
112      return true;
113    }
114    if (o == null || getClass() != o.getClass()) {
115      return false;
116    }
117    StatusSkillCard casted = (StatusSkillCard) o;
118    return Objects.equals(createdAt, casted.createdAt)
119        && Objects.equals(type, casted.type)
120        && Objects.equals(skillCardType, casted.skillCardType)
121        && Objects.equals(skillCardTitle, casted.skillCardTitle)
122        && Objects.equals(status, casted.status)
123        && Objects.equals(skill, casted.skill)
124        && Objects.equals(invocation, casted.invocation);
125  }
126
127  @Override
128  public int hashCode() {
129    return Objects.hash(createdAt, type, skillCardType, skillCardTitle, status, skill, invocation);
130  }
131
132  @Override
133  public String toString() {
134    return "StatusSkillCard{"
135        + "createdAt='"
136        + createdAt
137        + '\''
138        + ", "
139        + "type='"
140        + type
141        + '\''
142        + ", "
143        + "skillCardType='"
144        + skillCardType
145        + '\''
146        + ", "
147        + "skillCardTitle='"
148        + skillCardTitle
149        + '\''
150        + ", "
151        + "status='"
152        + status
153        + '\''
154        + ", "
155        + "skill='"
156        + skill
157        + '\''
158        + ", "
159        + "invocation='"
160        + invocation
161        + '\''
162        + "}";
163  }
164
165  public static class Builder extends NullableFieldTracker {
166
167    protected OffsetDateTime createdAt;
168
169    protected EnumWrapper<StatusSkillCardTypeField> type;
170
171    protected EnumWrapper<StatusSkillCardSkillCardTypeField> skillCardType;
172
173    protected StatusSkillCardSkillCardTitleField skillCardTitle;
174
175    protected final StatusSkillCardStatusField status;
176
177    protected final StatusSkillCardSkillField skill;
178
179    protected final StatusSkillCardInvocationField invocation;
180
181    public Builder(
182        StatusSkillCardStatusField status,
183        StatusSkillCardSkillField skill,
184        StatusSkillCardInvocationField invocation) {
185      super();
186      this.status = status;
187      this.skill = skill;
188      this.invocation = invocation;
189    }
190
191    public Builder createdAt(OffsetDateTime createdAt) {
192      this.createdAt = createdAt;
193      return this;
194    }
195
196    public Builder type(StatusSkillCardTypeField type) {
197      this.type = new EnumWrapper<StatusSkillCardTypeField>(type);
198      return this;
199    }
200
201    public Builder type(EnumWrapper<StatusSkillCardTypeField> type) {
202      this.type = type;
203      return this;
204    }
205
206    public Builder skillCardType(StatusSkillCardSkillCardTypeField skillCardType) {
207      this.skillCardType = new EnumWrapper<StatusSkillCardSkillCardTypeField>(skillCardType);
208      return this;
209    }
210
211    public Builder skillCardType(EnumWrapper<StatusSkillCardSkillCardTypeField> skillCardType) {
212      this.skillCardType = skillCardType;
213      return this;
214    }
215
216    public Builder skillCardTitle(StatusSkillCardSkillCardTitleField skillCardTitle) {
217      this.skillCardTitle = skillCardTitle;
218      return this;
219    }
220
221    public StatusSkillCard build() {
222      if (this.type == null) {
223        this.type = new EnumWrapper<StatusSkillCardTypeField>(StatusSkillCardTypeField.SKILL_CARD);
224      }
225      if (this.skillCardType == null) {
226        this.skillCardType =
227            new EnumWrapper<StatusSkillCardSkillCardTypeField>(
228                StatusSkillCardSkillCardTypeField.STATUS);
229      }
230      return new StatusSkillCard(this);
231    }
232  }
233}