001package com.box.sdkgen.schemas.legalholdpolicy;
002
003import com.box.sdkgen.internal.utils.DateTimeUtils;
004import com.box.sdkgen.schemas.legalholdpolicymini.LegalHoldPolicyMini;
005import com.box.sdkgen.schemas.legalholdpolicymini.LegalHoldPolicyMiniTypeField;
006import com.box.sdkgen.schemas.usermini.UserMini;
007import com.box.sdkgen.serialization.json.EnumWrapper;
008import com.fasterxml.jackson.annotation.JsonFilter;
009import com.fasterxml.jackson.annotation.JsonProperty;
010import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
011import com.fasterxml.jackson.databind.annotation.JsonSerialize;
012import java.time.OffsetDateTime;
013import java.util.Objects;
014
015/**
016 * Legal Hold Policy information describes the basic characteristics of the Policy, such as name,
017 * description, and filter dates.
018 */
019@JsonFilter("nullablePropertyFilter")
020public class LegalHoldPolicy extends LegalHoldPolicyMini {
021
022  /** Name of the legal hold policy. */
023  @JsonProperty("policy_name")
024  protected String policyName;
025
026  /** Description of the legal hold policy. Optional property with a 500 character limit. */
027  protected String description;
028
029  /**
030   * Possible values: * 'active' - the policy is not in a transition state. * 'applying' - that the
031   * policy is in the process of being applied. * 'releasing' - that the process is in the process
032   * of being released. * 'released' - the policy is no longer active.
033   */
034  @JsonDeserialize(using = LegalHoldPolicyStatusField.LegalHoldPolicyStatusFieldDeserializer.class)
035  @JsonSerialize(using = LegalHoldPolicyStatusField.LegalHoldPolicyStatusFieldSerializer.class)
036  protected EnumWrapper<LegalHoldPolicyStatusField> status;
037
038  /** Counts of assignments within a legal hold policy by item type. */
039  @JsonProperty("assignment_counts")
040  protected LegalHoldPolicyAssignmentCountsField assignmentCounts;
041
042  @JsonProperty("created_by")
043  protected UserMini createdBy;
044
045  /** When the legal hold policy object was created. */
046  @JsonProperty("created_at")
047  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
048  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
049  protected OffsetDateTime createdAt;
050
051  /**
052   * When the legal hold policy object was modified. Does not update when assignments are added or
053   * removed.
054   */
055  @JsonProperty("modified_at")
056  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
057  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
058  protected OffsetDateTime modifiedAt;
059
060  /**
061   * When the policy release request was sent. (Because it can take time for a policy to fully
062   * delete, this isn't quite the same time that the policy is fully deleted).
063   *
064   * <p>If `null`, the policy was not deleted.
065   */
066  @JsonProperty("deleted_at")
067  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
068  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
069  protected OffsetDateTime deletedAt;
070
071  /** User-specified, optional date filter applies to Custodian assignments only. */
072  @JsonProperty("filter_started_at")
073  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
074  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
075  protected OffsetDateTime filterStartedAt;
076
077  /** User-specified, optional date filter applies to Custodian assignments only. */
078  @JsonProperty("filter_ended_at")
079  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
080  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
081  protected OffsetDateTime filterEndedAt;
082
083  /** Optional notes about why the policy was created. */
084  @JsonProperty("release_notes")
085  protected String releaseNotes;
086
087  public LegalHoldPolicy(@JsonProperty("id") String id) {
088    super(id);
089  }
090
091  protected LegalHoldPolicy(Builder builder) {
092    super(builder);
093    this.policyName = builder.policyName;
094    this.description = builder.description;
095    this.status = builder.status;
096    this.assignmentCounts = builder.assignmentCounts;
097    this.createdBy = builder.createdBy;
098    this.createdAt = builder.createdAt;
099    this.modifiedAt = builder.modifiedAt;
100    this.deletedAt = builder.deletedAt;
101    this.filterStartedAt = builder.filterStartedAt;
102    this.filterEndedAt = builder.filterEndedAt;
103    this.releaseNotes = builder.releaseNotes;
104    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
105  }
106
107  public String getPolicyName() {
108    return policyName;
109  }
110
111  public String getDescription() {
112    return description;
113  }
114
115  public EnumWrapper<LegalHoldPolicyStatusField> getStatus() {
116    return status;
117  }
118
119  public LegalHoldPolicyAssignmentCountsField getAssignmentCounts() {
120    return assignmentCounts;
121  }
122
123  public UserMini getCreatedBy() {
124    return createdBy;
125  }
126
127  public OffsetDateTime getCreatedAt() {
128    return createdAt;
129  }
130
131  public OffsetDateTime getModifiedAt() {
132    return modifiedAt;
133  }
134
135  public OffsetDateTime getDeletedAt() {
136    return deletedAt;
137  }
138
139  public OffsetDateTime getFilterStartedAt() {
140    return filterStartedAt;
141  }
142
143  public OffsetDateTime getFilterEndedAt() {
144    return filterEndedAt;
145  }
146
147  public String getReleaseNotes() {
148    return releaseNotes;
149  }
150
151  @Override
152  public boolean equals(Object o) {
153    if (this == o) {
154      return true;
155    }
156    if (o == null || getClass() != o.getClass()) {
157      return false;
158    }
159    LegalHoldPolicy casted = (LegalHoldPolicy) o;
160    return Objects.equals(id, casted.id)
161        && Objects.equals(type, casted.type)
162        && Objects.equals(policyName, casted.policyName)
163        && Objects.equals(description, casted.description)
164        && Objects.equals(status, casted.status)
165        && Objects.equals(assignmentCounts, casted.assignmentCounts)
166        && Objects.equals(createdBy, casted.createdBy)
167        && Objects.equals(createdAt, casted.createdAt)
168        && Objects.equals(modifiedAt, casted.modifiedAt)
169        && Objects.equals(deletedAt, casted.deletedAt)
170        && Objects.equals(filterStartedAt, casted.filterStartedAt)
171        && Objects.equals(filterEndedAt, casted.filterEndedAt)
172        && Objects.equals(releaseNotes, casted.releaseNotes);
173  }
174
175  @Override
176  public int hashCode() {
177    return Objects.hash(
178        id,
179        type,
180        policyName,
181        description,
182        status,
183        assignmentCounts,
184        createdBy,
185        createdAt,
186        modifiedAt,
187        deletedAt,
188        filterStartedAt,
189        filterEndedAt,
190        releaseNotes);
191  }
192
193  @Override
194  public String toString() {
195    return "LegalHoldPolicy{"
196        + "id='"
197        + id
198        + '\''
199        + ", "
200        + "type='"
201        + type
202        + '\''
203        + ", "
204        + "policyName='"
205        + policyName
206        + '\''
207        + ", "
208        + "description='"
209        + description
210        + '\''
211        + ", "
212        + "status='"
213        + status
214        + '\''
215        + ", "
216        + "assignmentCounts='"
217        + assignmentCounts
218        + '\''
219        + ", "
220        + "createdBy='"
221        + createdBy
222        + '\''
223        + ", "
224        + "createdAt='"
225        + createdAt
226        + '\''
227        + ", "
228        + "modifiedAt='"
229        + modifiedAt
230        + '\''
231        + ", "
232        + "deletedAt='"
233        + deletedAt
234        + '\''
235        + ", "
236        + "filterStartedAt='"
237        + filterStartedAt
238        + '\''
239        + ", "
240        + "filterEndedAt='"
241        + filterEndedAt
242        + '\''
243        + ", "
244        + "releaseNotes='"
245        + releaseNotes
246        + '\''
247        + "}";
248  }
249
250  public static class Builder extends LegalHoldPolicyMini.Builder {
251
252    protected String policyName;
253
254    protected String description;
255
256    protected EnumWrapper<LegalHoldPolicyStatusField> status;
257
258    protected LegalHoldPolicyAssignmentCountsField assignmentCounts;
259
260    protected UserMini createdBy;
261
262    protected OffsetDateTime createdAt;
263
264    protected OffsetDateTime modifiedAt;
265
266    protected OffsetDateTime deletedAt;
267
268    protected OffsetDateTime filterStartedAt;
269
270    protected OffsetDateTime filterEndedAt;
271
272    protected String releaseNotes;
273
274    public Builder(String id) {
275      super(id);
276    }
277
278    public Builder policyName(String policyName) {
279      this.policyName = policyName;
280      return this;
281    }
282
283    public Builder description(String description) {
284      this.description = description;
285      return this;
286    }
287
288    public Builder status(LegalHoldPolicyStatusField status) {
289      this.status = new EnumWrapper<LegalHoldPolicyStatusField>(status);
290      return this;
291    }
292
293    public Builder status(EnumWrapper<LegalHoldPolicyStatusField> status) {
294      this.status = status;
295      return this;
296    }
297
298    public Builder assignmentCounts(LegalHoldPolicyAssignmentCountsField assignmentCounts) {
299      this.assignmentCounts = assignmentCounts;
300      return this;
301    }
302
303    public Builder createdBy(UserMini createdBy) {
304      this.createdBy = createdBy;
305      return this;
306    }
307
308    public Builder createdAt(OffsetDateTime createdAt) {
309      this.createdAt = createdAt;
310      return this;
311    }
312
313    public Builder modifiedAt(OffsetDateTime modifiedAt) {
314      this.modifiedAt = modifiedAt;
315      return this;
316    }
317
318    public Builder deletedAt(OffsetDateTime deletedAt) {
319      this.deletedAt = deletedAt;
320      return this;
321    }
322
323    public Builder filterStartedAt(OffsetDateTime filterStartedAt) {
324      this.filterStartedAt = filterStartedAt;
325      return this;
326    }
327
328    public Builder filterEndedAt(OffsetDateTime filterEndedAt) {
329      this.filterEndedAt = filterEndedAt;
330      return this;
331    }
332
333    public Builder releaseNotes(String releaseNotes) {
334      this.releaseNotes = releaseNotes;
335      return this;
336    }
337
338    @Override
339    public Builder type(LegalHoldPolicyMiniTypeField type) {
340      this.type = new EnumWrapper<LegalHoldPolicyMiniTypeField>(type);
341      return this;
342    }
343
344    @Override
345    public Builder type(EnumWrapper<LegalHoldPolicyMiniTypeField> type) {
346      this.type = type;
347      return this;
348    }
349
350    public LegalHoldPolicy build() {
351      if (this.type == null) {
352        this.type =
353            new EnumWrapper<LegalHoldPolicyMiniTypeField>(
354                LegalHoldPolicyMiniTypeField.LEGAL_HOLD_POLICY);
355      }
356      return new LegalHoldPolicy(this);
357    }
358  }
359}