001package com.box.sdkgen.managers.memberships;
002
003import static com.box.sdkgen.internal.utils.UtilsManager.convertToString;
004import static com.box.sdkgen.internal.utils.UtilsManager.entryOf;
005import static com.box.sdkgen.internal.utils.UtilsManager.mapOf;
006import static com.box.sdkgen.internal.utils.UtilsManager.mergeMaps;
007import static com.box.sdkgen.internal.utils.UtilsManager.prepareParams;
008
009import com.box.sdkgen.networking.auth.Authentication;
010import com.box.sdkgen.networking.fetchoptions.FetchOptions;
011import com.box.sdkgen.networking.fetchoptions.ResponseFormat;
012import com.box.sdkgen.networking.fetchresponse.FetchResponse;
013import com.box.sdkgen.networking.network.NetworkSession;
014import com.box.sdkgen.schemas.groupmembership.GroupMembership;
015import com.box.sdkgen.schemas.groupmemberships.GroupMemberships;
016import com.box.sdkgen.serialization.json.JsonManager;
017import java.util.Map;
018
019public class MembershipsManager {
020
021  public Authentication auth;
022
023  public NetworkSession networkSession;
024
025  public MembershipsManager() {
026    this.networkSession = new NetworkSession();
027  }
028
029  protected MembershipsManager(Builder builder) {
030    this.auth = builder.auth;
031    this.networkSession = builder.networkSession;
032  }
033
034  /**
035   * Retrieves all the groups for a user. Only members of this group or users with admin-level
036   * permissions will be able to use this API.
037   *
038   * @param userId The ID of the user. Example: "12345"
039   */
040  public GroupMemberships getUserMemberships(String userId) {
041    return getUserMemberships(
042        userId, new GetUserMembershipsQueryParams(), new GetUserMembershipsHeaders());
043  }
044
045  /**
046   * Retrieves all the groups for a user. Only members of this group or users with admin-level
047   * permissions will be able to use this API.
048   *
049   * @param userId The ID of the user. Example: "12345"
050   * @param queryParams Query parameters of getUserMemberships method
051   */
052  public GroupMemberships getUserMemberships(
053      String userId, GetUserMembershipsQueryParams queryParams) {
054    return getUserMemberships(userId, queryParams, new GetUserMembershipsHeaders());
055  }
056
057  /**
058   * Retrieves all the groups for a user. Only members of this group or users with admin-level
059   * permissions will be able to use this API.
060   *
061   * @param userId The ID of the user. Example: "12345"
062   * @param headers Headers of getUserMemberships method
063   */
064  public GroupMemberships getUserMemberships(String userId, GetUserMembershipsHeaders headers) {
065    return getUserMemberships(userId, new GetUserMembershipsQueryParams(), headers);
066  }
067
068  /**
069   * Retrieves all the groups for a user. Only members of this group or users with admin-level
070   * permissions will be able to use this API.
071   *
072   * @param userId The ID of the user. Example: "12345"
073   * @param queryParams Query parameters of getUserMemberships method
074   * @param headers Headers of getUserMemberships method
075   */
076  public GroupMemberships getUserMemberships(
077      String userId, GetUserMembershipsQueryParams queryParams, GetUserMembershipsHeaders headers) {
078    Map<String, String> queryParamsMap =
079        prepareParams(
080            mapOf(
081                entryOf("limit", convertToString(queryParams.getLimit())),
082                entryOf("offset", convertToString(queryParams.getOffset()))));
083    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
084    FetchResponse response =
085        this.networkSession
086            .getNetworkClient()
087            .fetch(
088                new FetchOptions.Builder(
089                        String.join(
090                            "",
091                            this.networkSession.getBaseUrls().getBaseUrl(),
092                            "/2.0/users/",
093                            convertToString(userId),
094                            "/memberships"),
095                        "GET")
096                    .params(queryParamsMap)
097                    .headers(headersMap)
098                    .responseFormat(ResponseFormat.JSON)
099                    .auth(this.auth)
100                    .networkSession(this.networkSession)
101                    .build());
102    return JsonManager.deserialize(response.getData(), GroupMemberships.class);
103  }
104
105  /**
106   * Retrieves all the members for a group. Only members of this group or users with admin-level
107   * permissions will be able to use this API.
108   *
109   * @param groupId The ID of the group. Example: "57645"
110   */
111  public GroupMemberships getGroupMemberships(String groupId) {
112    return getGroupMemberships(
113        groupId, new GetGroupMembershipsQueryParams(), new GetGroupMembershipsHeaders());
114  }
115
116  /**
117   * Retrieves all the members for a group. Only members of this group or users with admin-level
118   * permissions will be able to use this API.
119   *
120   * @param groupId The ID of the group. Example: "57645"
121   * @param queryParams Query parameters of getGroupMemberships method
122   */
123  public GroupMemberships getGroupMemberships(
124      String groupId, GetGroupMembershipsQueryParams queryParams) {
125    return getGroupMemberships(groupId, queryParams, new GetGroupMembershipsHeaders());
126  }
127
128  /**
129   * Retrieves all the members for a group. Only members of this group or users with admin-level
130   * permissions will be able to use this API.
131   *
132   * @param groupId The ID of the group. Example: "57645"
133   * @param headers Headers of getGroupMemberships method
134   */
135  public GroupMemberships getGroupMemberships(String groupId, GetGroupMembershipsHeaders headers) {
136    return getGroupMemberships(groupId, new GetGroupMembershipsQueryParams(), headers);
137  }
138
139  /**
140   * Retrieves all the members for a group. Only members of this group or users with admin-level
141   * permissions will be able to use this API.
142   *
143   * @param groupId The ID of the group. Example: "57645"
144   * @param queryParams Query parameters of getGroupMemberships method
145   * @param headers Headers of getGroupMemberships method
146   */
147  public GroupMemberships getGroupMemberships(
148      String groupId,
149      GetGroupMembershipsQueryParams queryParams,
150      GetGroupMembershipsHeaders headers) {
151    Map<String, String> queryParamsMap =
152        prepareParams(
153            mapOf(
154                entryOf("limit", convertToString(queryParams.getLimit())),
155                entryOf("offset", convertToString(queryParams.getOffset()))));
156    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
157    FetchResponse response =
158        this.networkSession
159            .getNetworkClient()
160            .fetch(
161                new FetchOptions.Builder(
162                        String.join(
163                            "",
164                            this.networkSession.getBaseUrls().getBaseUrl(),
165                            "/2.0/groups/",
166                            convertToString(groupId),
167                            "/memberships"),
168                        "GET")
169                    .params(queryParamsMap)
170                    .headers(headersMap)
171                    .responseFormat(ResponseFormat.JSON)
172                    .auth(this.auth)
173                    .networkSession(this.networkSession)
174                    .build());
175    return JsonManager.deserialize(response.getData(), GroupMemberships.class);
176  }
177
178  /**
179   * Creates a group membership. Only users with admin-level permissions will be able to use this
180   * API.
181   *
182   * @param requestBody Request body of createGroupMembership method
183   */
184  public GroupMembership createGroupMembership(CreateGroupMembershipRequestBody requestBody) {
185    return createGroupMembership(
186        requestBody, new CreateGroupMembershipQueryParams(), new CreateGroupMembershipHeaders());
187  }
188
189  /**
190   * Creates a group membership. Only users with admin-level permissions will be able to use this
191   * API.
192   *
193   * @param requestBody Request body of createGroupMembership method
194   * @param queryParams Query parameters of createGroupMembership method
195   */
196  public GroupMembership createGroupMembership(
197      CreateGroupMembershipRequestBody requestBody, CreateGroupMembershipQueryParams queryParams) {
198    return createGroupMembership(requestBody, queryParams, new CreateGroupMembershipHeaders());
199  }
200
201  /**
202   * Creates a group membership. Only users with admin-level permissions will be able to use this
203   * API.
204   *
205   * @param requestBody Request body of createGroupMembership method
206   * @param headers Headers of createGroupMembership method
207   */
208  public GroupMembership createGroupMembership(
209      CreateGroupMembershipRequestBody requestBody, CreateGroupMembershipHeaders headers) {
210    return createGroupMembership(requestBody, new CreateGroupMembershipQueryParams(), headers);
211  }
212
213  /**
214   * Creates a group membership. Only users with admin-level permissions will be able to use this
215   * API.
216   *
217   * @param requestBody Request body of createGroupMembership method
218   * @param queryParams Query parameters of createGroupMembership method
219   * @param headers Headers of createGroupMembership method
220   */
221  public GroupMembership createGroupMembership(
222      CreateGroupMembershipRequestBody requestBody,
223      CreateGroupMembershipQueryParams queryParams,
224      CreateGroupMembershipHeaders headers) {
225    Map<String, String> queryParamsMap =
226        prepareParams(mapOf(entryOf("fields", convertToString(queryParams.getFields()))));
227    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
228    FetchResponse response =
229        this.networkSession
230            .getNetworkClient()
231            .fetch(
232                new FetchOptions.Builder(
233                        String.join(
234                            "",
235                            this.networkSession.getBaseUrls().getBaseUrl(),
236                            "/2.0/group_memberships"),
237                        "POST")
238                    .params(queryParamsMap)
239                    .headers(headersMap)
240                    .data(JsonManager.serialize(requestBody))
241                    .contentType("application/json")
242                    .responseFormat(ResponseFormat.JSON)
243                    .auth(this.auth)
244                    .networkSession(this.networkSession)
245                    .build());
246    return JsonManager.deserialize(response.getData(), GroupMembership.class);
247  }
248
249  /**
250   * Retrieves a specific group membership. Only admins of this group or users with admin-level
251   * permissions will be able to use this API.
252   *
253   * @param groupMembershipId The ID of the group membership. Example: "434534"
254   */
255  public GroupMembership getGroupMembershipById(String groupMembershipId) {
256    return getGroupMembershipById(
257        groupMembershipId,
258        new GetGroupMembershipByIdQueryParams(),
259        new GetGroupMembershipByIdHeaders());
260  }
261
262  /**
263   * Retrieves a specific group membership. Only admins of this group or users with admin-level
264   * permissions will be able to use this API.
265   *
266   * @param groupMembershipId The ID of the group membership. Example: "434534"
267   * @param queryParams Query parameters of getGroupMembershipById method
268   */
269  public GroupMembership getGroupMembershipById(
270      String groupMembershipId, GetGroupMembershipByIdQueryParams queryParams) {
271    return getGroupMembershipById(
272        groupMembershipId, queryParams, new GetGroupMembershipByIdHeaders());
273  }
274
275  /**
276   * Retrieves a specific group membership. Only admins of this group or users with admin-level
277   * permissions will be able to use this API.
278   *
279   * @param groupMembershipId The ID of the group membership. Example: "434534"
280   * @param headers Headers of getGroupMembershipById method
281   */
282  public GroupMembership getGroupMembershipById(
283      String groupMembershipId, GetGroupMembershipByIdHeaders headers) {
284    return getGroupMembershipById(
285        groupMembershipId, new GetGroupMembershipByIdQueryParams(), headers);
286  }
287
288  /**
289   * Retrieves a specific group membership. Only admins of this group or users with admin-level
290   * permissions will be able to use this API.
291   *
292   * @param groupMembershipId The ID of the group membership. Example: "434534"
293   * @param queryParams Query parameters of getGroupMembershipById method
294   * @param headers Headers of getGroupMembershipById method
295   */
296  public GroupMembership getGroupMembershipById(
297      String groupMembershipId,
298      GetGroupMembershipByIdQueryParams queryParams,
299      GetGroupMembershipByIdHeaders headers) {
300    Map<String, String> queryParamsMap =
301        prepareParams(mapOf(entryOf("fields", convertToString(queryParams.getFields()))));
302    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
303    FetchResponse response =
304        this.networkSession
305            .getNetworkClient()
306            .fetch(
307                new FetchOptions.Builder(
308                        String.join(
309                            "",
310                            this.networkSession.getBaseUrls().getBaseUrl(),
311                            "/2.0/group_memberships/",
312                            convertToString(groupMembershipId)),
313                        "GET")
314                    .params(queryParamsMap)
315                    .headers(headersMap)
316                    .responseFormat(ResponseFormat.JSON)
317                    .auth(this.auth)
318                    .networkSession(this.networkSession)
319                    .build());
320    return JsonManager.deserialize(response.getData(), GroupMembership.class);
321  }
322
323  /**
324   * Updates a user's group membership. Only admins of this group or users with admin-level
325   * permissions will be able to use this API.
326   *
327   * @param groupMembershipId The ID of the group membership. Example: "434534"
328   */
329  public GroupMembership updateGroupMembershipById(String groupMembershipId) {
330    return updateGroupMembershipById(
331        groupMembershipId,
332        new UpdateGroupMembershipByIdRequestBody(),
333        new UpdateGroupMembershipByIdQueryParams(),
334        new UpdateGroupMembershipByIdHeaders());
335  }
336
337  /**
338   * Updates a user's group membership. Only admins of this group or users with admin-level
339   * permissions will be able to use this API.
340   *
341   * @param groupMembershipId The ID of the group membership. Example: "434534"
342   * @param requestBody Request body of updateGroupMembershipById method
343   */
344  public GroupMembership updateGroupMembershipById(
345      String groupMembershipId, UpdateGroupMembershipByIdRequestBody requestBody) {
346    return updateGroupMembershipById(
347        groupMembershipId,
348        requestBody,
349        new UpdateGroupMembershipByIdQueryParams(),
350        new UpdateGroupMembershipByIdHeaders());
351  }
352
353  /**
354   * Updates a user's group membership. Only admins of this group or users with admin-level
355   * permissions will be able to use this API.
356   *
357   * @param groupMembershipId The ID of the group membership. Example: "434534"
358   * @param queryParams Query parameters of updateGroupMembershipById method
359   */
360  public GroupMembership updateGroupMembershipById(
361      String groupMembershipId, UpdateGroupMembershipByIdQueryParams queryParams) {
362    return updateGroupMembershipById(
363        groupMembershipId,
364        new UpdateGroupMembershipByIdRequestBody(),
365        queryParams,
366        new UpdateGroupMembershipByIdHeaders());
367  }
368
369  /**
370   * Updates a user's group membership. Only admins of this group or users with admin-level
371   * permissions will be able to use this API.
372   *
373   * @param groupMembershipId The ID of the group membership. Example: "434534"
374   * @param requestBody Request body of updateGroupMembershipById method
375   * @param queryParams Query parameters of updateGroupMembershipById method
376   */
377  public GroupMembership updateGroupMembershipById(
378      String groupMembershipId,
379      UpdateGroupMembershipByIdRequestBody requestBody,
380      UpdateGroupMembershipByIdQueryParams queryParams) {
381    return updateGroupMembershipById(
382        groupMembershipId, requestBody, queryParams, new UpdateGroupMembershipByIdHeaders());
383  }
384
385  /**
386   * Updates a user's group membership. Only admins of this group or users with admin-level
387   * permissions will be able to use this API.
388   *
389   * @param groupMembershipId The ID of the group membership. Example: "434534"
390   * @param headers Headers of updateGroupMembershipById method
391   */
392  public GroupMembership updateGroupMembershipById(
393      String groupMembershipId, UpdateGroupMembershipByIdHeaders headers) {
394    return updateGroupMembershipById(
395        groupMembershipId,
396        new UpdateGroupMembershipByIdRequestBody(),
397        new UpdateGroupMembershipByIdQueryParams(),
398        headers);
399  }
400
401  /**
402   * Updates a user's group membership. Only admins of this group or users with admin-level
403   * permissions will be able to use this API.
404   *
405   * @param groupMembershipId The ID of the group membership. Example: "434534"
406   * @param requestBody Request body of updateGroupMembershipById method
407   * @param headers Headers of updateGroupMembershipById method
408   */
409  public GroupMembership updateGroupMembershipById(
410      String groupMembershipId,
411      UpdateGroupMembershipByIdRequestBody requestBody,
412      UpdateGroupMembershipByIdHeaders headers) {
413    return updateGroupMembershipById(
414        groupMembershipId, requestBody, new UpdateGroupMembershipByIdQueryParams(), headers);
415  }
416
417  /**
418   * Updates a user's group membership. Only admins of this group or users with admin-level
419   * permissions will be able to use this API.
420   *
421   * @param groupMembershipId The ID of the group membership. Example: "434534"
422   * @param queryParams Query parameters of updateGroupMembershipById method
423   * @param headers Headers of updateGroupMembershipById method
424   */
425  public GroupMembership updateGroupMembershipById(
426      String groupMembershipId,
427      UpdateGroupMembershipByIdQueryParams queryParams,
428      UpdateGroupMembershipByIdHeaders headers) {
429    return updateGroupMembershipById(
430        groupMembershipId, new UpdateGroupMembershipByIdRequestBody(), queryParams, headers);
431  }
432
433  /**
434   * Updates a user's group membership. Only admins of this group or users with admin-level
435   * permissions will be able to use this API.
436   *
437   * @param groupMembershipId The ID of the group membership. Example: "434534"
438   * @param requestBody Request body of updateGroupMembershipById method
439   * @param queryParams Query parameters of updateGroupMembershipById method
440   * @param headers Headers of updateGroupMembershipById method
441   */
442  public GroupMembership updateGroupMembershipById(
443      String groupMembershipId,
444      UpdateGroupMembershipByIdRequestBody requestBody,
445      UpdateGroupMembershipByIdQueryParams queryParams,
446      UpdateGroupMembershipByIdHeaders headers) {
447    Map<String, String> queryParamsMap =
448        prepareParams(mapOf(entryOf("fields", convertToString(queryParams.getFields()))));
449    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
450    FetchResponse response =
451        this.networkSession
452            .getNetworkClient()
453            .fetch(
454                new FetchOptions.Builder(
455                        String.join(
456                            "",
457                            this.networkSession.getBaseUrls().getBaseUrl(),
458                            "/2.0/group_memberships/",
459                            convertToString(groupMembershipId)),
460                        "PUT")
461                    .params(queryParamsMap)
462                    .headers(headersMap)
463                    .data(JsonManager.serialize(requestBody))
464                    .contentType("application/json")
465                    .responseFormat(ResponseFormat.JSON)
466                    .auth(this.auth)
467                    .networkSession(this.networkSession)
468                    .build());
469    return JsonManager.deserialize(response.getData(), GroupMembership.class);
470  }
471
472  /**
473   * Deletes a specific group membership. Only admins of this group or users with admin-level
474   * permissions will be able to use this API.
475   *
476   * @param groupMembershipId The ID of the group membership. Example: "434534"
477   */
478  public void deleteGroupMembershipById(String groupMembershipId) {
479    deleteGroupMembershipById(groupMembershipId, new DeleteGroupMembershipByIdHeaders());
480  }
481
482  /**
483   * Deletes a specific group membership. Only admins of this group or users with admin-level
484   * permissions will be able to use this API.
485   *
486   * @param groupMembershipId The ID of the group membership. Example: "434534"
487   * @param headers Headers of deleteGroupMembershipById method
488   */
489  public void deleteGroupMembershipById(
490      String groupMembershipId, DeleteGroupMembershipByIdHeaders headers) {
491    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
492    FetchResponse response =
493        this.networkSession
494            .getNetworkClient()
495            .fetch(
496                new FetchOptions.Builder(
497                        String.join(
498                            "",
499                            this.networkSession.getBaseUrls().getBaseUrl(),
500                            "/2.0/group_memberships/",
501                            convertToString(groupMembershipId)),
502                        "DELETE")
503                    .headers(headersMap)
504                    .responseFormat(ResponseFormat.NO_CONTENT)
505                    .auth(this.auth)
506                    .networkSession(this.networkSession)
507                    .build());
508  }
509
510  public Authentication getAuth() {
511    return auth;
512  }
513
514  public NetworkSession getNetworkSession() {
515    return networkSession;
516  }
517
518  public static class Builder {
519
520    protected Authentication auth;
521
522    protected NetworkSession networkSession;
523
524    public Builder() {}
525
526    public Builder auth(Authentication auth) {
527      this.auth = auth;
528      return this;
529    }
530
531    public Builder networkSession(NetworkSession networkSession) {
532      this.networkSession = networkSession;
533      return this;
534    }
535
536    public MembershipsManager build() {
537      if (this.networkSession == null) {
538        this.networkSession = new NetworkSession();
539      }
540      return new MembershipsManager(this);
541    }
542  }
543}