001package com.box.sdkgen.schemas.retentionpolicymini;
002
003import com.box.sdkgen.schemas.retentionpolicybase.RetentionPolicyBase;
004import com.box.sdkgen.schemas.retentionpolicybase.RetentionPolicyBaseTypeField;
005import com.box.sdkgen.schemas.retentionpolicymaxextensionlengthresponse.RetentionPolicyMaxExtensionLengthResponse;
006import com.box.sdkgen.schemas.retentionpolicymaxextensionlengthresponse.RetentionPolicyMaxExtensionLengthResponseEnum;
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.util.Objects;
013
014/** A mini representation of a retention policy, used when nested within another resource. */
015@JsonFilter("nullablePropertyFilter")
016public class RetentionPolicyMini extends RetentionPolicyBase {
017
018  /** The name given to the retention policy. */
019  @JsonProperty("policy_name")
020  protected String policyName;
021
022  /**
023   * The length of the retention policy. This value specifies the duration in days that the
024   * retention policy will be active for after being assigned to content. If the policy has a
025   * `policy_type` of `indefinite`, the `retention_length` will also be `indefinite`.
026   */
027  @JsonProperty("retention_length")
028  protected String retentionLength;
029
030  /**
031   * The disposition action of the retention policy. This action can be `permanently_delete`, which
032   * will cause the content retained by the policy to be permanently deleted, or `remove_retention`,
033   * which will lift the retention policy from the content, allowing it to be deleted by users, once
034   * the retention policy has expired.
035   */
036  @JsonDeserialize(
037      using =
038          RetentionPolicyMiniDispositionActionField
039              .RetentionPolicyMiniDispositionActionFieldDeserializer.class)
040  @JsonSerialize(
041      using =
042          RetentionPolicyMiniDispositionActionField
043              .RetentionPolicyMiniDispositionActionFieldSerializer.class)
044  @JsonProperty("disposition_action")
045  protected EnumWrapper<RetentionPolicyMiniDispositionActionField> dispositionAction;
046
047  @JsonProperty("max_extension_length")
048  protected RetentionPolicyMaxExtensionLengthResponse maxExtensionLength;
049
050  public RetentionPolicyMini(@JsonProperty("id") String id) {
051    super(id);
052  }
053
054  protected RetentionPolicyMini(Builder builder) {
055    super(builder);
056    this.policyName = builder.policyName;
057    this.retentionLength = builder.retentionLength;
058    this.dispositionAction = builder.dispositionAction;
059    this.maxExtensionLength = builder.maxExtensionLength;
060    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
061  }
062
063  public String getPolicyName() {
064    return policyName;
065  }
066
067  public String getRetentionLength() {
068    return retentionLength;
069  }
070
071  public EnumWrapper<RetentionPolicyMiniDispositionActionField> getDispositionAction() {
072    return dispositionAction;
073  }
074
075  public RetentionPolicyMaxExtensionLengthResponse getMaxExtensionLength() {
076    return maxExtensionLength;
077  }
078
079  @Override
080  public boolean equals(Object o) {
081    if (this == o) {
082      return true;
083    }
084    if (o == null || getClass() != o.getClass()) {
085      return false;
086    }
087    RetentionPolicyMini casted = (RetentionPolicyMini) o;
088    return Objects.equals(id, casted.id)
089        && Objects.equals(type, casted.type)
090        && Objects.equals(policyName, casted.policyName)
091        && Objects.equals(retentionLength, casted.retentionLength)
092        && Objects.equals(dispositionAction, casted.dispositionAction)
093        && Objects.equals(maxExtensionLength, casted.maxExtensionLength);
094  }
095
096  @Override
097  public int hashCode() {
098    return Objects.hash(
099        id, type, policyName, retentionLength, dispositionAction, maxExtensionLength);
100  }
101
102  @Override
103  public String toString() {
104    return "RetentionPolicyMini{"
105        + "id='"
106        + id
107        + '\''
108        + ", "
109        + "type='"
110        + type
111        + '\''
112        + ", "
113        + "policyName='"
114        + policyName
115        + '\''
116        + ", "
117        + "retentionLength='"
118        + retentionLength
119        + '\''
120        + ", "
121        + "dispositionAction='"
122        + dispositionAction
123        + '\''
124        + ", "
125        + "maxExtensionLength='"
126        + maxExtensionLength
127        + '\''
128        + "}";
129  }
130
131  public static class Builder extends RetentionPolicyBase.Builder {
132
133    protected String policyName;
134
135    protected String retentionLength;
136
137    protected EnumWrapper<RetentionPolicyMiniDispositionActionField> dispositionAction;
138
139    protected RetentionPolicyMaxExtensionLengthResponse maxExtensionLength;
140
141    public Builder(String id) {
142      super(id);
143    }
144
145    public Builder policyName(String policyName) {
146      this.policyName = policyName;
147      return this;
148    }
149
150    public Builder retentionLength(String retentionLength) {
151      this.retentionLength = retentionLength;
152      return this;
153    }
154
155    public Builder dispositionAction(RetentionPolicyMiniDispositionActionField dispositionAction) {
156      this.dispositionAction =
157          new EnumWrapper<RetentionPolicyMiniDispositionActionField>(dispositionAction);
158      return this;
159    }
160
161    public Builder dispositionAction(
162        EnumWrapper<RetentionPolicyMiniDispositionActionField> dispositionAction) {
163      this.dispositionAction = dispositionAction;
164      return this;
165    }
166
167    public Builder maxExtensionLength(
168        RetentionPolicyMaxExtensionLengthResponseEnum maxExtensionLength) {
169      this.maxExtensionLength = new RetentionPolicyMaxExtensionLengthResponse(maxExtensionLength);
170      return this;
171    }
172
173    public Builder maxExtensionLength(String maxExtensionLength) {
174      this.maxExtensionLength = new RetentionPolicyMaxExtensionLengthResponse(maxExtensionLength);
175      return this;
176    }
177
178    public Builder maxExtensionLength(
179        RetentionPolicyMaxExtensionLengthResponse maxExtensionLength) {
180      this.maxExtensionLength = maxExtensionLength;
181      return this;
182    }
183
184    @Override
185    public Builder type(RetentionPolicyBaseTypeField type) {
186      this.type = new EnumWrapper<RetentionPolicyBaseTypeField>(type);
187      return this;
188    }
189
190    @Override
191    public Builder type(EnumWrapper<RetentionPolicyBaseTypeField> type) {
192      this.type = type;
193      return this;
194    }
195
196    public RetentionPolicyMini build() {
197      if (this.type == null) {
198        this.type =
199            new EnumWrapper<RetentionPolicyBaseTypeField>(
200                RetentionPolicyBaseTypeField.RETENTION_POLICY);
201      }
202      return new RetentionPolicyMini(this);
203    }
204  }
205}