001package com.box.sdkgen.managers.memberships;
002
003import com.box.sdkgen.internal.Nullable;
004import com.box.sdkgen.internal.NullableFieldTracker;
005import com.box.sdkgen.internal.SerializableObject;
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.Map;
012import java.util.Objects;
013
014@JsonFilter("nullablePropertyFilter")
015public class UpdateGroupMembershipByIdRequestBody extends SerializableObject {
016
017  /** The role of the user in the group. */
018  @JsonDeserialize(
019      using =
020          UpdateGroupMembershipByIdRequestBodyRoleField
021              .UpdateGroupMembershipByIdRequestBodyRoleFieldDeserializer.class)
022  @JsonSerialize(
023      using =
024          UpdateGroupMembershipByIdRequestBodyRoleField
025              .UpdateGroupMembershipByIdRequestBodyRoleFieldSerializer.class)
026  protected EnumWrapper<UpdateGroupMembershipByIdRequestBodyRoleField> role;
027
028  /**
029   * Custom configuration for the permissions an admin if a group will receive. This option has no
030   * effect on members with a role of `member`.
031   *
032   * <p>Setting these permissions overwrites the default access levels of an admin.
033   *
034   * <p>Specifying a value of `null` for this object will disable all configurable permissions.
035   * Specifying permissions will set them accordingly, omitted permissions will be enabled by
036   * default.
037   */
038  @JsonProperty("configurable_permissions")
039  @Nullable
040  protected Map<String, Boolean> configurablePermissions;
041
042  public UpdateGroupMembershipByIdRequestBody() {
043    super();
044  }
045
046  protected UpdateGroupMembershipByIdRequestBody(Builder builder) {
047    super();
048    this.role = builder.role;
049    this.configurablePermissions = builder.configurablePermissions;
050    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
051  }
052
053  public EnumWrapper<UpdateGroupMembershipByIdRequestBodyRoleField> getRole() {
054    return role;
055  }
056
057  public Map<String, Boolean> getConfigurablePermissions() {
058    return configurablePermissions;
059  }
060
061  @Override
062  public boolean equals(Object o) {
063    if (this == o) {
064      return true;
065    }
066    if (o == null || getClass() != o.getClass()) {
067      return false;
068    }
069    UpdateGroupMembershipByIdRequestBody casted = (UpdateGroupMembershipByIdRequestBody) o;
070    return Objects.equals(role, casted.role)
071        && Objects.equals(configurablePermissions, casted.configurablePermissions);
072  }
073
074  @Override
075  public int hashCode() {
076    return Objects.hash(role, configurablePermissions);
077  }
078
079  @Override
080  public String toString() {
081    return "UpdateGroupMembershipByIdRequestBody{"
082        + "role='"
083        + role
084        + '\''
085        + ", "
086        + "configurablePermissions='"
087        + configurablePermissions
088        + '\''
089        + "}";
090  }
091
092  public static class Builder extends NullableFieldTracker {
093
094    protected EnumWrapper<UpdateGroupMembershipByIdRequestBodyRoleField> role;
095
096    protected Map<String, Boolean> configurablePermissions;
097
098    public Builder role(UpdateGroupMembershipByIdRequestBodyRoleField role) {
099      this.role = new EnumWrapper<UpdateGroupMembershipByIdRequestBodyRoleField>(role);
100      return this;
101    }
102
103    public Builder role(EnumWrapper<UpdateGroupMembershipByIdRequestBodyRoleField> role) {
104      this.role = role;
105      return this;
106    }
107
108    public Builder configurablePermissions(Map<String, Boolean> configurablePermissions) {
109      this.configurablePermissions = configurablePermissions;
110      this.markNullableFieldAsSet("configurable_permissions");
111      return this;
112    }
113
114    public UpdateGroupMembershipByIdRequestBody build() {
115      return new UpdateGroupMembershipByIdRequestBody(this);
116    }
117  }
118}