001package com.box.sdkgen.managers.metadatacascadepolicies;
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.metadatacascadepolicies.MetadataCascadePolicies;
015import com.box.sdkgen.schemas.metadatacascadepolicy.MetadataCascadePolicy;
016import com.box.sdkgen.serialization.json.JsonManager;
017import java.util.Map;
018
019public class MetadataCascadePoliciesManager {
020
021  public Authentication auth;
022
023  public NetworkSession networkSession;
024
025  public MetadataCascadePoliciesManager() {
026    this.networkSession = new NetworkSession();
027  }
028
029  protected MetadataCascadePoliciesManager(Builder builder) {
030    this.auth = builder.auth;
031    this.networkSession = builder.networkSession;
032  }
033
034  /**
035   * Retrieves a list of all the metadata cascade policies that are applied to a given folder. This
036   * can not be used on the root folder with ID `0`.
037   *
038   * @param queryParams Query parameters of getMetadataCascadePolicies method
039   */
040  public MetadataCascadePolicies getMetadataCascadePolicies(
041      GetMetadataCascadePoliciesQueryParams queryParams) {
042    return getMetadataCascadePolicies(queryParams, new GetMetadataCascadePoliciesHeaders());
043  }
044
045  /**
046   * Retrieves a list of all the metadata cascade policies that are applied to a given folder. This
047   * can not be used on the root folder with ID `0`.
048   *
049   * @param queryParams Query parameters of getMetadataCascadePolicies method
050   * @param headers Headers of getMetadataCascadePolicies method
051   */
052  public MetadataCascadePolicies getMetadataCascadePolicies(
053      GetMetadataCascadePoliciesQueryParams queryParams,
054      GetMetadataCascadePoliciesHeaders headers) {
055    Map<String, String> queryParamsMap =
056        prepareParams(
057            mapOf(
058                entryOf("folder_id", convertToString(queryParams.getFolderId())),
059                entryOf("owner_enterprise_id", convertToString(queryParams.getOwnerEnterpriseId())),
060                entryOf("marker", convertToString(queryParams.getMarker())),
061                entryOf("offset", convertToString(queryParams.getOffset()))));
062    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
063    FetchResponse response =
064        this.networkSession
065            .getNetworkClient()
066            .fetch(
067                new FetchOptions.Builder(
068                        String.join(
069                            "",
070                            this.networkSession.getBaseUrls().getBaseUrl(),
071                            "/2.0/metadata_cascade_policies"),
072                        "GET")
073                    .params(queryParamsMap)
074                    .headers(headersMap)
075                    .responseFormat(ResponseFormat.JSON)
076                    .auth(this.auth)
077                    .networkSession(this.networkSession)
078                    .build());
079    return JsonManager.deserialize(response.getData(), MetadataCascadePolicies.class);
080  }
081
082  /**
083   * Creates a new metadata cascade policy that applies a given metadata template to a given folder
084   * and automatically cascades it down to any files within that folder.
085   *
086   * <p>In order for the policy to be applied a metadata instance must first be applied to the
087   * folder the policy is to be applied to.
088   *
089   * @param requestBody Request body of createMetadataCascadePolicy method
090   */
091  public MetadataCascadePolicy createMetadataCascadePolicy(
092      CreateMetadataCascadePolicyRequestBody requestBody) {
093    return createMetadataCascadePolicy(requestBody, new CreateMetadataCascadePolicyHeaders());
094  }
095
096  /**
097   * Creates a new metadata cascade policy that applies a given metadata template to a given folder
098   * and automatically cascades it down to any files within that folder.
099   *
100   * <p>In order for the policy to be applied a metadata instance must first be applied to the
101   * folder the policy is to be applied to.
102   *
103   * @param requestBody Request body of createMetadataCascadePolicy method
104   * @param headers Headers of createMetadataCascadePolicy method
105   */
106  public MetadataCascadePolicy createMetadataCascadePolicy(
107      CreateMetadataCascadePolicyRequestBody requestBody,
108      CreateMetadataCascadePolicyHeaders headers) {
109    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
110    FetchResponse response =
111        this.networkSession
112            .getNetworkClient()
113            .fetch(
114                new FetchOptions.Builder(
115                        String.join(
116                            "",
117                            this.networkSession.getBaseUrls().getBaseUrl(),
118                            "/2.0/metadata_cascade_policies"),
119                        "POST")
120                    .headers(headersMap)
121                    .data(JsonManager.serialize(requestBody))
122                    .contentType("application/json")
123                    .responseFormat(ResponseFormat.JSON)
124                    .auth(this.auth)
125                    .networkSession(this.networkSession)
126                    .build());
127    return JsonManager.deserialize(response.getData(), MetadataCascadePolicy.class);
128  }
129
130  /**
131   * Retrieve a specific metadata cascade policy assigned to a folder.
132   *
133   * @param metadataCascadePolicyId The ID of the metadata cascade policy. Example:
134   *     "6fd4ff89-8fc1-42cf-8b29-1890dedd26d7"
135   */
136  public MetadataCascadePolicy getMetadataCascadePolicyById(String metadataCascadePolicyId) {
137    return getMetadataCascadePolicyById(
138        metadataCascadePolicyId, new GetMetadataCascadePolicyByIdHeaders());
139  }
140
141  /**
142   * Retrieve a specific metadata cascade policy assigned to a folder.
143   *
144   * @param metadataCascadePolicyId The ID of the metadata cascade policy. Example:
145   *     "6fd4ff89-8fc1-42cf-8b29-1890dedd26d7"
146   * @param headers Headers of getMetadataCascadePolicyById method
147   */
148  public MetadataCascadePolicy getMetadataCascadePolicyById(
149      String metadataCascadePolicyId, GetMetadataCascadePolicyByIdHeaders headers) {
150    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
151    FetchResponse response =
152        this.networkSession
153            .getNetworkClient()
154            .fetch(
155                new FetchOptions.Builder(
156                        String.join(
157                            "",
158                            this.networkSession.getBaseUrls().getBaseUrl(),
159                            "/2.0/metadata_cascade_policies/",
160                            convertToString(metadataCascadePolicyId)),
161                        "GET")
162                    .headers(headersMap)
163                    .responseFormat(ResponseFormat.JSON)
164                    .auth(this.auth)
165                    .networkSession(this.networkSession)
166                    .build());
167    return JsonManager.deserialize(response.getData(), MetadataCascadePolicy.class);
168  }
169
170  /**
171   * Deletes a metadata cascade policy.
172   *
173   * @param metadataCascadePolicyId The ID of the metadata cascade policy. Example:
174   *     "6fd4ff89-8fc1-42cf-8b29-1890dedd26d7"
175   */
176  public void deleteMetadataCascadePolicyById(String metadataCascadePolicyId) {
177    deleteMetadataCascadePolicyById(
178        metadataCascadePolicyId, new DeleteMetadataCascadePolicyByIdHeaders());
179  }
180
181  /**
182   * Deletes a metadata cascade policy.
183   *
184   * @param metadataCascadePolicyId The ID of the metadata cascade policy. Example:
185   *     "6fd4ff89-8fc1-42cf-8b29-1890dedd26d7"
186   * @param headers Headers of deleteMetadataCascadePolicyById method
187   */
188  public void deleteMetadataCascadePolicyById(
189      String metadataCascadePolicyId, DeleteMetadataCascadePolicyByIdHeaders headers) {
190    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
191    FetchResponse response =
192        this.networkSession
193            .getNetworkClient()
194            .fetch(
195                new FetchOptions.Builder(
196                        String.join(
197                            "",
198                            this.networkSession.getBaseUrls().getBaseUrl(),
199                            "/2.0/metadata_cascade_policies/",
200                            convertToString(metadataCascadePolicyId)),
201                        "DELETE")
202                    .headers(headersMap)
203                    .responseFormat(ResponseFormat.NO_CONTENT)
204                    .auth(this.auth)
205                    .networkSession(this.networkSession)
206                    .build());
207  }
208
209  /**
210   * Force the metadata on a folder with a metadata cascade policy to be applied to all of its
211   * children. This can be used after creating a new cascade policy to enforce the metadata to be
212   * cascaded down to all existing files within that folder.
213   *
214   * @param metadataCascadePolicyId The ID of the cascade policy to force-apply. Example:
215   *     "6fd4ff89-8fc1-42cf-8b29-1890dedd26d7"
216   * @param requestBody Request body of applyMetadataCascadePolicy method
217   */
218  public void applyMetadataCascadePolicy(
219      String metadataCascadePolicyId, ApplyMetadataCascadePolicyRequestBody requestBody) {
220    applyMetadataCascadePolicy(
221        metadataCascadePolicyId, requestBody, new ApplyMetadataCascadePolicyHeaders());
222  }
223
224  /**
225   * Force the metadata on a folder with a metadata cascade policy to be applied to all of its
226   * children. This can be used after creating a new cascade policy to enforce the metadata to be
227   * cascaded down to all existing files within that folder.
228   *
229   * @param metadataCascadePolicyId The ID of the cascade policy to force-apply. Example:
230   *     "6fd4ff89-8fc1-42cf-8b29-1890dedd26d7"
231   * @param requestBody Request body of applyMetadataCascadePolicy method
232   * @param headers Headers of applyMetadataCascadePolicy method
233   */
234  public void applyMetadataCascadePolicy(
235      String metadataCascadePolicyId,
236      ApplyMetadataCascadePolicyRequestBody requestBody,
237      ApplyMetadataCascadePolicyHeaders headers) {
238    Map<String, String> headersMap = prepareParams(mergeMaps(mapOf(), headers.getExtraHeaders()));
239    FetchResponse response =
240        this.networkSession
241            .getNetworkClient()
242            .fetch(
243                new FetchOptions.Builder(
244                        String.join(
245                            "",
246                            this.networkSession.getBaseUrls().getBaseUrl(),
247                            "/2.0/metadata_cascade_policies/",
248                            convertToString(metadataCascadePolicyId),
249                            "/apply"),
250                        "POST")
251                    .headers(headersMap)
252                    .data(JsonManager.serialize(requestBody))
253                    .contentType("application/json")
254                    .responseFormat(ResponseFormat.NO_CONTENT)
255                    .auth(this.auth)
256                    .networkSession(this.networkSession)
257                    .build());
258  }
259
260  public Authentication getAuth() {
261    return auth;
262  }
263
264  public NetworkSession getNetworkSession() {
265    return networkSession;
266  }
267
268  public static class Builder {
269
270    protected Authentication auth;
271
272    protected NetworkSession networkSession;
273
274    public Builder() {}
275
276    public Builder auth(Authentication auth) {
277      this.auth = auth;
278      return this;
279    }
280
281    public Builder networkSession(NetworkSession networkSession) {
282      this.networkSession = networkSession;
283      return this;
284    }
285
286    public MetadataCascadePoliciesManager build() {
287      if (this.networkSession == null) {
288        this.networkSession = new NetworkSession();
289      }
290      return new MetadataCascadePoliciesManager(this);
291    }
292  }
293}