001package com.box.sdkgen.schemas.storagepolicyassignment;
002
003import com.box.sdkgen.internal.NullableFieldTracker;
004import com.box.sdkgen.internal.SerializableObject;
005import com.box.sdkgen.schemas.storagepolicymini.StoragePolicyMini;
006import com.box.sdkgen.serialization.json.EnumWrapper;
007import com.fasterxml.jackson.annotation.JsonFilter;
008import com.fasterxml.jackson.annotation.JsonProperty;
009import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
010import com.fasterxml.jackson.databind.annotation.JsonSerialize;
011import java.util.Objects;
012
013/** The assignment of a storage policy to a user or enterprise. */
014@JsonFilter("nullablePropertyFilter")
015public class StoragePolicyAssignment extends SerializableObject {
016
017  /** The unique identifier for a storage policy assignment. */
018  protected final String id;
019
020  /** The value will always be `storage_policy_assignment`. */
021  @JsonDeserialize(
022      using = StoragePolicyAssignmentTypeField.StoragePolicyAssignmentTypeFieldDeserializer.class)
023  @JsonSerialize(
024      using = StoragePolicyAssignmentTypeField.StoragePolicyAssignmentTypeFieldSerializer.class)
025  protected EnumWrapper<StoragePolicyAssignmentTypeField> type;
026
027  @JsonProperty("storage_policy")
028  protected StoragePolicyMini storagePolicy;
029
030  @JsonProperty("assigned_to")
031  protected StoragePolicyAssignmentAssignedToField assignedTo;
032
033  public StoragePolicyAssignment(@JsonProperty("id") String id) {
034    super();
035    this.id = id;
036    this.type =
037        new EnumWrapper<StoragePolicyAssignmentTypeField>(
038            StoragePolicyAssignmentTypeField.STORAGE_POLICY_ASSIGNMENT);
039  }
040
041  protected StoragePolicyAssignment(Builder builder) {
042    super();
043    this.id = builder.id;
044    this.type = builder.type;
045    this.storagePolicy = builder.storagePolicy;
046    this.assignedTo = builder.assignedTo;
047    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
048  }
049
050  public String getId() {
051    return id;
052  }
053
054  public EnumWrapper<StoragePolicyAssignmentTypeField> getType() {
055    return type;
056  }
057
058  public StoragePolicyMini getStoragePolicy() {
059    return storagePolicy;
060  }
061
062  public StoragePolicyAssignmentAssignedToField getAssignedTo() {
063    return assignedTo;
064  }
065
066  @Override
067  public boolean equals(Object o) {
068    if (this == o) {
069      return true;
070    }
071    if (o == null || getClass() != o.getClass()) {
072      return false;
073    }
074    StoragePolicyAssignment casted = (StoragePolicyAssignment) o;
075    return Objects.equals(id, casted.id)
076        && Objects.equals(type, casted.type)
077        && Objects.equals(storagePolicy, casted.storagePolicy)
078        && Objects.equals(assignedTo, casted.assignedTo);
079  }
080
081  @Override
082  public int hashCode() {
083    return Objects.hash(id, type, storagePolicy, assignedTo);
084  }
085
086  @Override
087  public String toString() {
088    return "StoragePolicyAssignment{"
089        + "id='"
090        + id
091        + '\''
092        + ", "
093        + "type='"
094        + type
095        + '\''
096        + ", "
097        + "storagePolicy='"
098        + storagePolicy
099        + '\''
100        + ", "
101        + "assignedTo='"
102        + assignedTo
103        + '\''
104        + "}";
105  }
106
107  public static class Builder extends NullableFieldTracker {
108
109    protected final String id;
110
111    protected EnumWrapper<StoragePolicyAssignmentTypeField> type;
112
113    protected StoragePolicyMini storagePolicy;
114
115    protected StoragePolicyAssignmentAssignedToField assignedTo;
116
117    public Builder(String id) {
118      super();
119      this.id = id;
120    }
121
122    public Builder type(StoragePolicyAssignmentTypeField type) {
123      this.type = new EnumWrapper<StoragePolicyAssignmentTypeField>(type);
124      return this;
125    }
126
127    public Builder type(EnumWrapper<StoragePolicyAssignmentTypeField> type) {
128      this.type = type;
129      return this;
130    }
131
132    public Builder storagePolicy(StoragePolicyMini storagePolicy) {
133      this.storagePolicy = storagePolicy;
134      return this;
135    }
136
137    public Builder assignedTo(StoragePolicyAssignmentAssignedToField assignedTo) {
138      this.assignedTo = assignedTo;
139      return this;
140    }
141
142    public StoragePolicyAssignment build() {
143      if (this.type == null) {
144        this.type =
145            new EnumWrapper<StoragePolicyAssignmentTypeField>(
146                StoragePolicyAssignmentTypeField.STORAGE_POLICY_ASSIGNMENT);
147      }
148      return new StoragePolicyAssignment(this);
149    }
150  }
151}