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