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}