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 CreateGroupMembershipRequestBody extends SerializableObject {
016
017  /** The user to add to the group. */
018  protected final CreateGroupMembershipRequestBodyUserField user;
019
020  /** The group to add the user to. */
021  protected final CreateGroupMembershipRequestBodyGroupField group;
022
023  /** The role of the user in the group. */
024  @JsonDeserialize(
025      using =
026          CreateGroupMembershipRequestBodyRoleField
027              .CreateGroupMembershipRequestBodyRoleFieldDeserializer.class)
028  @JsonSerialize(
029      using =
030          CreateGroupMembershipRequestBodyRoleField
031              .CreateGroupMembershipRequestBodyRoleFieldSerializer.class)
032  protected EnumWrapper<CreateGroupMembershipRequestBodyRoleField> role;
033
034  /**
035   * Custom configuration for the permissions an admin if a group will receive. This option has no
036   * effect on members with a role of `member`.
037   *
038   * <p>Setting these permissions overwrites the default access levels of an admin.
039   *
040   * <p>Specifying a value of `null` for this object will disable all configurable permissions.
041   * Specifying permissions will set them accordingly, omitted permissions will be enabled by
042   * default.
043   */
044  @JsonProperty("configurable_permissions")
045  @Nullable
046  protected Map<String, Boolean> configurablePermissions;
047
048  public CreateGroupMembershipRequestBody(
049      @JsonProperty("user") CreateGroupMembershipRequestBodyUserField user,
050      @JsonProperty("group") CreateGroupMembershipRequestBodyGroupField group) {
051    super();
052    this.user = user;
053    this.group = group;
054  }
055
056  protected CreateGroupMembershipRequestBody(Builder builder) {
057    super();
058    this.user = builder.user;
059    this.group = builder.group;
060    this.role = builder.role;
061    this.configurablePermissions = builder.configurablePermissions;
062    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
063  }
064
065  public CreateGroupMembershipRequestBodyUserField getUser() {
066    return user;
067  }
068
069  public CreateGroupMembershipRequestBodyGroupField getGroup() {
070    return group;
071  }
072
073  public EnumWrapper<CreateGroupMembershipRequestBodyRoleField> getRole() {
074    return role;
075  }
076
077  public Map<String, Boolean> getConfigurablePermissions() {
078    return configurablePermissions;
079  }
080
081  @Override
082  public boolean equals(Object o) {
083    if (this == o) {
084      return true;
085    }
086    if (o == null || getClass() != o.getClass()) {
087      return false;
088    }
089    CreateGroupMembershipRequestBody casted = (CreateGroupMembershipRequestBody) o;
090    return Objects.equals(user, casted.user)
091        && Objects.equals(group, casted.group)
092        && Objects.equals(role, casted.role)
093        && Objects.equals(configurablePermissions, casted.configurablePermissions);
094  }
095
096  @Override
097  public int hashCode() {
098    return Objects.hash(user, group, role, configurablePermissions);
099  }
100
101  @Override
102  public String toString() {
103    return "CreateGroupMembershipRequestBody{"
104        + "user='"
105        + user
106        + '\''
107        + ", "
108        + "group='"
109        + group
110        + '\''
111        + ", "
112        + "role='"
113        + role
114        + '\''
115        + ", "
116        + "configurablePermissions='"
117        + configurablePermissions
118        + '\''
119        + "}";
120  }
121
122  public static class Builder extends NullableFieldTracker {
123
124    protected final CreateGroupMembershipRequestBodyUserField user;
125
126    protected final CreateGroupMembershipRequestBodyGroupField group;
127
128    protected EnumWrapper<CreateGroupMembershipRequestBodyRoleField> role;
129
130    protected Map<String, Boolean> configurablePermissions;
131
132    public Builder(
133        CreateGroupMembershipRequestBodyUserField user,
134        CreateGroupMembershipRequestBodyGroupField group) {
135      super();
136      this.user = user;
137      this.group = group;
138    }
139
140    public Builder role(CreateGroupMembershipRequestBodyRoleField role) {
141      this.role = new EnumWrapper<CreateGroupMembershipRequestBodyRoleField>(role);
142      return this;
143    }
144
145    public Builder role(EnumWrapper<CreateGroupMembershipRequestBodyRoleField> role) {
146      this.role = role;
147      return this;
148    }
149
150    public Builder configurablePermissions(Map<String, Boolean> configurablePermissions) {
151      this.configurablePermissions = configurablePermissions;
152      this.markNullableFieldAsSet("configurable_permissions");
153      return this;
154    }
155
156    public CreateGroupMembershipRequestBody build() {
157      return new CreateGroupMembershipRequestBody(this);
158    }
159  }
160}