001package com.box.sdkgen.schemas.task; 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.taskassignments.TaskAssignments; 008import com.box.sdkgen.schemas.usermini.UserMini; 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 task allows for file-centric workflows within Box. Users can create tasks on files and assign 019 * them to other users for them to complete the tasks. 020 */ 021@JsonFilter("nullablePropertyFilter") 022public class Task extends SerializableObject { 023 024 /** The unique identifier for this task. */ 025 protected String id; 026 027 /** The value will always be `task`. */ 028 @JsonDeserialize(using = TaskTypeField.TaskTypeFieldDeserializer.class) 029 @JsonSerialize(using = TaskTypeField.TaskTypeFieldSerializer.class) 030 protected EnumWrapper<TaskTypeField> type; 031 032 protected FileMini item; 033 034 /** When the task is due. */ 035 @JsonProperty("due_at") 036 @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class) 037 @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class) 038 protected OffsetDateTime dueAt; 039 040 /** The type of task the task assignee will be prompted to perform. */ 041 @JsonDeserialize(using = TaskActionField.TaskActionFieldDeserializer.class) 042 @JsonSerialize(using = TaskActionField.TaskActionFieldSerializer.class) 043 protected EnumWrapper<TaskActionField> action; 044 045 /** A message that will be included with the task. */ 046 protected String message; 047 048 @JsonProperty("task_assignment_collection") 049 protected TaskAssignments taskAssignmentCollection; 050 051 /** Whether the task has been completed. */ 052 @JsonProperty("is_completed") 053 protected Boolean isCompleted; 054 055 @JsonProperty("created_by") 056 protected UserMini createdBy; 057 058 /** When the task object was created. */ 059 @JsonProperty("created_at") 060 @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class) 061 @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class) 062 protected OffsetDateTime createdAt; 063 064 /** 065 * Defines which assignees need to complete this task before the task is considered completed. 066 * 067 * <p>* `all_assignees` requires all assignees to review or approve the task in order for it to be 068 * considered completed. * `any_assignee` accepts any one assignee to review or approve the task 069 * in order for it to be considered completed. 070 */ 071 @JsonDeserialize(using = TaskCompletionRuleField.TaskCompletionRuleFieldDeserializer.class) 072 @JsonSerialize(using = TaskCompletionRuleField.TaskCompletionRuleFieldSerializer.class) 073 @JsonProperty("completion_rule") 074 protected EnumWrapper<TaskCompletionRuleField> completionRule; 075 076 public Task() { 077 super(); 078 } 079 080 protected Task(Builder builder) { 081 super(); 082 this.id = builder.id; 083 this.type = builder.type; 084 this.item = builder.item; 085 this.dueAt = builder.dueAt; 086 this.action = builder.action; 087 this.message = builder.message; 088 this.taskAssignmentCollection = builder.taskAssignmentCollection; 089 this.isCompleted = builder.isCompleted; 090 this.createdBy = builder.createdBy; 091 this.createdAt = builder.createdAt; 092 this.completionRule = builder.completionRule; 093 markNullableFieldsAsSet(builder.getExplicitlySetNullableFields()); 094 } 095 096 public String getId() { 097 return id; 098 } 099 100 public EnumWrapper<TaskTypeField> getType() { 101 return type; 102 } 103 104 public FileMini getItem() { 105 return item; 106 } 107 108 public OffsetDateTime getDueAt() { 109 return dueAt; 110 } 111 112 public EnumWrapper<TaskActionField> getAction() { 113 return action; 114 } 115 116 public String getMessage() { 117 return message; 118 } 119 120 public TaskAssignments getTaskAssignmentCollection() { 121 return taskAssignmentCollection; 122 } 123 124 public Boolean getIsCompleted() { 125 return isCompleted; 126 } 127 128 public UserMini getCreatedBy() { 129 return createdBy; 130 } 131 132 public OffsetDateTime getCreatedAt() { 133 return createdAt; 134 } 135 136 public EnumWrapper<TaskCompletionRuleField> getCompletionRule() { 137 return completionRule; 138 } 139 140 @Override 141 public boolean equals(Object o) { 142 if (this == o) { 143 return true; 144 } 145 if (o == null || getClass() != o.getClass()) { 146 return false; 147 } 148 Task casted = (Task) o; 149 return Objects.equals(id, casted.id) 150 && Objects.equals(type, casted.type) 151 && Objects.equals(item, casted.item) 152 && Objects.equals(dueAt, casted.dueAt) 153 && Objects.equals(action, casted.action) 154 && Objects.equals(message, casted.message) 155 && Objects.equals(taskAssignmentCollection, casted.taskAssignmentCollection) 156 && Objects.equals(isCompleted, casted.isCompleted) 157 && Objects.equals(createdBy, casted.createdBy) 158 && Objects.equals(createdAt, casted.createdAt) 159 && Objects.equals(completionRule, casted.completionRule); 160 } 161 162 @Override 163 public int hashCode() { 164 return Objects.hash( 165 id, 166 type, 167 item, 168 dueAt, 169 action, 170 message, 171 taskAssignmentCollection, 172 isCompleted, 173 createdBy, 174 createdAt, 175 completionRule); 176 } 177 178 @Override 179 public String toString() { 180 return "Task{" 181 + "id='" 182 + id 183 + '\'' 184 + ", " 185 + "type='" 186 + type 187 + '\'' 188 + ", " 189 + "item='" 190 + item 191 + '\'' 192 + ", " 193 + "dueAt='" 194 + dueAt 195 + '\'' 196 + ", " 197 + "action='" 198 + action 199 + '\'' 200 + ", " 201 + "message='" 202 + message 203 + '\'' 204 + ", " 205 + "taskAssignmentCollection='" 206 + taskAssignmentCollection 207 + '\'' 208 + ", " 209 + "isCompleted='" 210 + isCompleted 211 + '\'' 212 + ", " 213 + "createdBy='" 214 + createdBy 215 + '\'' 216 + ", " 217 + "createdAt='" 218 + createdAt 219 + '\'' 220 + ", " 221 + "completionRule='" 222 + completionRule 223 + '\'' 224 + "}"; 225 } 226 227 public static class Builder extends NullableFieldTracker { 228 229 protected String id; 230 231 protected EnumWrapper<TaskTypeField> type; 232 233 protected FileMini item; 234 235 protected OffsetDateTime dueAt; 236 237 protected EnumWrapper<TaskActionField> action; 238 239 protected String message; 240 241 protected TaskAssignments taskAssignmentCollection; 242 243 protected Boolean isCompleted; 244 245 protected UserMini createdBy; 246 247 protected OffsetDateTime createdAt; 248 249 protected EnumWrapper<TaskCompletionRuleField> completionRule; 250 251 public Builder id(String id) { 252 this.id = id; 253 return this; 254 } 255 256 public Builder type(TaskTypeField type) { 257 this.type = new EnumWrapper<TaskTypeField>(type); 258 return this; 259 } 260 261 public Builder type(EnumWrapper<TaskTypeField> type) { 262 this.type = type; 263 return this; 264 } 265 266 public Builder item(FileMini item) { 267 this.item = item; 268 return this; 269 } 270 271 public Builder dueAt(OffsetDateTime dueAt) { 272 this.dueAt = dueAt; 273 return this; 274 } 275 276 public Builder action(TaskActionField action) { 277 this.action = new EnumWrapper<TaskActionField>(action); 278 return this; 279 } 280 281 public Builder action(EnumWrapper<TaskActionField> action) { 282 this.action = action; 283 return this; 284 } 285 286 public Builder message(String message) { 287 this.message = message; 288 return this; 289 } 290 291 public Builder taskAssignmentCollection(TaskAssignments taskAssignmentCollection) { 292 this.taskAssignmentCollection = taskAssignmentCollection; 293 return this; 294 } 295 296 public Builder isCompleted(Boolean isCompleted) { 297 this.isCompleted = isCompleted; 298 return this; 299 } 300 301 public Builder createdBy(UserMini createdBy) { 302 this.createdBy = createdBy; 303 return this; 304 } 305 306 public Builder createdAt(OffsetDateTime createdAt) { 307 this.createdAt = createdAt; 308 return this; 309 } 310 311 public Builder completionRule(TaskCompletionRuleField completionRule) { 312 this.completionRule = new EnumWrapper<TaskCompletionRuleField>(completionRule); 313 return this; 314 } 315 316 public Builder completionRule(EnumWrapper<TaskCompletionRuleField> completionRule) { 317 this.completionRule = completionRule; 318 return this; 319 } 320 321 public Task build() { 322 return new Task(this); 323 } 324 } 325}