001package com.box.sdkgen.schemas.fileversionretention; 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.filemini.FileMini; 007import com.box.sdkgen.schemas.fileversionmini.FileVersionMini; 008import com.box.sdkgen.schemas.retentionpolicymini.RetentionPolicyMini; 009import com.box.sdkgen.serialization.json.EnumWrapper; 010import com.fasterxml.jackson.annotation.JsonFilter; 011import com.fasterxml.jackson.annotation.JsonProperty; 012import com.fasterxml.jackson.databind.annotation.JsonDeserialize; 013import com.fasterxml.jackson.databind.annotation.JsonSerialize; 014import java.time.OffsetDateTime; 015import java.util.Objects; 016 017/** 018 * A retention policy blocks permanent deletion of content for a specified amount of time. Admins 019 * can apply policies to specified folders, or an entire enterprise. A file version retention is a 020 * record for a retained file version. To use this feature, you must have the manage retention 021 * policies scope enabled for your API key in your application management console. 022 * 023 * <p>**Note**: File retention API is now **deprecated**. To get information about files and file 024 * versions under retention, see [files under 025 * retention](https://developer.box.com/reference/get-retention-policy-assignments-id-files-under-retention) 026 * or [file versions under 027 * retention](https://developer.box.com/reference/get-retention-policy-assignments-id-file-versions-under-retention) 028 * endpoints. 029 */ 030@JsonFilter("nullablePropertyFilter") 031public class FileVersionRetention extends SerializableObject { 032 033 /** The unique identifier for this file version retention. */ 034 protected String id; 035 036 /** The value will always be `file_version_retention`. */ 037 @JsonDeserialize( 038 using = FileVersionRetentionTypeField.FileVersionRetentionTypeFieldDeserializer.class) 039 @JsonSerialize( 040 using = FileVersionRetentionTypeField.FileVersionRetentionTypeFieldSerializer.class) 041 protected EnumWrapper<FileVersionRetentionTypeField> type; 042 043 @JsonProperty("file_version") 044 protected FileVersionMini fileVersion; 045 046 protected FileMini file; 047 048 /** When this file version retention object was created. */ 049 @JsonProperty("applied_at") 050 @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class) 051 @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class) 052 protected OffsetDateTime appliedAt; 053 054 /** When the retention expires on this file version retention. */ 055 @JsonProperty("disposition_at") 056 @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class) 057 @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class) 058 protected OffsetDateTime dispositionAt; 059 060 @JsonProperty("winning_retention_policy") 061 protected RetentionPolicyMini winningRetentionPolicy; 062 063 public FileVersionRetention() { 064 super(); 065 } 066 067 protected FileVersionRetention(Builder builder) { 068 super(); 069 this.id = builder.id; 070 this.type = builder.type; 071 this.fileVersion = builder.fileVersion; 072 this.file = builder.file; 073 this.appliedAt = builder.appliedAt; 074 this.dispositionAt = builder.dispositionAt; 075 this.winningRetentionPolicy = builder.winningRetentionPolicy; 076 markNullableFieldsAsSet(builder.getExplicitlySetNullableFields()); 077 } 078 079 public String getId() { 080 return id; 081 } 082 083 public EnumWrapper<FileVersionRetentionTypeField> getType() { 084 return type; 085 } 086 087 public FileVersionMini getFileVersion() { 088 return fileVersion; 089 } 090 091 public FileMini getFile() { 092 return file; 093 } 094 095 public OffsetDateTime getAppliedAt() { 096 return appliedAt; 097 } 098 099 public OffsetDateTime getDispositionAt() { 100 return dispositionAt; 101 } 102 103 public RetentionPolicyMini getWinningRetentionPolicy() { 104 return winningRetentionPolicy; 105 } 106 107 @Override 108 public boolean equals(Object o) { 109 if (this == o) { 110 return true; 111 } 112 if (o == null || getClass() != o.getClass()) { 113 return false; 114 } 115 FileVersionRetention casted = (FileVersionRetention) o; 116 return Objects.equals(id, casted.id) 117 && Objects.equals(type, casted.type) 118 && Objects.equals(fileVersion, casted.fileVersion) 119 && Objects.equals(file, casted.file) 120 && Objects.equals(appliedAt, casted.appliedAt) 121 && Objects.equals(dispositionAt, casted.dispositionAt) 122 && Objects.equals(winningRetentionPolicy, casted.winningRetentionPolicy); 123 } 124 125 @Override 126 public int hashCode() { 127 return Objects.hash( 128 id, type, fileVersion, file, appliedAt, dispositionAt, winningRetentionPolicy); 129 } 130 131 @Override 132 public String toString() { 133 return "FileVersionRetention{" 134 + "id='" 135 + id 136 + '\'' 137 + ", " 138 + "type='" 139 + type 140 + '\'' 141 + ", " 142 + "fileVersion='" 143 + fileVersion 144 + '\'' 145 + ", " 146 + "file='" 147 + file 148 + '\'' 149 + ", " 150 + "appliedAt='" 151 + appliedAt 152 + '\'' 153 + ", " 154 + "dispositionAt='" 155 + dispositionAt 156 + '\'' 157 + ", " 158 + "winningRetentionPolicy='" 159 + winningRetentionPolicy 160 + '\'' 161 + "}"; 162 } 163 164 public static class Builder extends NullableFieldTracker { 165 166 protected String id; 167 168 protected EnumWrapper<FileVersionRetentionTypeField> type; 169 170 protected FileVersionMini fileVersion; 171 172 protected FileMini file; 173 174 protected OffsetDateTime appliedAt; 175 176 protected OffsetDateTime dispositionAt; 177 178 protected RetentionPolicyMini winningRetentionPolicy; 179 180 public Builder id(String id) { 181 this.id = id; 182 return this; 183 } 184 185 public Builder type(FileVersionRetentionTypeField type) { 186 this.type = new EnumWrapper<FileVersionRetentionTypeField>(type); 187 return this; 188 } 189 190 public Builder type(EnumWrapper<FileVersionRetentionTypeField> type) { 191 this.type = type; 192 return this; 193 } 194 195 public Builder fileVersion(FileVersionMini fileVersion) { 196 this.fileVersion = fileVersion; 197 return this; 198 } 199 200 public Builder file(FileMini file) { 201 this.file = file; 202 return this; 203 } 204 205 public Builder appliedAt(OffsetDateTime appliedAt) { 206 this.appliedAt = appliedAt; 207 return this; 208 } 209 210 public Builder dispositionAt(OffsetDateTime dispositionAt) { 211 this.dispositionAt = dispositionAt; 212 return this; 213 } 214 215 public Builder winningRetentionPolicy(RetentionPolicyMini winningRetentionPolicy) { 216 this.winningRetentionPolicy = winningRetentionPolicy; 217 return this; 218 } 219 220 public FileVersionRetention build() { 221 return new FileVersionRetention(this); 222 } 223 } 224}