001package com.box.sdkgen.schemas.recentitem;
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.filefull.FileFull;
007import com.box.sdkgen.schemas.folderfull.FolderFull;
008import com.box.sdkgen.schemas.recentitemresource.RecentItemResource;
009import com.box.sdkgen.schemas.weblink.WebLink;
010import com.box.sdkgen.serialization.json.EnumWrapper;
011import com.fasterxml.jackson.annotation.JsonFilter;
012import com.fasterxml.jackson.annotation.JsonProperty;
013import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
014import com.fasterxml.jackson.databind.annotation.JsonSerialize;
015import java.time.OffsetDateTime;
016import java.util.Objects;
017
018/** A recent item accessed by a user. */
019@JsonFilter("nullablePropertyFilter")
020public class RecentItem extends SerializableObject {
021
022  /** The value will always be `recent_item`. */
023  protected String type;
024
025  protected RecentItemResource item;
026
027  /** The most recent type of access the user performed on the item. */
028  @JsonDeserialize(
029      using = RecentItemInteractionTypeField.RecentItemInteractionTypeFieldDeserializer.class)
030  @JsonSerialize(
031      using = RecentItemInteractionTypeField.RecentItemInteractionTypeFieldSerializer.class)
032  @JsonProperty("interaction_type")
033  protected EnumWrapper<RecentItemInteractionTypeField> interactionType;
034
035  /** The time of the most recent interaction. */
036  @JsonProperty("interacted_at")
037  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
038  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
039  protected OffsetDateTime interactedAt;
040
041  /**
042   * If the item was accessed through a shared link it will appear here, otherwise this will be
043   * null.
044   */
045  @JsonProperty("interaction_shared_link")
046  protected String interactionSharedLink;
047
048  public RecentItem() {
049    super();
050  }
051
052  protected RecentItem(Builder builder) {
053    super();
054    this.type = builder.type;
055    this.item = builder.item;
056    this.interactionType = builder.interactionType;
057    this.interactedAt = builder.interactedAt;
058    this.interactionSharedLink = builder.interactionSharedLink;
059    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
060  }
061
062  public String getType() {
063    return type;
064  }
065
066  public RecentItemResource getItem() {
067    return item;
068  }
069
070  public EnumWrapper<RecentItemInteractionTypeField> getInteractionType() {
071    return interactionType;
072  }
073
074  public OffsetDateTime getInteractedAt() {
075    return interactedAt;
076  }
077
078  public String getInteractionSharedLink() {
079    return interactionSharedLink;
080  }
081
082  @Override
083  public boolean equals(Object o) {
084    if (this == o) {
085      return true;
086    }
087    if (o == null || getClass() != o.getClass()) {
088      return false;
089    }
090    RecentItem casted = (RecentItem) o;
091    return Objects.equals(type, casted.type)
092        && Objects.equals(item, casted.item)
093        && Objects.equals(interactionType, casted.interactionType)
094        && Objects.equals(interactedAt, casted.interactedAt)
095        && Objects.equals(interactionSharedLink, casted.interactionSharedLink);
096  }
097
098  @Override
099  public int hashCode() {
100    return Objects.hash(type, item, interactionType, interactedAt, interactionSharedLink);
101  }
102
103  @Override
104  public String toString() {
105    return "RecentItem{"
106        + "type='"
107        + type
108        + '\''
109        + ", "
110        + "item='"
111        + item
112        + '\''
113        + ", "
114        + "interactionType='"
115        + interactionType
116        + '\''
117        + ", "
118        + "interactedAt='"
119        + interactedAt
120        + '\''
121        + ", "
122        + "interactionSharedLink='"
123        + interactionSharedLink
124        + '\''
125        + "}";
126  }
127
128  public static class Builder extends NullableFieldTracker {
129
130    protected String type;
131
132    protected RecentItemResource item;
133
134    protected EnumWrapper<RecentItemInteractionTypeField> interactionType;
135
136    protected OffsetDateTime interactedAt;
137
138    protected String interactionSharedLink;
139
140    public Builder type(String type) {
141      this.type = type;
142      return this;
143    }
144
145    public Builder item(FileFull item) {
146      this.item = new RecentItemResource(item);
147      return this;
148    }
149
150    public Builder item(FolderFull item) {
151      this.item = new RecentItemResource(item);
152      return this;
153    }
154
155    public Builder item(WebLink item) {
156      this.item = new RecentItemResource(item);
157      return this;
158    }
159
160    public Builder item(RecentItemResource item) {
161      this.item = item;
162      return this;
163    }
164
165    public Builder interactionType(RecentItemInteractionTypeField interactionType) {
166      this.interactionType = new EnumWrapper<RecentItemInteractionTypeField>(interactionType);
167      return this;
168    }
169
170    public Builder interactionType(EnumWrapper<RecentItemInteractionTypeField> interactionType) {
171      this.interactionType = interactionType;
172      return this;
173    }
174
175    public Builder interactedAt(OffsetDateTime interactedAt) {
176      this.interactedAt = interactedAt;
177      return this;
178    }
179
180    public Builder interactionSharedLink(String interactionSharedLink) {
181      this.interactionSharedLink = interactionSharedLink;
182      return this;
183    }
184
185    public RecentItem build() {
186      return new RecentItem(this);
187    }
188  }
189}