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}