001package com.box.sdkgen.schemas.legalholdpolicyassignment;
002
003import com.box.sdkgen.internal.utils.DateTimeUtils;
004import com.box.sdkgen.schemas.legalholdpolicyassigneditem.LegalHoldPolicyAssignedItem;
005import com.box.sdkgen.schemas.legalholdpolicyassignmentbase.LegalHoldPolicyAssignmentBase;
006import com.box.sdkgen.schemas.legalholdpolicyassignmentbase.LegalHoldPolicyAssignmentBaseTypeField;
007import com.box.sdkgen.schemas.legalholdpolicymini.LegalHoldPolicyMini;
008import com.box.sdkgen.schemas.usermini.UserMini;
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 * Legal Hold Assignments are used to assign Legal Hold Policies to an item type of: Users, Folders,
019 * Files, File Versions, Ownership, or Interactions.
020 *
021 * <p>Creating a Legal Hold Assignment puts a hold on the File-Versions that belong to the
022 * Assignment's 'apply-to' entity.
023 */
024@JsonFilter("nullablePropertyFilter")
025public class LegalHoldPolicyAssignment extends LegalHoldPolicyAssignmentBase {
026
027  @JsonProperty("legal_hold_policy")
028  protected LegalHoldPolicyMini legalHoldPolicy;
029
030  @JsonProperty("assigned_to")
031  protected LegalHoldPolicyAssignedItem assignedTo;
032
033  @JsonProperty("assigned_by")
034  protected UserMini assignedBy;
035
036  /** When the legal hold policy assignment object was created. */
037  @JsonProperty("assigned_at")
038  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
039  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
040  protected OffsetDateTime assignedAt;
041
042  /**
043   * When the assignment release request was sent. (Because it can take time for an assignment to
044   * fully delete, this isn't quite the same time that the assignment is fully deleted). If null,
045   * Assignment was not deleted.
046   */
047  @JsonProperty("deleted_at")
048  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
049  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
050  protected OffsetDateTime deletedAt;
051
052  public LegalHoldPolicyAssignment() {
053    super();
054  }
055
056  protected LegalHoldPolicyAssignment(Builder builder) {
057    super(builder);
058    this.legalHoldPolicy = builder.legalHoldPolicy;
059    this.assignedTo = builder.assignedTo;
060    this.assignedBy = builder.assignedBy;
061    this.assignedAt = builder.assignedAt;
062    this.deletedAt = builder.deletedAt;
063    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
064  }
065
066  public LegalHoldPolicyMini getLegalHoldPolicy() {
067    return legalHoldPolicy;
068  }
069
070  public LegalHoldPolicyAssignedItem getAssignedTo() {
071    return assignedTo;
072  }
073
074  public UserMini getAssignedBy() {
075    return assignedBy;
076  }
077
078  public OffsetDateTime getAssignedAt() {
079    return assignedAt;
080  }
081
082  public OffsetDateTime getDeletedAt() {
083    return deletedAt;
084  }
085
086  @Override
087  public boolean equals(Object o) {
088    if (this == o) {
089      return true;
090    }
091    if (o == null || getClass() != o.getClass()) {
092      return false;
093    }
094    LegalHoldPolicyAssignment casted = (LegalHoldPolicyAssignment) o;
095    return Objects.equals(id, casted.id)
096        && Objects.equals(type, casted.type)
097        && Objects.equals(legalHoldPolicy, casted.legalHoldPolicy)
098        && Objects.equals(assignedTo, casted.assignedTo)
099        && Objects.equals(assignedBy, casted.assignedBy)
100        && Objects.equals(assignedAt, casted.assignedAt)
101        && Objects.equals(deletedAt, casted.deletedAt);
102  }
103
104  @Override
105  public int hashCode() {
106    return Objects.hash(id, type, legalHoldPolicy, assignedTo, assignedBy, assignedAt, deletedAt);
107  }
108
109  @Override
110  public String toString() {
111    return "LegalHoldPolicyAssignment{"
112        + "id='"
113        + id
114        + '\''
115        + ", "
116        + "type='"
117        + type
118        + '\''
119        + ", "
120        + "legalHoldPolicy='"
121        + legalHoldPolicy
122        + '\''
123        + ", "
124        + "assignedTo='"
125        + assignedTo
126        + '\''
127        + ", "
128        + "assignedBy='"
129        + assignedBy
130        + '\''
131        + ", "
132        + "assignedAt='"
133        + assignedAt
134        + '\''
135        + ", "
136        + "deletedAt='"
137        + deletedAt
138        + '\''
139        + "}";
140  }
141
142  public static class Builder extends LegalHoldPolicyAssignmentBase.Builder {
143
144    protected LegalHoldPolicyMini legalHoldPolicy;
145
146    protected LegalHoldPolicyAssignedItem assignedTo;
147
148    protected UserMini assignedBy;
149
150    protected OffsetDateTime assignedAt;
151
152    protected OffsetDateTime deletedAt;
153
154    public Builder legalHoldPolicy(LegalHoldPolicyMini legalHoldPolicy) {
155      this.legalHoldPolicy = legalHoldPolicy;
156      return this;
157    }
158
159    public Builder assignedTo(LegalHoldPolicyAssignedItem assignedTo) {
160      this.assignedTo = assignedTo;
161      return this;
162    }
163
164    public Builder assignedBy(UserMini assignedBy) {
165      this.assignedBy = assignedBy;
166      return this;
167    }
168
169    public Builder assignedAt(OffsetDateTime assignedAt) {
170      this.assignedAt = assignedAt;
171      return this;
172    }
173
174    public Builder deletedAt(OffsetDateTime deletedAt) {
175      this.deletedAt = deletedAt;
176      return this;
177    }
178
179    @Override
180    public Builder id(String id) {
181      this.id = id;
182      return this;
183    }
184
185    @Override
186    public Builder type(LegalHoldPolicyAssignmentBaseTypeField type) {
187      this.type = new EnumWrapper<LegalHoldPolicyAssignmentBaseTypeField>(type);
188      return this;
189    }
190
191    @Override
192    public Builder type(EnumWrapper<LegalHoldPolicyAssignmentBaseTypeField> type) {
193      this.type = type;
194      return this;
195    }
196
197    public LegalHoldPolicyAssignment build() {
198      return new LegalHoldPolicyAssignment(this);
199    }
200  }
201}