001package com.box.sdkgen.managers.sharedlinksweblinks;
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.weblink.WebLink;
015import com.box.sdkgen.serialization.json.JsonManager;
016import java.util.Map;
017
018public class SharedLinksWebLinksManager {
019
020  public Authentication auth;
021
022  public NetworkSession networkSession;
023
024  public SharedLinksWebLinksManager() {
025    this.networkSession = new NetworkSession();
026  }
027
028  protected SharedLinksWebLinksManager(Builder builder) {
029    this.auth = builder.auth;
030    this.networkSession = builder.networkSession;
031  }
032
033  /**
034   * Returns the web link represented by a shared link.
035   *
036   * <p>A shared web link can be represented by a shared link, which can originate within the
037   * current enterprise or within another.
038   *
039   * <p>This endpoint allows an application to retrieve information about a shared web link when
040   * only given a shared link.
041   *
042   * @param headers Headers of findWebLinkForSharedLink method
043   */
044  public WebLink findWebLinkForSharedLink(FindWebLinkForSharedLinkHeaders headers) {
045    return findWebLinkForSharedLink(new FindWebLinkForSharedLinkQueryParams(), headers);
046  }
047
048  /**
049   * Returns the web link represented by a shared link.
050   *
051   * <p>A shared web link can be represented by a shared link, which can originate within the
052   * current enterprise or within another.
053   *
054   * <p>This endpoint allows an application to retrieve information about a shared web link when
055   * only given a shared link.
056   *
057   * @param queryParams Query parameters of findWebLinkForSharedLink method
058   * @param headers Headers of findWebLinkForSharedLink method
059   */
060  public WebLink findWebLinkForSharedLink(
061      FindWebLinkForSharedLinkQueryParams queryParams, FindWebLinkForSharedLinkHeaders headers) {
062    Map<String, String> queryParamsMap =
063        prepareParams(mapOf(entryOf("fields", convertToString(queryParams.getFields()))));
064    Map<String, String> headersMap =
065        prepareParams(
066            mergeMaps(
067                mapOf(
068                    entryOf("if-none-match", convertToString(headers.getIfNoneMatch())),
069                    entryOf("boxapi", convertToString(headers.getBoxapi()))),
070                headers.getExtraHeaders()));
071    FetchResponse response =
072        this.networkSession
073            .getNetworkClient()
074            .fetch(
075                new FetchOptions.Builder(
076                        String.join(
077                            "",
078                            this.networkSession.getBaseUrls().getBaseUrl(),
079                            "/2.0/shared_items#web_links"),
080                        "GET")
081                    .params(queryParamsMap)
082                    .headers(headersMap)
083                    .responseFormat(ResponseFormat.JSON)
084                    .auth(this.auth)
085                    .networkSession(this.networkSession)
086                    .build());
087    return JsonManager.deserialize(response.getData(), WebLink.class);
088  }
089
090  /**
091   * Gets the information for a shared link on a web link.
092   *
093   * @param webLinkId The ID of the web link. Example: "12345"
094   * @param queryParams Query parameters of getSharedLinkForWebLink method
095   */
096  public WebLink getSharedLinkForWebLink(
097      String webLinkId, GetSharedLinkForWebLinkQueryParams queryParams) {
098    return getSharedLinkForWebLink(webLinkId, queryParams, new GetSharedLinkForWebLinkHeaders());
099  }
100
101  /**
102   * Gets the information for a shared link on a web link.
103   *
104   * @param webLinkId The ID of the web link. Example: "12345"
105   * @param queryParams Query parameters of getSharedLinkForWebLink method
106   * @param headers Headers of getSharedLinkForWebLink method
107   */
108  public WebLink getSharedLinkForWebLink(
109      String webLinkId,
110      GetSharedLinkForWebLinkQueryParams queryParams,
111      GetSharedLinkForWebLinkHeaders headers) {
112    Map<String, String> queryParamsMap =
113        prepareParams(mapOf(entryOf("fields", convertToString(queryParams.getFields()))));
114    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
115    FetchResponse response =
116        this.networkSession
117            .getNetworkClient()
118            .fetch(
119                new FetchOptions.Builder(
120                        String.join(
121                            "",
122                            this.networkSession.getBaseUrls().getBaseUrl(),
123                            "/2.0/web_links/",
124                            convertToString(webLinkId),
125                            "#get_shared_link"),
126                        "GET")
127                    .params(queryParamsMap)
128                    .headers(headersMap)
129                    .responseFormat(ResponseFormat.JSON)
130                    .auth(this.auth)
131                    .networkSession(this.networkSession)
132                    .build());
133    return JsonManager.deserialize(response.getData(), WebLink.class);
134  }
135
136  /**
137   * Adds a shared link to a web link.
138   *
139   * @param webLinkId The ID of the web link. Example: "12345"
140   * @param queryParams Query parameters of addShareLinkToWebLink method
141   */
142  public WebLink addShareLinkToWebLink(
143      String webLinkId, AddShareLinkToWebLinkQueryParams queryParams) {
144    return addShareLinkToWebLink(
145        webLinkId,
146        new AddShareLinkToWebLinkRequestBody(),
147        queryParams,
148        new AddShareLinkToWebLinkHeaders());
149  }
150
151  /**
152   * Adds a shared link to a web link.
153   *
154   * @param webLinkId The ID of the web link. Example: "12345"
155   * @param requestBody Request body of addShareLinkToWebLink method
156   * @param queryParams Query parameters of addShareLinkToWebLink method
157   */
158  public WebLink addShareLinkToWebLink(
159      String webLinkId,
160      AddShareLinkToWebLinkRequestBody requestBody,
161      AddShareLinkToWebLinkQueryParams queryParams) {
162    return addShareLinkToWebLink(
163        webLinkId, requestBody, queryParams, new AddShareLinkToWebLinkHeaders());
164  }
165
166  /**
167   * Adds a shared link to a web link.
168   *
169   * @param webLinkId The ID of the web link. Example: "12345"
170   * @param queryParams Query parameters of addShareLinkToWebLink method
171   * @param headers Headers of addShareLinkToWebLink method
172   */
173  public WebLink addShareLinkToWebLink(
174      String webLinkId,
175      AddShareLinkToWebLinkQueryParams queryParams,
176      AddShareLinkToWebLinkHeaders headers) {
177    return addShareLinkToWebLink(
178        webLinkId, new AddShareLinkToWebLinkRequestBody(), queryParams, headers);
179  }
180
181  /**
182   * Adds a shared link to a web link.
183   *
184   * @param webLinkId The ID of the web link. Example: "12345"
185   * @param requestBody Request body of addShareLinkToWebLink method
186   * @param queryParams Query parameters of addShareLinkToWebLink method
187   * @param headers Headers of addShareLinkToWebLink method
188   */
189  public WebLink addShareLinkToWebLink(
190      String webLinkId,
191      AddShareLinkToWebLinkRequestBody requestBody,
192      AddShareLinkToWebLinkQueryParams queryParams,
193      AddShareLinkToWebLinkHeaders headers) {
194    Map<String, String> queryParamsMap =
195        prepareParams(mapOf(entryOf("fields", convertToString(queryParams.getFields()))));
196    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
197    FetchResponse response =
198        this.networkSession
199            .getNetworkClient()
200            .fetch(
201                new FetchOptions.Builder(
202                        String.join(
203                            "",
204                            this.networkSession.getBaseUrls().getBaseUrl(),
205                            "/2.0/web_links/",
206                            convertToString(webLinkId),
207                            "#add_shared_link"),
208                        "PUT")
209                    .params(queryParamsMap)
210                    .headers(headersMap)
211                    .data(JsonManager.serialize(requestBody))
212                    .contentType("application/json")
213                    .responseFormat(ResponseFormat.JSON)
214                    .auth(this.auth)
215                    .networkSession(this.networkSession)
216                    .build());
217    return JsonManager.deserialize(response.getData(), WebLink.class);
218  }
219
220  /**
221   * Updates a shared link on a web link.
222   *
223   * @param webLinkId The ID of the web link. Example: "12345"
224   * @param queryParams Query parameters of updateSharedLinkOnWebLink method
225   */
226  public WebLink updateSharedLinkOnWebLink(
227      String webLinkId, UpdateSharedLinkOnWebLinkQueryParams queryParams) {
228    return updateSharedLinkOnWebLink(
229        webLinkId,
230        new UpdateSharedLinkOnWebLinkRequestBody(),
231        queryParams,
232        new UpdateSharedLinkOnWebLinkHeaders());
233  }
234
235  /**
236   * Updates a shared link on a web link.
237   *
238   * @param webLinkId The ID of the web link. Example: "12345"
239   * @param requestBody Request body of updateSharedLinkOnWebLink method
240   * @param queryParams Query parameters of updateSharedLinkOnWebLink method
241   */
242  public WebLink updateSharedLinkOnWebLink(
243      String webLinkId,
244      UpdateSharedLinkOnWebLinkRequestBody requestBody,
245      UpdateSharedLinkOnWebLinkQueryParams queryParams) {
246    return updateSharedLinkOnWebLink(
247        webLinkId, requestBody, queryParams, new UpdateSharedLinkOnWebLinkHeaders());
248  }
249
250  /**
251   * Updates a shared link on a web link.
252   *
253   * @param webLinkId The ID of the web link. Example: "12345"
254   * @param queryParams Query parameters of updateSharedLinkOnWebLink method
255   * @param headers Headers of updateSharedLinkOnWebLink method
256   */
257  public WebLink updateSharedLinkOnWebLink(
258      String webLinkId,
259      UpdateSharedLinkOnWebLinkQueryParams queryParams,
260      UpdateSharedLinkOnWebLinkHeaders headers) {
261    return updateSharedLinkOnWebLink(
262        webLinkId, new UpdateSharedLinkOnWebLinkRequestBody(), queryParams, headers);
263  }
264
265  /**
266   * Updates a shared link on a web link.
267   *
268   * @param webLinkId The ID of the web link. Example: "12345"
269   * @param requestBody Request body of updateSharedLinkOnWebLink method
270   * @param queryParams Query parameters of updateSharedLinkOnWebLink method
271   * @param headers Headers of updateSharedLinkOnWebLink method
272   */
273  public WebLink updateSharedLinkOnWebLink(
274      String webLinkId,
275      UpdateSharedLinkOnWebLinkRequestBody requestBody,
276      UpdateSharedLinkOnWebLinkQueryParams queryParams,
277      UpdateSharedLinkOnWebLinkHeaders headers) {
278    Map<String, String> queryParamsMap =
279        prepareParams(mapOf(entryOf("fields", convertToString(queryParams.getFields()))));
280    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
281    FetchResponse response =
282        this.networkSession
283            .getNetworkClient()
284            .fetch(
285                new FetchOptions.Builder(
286                        String.join(
287                            "",
288                            this.networkSession.getBaseUrls().getBaseUrl(),
289                            "/2.0/web_links/",
290                            convertToString(webLinkId),
291                            "#update_shared_link"),
292                        "PUT")
293                    .params(queryParamsMap)
294                    .headers(headersMap)
295                    .data(JsonManager.serialize(requestBody))
296                    .contentType("application/json")
297                    .responseFormat(ResponseFormat.JSON)
298                    .auth(this.auth)
299                    .networkSession(this.networkSession)
300                    .build());
301    return JsonManager.deserialize(response.getData(), WebLink.class);
302  }
303
304  /**
305   * Removes a shared link from a web link.
306   *
307   * @param webLinkId The ID of the web link. Example: "12345"
308   * @param queryParams Query parameters of removeSharedLinkFromWebLink method
309   */
310  public WebLink removeSharedLinkFromWebLink(
311      String webLinkId, RemoveSharedLinkFromWebLinkQueryParams queryParams) {
312    return removeSharedLinkFromWebLink(
313        webLinkId,
314        new RemoveSharedLinkFromWebLinkRequestBody(),
315        queryParams,
316        new RemoveSharedLinkFromWebLinkHeaders());
317  }
318
319  /**
320   * Removes a shared link from a web link.
321   *
322   * @param webLinkId The ID of the web link. Example: "12345"
323   * @param requestBody Request body of removeSharedLinkFromWebLink method
324   * @param queryParams Query parameters of removeSharedLinkFromWebLink method
325   */
326  public WebLink removeSharedLinkFromWebLink(
327      String webLinkId,
328      RemoveSharedLinkFromWebLinkRequestBody requestBody,
329      RemoveSharedLinkFromWebLinkQueryParams queryParams) {
330    return removeSharedLinkFromWebLink(
331        webLinkId, requestBody, queryParams, new RemoveSharedLinkFromWebLinkHeaders());
332  }
333
334  /**
335   * Removes a shared link from a web link.
336   *
337   * @param webLinkId The ID of the web link. Example: "12345"
338   * @param queryParams Query parameters of removeSharedLinkFromWebLink method
339   * @param headers Headers of removeSharedLinkFromWebLink method
340   */
341  public WebLink removeSharedLinkFromWebLink(
342      String webLinkId,
343      RemoveSharedLinkFromWebLinkQueryParams queryParams,
344      RemoveSharedLinkFromWebLinkHeaders headers) {
345    return removeSharedLinkFromWebLink(
346        webLinkId, new RemoveSharedLinkFromWebLinkRequestBody(), queryParams, headers);
347  }
348
349  /**
350   * Removes a shared link from a web link.
351   *
352   * @param webLinkId The ID of the web link. Example: "12345"
353   * @param requestBody Request body of removeSharedLinkFromWebLink method
354   * @param queryParams Query parameters of removeSharedLinkFromWebLink method
355   * @param headers Headers of removeSharedLinkFromWebLink method
356   */
357  public WebLink removeSharedLinkFromWebLink(
358      String webLinkId,
359      RemoveSharedLinkFromWebLinkRequestBody requestBody,
360      RemoveSharedLinkFromWebLinkQueryParams queryParams,
361      RemoveSharedLinkFromWebLinkHeaders headers) {
362    Map<String, String> queryParamsMap =
363        prepareParams(mapOf(entryOf("fields", convertToString(queryParams.getFields()))));
364    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
365    FetchResponse response =
366        this.networkSession
367            .getNetworkClient()
368            .fetch(
369                new FetchOptions.Builder(
370                        String.join(
371                            "",
372                            this.networkSession.getBaseUrls().getBaseUrl(),
373                            "/2.0/web_links/",
374                            convertToString(webLinkId),
375                            "#remove_shared_link"),
376                        "PUT")
377                    .params(queryParamsMap)
378                    .headers(headersMap)
379                    .data(JsonManager.serialize(requestBody))
380                    .contentType("application/json")
381                    .responseFormat(ResponseFormat.JSON)
382                    .auth(this.auth)
383                    .networkSession(this.networkSession)
384                    .build());
385    return JsonManager.deserialize(response.getData(), WebLink.class);
386  }
387
388  public Authentication getAuth() {
389    return auth;
390  }
391
392  public NetworkSession getNetworkSession() {
393    return networkSession;
394  }
395
396  public static class Builder {
397
398    protected Authentication auth;
399
400    protected NetworkSession networkSession;
401
402    public Builder() {}
403
404    public Builder auth(Authentication auth) {
405      this.auth = auth;
406      return this;
407    }
408
409    public Builder networkSession(NetworkSession networkSession) {
410      this.networkSession = networkSession;
411      return this;
412    }
413
414    public SharedLinksWebLinksManager build() {
415      if (this.networkSession == null) {
416        this.networkSession = new NetworkSession();
417      }
418      return new SharedLinksWebLinksManager(this);
419    }
420  }
421}