001package com.box.sdkgen.managers.taskassignments;
002
003import static com.box.sdkgen.internal.utils.UtilsManager.convertToString;
004import static com.box.sdkgen.internal.utils.UtilsManager.mapOf;
005import static com.box.sdkgen.internal.utils.UtilsManager.mergeMaps;
006import static com.box.sdkgen.internal.utils.UtilsManager.prepareParams;
007
008import com.box.sdkgen.networking.auth.Authentication;
009import com.box.sdkgen.networking.fetchoptions.FetchOptions;
010import com.box.sdkgen.networking.fetchoptions.ResponseFormat;
011import com.box.sdkgen.networking.fetchresponse.FetchResponse;
012import com.box.sdkgen.networking.network.NetworkSession;
013import com.box.sdkgen.schemas.taskassignment.TaskAssignment;
014import com.box.sdkgen.schemas.taskassignments.TaskAssignments;
015import com.box.sdkgen.serialization.json.JsonManager;
016import java.util.Map;
017
018public class TaskAssignmentsManager {
019
020  public Authentication auth;
021
022  public NetworkSession networkSession;
023
024  public TaskAssignmentsManager() {
025    this.networkSession = new NetworkSession();
026  }
027
028  protected TaskAssignmentsManager(Builder builder) {
029    this.auth = builder.auth;
030    this.networkSession = builder.networkSession;
031  }
032
033  /**
034   * Lists all of the assignments for a given task.
035   *
036   * @param taskId The ID of the task. Example: "12345"
037   */
038  public TaskAssignments getTaskAssignments(String taskId) {
039    return getTaskAssignments(taskId, new GetTaskAssignmentsHeaders());
040  }
041
042  /**
043   * Lists all of the assignments for a given task.
044   *
045   * @param taskId The ID of the task. Example: "12345"
046   * @param headers Headers of getTaskAssignments method
047   */
048  public TaskAssignments getTaskAssignments(String taskId, GetTaskAssignmentsHeaders headers) {
049    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
050    FetchResponse response =
051        this.networkSession
052            .getNetworkClient()
053            .fetch(
054                new FetchOptions.Builder(
055                        String.join(
056                            "",
057                            this.networkSession.getBaseUrls().getBaseUrl(),
058                            "/2.0/tasks/",
059                            convertToString(taskId),
060                            "/assignments"),
061                        "GET")
062                    .headers(headersMap)
063                    .responseFormat(ResponseFormat.JSON)
064                    .auth(this.auth)
065                    .networkSession(this.networkSession)
066                    .build());
067    return JsonManager.deserialize(response.getData(), TaskAssignments.class);
068  }
069
070  /**
071   * Assigns a task to a user.
072   *
073   * <p>A task can be assigned to more than one user by creating multiple assignments.
074   *
075   * @param requestBody Request body of createTaskAssignment method
076   */
077  public TaskAssignment createTaskAssignment(CreateTaskAssignmentRequestBody requestBody) {
078    return createTaskAssignment(requestBody, new CreateTaskAssignmentHeaders());
079  }
080
081  /**
082   * Assigns a task to a user.
083   *
084   * <p>A task can be assigned to more than one user by creating multiple assignments.
085   *
086   * @param requestBody Request body of createTaskAssignment method
087   * @param headers Headers of createTaskAssignment method
088   */
089  public TaskAssignment createTaskAssignment(
090      CreateTaskAssignmentRequestBody requestBody, CreateTaskAssignmentHeaders headers) {
091    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
092    FetchResponse response =
093        this.networkSession
094            .getNetworkClient()
095            .fetch(
096                new FetchOptions.Builder(
097                        String.join(
098                            "",
099                            this.networkSession.getBaseUrls().getBaseUrl(),
100                            "/2.0/task_assignments"),
101                        "POST")
102                    .headers(headersMap)
103                    .data(JsonManager.serialize(requestBody))
104                    .contentType("application/json")
105                    .responseFormat(ResponseFormat.JSON)
106                    .auth(this.auth)
107                    .networkSession(this.networkSession)
108                    .build());
109    return JsonManager.deserialize(response.getData(), TaskAssignment.class);
110  }
111
112  /**
113   * Retrieves information about a task assignment.
114   *
115   * @param taskAssignmentId The ID of the task assignment. Example: "12345"
116   */
117  public TaskAssignment getTaskAssignmentById(String taskAssignmentId) {
118    return getTaskAssignmentById(taskAssignmentId, new GetTaskAssignmentByIdHeaders());
119  }
120
121  /**
122   * Retrieves information about a task assignment.
123   *
124   * @param taskAssignmentId The ID of the task assignment. Example: "12345"
125   * @param headers Headers of getTaskAssignmentById method
126   */
127  public TaskAssignment getTaskAssignmentById(
128      String taskAssignmentId, GetTaskAssignmentByIdHeaders headers) {
129    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
130    FetchResponse response =
131        this.networkSession
132            .getNetworkClient()
133            .fetch(
134                new FetchOptions.Builder(
135                        String.join(
136                            "",
137                            this.networkSession.getBaseUrls().getBaseUrl(),
138                            "/2.0/task_assignments/",
139                            convertToString(taskAssignmentId)),
140                        "GET")
141                    .headers(headersMap)
142                    .responseFormat(ResponseFormat.JSON)
143                    .auth(this.auth)
144                    .networkSession(this.networkSession)
145                    .build());
146    return JsonManager.deserialize(response.getData(), TaskAssignment.class);
147  }
148
149  /**
150   * Updates a task assignment. This endpoint can be used to update the state of a task assigned to
151   * a user.
152   *
153   * @param taskAssignmentId The ID of the task assignment. Example: "12345"
154   */
155  public TaskAssignment updateTaskAssignmentById(String taskAssignmentId) {
156    return updateTaskAssignmentById(
157        taskAssignmentId,
158        new UpdateTaskAssignmentByIdRequestBody(),
159        new UpdateTaskAssignmentByIdHeaders());
160  }
161
162  /**
163   * Updates a task assignment. This endpoint can be used to update the state of a task assigned to
164   * a user.
165   *
166   * @param taskAssignmentId The ID of the task assignment. Example: "12345"
167   * @param requestBody Request body of updateTaskAssignmentById method
168   */
169  public TaskAssignment updateTaskAssignmentById(
170      String taskAssignmentId, UpdateTaskAssignmentByIdRequestBody requestBody) {
171    return updateTaskAssignmentById(
172        taskAssignmentId, requestBody, new UpdateTaskAssignmentByIdHeaders());
173  }
174
175  /**
176   * Updates a task assignment. This endpoint can be used to update the state of a task assigned to
177   * a user.
178   *
179   * @param taskAssignmentId The ID of the task assignment. Example: "12345"
180   * @param headers Headers of updateTaskAssignmentById method
181   */
182  public TaskAssignment updateTaskAssignmentById(
183      String taskAssignmentId, UpdateTaskAssignmentByIdHeaders headers) {
184    return updateTaskAssignmentById(
185        taskAssignmentId, new UpdateTaskAssignmentByIdRequestBody(), headers);
186  }
187
188  /**
189   * Updates a task assignment. This endpoint can be used to update the state of a task assigned to
190   * a user.
191   *
192   * @param taskAssignmentId The ID of the task assignment. Example: "12345"
193   * @param requestBody Request body of updateTaskAssignmentById method
194   * @param headers Headers of updateTaskAssignmentById method
195   */
196  public TaskAssignment updateTaskAssignmentById(
197      String taskAssignmentId,
198      UpdateTaskAssignmentByIdRequestBody requestBody,
199      UpdateTaskAssignmentByIdHeaders headers) {
200    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
201    FetchResponse response =
202        this.networkSession
203            .getNetworkClient()
204            .fetch(
205                new FetchOptions.Builder(
206                        String.join(
207                            "",
208                            this.networkSession.getBaseUrls().getBaseUrl(),
209                            "/2.0/task_assignments/",
210                            convertToString(taskAssignmentId)),
211                        "PUT")
212                    .headers(headersMap)
213                    .data(JsonManager.serialize(requestBody))
214                    .contentType("application/json")
215                    .responseFormat(ResponseFormat.JSON)
216                    .auth(this.auth)
217                    .networkSession(this.networkSession)
218                    .build());
219    return JsonManager.deserialize(response.getData(), TaskAssignment.class);
220  }
221
222  /**
223   * Deletes a specific task assignment.
224   *
225   * @param taskAssignmentId The ID of the task assignment. Example: "12345"
226   */
227  public void deleteTaskAssignmentById(String taskAssignmentId) {
228    deleteTaskAssignmentById(taskAssignmentId, new DeleteTaskAssignmentByIdHeaders());
229  }
230
231  /**
232   * Deletes a specific task assignment.
233   *
234   * @param taskAssignmentId The ID of the task assignment. Example: "12345"
235   * @param headers Headers of deleteTaskAssignmentById method
236   */
237  public void deleteTaskAssignmentById(
238      String taskAssignmentId, DeleteTaskAssignmentByIdHeaders headers) {
239    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
240    FetchResponse response =
241        this.networkSession
242            .getNetworkClient()
243            .fetch(
244                new FetchOptions.Builder(
245                        String.join(
246                            "",
247                            this.networkSession.getBaseUrls().getBaseUrl(),
248                            "/2.0/task_assignments/",
249                            convertToString(taskAssignmentId)),
250                        "DELETE")
251                    .headers(headersMap)
252                    .responseFormat(ResponseFormat.NO_CONTENT)
253                    .auth(this.auth)
254                    .networkSession(this.networkSession)
255                    .build());
256  }
257
258  public Authentication getAuth() {
259    return auth;
260  }
261
262  public NetworkSession getNetworkSession() {
263    return networkSession;
264  }
265
266  public static class Builder {
267
268    protected Authentication auth;
269
270    protected NetworkSession networkSession;
271
272    public Builder() {}
273
274    public Builder auth(Authentication auth) {
275      this.auth = auth;
276      return this;
277    }
278
279    public Builder networkSession(NetworkSession networkSession) {
280      this.networkSession = networkSession;
281      return this;
282    }
283
284    public TaskAssignmentsManager build() {
285      if (this.networkSession == null) {
286        this.networkSession = new NetworkSession();
287      }
288      return new TaskAssignmentsManager(this);
289    }
290  }
291}