001package com.box.sdkgen.schemas.filefull;
002
003import com.box.sdkgen.internal.Nullable;
004import com.box.sdkgen.internal.utils.DateTimeUtils;
005import com.box.sdkgen.schemas.file.File;
006import com.box.sdkgen.schemas.file.FileItemStatusField;
007import com.box.sdkgen.schemas.file.FilePathCollectionField;
008import com.box.sdkgen.schemas.file.FileSharedLinkField;
009import com.box.sdkgen.schemas.filebase.FileBaseTypeField;
010import com.box.sdkgen.schemas.fileversionmini.FileVersionMini;
011import com.box.sdkgen.schemas.foldermini.FolderMini;
012import com.box.sdkgen.schemas.usermini.UserMini;
013import com.box.sdkgen.serialization.json.EnumWrapper;
014import com.box.sdkgen.serialization.json.Valuable;
015import com.fasterxml.jackson.annotation.JsonFilter;
016import com.fasterxml.jackson.annotation.JsonProperty;
017import com.fasterxml.jackson.core.JsonGenerator;
018import com.fasterxml.jackson.core.JsonParser;
019import com.fasterxml.jackson.databind.DeserializationContext;
020import com.fasterxml.jackson.databind.JsonDeserializer;
021import com.fasterxml.jackson.databind.JsonNode;
022import com.fasterxml.jackson.databind.JsonSerializer;
023import com.fasterxml.jackson.databind.SerializerProvider;
024import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
025import com.fasterxml.jackson.databind.annotation.JsonSerialize;
026import java.io.IOException;
027import java.time.OffsetDateTime;
028import java.util.ArrayList;
029import java.util.List;
030import java.util.Objects;
031
032/** A full representation of a file, as can be returned from any file API endpoints by default. */
033@JsonFilter("nullablePropertyFilter")
034public class FileFull extends File {
035
036  /** The version number of this file. */
037  @JsonProperty("version_number")
038  protected String versionNumber;
039
040  /** The number of comments on this file. */
041  @JsonProperty("comment_count")
042  protected Long commentCount;
043
044  protected FileFullPermissionsField permissions;
045
046  protected List<String> tags;
047
048  @Nullable protected FileFullLockField lock;
049
050  /**
051   * Indicates the (optional) file extension for this file. By default, this is set to an empty
052   * string.
053   */
054  protected String extension;
055
056  /**
057   * Indicates if the file is a package. Packages are commonly used by Mac Applications and can
058   * include iWork files.
059   */
060  @JsonProperty("is_package")
061  protected Boolean isPackage;
062
063  @JsonProperty("expiring_embed_link")
064  protected FileFullExpiringEmbedLinkField expiringEmbedLink;
065
066  @JsonProperty("watermark_info")
067  protected FileFullWatermarkInfoField watermarkInfo;
068
069  /**
070   * Specifies if the file can be accessed via the direct shared link or a shared link to a parent
071   * folder.
072   */
073  @JsonProperty("is_accessible_via_shared_link")
074  protected Boolean isAccessibleViaSharedLink;
075
076  /** A list of the types of roles that user can be invited at when sharing this file. */
077  @JsonDeserialize(using = AllowedInviteeRolesDeserializer.class)
078  @JsonSerialize(using = AllowedInviteeRolesSerializer.class)
079  @JsonProperty("allowed_invitee_roles")
080  protected List<EnumWrapper<FileFullAllowedInviteeRolesField>> allowedInviteeRoles;
081
082  /** Specifies if this file is owned by a user outside of the authenticated enterprise. */
083  @JsonProperty("is_externally_owned")
084  protected Boolean isExternallyOwned;
085
086  /** Specifies if this file has any other collaborators. */
087  @JsonProperty("has_collaborations")
088  protected Boolean hasCollaborations;
089
090  protected FileFullMetadataField metadata;
091
092  /** When the file will automatically be deleted. */
093  @JsonProperty("expires_at")
094  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
095  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
096  @Nullable
097  protected OffsetDateTime expiresAt;
098
099  protected FileFullRepresentationsField representations;
100
101  protected FileFullClassificationField classification;
102
103  @JsonProperty("uploader_display_name")
104  protected String uploaderDisplayName;
105
106  /** The retention expiration timestamp for the given file. */
107  @JsonProperty("disposition_at")
108  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
109  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
110  @Nullable
111  protected OffsetDateTime dispositionAt;
112
113  /** A list of the types of roles that user can be invited at when sharing this file. */
114  @JsonDeserialize(using = SharedLinkPermissionOptionsDeserializer.class)
115  @JsonSerialize(using = SharedLinkPermissionOptionsSerializer.class)
116  @JsonProperty("shared_link_permission_options")
117  @Nullable
118  protected List<EnumWrapper<FileFullSharedLinkPermissionOptionsField>> sharedLinkPermissionOptions;
119
120  /**
121   * This field will return true if the file or any ancestor of the file is associated with at least
122   * one app item. Note that this will return true even if the context user does not have access to
123   * the app item(s) associated with the file.
124   */
125  @JsonProperty("is_associated_with_app_item")
126  protected Boolean isAssociatedWithAppItem;
127
128  public FileFull(@JsonProperty("id") String id) {
129    super(id);
130  }
131
132  protected FileFull(Builder builder) {
133    super(builder);
134    this.versionNumber = builder.versionNumber;
135    this.commentCount = builder.commentCount;
136    this.permissions = builder.permissions;
137    this.tags = builder.tags;
138    this.lock = builder.lock;
139    this.extension = builder.extension;
140    this.isPackage = builder.isPackage;
141    this.expiringEmbedLink = builder.expiringEmbedLink;
142    this.watermarkInfo = builder.watermarkInfo;
143    this.isAccessibleViaSharedLink = builder.isAccessibleViaSharedLink;
144    this.allowedInviteeRoles = builder.allowedInviteeRoles;
145    this.isExternallyOwned = builder.isExternallyOwned;
146    this.hasCollaborations = builder.hasCollaborations;
147    this.metadata = builder.metadata;
148    this.expiresAt = builder.expiresAt;
149    this.representations = builder.representations;
150    this.classification = builder.classification;
151    this.uploaderDisplayName = builder.uploaderDisplayName;
152    this.dispositionAt = builder.dispositionAt;
153    this.sharedLinkPermissionOptions = builder.sharedLinkPermissionOptions;
154    this.isAssociatedWithAppItem = builder.isAssociatedWithAppItem;
155    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
156  }
157
158  public String getVersionNumber() {
159    return versionNumber;
160  }
161
162  public Long getCommentCount() {
163    return commentCount;
164  }
165
166  public FileFullPermissionsField getPermissions() {
167    return permissions;
168  }
169
170  public List<String> getTags() {
171    return tags;
172  }
173
174  public FileFullLockField getLock() {
175    return lock;
176  }
177
178  public String getExtension() {
179    return extension;
180  }
181
182  public Boolean getIsPackage() {
183    return isPackage;
184  }
185
186  public FileFullExpiringEmbedLinkField getExpiringEmbedLink() {
187    return expiringEmbedLink;
188  }
189
190  public FileFullWatermarkInfoField getWatermarkInfo() {
191    return watermarkInfo;
192  }
193
194  public Boolean getIsAccessibleViaSharedLink() {
195    return isAccessibleViaSharedLink;
196  }
197
198  public List<EnumWrapper<FileFullAllowedInviteeRolesField>> getAllowedInviteeRoles() {
199    return allowedInviteeRoles;
200  }
201
202  public Boolean getIsExternallyOwned() {
203    return isExternallyOwned;
204  }
205
206  public Boolean getHasCollaborations() {
207    return hasCollaborations;
208  }
209
210  public FileFullMetadataField getMetadata() {
211    return metadata;
212  }
213
214  public OffsetDateTime getExpiresAt() {
215    return expiresAt;
216  }
217
218  public FileFullRepresentationsField getRepresentations() {
219    return representations;
220  }
221
222  public FileFullClassificationField getClassification() {
223    return classification;
224  }
225
226  public String getUploaderDisplayName() {
227    return uploaderDisplayName;
228  }
229
230  public OffsetDateTime getDispositionAt() {
231    return dispositionAt;
232  }
233
234  public List<EnumWrapper<FileFullSharedLinkPermissionOptionsField>>
235      getSharedLinkPermissionOptions() {
236    return sharedLinkPermissionOptions;
237  }
238
239  public Boolean getIsAssociatedWithAppItem() {
240    return isAssociatedWithAppItem;
241  }
242
243  @Override
244  public boolean equals(Object o) {
245    if (this == o) {
246      return true;
247    }
248    if (o == null || getClass() != o.getClass()) {
249      return false;
250    }
251    FileFull casted = (FileFull) o;
252    return Objects.equals(id, casted.id)
253        && Objects.equals(etag, casted.etag)
254        && Objects.equals(type, casted.type)
255        && Objects.equals(sequenceId, casted.sequenceId)
256        && Objects.equals(name, casted.name)
257        && Objects.equals(sha1, casted.sha1)
258        && Objects.equals(fileVersion, casted.fileVersion)
259        && Objects.equals(description, casted.description)
260        && Objects.equals(size, casted.size)
261        && Objects.equals(pathCollection, casted.pathCollection)
262        && Objects.equals(createdAt, casted.createdAt)
263        && Objects.equals(modifiedAt, casted.modifiedAt)
264        && Objects.equals(trashedAt, casted.trashedAt)
265        && Objects.equals(purgedAt, casted.purgedAt)
266        && Objects.equals(contentCreatedAt, casted.contentCreatedAt)
267        && Objects.equals(contentModifiedAt, casted.contentModifiedAt)
268        && Objects.equals(createdBy, casted.createdBy)
269        && Objects.equals(modifiedBy, casted.modifiedBy)
270        && Objects.equals(ownedBy, casted.ownedBy)
271        && Objects.equals(sharedLink, casted.sharedLink)
272        && Objects.equals(parent, casted.parent)
273        && Objects.equals(itemStatus, casted.itemStatus)
274        && Objects.equals(versionNumber, casted.versionNumber)
275        && Objects.equals(commentCount, casted.commentCount)
276        && Objects.equals(permissions, casted.permissions)
277        && Objects.equals(tags, casted.tags)
278        && Objects.equals(lock, casted.lock)
279        && Objects.equals(extension, casted.extension)
280        && Objects.equals(isPackage, casted.isPackage)
281        && Objects.equals(expiringEmbedLink, casted.expiringEmbedLink)
282        && Objects.equals(watermarkInfo, casted.watermarkInfo)
283        && Objects.equals(isAccessibleViaSharedLink, casted.isAccessibleViaSharedLink)
284        && Objects.equals(allowedInviteeRoles, casted.allowedInviteeRoles)
285        && Objects.equals(isExternallyOwned, casted.isExternallyOwned)
286        && Objects.equals(hasCollaborations, casted.hasCollaborations)
287        && Objects.equals(metadata, casted.metadata)
288        && Objects.equals(expiresAt, casted.expiresAt)
289        && Objects.equals(representations, casted.representations)
290        && Objects.equals(classification, casted.classification)
291        && Objects.equals(uploaderDisplayName, casted.uploaderDisplayName)
292        && Objects.equals(dispositionAt, casted.dispositionAt)
293        && Objects.equals(sharedLinkPermissionOptions, casted.sharedLinkPermissionOptions)
294        && Objects.equals(isAssociatedWithAppItem, casted.isAssociatedWithAppItem);
295  }
296
297  @Override
298  public int hashCode() {
299    return Objects.hash(
300        id,
301        etag,
302        type,
303        sequenceId,
304        name,
305        sha1,
306        fileVersion,
307        description,
308        size,
309        pathCollection,
310        createdAt,
311        modifiedAt,
312        trashedAt,
313        purgedAt,
314        contentCreatedAt,
315        contentModifiedAt,
316        createdBy,
317        modifiedBy,
318        ownedBy,
319        sharedLink,
320        parent,
321        itemStatus,
322        versionNumber,
323        commentCount,
324        permissions,
325        tags,
326        lock,
327        extension,
328        isPackage,
329        expiringEmbedLink,
330        watermarkInfo,
331        isAccessibleViaSharedLink,
332        allowedInviteeRoles,
333        isExternallyOwned,
334        hasCollaborations,
335        metadata,
336        expiresAt,
337        representations,
338        classification,
339        uploaderDisplayName,
340        dispositionAt,
341        sharedLinkPermissionOptions,
342        isAssociatedWithAppItem);
343  }
344
345  @Override
346  public String toString() {
347    return "FileFull{"
348        + "id='"
349        + id
350        + '\''
351        + ", "
352        + "etag='"
353        + etag
354        + '\''
355        + ", "
356        + "type='"
357        + type
358        + '\''
359        + ", "
360        + "sequenceId='"
361        + sequenceId
362        + '\''
363        + ", "
364        + "name='"
365        + name
366        + '\''
367        + ", "
368        + "sha1='"
369        + sha1
370        + '\''
371        + ", "
372        + "fileVersion='"
373        + fileVersion
374        + '\''
375        + ", "
376        + "description='"
377        + description
378        + '\''
379        + ", "
380        + "size='"
381        + size
382        + '\''
383        + ", "
384        + "pathCollection='"
385        + pathCollection
386        + '\''
387        + ", "
388        + "createdAt='"
389        + createdAt
390        + '\''
391        + ", "
392        + "modifiedAt='"
393        + modifiedAt
394        + '\''
395        + ", "
396        + "trashedAt='"
397        + trashedAt
398        + '\''
399        + ", "
400        + "purgedAt='"
401        + purgedAt
402        + '\''
403        + ", "
404        + "contentCreatedAt='"
405        + contentCreatedAt
406        + '\''
407        + ", "
408        + "contentModifiedAt='"
409        + contentModifiedAt
410        + '\''
411        + ", "
412        + "createdBy='"
413        + createdBy
414        + '\''
415        + ", "
416        + "modifiedBy='"
417        + modifiedBy
418        + '\''
419        + ", "
420        + "ownedBy='"
421        + ownedBy
422        + '\''
423        + ", "
424        + "sharedLink='"
425        + sharedLink
426        + '\''
427        + ", "
428        + "parent='"
429        + parent
430        + '\''
431        + ", "
432        + "itemStatus='"
433        + itemStatus
434        + '\''
435        + ", "
436        + "versionNumber='"
437        + versionNumber
438        + '\''
439        + ", "
440        + "commentCount='"
441        + commentCount
442        + '\''
443        + ", "
444        + "permissions='"
445        + permissions
446        + '\''
447        + ", "
448        + "tags='"
449        + tags
450        + '\''
451        + ", "
452        + "lock='"
453        + lock
454        + '\''
455        + ", "
456        + "extension='"
457        + extension
458        + '\''
459        + ", "
460        + "isPackage='"
461        + isPackage
462        + '\''
463        + ", "
464        + "expiringEmbedLink='"
465        + expiringEmbedLink
466        + '\''
467        + ", "
468        + "watermarkInfo='"
469        + watermarkInfo
470        + '\''
471        + ", "
472        + "isAccessibleViaSharedLink='"
473        + isAccessibleViaSharedLink
474        + '\''
475        + ", "
476        + "allowedInviteeRoles='"
477        + allowedInviteeRoles
478        + '\''
479        + ", "
480        + "isExternallyOwned='"
481        + isExternallyOwned
482        + '\''
483        + ", "
484        + "hasCollaborations='"
485        + hasCollaborations
486        + '\''
487        + ", "
488        + "metadata='"
489        + metadata
490        + '\''
491        + ", "
492        + "expiresAt='"
493        + expiresAt
494        + '\''
495        + ", "
496        + "representations='"
497        + representations
498        + '\''
499        + ", "
500        + "classification='"
501        + classification
502        + '\''
503        + ", "
504        + "uploaderDisplayName='"
505        + uploaderDisplayName
506        + '\''
507        + ", "
508        + "dispositionAt='"
509        + dispositionAt
510        + '\''
511        + ", "
512        + "sharedLinkPermissionOptions='"
513        + sharedLinkPermissionOptions
514        + '\''
515        + ", "
516        + "isAssociatedWithAppItem='"
517        + isAssociatedWithAppItem
518        + '\''
519        + "}";
520  }
521
522  public static class Builder extends File.Builder {
523
524    protected String versionNumber;
525
526    protected Long commentCount;
527
528    protected FileFullPermissionsField permissions;
529
530    protected List<String> tags;
531
532    protected FileFullLockField lock;
533
534    protected String extension;
535
536    protected Boolean isPackage;
537
538    protected FileFullExpiringEmbedLinkField expiringEmbedLink;
539
540    protected FileFullWatermarkInfoField watermarkInfo;
541
542    protected Boolean isAccessibleViaSharedLink;
543
544    protected List<EnumWrapper<FileFullAllowedInviteeRolesField>> allowedInviteeRoles;
545
546    protected Boolean isExternallyOwned;
547
548    protected Boolean hasCollaborations;
549
550    protected FileFullMetadataField metadata;
551
552    protected OffsetDateTime expiresAt;
553
554    protected FileFullRepresentationsField representations;
555
556    protected FileFullClassificationField classification;
557
558    protected String uploaderDisplayName;
559
560    protected OffsetDateTime dispositionAt;
561
562    protected List<EnumWrapper<FileFullSharedLinkPermissionOptionsField>>
563        sharedLinkPermissionOptions;
564
565    protected Boolean isAssociatedWithAppItem;
566
567    public Builder(String id) {
568      super(id);
569    }
570
571    public Builder versionNumber(String versionNumber) {
572      this.versionNumber = versionNumber;
573      return this;
574    }
575
576    public Builder commentCount(Long commentCount) {
577      this.commentCount = commentCount;
578      return this;
579    }
580
581    public Builder permissions(FileFullPermissionsField permissions) {
582      this.permissions = permissions;
583      return this;
584    }
585
586    public Builder tags(List<String> tags) {
587      this.tags = tags;
588      return this;
589    }
590
591    public Builder lock(FileFullLockField lock) {
592      this.lock = lock;
593      this.markNullableFieldAsSet("lock");
594      return this;
595    }
596
597    public Builder extension(String extension) {
598      this.extension = extension;
599      return this;
600    }
601
602    public Builder isPackage(Boolean isPackage) {
603      this.isPackage = isPackage;
604      return this;
605    }
606
607    public Builder expiringEmbedLink(FileFullExpiringEmbedLinkField expiringEmbedLink) {
608      this.expiringEmbedLink = expiringEmbedLink;
609      return this;
610    }
611
612    public Builder watermarkInfo(FileFullWatermarkInfoField watermarkInfo) {
613      this.watermarkInfo = watermarkInfo;
614      return this;
615    }
616
617    public Builder isAccessibleViaSharedLink(Boolean isAccessibleViaSharedLink) {
618      this.isAccessibleViaSharedLink = isAccessibleViaSharedLink;
619      return this;
620    }
621
622    public Builder allowedInviteeRoles(List<? extends Valuable> allowedInviteeRoles) {
623      this.allowedInviteeRoles =
624          EnumWrapper.wrapValuableEnumList(
625              allowedInviteeRoles, FileFullAllowedInviteeRolesField.class);
626      return this;
627    }
628
629    public Builder isExternallyOwned(Boolean isExternallyOwned) {
630      this.isExternallyOwned = isExternallyOwned;
631      return this;
632    }
633
634    public Builder hasCollaborations(Boolean hasCollaborations) {
635      this.hasCollaborations = hasCollaborations;
636      return this;
637    }
638
639    public Builder metadata(FileFullMetadataField metadata) {
640      this.metadata = metadata;
641      return this;
642    }
643
644    public Builder expiresAt(OffsetDateTime expiresAt) {
645      this.expiresAt = expiresAt;
646      this.markNullableFieldAsSet("expires_at");
647      return this;
648    }
649
650    public Builder representations(FileFullRepresentationsField representations) {
651      this.representations = representations;
652      return this;
653    }
654
655    public Builder classification(FileFullClassificationField classification) {
656      this.classification = classification;
657      return this;
658    }
659
660    public Builder uploaderDisplayName(String uploaderDisplayName) {
661      this.uploaderDisplayName = uploaderDisplayName;
662      return this;
663    }
664
665    public Builder dispositionAt(OffsetDateTime dispositionAt) {
666      this.dispositionAt = dispositionAt;
667      this.markNullableFieldAsSet("disposition_at");
668      return this;
669    }
670
671    public Builder sharedLinkPermissionOptions(
672        List<? extends Valuable> sharedLinkPermissionOptions) {
673      this.sharedLinkPermissionOptions =
674          EnumWrapper.wrapValuableEnumList(
675              sharedLinkPermissionOptions, FileFullSharedLinkPermissionOptionsField.class);
676      this.markNullableFieldAsSet("shared_link_permission_options");
677      return this;
678    }
679
680    public Builder isAssociatedWithAppItem(Boolean isAssociatedWithAppItem) {
681      this.isAssociatedWithAppItem = isAssociatedWithAppItem;
682      return this;
683    }
684
685    @Override
686    public Builder etag(String etag) {
687      this.etag = etag;
688      this.markNullableFieldAsSet("etag");
689      return this;
690    }
691
692    @Override
693    public Builder type(FileBaseTypeField type) {
694      this.type = new EnumWrapper<FileBaseTypeField>(type);
695      return this;
696    }
697
698    @Override
699    public Builder type(EnumWrapper<FileBaseTypeField> type) {
700      this.type = type;
701      return this;
702    }
703
704    @Override
705    public Builder sequenceId(String sequenceId) {
706      this.sequenceId = sequenceId;
707      return this;
708    }
709
710    @Override
711    public Builder name(String name) {
712      this.name = name;
713      return this;
714    }
715
716    @Override
717    public Builder sha1(String sha1) {
718      this.sha1 = sha1;
719      return this;
720    }
721
722    @Override
723    public Builder fileVersion(FileVersionMini fileVersion) {
724      this.fileVersion = fileVersion;
725      return this;
726    }
727
728    @Override
729    public Builder description(String description) {
730      this.description = description;
731      return this;
732    }
733
734    @Override
735    public Builder size(Long size) {
736      this.size = size;
737      return this;
738    }
739
740    @Override
741    public Builder pathCollection(FilePathCollectionField pathCollection) {
742      this.pathCollection = pathCollection;
743      return this;
744    }
745
746    @Override
747    public Builder createdAt(OffsetDateTime createdAt) {
748      this.createdAt = createdAt;
749      return this;
750    }
751
752    @Override
753    public Builder modifiedAt(OffsetDateTime modifiedAt) {
754      this.modifiedAt = modifiedAt;
755      return this;
756    }
757
758    @Override
759    public Builder trashedAt(OffsetDateTime trashedAt) {
760      this.trashedAt = trashedAt;
761      this.markNullableFieldAsSet("trashed_at");
762      return this;
763    }
764
765    @Override
766    public Builder purgedAt(OffsetDateTime purgedAt) {
767      this.purgedAt = purgedAt;
768      this.markNullableFieldAsSet("purged_at");
769      return this;
770    }
771
772    @Override
773    public Builder contentCreatedAt(OffsetDateTime contentCreatedAt) {
774      this.contentCreatedAt = contentCreatedAt;
775      this.markNullableFieldAsSet("content_created_at");
776      return this;
777    }
778
779    @Override
780    public Builder contentModifiedAt(OffsetDateTime contentModifiedAt) {
781      this.contentModifiedAt = contentModifiedAt;
782      this.markNullableFieldAsSet("content_modified_at");
783      return this;
784    }
785
786    @Override
787    public Builder createdBy(UserMini createdBy) {
788      this.createdBy = createdBy;
789      return this;
790    }
791
792    @Override
793    public Builder modifiedBy(UserMini modifiedBy) {
794      this.modifiedBy = modifiedBy;
795      return this;
796    }
797
798    @Override
799    public Builder ownedBy(UserMini ownedBy) {
800      this.ownedBy = ownedBy;
801      return this;
802    }
803
804    @Override
805    public Builder sharedLink(FileSharedLinkField sharedLink) {
806      this.sharedLink = sharedLink;
807      return this;
808    }
809
810    @Override
811    public Builder parent(FolderMini parent) {
812      this.parent = parent;
813      this.markNullableFieldAsSet("parent");
814      return this;
815    }
816
817    @Override
818    public Builder itemStatus(FileItemStatusField itemStatus) {
819      this.itemStatus = new EnumWrapper<FileItemStatusField>(itemStatus);
820      return this;
821    }
822
823    @Override
824    public Builder itemStatus(EnumWrapper<FileItemStatusField> itemStatus) {
825      this.itemStatus = itemStatus;
826      return this;
827    }
828
829    public FileFull build() {
830      if (this.type == null) {
831        this.type = new EnumWrapper<FileBaseTypeField>(FileBaseTypeField.FILE);
832      }
833      return new FileFull(this);
834    }
835  }
836
837  public static class AllowedInviteeRolesDeserializer
838      extends JsonDeserializer<List<EnumWrapper<FileFullAllowedInviteeRolesField>>> {
839
840    public final JsonDeserializer<EnumWrapper<FileFullAllowedInviteeRolesField>>
841        elementDeserializer;
842
843    public AllowedInviteeRolesDeserializer() {
844      super();
845      this.elementDeserializer =
846          new FileFullAllowedInviteeRolesField.FileFullAllowedInviteeRolesFieldDeserializer();
847    }
848
849    @Override
850    public List<EnumWrapper<FileFullAllowedInviteeRolesField>> deserialize(
851        JsonParser p, DeserializationContext ctxt) throws IOException {
852      JsonNode node = p.getCodec().readTree(p);
853      List<EnumWrapper<FileFullAllowedInviteeRolesField>> elements = new ArrayList<>();
854      for (JsonNode item : node) {
855        JsonParser pa = item.traverse(p.getCodec());
856        pa.nextToken();
857        elements.add(elementDeserializer.deserialize(pa, ctxt));
858      }
859      return elements;
860    }
861  }
862
863  public static class AllowedInviteeRolesSerializer
864      extends JsonSerializer<List<EnumWrapper<FileFullAllowedInviteeRolesField>>> {
865
866    public final JsonSerializer<EnumWrapper<FileFullAllowedInviteeRolesField>> elementSerializer;
867
868    public AllowedInviteeRolesSerializer() {
869      super();
870      this.elementSerializer =
871          new FileFullAllowedInviteeRolesField.FileFullAllowedInviteeRolesFieldSerializer();
872    }
873
874    @Override
875    public void serialize(
876        List<EnumWrapper<FileFullAllowedInviteeRolesField>> value,
877        JsonGenerator gen,
878        SerializerProvider serializers)
879        throws IOException {
880      gen.writeStartArray();
881      for (EnumWrapper<FileFullAllowedInviteeRolesField> item : value) {
882        elementSerializer.serialize(item, gen, serializers);
883      }
884      gen.writeEndArray();
885    }
886  }
887
888  public static class SharedLinkPermissionOptionsDeserializer
889      extends JsonDeserializer<List<EnumWrapper<FileFullSharedLinkPermissionOptionsField>>> {
890
891    public final JsonDeserializer<EnumWrapper<FileFullSharedLinkPermissionOptionsField>>
892        elementDeserializer;
893
894    public SharedLinkPermissionOptionsDeserializer() {
895      super();
896      this.elementDeserializer =
897          new FileFullSharedLinkPermissionOptionsField
898              .FileFullSharedLinkPermissionOptionsFieldDeserializer();
899    }
900
901    @Override
902    public List<EnumWrapper<FileFullSharedLinkPermissionOptionsField>> deserialize(
903        JsonParser p, DeserializationContext ctxt) throws IOException {
904      JsonNode node = p.getCodec().readTree(p);
905      List<EnumWrapper<FileFullSharedLinkPermissionOptionsField>> elements = new ArrayList<>();
906      for (JsonNode item : node) {
907        JsonParser pa = item.traverse(p.getCodec());
908        pa.nextToken();
909        elements.add(elementDeserializer.deserialize(pa, ctxt));
910      }
911      return elements;
912    }
913  }
914
915  public static class SharedLinkPermissionOptionsSerializer
916      extends JsonSerializer<List<EnumWrapper<FileFullSharedLinkPermissionOptionsField>>> {
917
918    public final JsonSerializer<EnumWrapper<FileFullSharedLinkPermissionOptionsField>>
919        elementSerializer;
920
921    public SharedLinkPermissionOptionsSerializer() {
922      super();
923      this.elementSerializer =
924          new FileFullSharedLinkPermissionOptionsField
925              .FileFullSharedLinkPermissionOptionsFieldSerializer();
926    }
927
928    @Override
929    public void serialize(
930        List<EnumWrapper<FileFullSharedLinkPermissionOptionsField>> value,
931        JsonGenerator gen,
932        SerializerProvider serializers)
933        throws IOException {
934      gen.writeStartArray();
935      for (EnumWrapper<FileFullSharedLinkPermissionOptionsField> item : value) {
936        elementSerializer.serialize(item, gen, serializers);
937      }
938      gen.writeEndArray();
939    }
940  }
941}