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}