001package com.box.sdkgen.schemas.fileversionretention;
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.filemini.FileMini;
007import com.box.sdkgen.schemas.fileversionmini.FileVersionMini;
008import com.box.sdkgen.schemas.retentionpolicymini.RetentionPolicyMini;
009import com.box.sdkgen.serialization.json.EnumWrapper;
010import com.fasterxml.jackson.annotation.JsonFilter;
011import com.fasterxml.jackson.annotation.JsonProperty;
012import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
013import com.fasterxml.jackson.databind.annotation.JsonSerialize;
014import java.time.OffsetDateTime;
015import java.util.Objects;
016
017/**
018 * A retention policy blocks permanent deletion of content for a specified amount of time. Admins
019 * can apply policies to specified folders, or an entire enterprise. A file version retention is a
020 * record for a retained file version. To use this feature, you must have the manage retention
021 * policies scope enabled for your API key in your application management console.
022 *
023 * <p>**Note**: File retention API is now **deprecated**. To get information about files and file
024 * versions under retention, see [files under
025 * retention](https://developer.box.com/reference/get-retention-policy-assignments-id-files-under-retention)
026 * or [file versions under
027 * retention](https://developer.box.com/reference/get-retention-policy-assignments-id-file-versions-under-retention)
028 * endpoints.
029 */
030@JsonFilter("nullablePropertyFilter")
031public class FileVersionRetention extends SerializableObject {
032
033  /** The unique identifier for this file version retention. */
034  protected String id;
035
036  /** The value will always be `file_version_retention`. */
037  @JsonDeserialize(
038      using = FileVersionRetentionTypeField.FileVersionRetentionTypeFieldDeserializer.class)
039  @JsonSerialize(
040      using = FileVersionRetentionTypeField.FileVersionRetentionTypeFieldSerializer.class)
041  protected EnumWrapper<FileVersionRetentionTypeField> type;
042
043  @JsonProperty("file_version")
044  protected FileVersionMini fileVersion;
045
046  protected FileMini file;
047
048  /** When this file version retention object was created. */
049  @JsonProperty("applied_at")
050  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
051  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
052  protected OffsetDateTime appliedAt;
053
054  /** When the retention expires on this file version retention. */
055  @JsonProperty("disposition_at")
056  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
057  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
058  protected OffsetDateTime dispositionAt;
059
060  @JsonProperty("winning_retention_policy")
061  protected RetentionPolicyMini winningRetentionPolicy;
062
063  public FileVersionRetention() {
064    super();
065  }
066
067  protected FileVersionRetention(Builder builder) {
068    super();
069    this.id = builder.id;
070    this.type = builder.type;
071    this.fileVersion = builder.fileVersion;
072    this.file = builder.file;
073    this.appliedAt = builder.appliedAt;
074    this.dispositionAt = builder.dispositionAt;
075    this.winningRetentionPolicy = builder.winningRetentionPolicy;
076    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
077  }
078
079  public String getId() {
080    return id;
081  }
082
083  public EnumWrapper<FileVersionRetentionTypeField> getType() {
084    return type;
085  }
086
087  public FileVersionMini getFileVersion() {
088    return fileVersion;
089  }
090
091  public FileMini getFile() {
092    return file;
093  }
094
095  public OffsetDateTime getAppliedAt() {
096    return appliedAt;
097  }
098
099  public OffsetDateTime getDispositionAt() {
100    return dispositionAt;
101  }
102
103  public RetentionPolicyMini getWinningRetentionPolicy() {
104    return winningRetentionPolicy;
105  }
106
107  @Override
108  public boolean equals(Object o) {
109    if (this == o) {
110      return true;
111    }
112    if (o == null || getClass() != o.getClass()) {
113      return false;
114    }
115    FileVersionRetention casted = (FileVersionRetention) o;
116    return Objects.equals(id, casted.id)
117        && Objects.equals(type, casted.type)
118        && Objects.equals(fileVersion, casted.fileVersion)
119        && Objects.equals(file, casted.file)
120        && Objects.equals(appliedAt, casted.appliedAt)
121        && Objects.equals(dispositionAt, casted.dispositionAt)
122        && Objects.equals(winningRetentionPolicy, casted.winningRetentionPolicy);
123  }
124
125  @Override
126  public int hashCode() {
127    return Objects.hash(
128        id, type, fileVersion, file, appliedAt, dispositionAt, winningRetentionPolicy);
129  }
130
131  @Override
132  public String toString() {
133    return "FileVersionRetention{"
134        + "id='"
135        + id
136        + '\''
137        + ", "
138        + "type='"
139        + type
140        + '\''
141        + ", "
142        + "fileVersion='"
143        + fileVersion
144        + '\''
145        + ", "
146        + "file='"
147        + file
148        + '\''
149        + ", "
150        + "appliedAt='"
151        + appliedAt
152        + '\''
153        + ", "
154        + "dispositionAt='"
155        + dispositionAt
156        + '\''
157        + ", "
158        + "winningRetentionPolicy='"
159        + winningRetentionPolicy
160        + '\''
161        + "}";
162  }
163
164  public static class Builder extends NullableFieldTracker {
165
166    protected String id;
167
168    protected EnumWrapper<FileVersionRetentionTypeField> type;
169
170    protected FileVersionMini fileVersion;
171
172    protected FileMini file;
173
174    protected OffsetDateTime appliedAt;
175
176    protected OffsetDateTime dispositionAt;
177
178    protected RetentionPolicyMini winningRetentionPolicy;
179
180    public Builder id(String id) {
181      this.id = id;
182      return this;
183    }
184
185    public Builder type(FileVersionRetentionTypeField type) {
186      this.type = new EnumWrapper<FileVersionRetentionTypeField>(type);
187      return this;
188    }
189
190    public Builder type(EnumWrapper<FileVersionRetentionTypeField> type) {
191      this.type = type;
192      return this;
193    }
194
195    public Builder fileVersion(FileVersionMini fileVersion) {
196      this.fileVersion = fileVersion;
197      return this;
198    }
199
200    public Builder file(FileMini file) {
201      this.file = file;
202      return this;
203    }
204
205    public Builder appliedAt(OffsetDateTime appliedAt) {
206      this.appliedAt = appliedAt;
207      return this;
208    }
209
210    public Builder dispositionAt(OffsetDateTime dispositionAt) {
211      this.dispositionAt = dispositionAt;
212      return this;
213    }
214
215    public Builder winningRetentionPolicy(RetentionPolicyMini winningRetentionPolicy) {
216      this.winningRetentionPolicy = winningRetentionPolicy;
217      return this;
218    }
219
220    public FileVersionRetention build() {
221      return new FileVersionRetention(this);
222    }
223  }
224}