001package com.box.sdkgen.schemas.collaboration;
002
003import com.box.sdkgen.internal.Nullable;
004import com.box.sdkgen.internal.NullableFieldTracker;
005import com.box.sdkgen.internal.SerializableObject;
006import com.box.sdkgen.internal.utils.DateTimeUtils;
007import com.box.sdkgen.schemas.appitem.AppItem;
008import com.box.sdkgen.schemas.collaborationaccessgrantee.CollaborationAccessGrantee;
009import com.box.sdkgen.schemas.collaborationitem.CollaborationItem;
010import com.box.sdkgen.schemas.file.File;
011import com.box.sdkgen.schemas.folder.Folder;
012import com.box.sdkgen.schemas.groupmini.GroupMini;
013import com.box.sdkgen.schemas.usercollaborations.UserCollaborations;
014import com.box.sdkgen.schemas.weblink.WebLink;
015import com.box.sdkgen.serialization.json.EnumWrapper;
016import com.fasterxml.jackson.annotation.JsonFilter;
017import com.fasterxml.jackson.annotation.JsonProperty;
018import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
019import com.fasterxml.jackson.databind.annotation.JsonSerialize;
020import java.time.OffsetDateTime;
021import java.util.Objects;
022
023/**
024 * Collaborations define access permissions for users and groups to files and folders, similar to
025 * access control lists. A collaboration object grants a user or group access to a file or folder
026 * with permissions defined by a specific role.
027 */
028@JsonFilter("nullablePropertyFilter")
029public class Collaboration extends SerializableObject {
030
031  /** The unique identifier for this collaboration. */
032  protected final String id;
033
034  /** The value will always be `collaboration`. */
035  @JsonDeserialize(using = CollaborationTypeField.CollaborationTypeFieldDeserializer.class)
036  @JsonSerialize(using = CollaborationTypeField.CollaborationTypeFieldSerializer.class)
037  protected EnumWrapper<CollaborationTypeField> type;
038
039  @Nullable protected CollaborationItem item;
040
041  @JsonProperty("app_item")
042  @Nullable
043  protected AppItem appItem;
044
045  @JsonProperty("accessible_by")
046  protected CollaborationAccessGrantee accessibleBy;
047
048  /**
049   * The email address used to invite an unregistered collaborator, if they are not a registered
050   * user.
051   */
052  @JsonProperty("invite_email")
053  @Nullable
054  protected String inviteEmail;
055
056  /** The level of access granted. */
057  @JsonDeserialize(using = CollaborationRoleField.CollaborationRoleFieldDeserializer.class)
058  @JsonSerialize(using = CollaborationRoleField.CollaborationRoleFieldSerializer.class)
059  protected EnumWrapper<CollaborationRoleField> role;
060
061  /** When the collaboration will expire, or `null` if no expiration date is set. */
062  @JsonProperty("expires_at")
063  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
064  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
065  @Nullable
066  protected OffsetDateTime expiresAt;
067
068  /**
069   * If set to `true`, collaborators have access to shared items, but such items won't be visible in
070   * the All Files list. Additionally, collaborators won't see the path to the root folder for the
071   * shared item.
072   */
073  @JsonProperty("is_access_only")
074  protected Boolean isAccessOnly;
075
076  /**
077   * The status of the collaboration invitation. If the status is `pending`, `login` and `name`
078   * return an empty string.
079   */
080  @JsonDeserialize(using = CollaborationStatusField.CollaborationStatusFieldDeserializer.class)
081  @JsonSerialize(using = CollaborationStatusField.CollaborationStatusFieldSerializer.class)
082  protected EnumWrapper<CollaborationStatusField> status;
083
084  /** When the `status` of the collaboration object changed to `accepted` or `rejected`. */
085  @JsonProperty("acknowledged_at")
086  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
087  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
088  protected OffsetDateTime acknowledgedAt;
089
090  @JsonProperty("created_by")
091  protected UserCollaborations createdBy;
092
093  /** When the collaboration object was created. */
094  @JsonProperty("created_at")
095  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
096  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
097  protected OffsetDateTime createdAt;
098
099  /** When the collaboration object was last modified. */
100  @JsonProperty("modified_at")
101  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
102  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
103  protected OffsetDateTime modifiedAt;
104
105  @JsonProperty("acceptance_requirements_status")
106  protected CollaborationAcceptanceRequirementsStatusField acceptanceRequirementsStatus;
107
108  public Collaboration(@JsonProperty("id") String id) {
109    super();
110    this.id = id;
111    this.type = new EnumWrapper<CollaborationTypeField>(CollaborationTypeField.COLLABORATION);
112  }
113
114  protected Collaboration(Builder builder) {
115    super();
116    this.id = builder.id;
117    this.type = builder.type;
118    this.item = builder.item;
119    this.appItem = builder.appItem;
120    this.accessibleBy = builder.accessibleBy;
121    this.inviteEmail = builder.inviteEmail;
122    this.role = builder.role;
123    this.expiresAt = builder.expiresAt;
124    this.isAccessOnly = builder.isAccessOnly;
125    this.status = builder.status;
126    this.acknowledgedAt = builder.acknowledgedAt;
127    this.createdBy = builder.createdBy;
128    this.createdAt = builder.createdAt;
129    this.modifiedAt = builder.modifiedAt;
130    this.acceptanceRequirementsStatus = builder.acceptanceRequirementsStatus;
131    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
132  }
133
134  public String getId() {
135    return id;
136  }
137
138  public EnumWrapper<CollaborationTypeField> getType() {
139    return type;
140  }
141
142  public CollaborationItem getItem() {
143    return item;
144  }
145
146  public AppItem getAppItem() {
147    return appItem;
148  }
149
150  public CollaborationAccessGrantee getAccessibleBy() {
151    return accessibleBy;
152  }
153
154  public String getInviteEmail() {
155    return inviteEmail;
156  }
157
158  public EnumWrapper<CollaborationRoleField> getRole() {
159    return role;
160  }
161
162  public OffsetDateTime getExpiresAt() {
163    return expiresAt;
164  }
165
166  public Boolean getIsAccessOnly() {
167    return isAccessOnly;
168  }
169
170  public EnumWrapper<CollaborationStatusField> getStatus() {
171    return status;
172  }
173
174  public OffsetDateTime getAcknowledgedAt() {
175    return acknowledgedAt;
176  }
177
178  public UserCollaborations getCreatedBy() {
179    return createdBy;
180  }
181
182  public OffsetDateTime getCreatedAt() {
183    return createdAt;
184  }
185
186  public OffsetDateTime getModifiedAt() {
187    return modifiedAt;
188  }
189
190  public CollaborationAcceptanceRequirementsStatusField getAcceptanceRequirementsStatus() {
191    return acceptanceRequirementsStatus;
192  }
193
194  @Override
195  public boolean equals(Object o) {
196    if (this == o) {
197      return true;
198    }
199    if (o == null || getClass() != o.getClass()) {
200      return false;
201    }
202    Collaboration casted = (Collaboration) o;
203    return Objects.equals(id, casted.id)
204        && Objects.equals(type, casted.type)
205        && Objects.equals(item, casted.item)
206        && Objects.equals(appItem, casted.appItem)
207        && Objects.equals(accessibleBy, casted.accessibleBy)
208        && Objects.equals(inviteEmail, casted.inviteEmail)
209        && Objects.equals(role, casted.role)
210        && Objects.equals(expiresAt, casted.expiresAt)
211        && Objects.equals(isAccessOnly, casted.isAccessOnly)
212        && Objects.equals(status, casted.status)
213        && Objects.equals(acknowledgedAt, casted.acknowledgedAt)
214        && Objects.equals(createdBy, casted.createdBy)
215        && Objects.equals(createdAt, casted.createdAt)
216        && Objects.equals(modifiedAt, casted.modifiedAt)
217        && Objects.equals(acceptanceRequirementsStatus, casted.acceptanceRequirementsStatus);
218  }
219
220  @Override
221  public int hashCode() {
222    return Objects.hash(
223        id,
224        type,
225        item,
226        appItem,
227        accessibleBy,
228        inviteEmail,
229        role,
230        expiresAt,
231        isAccessOnly,
232        status,
233        acknowledgedAt,
234        createdBy,
235        createdAt,
236        modifiedAt,
237        acceptanceRequirementsStatus);
238  }
239
240  @Override
241  public String toString() {
242    return "Collaboration{"
243        + "id='"
244        + id
245        + '\''
246        + ", "
247        + "type='"
248        + type
249        + '\''
250        + ", "
251        + "item='"
252        + item
253        + '\''
254        + ", "
255        + "appItem='"
256        + appItem
257        + '\''
258        + ", "
259        + "accessibleBy='"
260        + accessibleBy
261        + '\''
262        + ", "
263        + "inviteEmail='"
264        + inviteEmail
265        + '\''
266        + ", "
267        + "role='"
268        + role
269        + '\''
270        + ", "
271        + "expiresAt='"
272        + expiresAt
273        + '\''
274        + ", "
275        + "isAccessOnly='"
276        + isAccessOnly
277        + '\''
278        + ", "
279        + "status='"
280        + status
281        + '\''
282        + ", "
283        + "acknowledgedAt='"
284        + acknowledgedAt
285        + '\''
286        + ", "
287        + "createdBy='"
288        + createdBy
289        + '\''
290        + ", "
291        + "createdAt='"
292        + createdAt
293        + '\''
294        + ", "
295        + "modifiedAt='"
296        + modifiedAt
297        + '\''
298        + ", "
299        + "acceptanceRequirementsStatus='"
300        + acceptanceRequirementsStatus
301        + '\''
302        + "}";
303  }
304
305  public static class Builder extends NullableFieldTracker {
306
307    protected final String id;
308
309    protected EnumWrapper<CollaborationTypeField> type;
310
311    protected CollaborationItem item;
312
313    protected AppItem appItem;
314
315    protected CollaborationAccessGrantee accessibleBy;
316
317    protected String inviteEmail;
318
319    protected EnumWrapper<CollaborationRoleField> role;
320
321    protected OffsetDateTime expiresAt;
322
323    protected Boolean isAccessOnly;
324
325    protected EnumWrapper<CollaborationStatusField> status;
326
327    protected OffsetDateTime acknowledgedAt;
328
329    protected UserCollaborations createdBy;
330
331    protected OffsetDateTime createdAt;
332
333    protected OffsetDateTime modifiedAt;
334
335    protected CollaborationAcceptanceRequirementsStatusField acceptanceRequirementsStatus;
336
337    public Builder(String id) {
338      super();
339      this.id = id;
340    }
341
342    public Builder type(CollaborationTypeField type) {
343      this.type = new EnumWrapper<CollaborationTypeField>(type);
344      return this;
345    }
346
347    public Builder type(EnumWrapper<CollaborationTypeField> type) {
348      this.type = type;
349      return this;
350    }
351
352    public Builder item(File item) {
353      this.item = new CollaborationItem(item);
354      this.markNullableFieldAsSet("item");
355      return this;
356    }
357
358    public Builder item(Folder item) {
359      this.item = new CollaborationItem(item);
360      this.markNullableFieldAsSet("item");
361      return this;
362    }
363
364    public Builder item(WebLink item) {
365      this.item = new CollaborationItem(item);
366      this.markNullableFieldAsSet("item");
367      return this;
368    }
369
370    public Builder item(CollaborationItem item) {
371      this.item = item;
372      this.markNullableFieldAsSet("item");
373      return this;
374    }
375
376    public Builder appItem(AppItem appItem) {
377      this.appItem = appItem;
378      this.markNullableFieldAsSet("app_item");
379      return this;
380    }
381
382    public Builder accessibleBy(UserCollaborations accessibleBy) {
383      this.accessibleBy = new CollaborationAccessGrantee(accessibleBy);
384      return this;
385    }
386
387    public Builder accessibleBy(GroupMini accessibleBy) {
388      this.accessibleBy = new CollaborationAccessGrantee(accessibleBy);
389      return this;
390    }
391
392    public Builder accessibleBy(CollaborationAccessGrantee accessibleBy) {
393      this.accessibleBy = accessibleBy;
394      return this;
395    }
396
397    public Builder inviteEmail(String inviteEmail) {
398      this.inviteEmail = inviteEmail;
399      this.markNullableFieldAsSet("invite_email");
400      return this;
401    }
402
403    public Builder role(CollaborationRoleField role) {
404      this.role = new EnumWrapper<CollaborationRoleField>(role);
405      return this;
406    }
407
408    public Builder role(EnumWrapper<CollaborationRoleField> role) {
409      this.role = role;
410      return this;
411    }
412
413    public Builder expiresAt(OffsetDateTime expiresAt) {
414      this.expiresAt = expiresAt;
415      this.markNullableFieldAsSet("expires_at");
416      return this;
417    }
418
419    public Builder isAccessOnly(Boolean isAccessOnly) {
420      this.isAccessOnly = isAccessOnly;
421      return this;
422    }
423
424    public Builder status(CollaborationStatusField status) {
425      this.status = new EnumWrapper<CollaborationStatusField>(status);
426      return this;
427    }
428
429    public Builder status(EnumWrapper<CollaborationStatusField> status) {
430      this.status = status;
431      return this;
432    }
433
434    public Builder acknowledgedAt(OffsetDateTime acknowledgedAt) {
435      this.acknowledgedAt = acknowledgedAt;
436      return this;
437    }
438
439    public Builder createdBy(UserCollaborations createdBy) {
440      this.createdBy = createdBy;
441      return this;
442    }
443
444    public Builder createdAt(OffsetDateTime createdAt) {
445      this.createdAt = createdAt;
446      return this;
447    }
448
449    public Builder modifiedAt(OffsetDateTime modifiedAt) {
450      this.modifiedAt = modifiedAt;
451      return this;
452    }
453
454    public Builder acceptanceRequirementsStatus(
455        CollaborationAcceptanceRequirementsStatusField acceptanceRequirementsStatus) {
456      this.acceptanceRequirementsStatus = acceptanceRequirementsStatus;
457      return this;
458    }
459
460    public Collaboration build() {
461      if (this.type == null) {
462        this.type = new EnumWrapper<CollaborationTypeField>(CollaborationTypeField.COLLABORATION);
463      }
464      return new Collaboration(this);
465    }
466  }
467}