001package com.box.sdkgen.managers.sharedlinksfolders;
002
003import com.box.sdkgen.internal.NullableFieldTracker;
004import com.box.sdkgen.internal.SerializableObject;
005import com.box.sdkgen.internal.utils.DateTimeUtils;
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.time.OffsetDateTime;
012import java.util.Objects;
013
014@JsonFilter("nullablePropertyFilter")
015public class UpdateSharedLinkOnFolderRequestBodySharedLinkField extends SerializableObject {
016
017  /**
018   * The level of access for the shared link. This can be restricted to anyone with the link
019   * (`open`), only people within the company (`company`) and only those who have been invited to
020   * the folder (`collaborators`).
021   *
022   * <p>If not set, this field defaults to the access level specified by the enterprise admin. To
023   * create a shared link with this default setting pass the `shared_link` object with no `access`
024   * field, for example `{ "shared_link": {} }`.
025   *
026   * <p>The `company` access level is only available to paid accounts.
027   */
028  @JsonDeserialize(
029      using =
030          UpdateSharedLinkOnFolderRequestBodySharedLinkAccessField
031              .UpdateSharedLinkOnFolderRequestBodySharedLinkAccessFieldDeserializer.class)
032  @JsonSerialize(
033      using =
034          UpdateSharedLinkOnFolderRequestBodySharedLinkAccessField
035              .UpdateSharedLinkOnFolderRequestBodySharedLinkAccessFieldSerializer.class)
036  protected EnumWrapper<UpdateSharedLinkOnFolderRequestBodySharedLinkAccessField> access;
037
038  /**
039   * The password required to access the shared link. Set the password to `null` to remove it.
040   * Passwords must now be at least eight characters long and include a number, upper case letter,
041   * or a non-numeric or non-alphabetic character. A password can only be set when `access` is set
042   * to `open`.
043   */
044  protected String password;
045
046  /**
047   * Defines a custom vanity name to use in the shared link URL, for example
048   * `https://app.box.com/v/my-shared-link`.
049   *
050   * <p>Custom URLs should not be used when sharing sensitive content as vanity URLs are a lot
051   * easier to guess than regular shared links.
052   */
053  @JsonProperty("vanity_name")
054  protected String vanityName;
055
056  /**
057   * The timestamp at which this shared link will expire. This field can only be set by users with
058   * paid accounts. The value must be greater than the current date and time.
059   */
060  @JsonProperty("unshared_at")
061  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
062  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
063  protected OffsetDateTime unsharedAt;
064
065  protected UpdateSharedLinkOnFolderRequestBodySharedLinkPermissionsField permissions;
066
067  public UpdateSharedLinkOnFolderRequestBodySharedLinkField() {
068    super();
069  }
070
071  protected UpdateSharedLinkOnFolderRequestBodySharedLinkField(Builder builder) {
072    super();
073    this.access = builder.access;
074    this.password = builder.password;
075    this.vanityName = builder.vanityName;
076    this.unsharedAt = builder.unsharedAt;
077    this.permissions = builder.permissions;
078    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
079  }
080
081  public EnumWrapper<UpdateSharedLinkOnFolderRequestBodySharedLinkAccessField> getAccess() {
082    return access;
083  }
084
085  public String getPassword() {
086    return password;
087  }
088
089  public String getVanityName() {
090    return vanityName;
091  }
092
093  public OffsetDateTime getUnsharedAt() {
094    return unsharedAt;
095  }
096
097  public UpdateSharedLinkOnFolderRequestBodySharedLinkPermissionsField getPermissions() {
098    return permissions;
099  }
100
101  @Override
102  public boolean equals(Object o) {
103    if (this == o) {
104      return true;
105    }
106    if (o == null || getClass() != o.getClass()) {
107      return false;
108    }
109    UpdateSharedLinkOnFolderRequestBodySharedLinkField casted =
110        (UpdateSharedLinkOnFolderRequestBodySharedLinkField) o;
111    return Objects.equals(access, casted.access)
112        && Objects.equals(password, casted.password)
113        && Objects.equals(vanityName, casted.vanityName)
114        && Objects.equals(unsharedAt, casted.unsharedAt)
115        && Objects.equals(permissions, casted.permissions);
116  }
117
118  @Override
119  public int hashCode() {
120    return Objects.hash(access, password, vanityName, unsharedAt, permissions);
121  }
122
123  @Override
124  public String toString() {
125    return "UpdateSharedLinkOnFolderRequestBodySharedLinkField{"
126        + "access='"
127        + access
128        + '\''
129        + ", "
130        + "password='"
131        + password
132        + '\''
133        + ", "
134        + "vanityName='"
135        + vanityName
136        + '\''
137        + ", "
138        + "unsharedAt='"
139        + unsharedAt
140        + '\''
141        + ", "
142        + "permissions='"
143        + permissions
144        + '\''
145        + "}";
146  }
147
148  public static class Builder extends NullableFieldTracker {
149
150    protected EnumWrapper<UpdateSharedLinkOnFolderRequestBodySharedLinkAccessField> access;
151
152    protected String password;
153
154    protected String vanityName;
155
156    protected OffsetDateTime unsharedAt;
157
158    protected UpdateSharedLinkOnFolderRequestBodySharedLinkPermissionsField permissions;
159
160    public Builder access(UpdateSharedLinkOnFolderRequestBodySharedLinkAccessField access) {
161      this.access =
162          new EnumWrapper<UpdateSharedLinkOnFolderRequestBodySharedLinkAccessField>(access);
163      return this;
164    }
165
166    public Builder access(
167        EnumWrapper<UpdateSharedLinkOnFolderRequestBodySharedLinkAccessField> access) {
168      this.access = access;
169      return this;
170    }
171
172    public Builder password(String password) {
173      this.password = password;
174      return this;
175    }
176
177    public Builder vanityName(String vanityName) {
178      this.vanityName = vanityName;
179      return this;
180    }
181
182    public Builder unsharedAt(OffsetDateTime unsharedAt) {
183      this.unsharedAt = unsharedAt;
184      return this;
185    }
186
187    public Builder permissions(
188        UpdateSharedLinkOnFolderRequestBodySharedLinkPermissionsField permissions) {
189      this.permissions = permissions;
190      return this;
191    }
192
193    public UpdateSharedLinkOnFolderRequestBodySharedLinkField build() {
194      return new UpdateSharedLinkOnFolderRequestBodySharedLinkField(this);
195    }
196  }
197}