001package com.box.sdkgen.schemas.groupmembership;
002
003import com.box.sdkgen.internal.NullableFieldTracker;
004import com.box.sdkgen.internal.SerializableObject;
005import com.box.sdkgen.internal.utils.DateTimeUtils;
006import com.box.sdkgen.schemas.groupmini.GroupMini;
007import com.box.sdkgen.schemas.usermini.UserMini;
008import com.box.sdkgen.serialization.json.EnumWrapper;
009import com.fasterxml.jackson.annotation.JsonFilter;
010import com.fasterxml.jackson.annotation.JsonProperty;
011import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
012import com.fasterxml.jackson.databind.annotation.JsonSerialize;
013import java.time.OffsetDateTime;
014import java.util.Objects;
015
016/** Membership is used to signify that a user is part of a group. */
017@JsonFilter("nullablePropertyFilter")
018public class GroupMembership extends SerializableObject {
019
020  /** The unique identifier for this group membership. */
021  protected String id;
022
023  /** The value will always be `group_membership`. */
024  @JsonDeserialize(using = GroupMembershipTypeField.GroupMembershipTypeFieldDeserializer.class)
025  @JsonSerialize(using = GroupMembershipTypeField.GroupMembershipTypeFieldSerializer.class)
026  protected EnumWrapper<GroupMembershipTypeField> type;
027
028  protected UserMini user;
029
030  protected GroupMini group;
031
032  /** The role of the user in the group. */
033  @JsonDeserialize(using = GroupMembershipRoleField.GroupMembershipRoleFieldDeserializer.class)
034  @JsonSerialize(using = GroupMembershipRoleField.GroupMembershipRoleFieldSerializer.class)
035  protected EnumWrapper<GroupMembershipRoleField> role;
036
037  /** The time this membership was created. */
038  @JsonProperty("created_at")
039  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
040  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
041  protected OffsetDateTime createdAt;
042
043  /** The time this membership was last modified. */
044  @JsonProperty("modified_at")
045  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
046  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
047  protected OffsetDateTime modifiedAt;
048
049  public GroupMembership() {
050    super();
051  }
052
053  protected GroupMembership(Builder builder) {
054    super();
055    this.id = builder.id;
056    this.type = builder.type;
057    this.user = builder.user;
058    this.group = builder.group;
059    this.role = builder.role;
060    this.createdAt = builder.createdAt;
061    this.modifiedAt = builder.modifiedAt;
062    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
063  }
064
065  public String getId() {
066    return id;
067  }
068
069  public EnumWrapper<GroupMembershipTypeField> getType() {
070    return type;
071  }
072
073  public UserMini getUser() {
074    return user;
075  }
076
077  public GroupMini getGroup() {
078    return group;
079  }
080
081  public EnumWrapper<GroupMembershipRoleField> getRole() {
082    return role;
083  }
084
085  public OffsetDateTime getCreatedAt() {
086    return createdAt;
087  }
088
089  public OffsetDateTime getModifiedAt() {
090    return modifiedAt;
091  }
092
093  @Override
094  public boolean equals(Object o) {
095    if (this == o) {
096      return true;
097    }
098    if (o == null || getClass() != o.getClass()) {
099      return false;
100    }
101    GroupMembership casted = (GroupMembership) o;
102    return Objects.equals(id, casted.id)
103        && Objects.equals(type, casted.type)
104        && Objects.equals(user, casted.user)
105        && Objects.equals(group, casted.group)
106        && Objects.equals(role, casted.role)
107        && Objects.equals(createdAt, casted.createdAt)
108        && Objects.equals(modifiedAt, casted.modifiedAt);
109  }
110
111  @Override
112  public int hashCode() {
113    return Objects.hash(id, type, user, group, role, createdAt, modifiedAt);
114  }
115
116  @Override
117  public String toString() {
118    return "GroupMembership{"
119        + "id='"
120        + id
121        + '\''
122        + ", "
123        + "type='"
124        + type
125        + '\''
126        + ", "
127        + "user='"
128        + user
129        + '\''
130        + ", "
131        + "group='"
132        + group
133        + '\''
134        + ", "
135        + "role='"
136        + role
137        + '\''
138        + ", "
139        + "createdAt='"
140        + createdAt
141        + '\''
142        + ", "
143        + "modifiedAt='"
144        + modifiedAt
145        + '\''
146        + "}";
147  }
148
149  public static class Builder extends NullableFieldTracker {
150
151    protected String id;
152
153    protected EnumWrapper<GroupMembershipTypeField> type;
154
155    protected UserMini user;
156
157    protected GroupMini group;
158
159    protected EnumWrapper<GroupMembershipRoleField> role;
160
161    protected OffsetDateTime createdAt;
162
163    protected OffsetDateTime modifiedAt;
164
165    public Builder id(String id) {
166      this.id = id;
167      return this;
168    }
169
170    public Builder type(GroupMembershipTypeField type) {
171      this.type = new EnumWrapper<GroupMembershipTypeField>(type);
172      return this;
173    }
174
175    public Builder type(EnumWrapper<GroupMembershipTypeField> type) {
176      this.type = type;
177      return this;
178    }
179
180    public Builder user(UserMini user) {
181      this.user = user;
182      return this;
183    }
184
185    public Builder group(GroupMini group) {
186      this.group = group;
187      return this;
188    }
189
190    public Builder role(GroupMembershipRoleField role) {
191      this.role = new EnumWrapper<GroupMembershipRoleField>(role);
192      return this;
193    }
194
195    public Builder role(EnumWrapper<GroupMembershipRoleField> role) {
196      this.role = role;
197      return this;
198    }
199
200    public Builder createdAt(OffsetDateTime createdAt) {
201      this.createdAt = createdAt;
202      return this;
203    }
204
205    public Builder modifiedAt(OffsetDateTime modifiedAt) {
206      this.modifiedAt = modifiedAt;
207      return this;
208    }
209
210    public GroupMembership build() {
211      return new GroupMembership(this);
212    }
213  }
214}