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}