001package com.box.sdkgen.managers.folders;
002
003import com.box.sdkgen.internal.NullableFieldTracker;
004import com.box.sdkgen.internal.SerializableObject;
005import com.box.sdkgen.serialization.json.EnumWrapper;
006import com.fasterxml.jackson.annotation.JsonFilter;
007import com.fasterxml.jackson.annotation.JsonProperty;
008import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
009import com.fasterxml.jackson.databind.annotation.JsonSerialize;
010import java.util.Objects;
011
012@JsonFilter("nullablePropertyFilter")
013public class CreateFolderRequestBody extends SerializableObject {
014
015  /**
016   * The name for the new folder.
017   *
018   * <p>The following restrictions to folder names apply: names containing non-printable ASCII
019   * characters, forward and backward slashes (`/`, `\`), names with trailing spaces, and names `.`
020   * and `..` are not allowed.
021   *
022   * <p>Folder names must be unique within their parent folder. The name check is case-insensitive,
023   * so a folder named `New Folder` cannot be created in a parent folder that already contains a
024   * folder named `new folder`.
025   */
026  protected final String name;
027
028  /** The parent folder to create the new folder within. */
029  protected final CreateFolderRequestBodyParentField parent;
030
031  @JsonProperty("folder_upload_email")
032  protected CreateFolderRequestBodyFolderUploadEmailField folderUploadEmail;
033
034  /**
035   * Specifies whether a folder should be synced to a user's device or not. This is used by Box Sync
036   * (discontinued) and is not used by Box Drive.
037   */
038  @JsonDeserialize(
039      using =
040          CreateFolderRequestBodySyncStateField.CreateFolderRequestBodySyncStateFieldDeserializer
041              .class)
042  @JsonSerialize(
043      using =
044          CreateFolderRequestBodySyncStateField.CreateFolderRequestBodySyncStateFieldSerializer
045              .class)
046  @JsonProperty("sync_state")
047  protected EnumWrapper<CreateFolderRequestBodySyncStateField> syncState;
048
049  public CreateFolderRequestBody(
050      @JsonProperty("name") String name,
051      @JsonProperty("parent") CreateFolderRequestBodyParentField parent) {
052    super();
053    this.name = name;
054    this.parent = parent;
055  }
056
057  protected CreateFolderRequestBody(Builder builder) {
058    super();
059    this.name = builder.name;
060    this.parent = builder.parent;
061    this.folderUploadEmail = builder.folderUploadEmail;
062    this.syncState = builder.syncState;
063    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
064  }
065
066  public String getName() {
067    return name;
068  }
069
070  public CreateFolderRequestBodyParentField getParent() {
071    return parent;
072  }
073
074  public CreateFolderRequestBodyFolderUploadEmailField getFolderUploadEmail() {
075    return folderUploadEmail;
076  }
077
078  public EnumWrapper<CreateFolderRequestBodySyncStateField> getSyncState() {
079    return syncState;
080  }
081
082  @Override
083  public boolean equals(Object o) {
084    if (this == o) {
085      return true;
086    }
087    if (o == null || getClass() != o.getClass()) {
088      return false;
089    }
090    CreateFolderRequestBody casted = (CreateFolderRequestBody) o;
091    return Objects.equals(name, casted.name)
092        && Objects.equals(parent, casted.parent)
093        && Objects.equals(folderUploadEmail, casted.folderUploadEmail)
094        && Objects.equals(syncState, casted.syncState);
095  }
096
097  @Override
098  public int hashCode() {
099    return Objects.hash(name, parent, folderUploadEmail, syncState);
100  }
101
102  @Override
103  public String toString() {
104    return "CreateFolderRequestBody{"
105        + "name='"
106        + name
107        + '\''
108        + ", "
109        + "parent='"
110        + parent
111        + '\''
112        + ", "
113        + "folderUploadEmail='"
114        + folderUploadEmail
115        + '\''
116        + ", "
117        + "syncState='"
118        + syncState
119        + '\''
120        + "}";
121  }
122
123  public static class Builder extends NullableFieldTracker {
124
125    protected final String name;
126
127    protected final CreateFolderRequestBodyParentField parent;
128
129    protected CreateFolderRequestBodyFolderUploadEmailField folderUploadEmail;
130
131    protected EnumWrapper<CreateFolderRequestBodySyncStateField> syncState;
132
133    public Builder(String name, CreateFolderRequestBodyParentField parent) {
134      super();
135      this.name = name;
136      this.parent = parent;
137    }
138
139    public Builder folderUploadEmail(
140        CreateFolderRequestBodyFolderUploadEmailField folderUploadEmail) {
141      this.folderUploadEmail = folderUploadEmail;
142      return this;
143    }
144
145    public Builder syncState(CreateFolderRequestBodySyncStateField syncState) {
146      this.syncState = new EnumWrapper<CreateFolderRequestBodySyncStateField>(syncState);
147      return this;
148    }
149
150    public Builder syncState(EnumWrapper<CreateFolderRequestBodySyncStateField> syncState) {
151      this.syncState = syncState;
152      return this;
153    }
154
155    public CreateFolderRequestBody build() {
156      return new CreateFolderRequestBody(this);
157    }
158  }
159}