001package com.box.sdkgen.managers.retentionpolicyassignments;
002
003import com.box.sdkgen.internal.NullableFieldTracker;
004import com.box.sdkgen.internal.SerializableObject;
005import com.fasterxml.jackson.annotation.JsonFilter;
006import com.fasterxml.jackson.annotation.JsonProperty;
007import java.util.List;
008import java.util.Objects;
009
010@JsonFilter("nullablePropertyFilter")
011public class CreateRetentionPolicyAssignmentRequestBody extends SerializableObject {
012
013  /** The ID of the retention policy to assign. */
014  @JsonProperty("policy_id")
015  protected final String policyId;
016
017  /** The item to assign the policy to. */
018  @JsonProperty("assign_to")
019  protected final CreateRetentionPolicyAssignmentRequestBodyAssignToField assignTo;
020
021  /**
022   * If the `assign_to` type is `metadata_template`, then optionally add the `filter_fields`
023   * parameter which will require an array of objects with a field entry and a value entry.
024   * Currently only one object of `field` and `value` is supported.
025   */
026  @JsonProperty("filter_fields")
027  protected List<CreateRetentionPolicyAssignmentRequestBodyFilterFieldsField> filterFields;
028
029  /**
030   * The date the retention policy assignment begins.
031   *
032   * <p>If the `assigned_to` type is `metadata_template`, this field can be a date field's metadata
033   * attribute key id.
034   */
035  @JsonProperty("start_date_field")
036  protected String startDateField;
037
038  public CreateRetentionPolicyAssignmentRequestBody(
039      @JsonProperty("policy_id") String policyId,
040      @JsonProperty("assign_to") CreateRetentionPolicyAssignmentRequestBodyAssignToField assignTo) {
041    super();
042    this.policyId = policyId;
043    this.assignTo = assignTo;
044  }
045
046  protected CreateRetentionPolicyAssignmentRequestBody(Builder builder) {
047    super();
048    this.policyId = builder.policyId;
049    this.assignTo = builder.assignTo;
050    this.filterFields = builder.filterFields;
051    this.startDateField = builder.startDateField;
052    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
053  }
054
055  public String getPolicyId() {
056    return policyId;
057  }
058
059  public CreateRetentionPolicyAssignmentRequestBodyAssignToField getAssignTo() {
060    return assignTo;
061  }
062
063  public List<CreateRetentionPolicyAssignmentRequestBodyFilterFieldsField> getFilterFields() {
064    return filterFields;
065  }
066
067  public String getStartDateField() {
068    return startDateField;
069  }
070
071  @Override
072  public boolean equals(Object o) {
073    if (this == o) {
074      return true;
075    }
076    if (o == null || getClass() != o.getClass()) {
077      return false;
078    }
079    CreateRetentionPolicyAssignmentRequestBody casted =
080        (CreateRetentionPolicyAssignmentRequestBody) o;
081    return Objects.equals(policyId, casted.policyId)
082        && Objects.equals(assignTo, casted.assignTo)
083        && Objects.equals(filterFields, casted.filterFields)
084        && Objects.equals(startDateField, casted.startDateField);
085  }
086
087  @Override
088  public int hashCode() {
089    return Objects.hash(policyId, assignTo, filterFields, startDateField);
090  }
091
092  @Override
093  public String toString() {
094    return "CreateRetentionPolicyAssignmentRequestBody{"
095        + "policyId='"
096        + policyId
097        + '\''
098        + ", "
099        + "assignTo='"
100        + assignTo
101        + '\''
102        + ", "
103        + "filterFields='"
104        + filterFields
105        + '\''
106        + ", "
107        + "startDateField='"
108        + startDateField
109        + '\''
110        + "}";
111  }
112
113  public static class Builder extends NullableFieldTracker {
114
115    protected final String policyId;
116
117    protected final CreateRetentionPolicyAssignmentRequestBodyAssignToField assignTo;
118
119    protected List<CreateRetentionPolicyAssignmentRequestBodyFilterFieldsField> filterFields;
120
121    protected String startDateField;
122
123    public Builder(
124        String policyId, CreateRetentionPolicyAssignmentRequestBodyAssignToField assignTo) {
125      super();
126      this.policyId = policyId;
127      this.assignTo = assignTo;
128    }
129
130    public Builder filterFields(
131        List<CreateRetentionPolicyAssignmentRequestBodyFilterFieldsField> filterFields) {
132      this.filterFields = filterFields;
133      return this;
134    }
135
136    public Builder startDateField(String startDateField) {
137      this.startDateField = startDateField;
138      return this;
139    }
140
141    public CreateRetentionPolicyAssignmentRequestBody build() {
142      return new CreateRetentionPolicyAssignmentRequestBody(this);
143    }
144  }
145}