001package com.box.sdkgen.managers.folderlocks;
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.folderlock.FolderLock;
015import com.box.sdkgen.schemas.folderlocks.FolderLocks;
016import com.box.sdkgen.serialization.json.JsonManager;
017import java.util.Map;
018
019public class FolderLocksManager {
020
021  public Authentication auth;
022
023  public NetworkSession networkSession;
024
025  public FolderLocksManager() {
026    this.networkSession = new NetworkSession();
027  }
028
029  protected FolderLocksManager(Builder builder) {
030    this.auth = builder.auth;
031    this.networkSession = builder.networkSession;
032  }
033
034  /**
035   * Retrieves folder lock details for a given folder.
036   *
037   * <p>You must be authenticated as the owner or co-owner of the folder to use this endpoint.
038   *
039   * @param queryParams Query parameters of getFolderLocks method
040   */
041  public FolderLocks getFolderLocks(GetFolderLocksQueryParams queryParams) {
042    return getFolderLocks(queryParams, new GetFolderLocksHeaders());
043  }
044
045  /**
046   * Retrieves folder lock details for a given folder.
047   *
048   * <p>You must be authenticated as the owner or co-owner of the folder to use this endpoint.
049   *
050   * @param queryParams Query parameters of getFolderLocks method
051   * @param headers Headers of getFolderLocks method
052   */
053  public FolderLocks getFolderLocks(
054      GetFolderLocksQueryParams queryParams, GetFolderLocksHeaders headers) {
055    Map<String, String> queryParamsMap =
056        prepareParams(mapOf(entryOf("folder_id", convertToString(queryParams.getFolderId()))));
057    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
058    FetchResponse response =
059        this.networkSession
060            .getNetworkClient()
061            .fetch(
062                new FetchOptions.Builder(
063                        String.join(
064                            "",
065                            this.networkSession.getBaseUrls().getBaseUrl(),
066                            "/2.0/folder_locks"),
067                        "GET")
068                    .params(queryParamsMap)
069                    .headers(headersMap)
070                    .responseFormat(ResponseFormat.JSON)
071                    .auth(this.auth)
072                    .networkSession(this.networkSession)
073                    .build());
074    return JsonManager.deserialize(response.getData(), FolderLocks.class);
075  }
076
077  /**
078   * Creates a folder lock on a folder, preventing it from being moved and/or deleted.
079   *
080   * <p>You must be authenticated as the owner or co-owner of the folder to use this endpoint.
081   *
082   * @param requestBody Request body of createFolderLock method
083   */
084  public FolderLock createFolderLock(CreateFolderLockRequestBody requestBody) {
085    return createFolderLock(requestBody, new CreateFolderLockHeaders());
086  }
087
088  /**
089   * Creates a folder lock on a folder, preventing it from being moved and/or deleted.
090   *
091   * <p>You must be authenticated as the owner or co-owner of the folder to use this endpoint.
092   *
093   * @param requestBody Request body of createFolderLock method
094   * @param headers Headers of createFolderLock method
095   */
096  public FolderLock createFolderLock(
097      CreateFolderLockRequestBody requestBody, CreateFolderLockHeaders headers) {
098    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
099    FetchResponse response =
100        this.networkSession
101            .getNetworkClient()
102            .fetch(
103                new FetchOptions.Builder(
104                        String.join(
105                            "",
106                            this.networkSession.getBaseUrls().getBaseUrl(),
107                            "/2.0/folder_locks"),
108                        "POST")
109                    .headers(headersMap)
110                    .data(JsonManager.serialize(requestBody))
111                    .contentType("application/json")
112                    .responseFormat(ResponseFormat.JSON)
113                    .auth(this.auth)
114                    .networkSession(this.networkSession)
115                    .build());
116    return JsonManager.deserialize(response.getData(), FolderLock.class);
117  }
118
119  /**
120   * Deletes a folder lock on a given folder.
121   *
122   * <p>You must be authenticated as the owner or co-owner of the folder to use this endpoint.
123   *
124   * @param folderLockId The ID of the folder lock. Example: "12345"
125   */
126  public void deleteFolderLockById(String folderLockId) {
127    deleteFolderLockById(folderLockId, new DeleteFolderLockByIdHeaders());
128  }
129
130  /**
131   * Deletes a folder lock on a given folder.
132   *
133   * <p>You must be authenticated as the owner or co-owner of the folder to use this endpoint.
134   *
135   * @param folderLockId The ID of the folder lock. Example: "12345"
136   * @param headers Headers of deleteFolderLockById method
137   */
138  public void deleteFolderLockById(String folderLockId, DeleteFolderLockByIdHeaders headers) {
139    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
140    FetchResponse response =
141        this.networkSession
142            .getNetworkClient()
143            .fetch(
144                new FetchOptions.Builder(
145                        String.join(
146                            "",
147                            this.networkSession.getBaseUrls().getBaseUrl(),
148                            "/2.0/folder_locks/",
149                            convertToString(folderLockId)),
150                        "DELETE")
151                    .headers(headersMap)
152                    .responseFormat(ResponseFormat.NO_CONTENT)
153                    .auth(this.auth)
154                    .networkSession(this.networkSession)
155                    .build());
156  }
157
158  public Authentication getAuth() {
159    return auth;
160  }
161
162  public NetworkSession getNetworkSession() {
163    return networkSession;
164  }
165
166  public static class Builder {
167
168    protected Authentication auth;
169
170    protected NetworkSession networkSession;
171
172    public Builder() {}
173
174    public Builder auth(Authentication auth) {
175      this.auth = auth;
176      return this;
177    }
178
179    public Builder networkSession(NetworkSession networkSession) {
180      this.networkSession = networkSession;
181      return this;
182    }
183
184    public FolderLocksManager build() {
185      if (this.networkSession == null) {
186        this.networkSession = new NetworkSession();
187      }
188      return new FolderLocksManager(this);
189    }
190  }
191}