001package com.box.sdkgen.managers.tasks;
002
003import com.box.sdkgen.internal.NullableFieldTracker;
004import com.box.sdkgen.internal.SerializableObject;
005import com.box.sdkgen.internal.utils.DateTimeUtils;
006import com.box.sdkgen.serialization.json.EnumWrapper;
007import com.fasterxml.jackson.annotation.JsonFilter;
008import com.fasterxml.jackson.annotation.JsonProperty;
009import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
010import com.fasterxml.jackson.databind.annotation.JsonSerialize;
011import java.time.OffsetDateTime;
012import java.util.Objects;
013
014@JsonFilter("nullablePropertyFilter")
015public class CreateTaskRequestBody extends SerializableObject {
016
017  /** The file to attach the task to. */
018  protected final CreateTaskRequestBodyItemField item;
019
020  /**
021   * The action the task assignee will be prompted to do. Must be
022   *
023   * <p>* `review` defines an approval task that can be approved or, rejected * `complete` defines a
024   * general task which can be completed.
025   */
026  @JsonDeserialize(
027      using = CreateTaskRequestBodyActionField.CreateTaskRequestBodyActionFieldDeserializer.class)
028  @JsonSerialize(
029      using = CreateTaskRequestBodyActionField.CreateTaskRequestBodyActionFieldSerializer.class)
030  protected EnumWrapper<CreateTaskRequestBodyActionField> action;
031
032  /** An optional message to include with the task. */
033  protected String message;
034
035  /** Defines when the task is due. Defaults to `null` if not provided. */
036  @JsonProperty("due_at")
037  @JsonSerialize(using = DateTimeUtils.DateTimeSerializer.class)
038  @JsonDeserialize(using = DateTimeUtils.DateTimeDeserializer.class)
039  protected OffsetDateTime dueAt;
040
041  /**
042   * Defines which assignees need to complete this task before the task is considered completed.
043   *
044   * <p>* `all_assignees` (default) requires all assignees to review or approve the task in order
045   * for it to be considered completed. * `any_assignee` accepts any one assignee to review or
046   * approve the task in order for it to be considered completed.
047   */
048  @JsonDeserialize(
049      using =
050          CreateTaskRequestBodyCompletionRuleField
051              .CreateTaskRequestBodyCompletionRuleFieldDeserializer.class)
052  @JsonSerialize(
053      using =
054          CreateTaskRequestBodyCompletionRuleField
055              .CreateTaskRequestBodyCompletionRuleFieldSerializer.class)
056  @JsonProperty("completion_rule")
057  protected EnumWrapper<CreateTaskRequestBodyCompletionRuleField> completionRule;
058
059  public CreateTaskRequestBody(@JsonProperty("item") CreateTaskRequestBodyItemField item) {
060    super();
061    this.item = item;
062  }
063
064  protected CreateTaskRequestBody(Builder builder) {
065    super();
066    this.item = builder.item;
067    this.action = builder.action;
068    this.message = builder.message;
069    this.dueAt = builder.dueAt;
070    this.completionRule = builder.completionRule;
071    markNullableFieldsAsSet(builder.getExplicitlySetNullableFields());
072  }
073
074  public CreateTaskRequestBodyItemField getItem() {
075    return item;
076  }
077
078  public EnumWrapper<CreateTaskRequestBodyActionField> getAction() {
079    return action;
080  }
081
082  public String getMessage() {
083    return message;
084  }
085
086  public OffsetDateTime getDueAt() {
087    return dueAt;
088  }
089
090  public EnumWrapper<CreateTaskRequestBodyCompletionRuleField> getCompletionRule() {
091    return completionRule;
092  }
093
094  @Override
095  public boolean equals(Object o) {
096    if (this == o) {
097      return true;
098    }
099    if (o == null || getClass() != o.getClass()) {
100      return false;
101    }
102    CreateTaskRequestBody casted = (CreateTaskRequestBody) o;
103    return Objects.equals(item, casted.item)
104        && Objects.equals(action, casted.action)
105        && Objects.equals(message, casted.message)
106        && Objects.equals(dueAt, casted.dueAt)
107        && Objects.equals(completionRule, casted.completionRule);
108  }
109
110  @Override
111  public int hashCode() {
112    return Objects.hash(item, action, message, dueAt, completionRule);
113  }
114
115  @Override
116  public String toString() {
117    return "CreateTaskRequestBody{"
118        + "item='"
119        + item
120        + '\''
121        + ", "
122        + "action='"
123        + action
124        + '\''
125        + ", "
126        + "message='"
127        + message
128        + '\''
129        + ", "
130        + "dueAt='"
131        + dueAt
132        + '\''
133        + ", "
134        + "completionRule='"
135        + completionRule
136        + '\''
137        + "}";
138  }
139
140  public static class Builder extends NullableFieldTracker {
141
142    protected final CreateTaskRequestBodyItemField item;
143
144    protected EnumWrapper<CreateTaskRequestBodyActionField> action;
145
146    protected String message;
147
148    protected OffsetDateTime dueAt;
149
150    protected EnumWrapper<CreateTaskRequestBodyCompletionRuleField> completionRule;
151
152    public Builder(CreateTaskRequestBodyItemField item) {
153      super();
154      this.item = item;
155    }
156
157    public Builder action(CreateTaskRequestBodyActionField action) {
158      this.action = new EnumWrapper<CreateTaskRequestBodyActionField>(action);
159      return this;
160    }
161
162    public Builder action(EnumWrapper<CreateTaskRequestBodyActionField> action) {
163      this.action = action;
164      return this;
165    }
166
167    public Builder message(String message) {
168      this.message = message;
169      return this;
170    }
171
172    public Builder dueAt(OffsetDateTime dueAt) {
173      this.dueAt = dueAt;
174      return this;
175    }
176
177    public Builder completionRule(CreateTaskRequestBodyCompletionRuleField completionRule) {
178      this.completionRule =
179          new EnumWrapper<CreateTaskRequestBodyCompletionRuleField>(completionRule);
180      return this;
181    }
182
183    public Builder completionRule(
184        EnumWrapper<CreateTaskRequestBodyCompletionRuleField> completionRule) {
185      this.completionRule = completionRule;
186      return this;
187    }
188
189    public CreateTaskRequestBody build() {
190      return new CreateTaskRequestBody(this);
191    }
192  }
193}