001
002package com.commercetools.api.client;
003
004import java.net.URI;
005import java.time.Duration;
006import java.util.ArrayList;
007import java.util.Collection;
008import java.util.List;
009import java.util.concurrent.CompletableFuture;
010import java.util.function.Function;
011import java.util.function.Supplier;
012import java.util.stream.Collectors;
013
014import io.vrap.rmf.base.client.*;
015import io.vrap.rmf.base.client.utils.Generated;
016
017import org.apache.commons.lang3.builder.EqualsBuilder;
018import org.apache.commons.lang3.builder.HashCodeBuilder;
019
020/**
021 *
022 *
023 * <hr>
024 * <div class=code-example>
025 * <pre><code class='java'>{@code
026 *   CompletableFuture<ApiHttpResponse<com.commercetools.api.models.cart.CartPagedQueryResponse>> result = apiRoot
027 *            .withProjectKey("{projectKey}")
028 *            .me()
029 *            .carts()
030 *            .get()
031 *            .execute()
032 * }</code></pre>
033 * </div>
034 */
035@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
036public class ByProjectKeyMeCartsGet
037        extends ApiMethod<ByProjectKeyMeCartsGet, com.commercetools.api.models.cart.CartPagedQueryResponse>
038        implements com.commercetools.api.client.ExpandableTrait<ByProjectKeyMeCartsGet>,
039        com.commercetools.api.client.SortableTrait<ByProjectKeyMeCartsGet>,
040        com.commercetools.api.client.PagingTrait<ByProjectKeyMeCartsGet>,
041        com.commercetools.api.client.QueryTrait<ByProjectKeyMeCartsGet>,
042        com.commercetools.api.client.ErrorableTrait<ByProjectKeyMeCartsGet>,
043        com.commercetools.api.client.Deprecatable200Trait<ByProjectKeyMeCartsGet> {
044
045    private String projectKey;
046
047    public ByProjectKeyMeCartsGet(final ApiHttpClient apiHttpClient, String projectKey) {
048        super(apiHttpClient);
049        this.projectKey = projectKey;
050    }
051
052    public ByProjectKeyMeCartsGet(ByProjectKeyMeCartsGet t) {
053        super(t);
054        this.projectKey = t.projectKey;
055    }
056
057    @Override
058    protected ApiHttpRequest buildHttpRequest() {
059        List<String> params = new ArrayList<>(getQueryParamUriStrings());
060        String httpRequestPath = String.format("%s/me/carts", this.projectKey);
061        if (!params.isEmpty()) {
062            httpRequestPath += "?" + String.join("&", params);
063        }
064        return new ApiHttpRequest(ApiHttpMethod.GET, URI.create(httpRequestPath), getHeaders(), null);
065    }
066
067    @Override
068    public ApiHttpResponse<com.commercetools.api.models.cart.CartPagedQueryResponse> executeBlocking(
069            final ApiHttpClient client, final Duration timeout) {
070        return executeBlocking(client, timeout, com.commercetools.api.models.cart.CartPagedQueryResponse.class);
071    }
072
073    @Override
074    public CompletableFuture<ApiHttpResponse<com.commercetools.api.models.cart.CartPagedQueryResponse>> execute(
075            final ApiHttpClient client) {
076        return execute(client, com.commercetools.api.models.cart.CartPagedQueryResponse.class);
077    }
078
079    public String getProjectKey() {
080        return this.projectKey;
081    }
082
083    public List<String> getExpand() {
084        return this.getQueryParam("expand");
085    }
086
087    public List<String> getSort() {
088        return this.getQueryParam("sort");
089    }
090
091    public List<String> getLimit() {
092        return this.getQueryParam("limit");
093    }
094
095    public List<String> getOffset() {
096        return this.getQueryParam("offset");
097    }
098
099    public List<String> getWithTotal() {
100        return this.getQueryParam("withTotal");
101    }
102
103    public List<String> getWhere() {
104        return this.getQueryParam("where");
105    }
106
107    public void setProjectKey(final String projectKey) {
108        this.projectKey = projectKey;
109    }
110
111    /**
112     * set expand with the specified value
113     * @param expand value to be set
114     * @param <TValue> value type
115     * @return ByProjectKeyMeCartsGet
116     */
117    public <TValue> ByProjectKeyMeCartsGet withExpand(final TValue expand) {
118        return copy().withQueryParam("expand", expand);
119    }
120
121    /**
122     * add additional expand query parameter
123     * @param expand value to be added
124     * @param <TValue> value type
125     * @return ByProjectKeyMeCartsGet
126     */
127    public <TValue> ByProjectKeyMeCartsGet addExpand(final TValue expand) {
128        return copy().addQueryParam("expand", expand);
129    }
130
131    /**
132     * set expand with the specified value
133     * @param supplier supplier for the value to be set
134     * @return ByProjectKeyMeCartsGet
135     */
136    public ByProjectKeyMeCartsGet withExpand(final Supplier<String> supplier) {
137        return copy().withQueryParam("expand", supplier.get());
138    }
139
140    /**
141     * add additional expand query parameter
142     * @param supplier supplier for the value to be added
143     * @return ByProjectKeyMeCartsGet
144     */
145    public ByProjectKeyMeCartsGet addExpand(final Supplier<String> supplier) {
146        return copy().addQueryParam("expand", supplier.get());
147    }
148
149    /**
150     * set expand with the specified value
151     * @param op builder for the value to be set
152     * @return ByProjectKeyMeCartsGet
153     */
154    public ByProjectKeyMeCartsGet withExpand(final Function<StringBuilder, StringBuilder> op) {
155        return copy().withQueryParam("expand", op.apply(new StringBuilder()));
156    }
157
158    /**
159     * add additional expand query parameter
160     * @param op builder for the value to be added
161     * @return ByProjectKeyMeCartsGet
162     */
163    public ByProjectKeyMeCartsGet addExpand(final Function<StringBuilder, StringBuilder> op) {
164        return copy().addQueryParam("expand", op.apply(new StringBuilder()));
165    }
166
167    /**
168     * set expand with the specified values
169     * @param expand values to be set
170     * @param <TValue> value type
171     * @return ByProjectKeyMeCartsGet
172     */
173    public <TValue> ByProjectKeyMeCartsGet withExpand(final Collection<TValue> expand) {
174        return copy().withoutQueryParam("expand")
175                .addQueryParams(
176                    expand.stream().map(s -> new ParamEntry<>("expand", s.toString())).collect(Collectors.toList()));
177    }
178
179    /**
180     * add additional expand query parameters
181     * @param expand values to be added
182     * @param <TValue> value type
183     * @return ByProjectKeyMeCartsGet
184     */
185    public <TValue> ByProjectKeyMeCartsGet addExpand(final Collection<TValue> expand) {
186        return copy().addQueryParams(
187            expand.stream().map(s -> new ParamEntry<>("expand", s.toString())).collect(Collectors.toList()));
188    }
189
190    /**
191     * set sort with the specified value
192     * @param sort value to be set
193     * @param <TValue> value type
194     * @return ByProjectKeyMeCartsGet
195     */
196    public <TValue> ByProjectKeyMeCartsGet withSort(final TValue sort) {
197        return copy().withQueryParam("sort", sort);
198    }
199
200    /**
201     * add additional sort query parameter
202     * @param sort value to be added
203     * @param <TValue> value type
204     * @return ByProjectKeyMeCartsGet
205     */
206    public <TValue> ByProjectKeyMeCartsGet addSort(final TValue sort) {
207        return copy().addQueryParam("sort", sort);
208    }
209
210    /**
211     * set sort with the specified value
212     * @param supplier supplier for the value to be set
213     * @return ByProjectKeyMeCartsGet
214     */
215    public ByProjectKeyMeCartsGet withSort(final Supplier<String> supplier) {
216        return copy().withQueryParam("sort", supplier.get());
217    }
218
219    /**
220     * add additional sort query parameter
221     * @param supplier supplier for the value to be added
222     * @return ByProjectKeyMeCartsGet
223     */
224    public ByProjectKeyMeCartsGet addSort(final Supplier<String> supplier) {
225        return copy().addQueryParam("sort", supplier.get());
226    }
227
228    /**
229     * set sort with the specified value
230     * @param op builder for the value to be set
231     * @return ByProjectKeyMeCartsGet
232     */
233    public ByProjectKeyMeCartsGet withSort(final Function<StringBuilder, StringBuilder> op) {
234        return copy().withQueryParam("sort", op.apply(new StringBuilder()));
235    }
236
237    /**
238     * add additional sort query parameter
239     * @param op builder for the value to be added
240     * @return ByProjectKeyMeCartsGet
241     */
242    public ByProjectKeyMeCartsGet addSort(final Function<StringBuilder, StringBuilder> op) {
243        return copy().addQueryParam("sort", op.apply(new StringBuilder()));
244    }
245
246    /**
247     * set sort with the specified values
248     * @param sort values to be set
249     * @param <TValue> value type
250     * @return ByProjectKeyMeCartsGet
251     */
252    public <TValue> ByProjectKeyMeCartsGet withSort(final Collection<TValue> sort) {
253        return copy().withoutQueryParam("sort")
254                .addQueryParams(
255                    sort.stream().map(s -> new ParamEntry<>("sort", s.toString())).collect(Collectors.toList()));
256    }
257
258    /**
259     * add additional sort query parameters
260     * @param sort values to be added
261     * @param <TValue> value type
262     * @return ByProjectKeyMeCartsGet
263     */
264    public <TValue> ByProjectKeyMeCartsGet addSort(final Collection<TValue> sort) {
265        return copy().addQueryParams(
266            sort.stream().map(s -> new ParamEntry<>("sort", s.toString())).collect(Collectors.toList()));
267    }
268
269    /**
270     * set limit with the specified value
271     * @param limit value to be set
272     * @param <TValue> value type
273     * @return ByProjectKeyMeCartsGet
274     */
275    public <TValue> ByProjectKeyMeCartsGet withLimit(final TValue limit) {
276        return copy().withQueryParam("limit", limit);
277    }
278
279    /**
280     * add additional limit query parameter
281     * @param limit value to be added
282     * @param <TValue> value type
283     * @return ByProjectKeyMeCartsGet
284     */
285    public <TValue> ByProjectKeyMeCartsGet addLimit(final TValue limit) {
286        return copy().addQueryParam("limit", limit);
287    }
288
289    /**
290     * set limit with the specified value
291     * @param supplier supplier for the value to be set
292     * @return ByProjectKeyMeCartsGet
293     */
294    public ByProjectKeyMeCartsGet withLimit(final Supplier<Integer> supplier) {
295        return copy().withQueryParam("limit", supplier.get());
296    }
297
298    /**
299     * add additional limit query parameter
300     * @param supplier supplier for the value to be added
301     * @return ByProjectKeyMeCartsGet
302     */
303    public ByProjectKeyMeCartsGet addLimit(final Supplier<Integer> supplier) {
304        return copy().addQueryParam("limit", supplier.get());
305    }
306
307    /**
308     * set limit with the specified value
309     * @param op builder for the value to be set
310     * @return ByProjectKeyMeCartsGet
311     */
312    public ByProjectKeyMeCartsGet withLimit(final Function<StringBuilder, StringBuilder> op) {
313        return copy().withQueryParam("limit", op.apply(new StringBuilder()));
314    }
315
316    /**
317     * add additional limit query parameter
318     * @param op builder for the value to be added
319     * @return ByProjectKeyMeCartsGet
320     */
321    public ByProjectKeyMeCartsGet addLimit(final Function<StringBuilder, StringBuilder> op) {
322        return copy().addQueryParam("limit", op.apply(new StringBuilder()));
323    }
324
325    /**
326     * set limit with the specified values
327     * @param limit values to be set
328     * @param <TValue> value type
329     * @return ByProjectKeyMeCartsGet
330     */
331    public <TValue> ByProjectKeyMeCartsGet withLimit(final Collection<TValue> limit) {
332        return copy().withoutQueryParam("limit")
333                .addQueryParams(
334                    limit.stream().map(s -> new ParamEntry<>("limit", s.toString())).collect(Collectors.toList()));
335    }
336
337    /**
338     * add additional limit query parameters
339     * @param limit values to be added
340     * @param <TValue> value type
341     * @return ByProjectKeyMeCartsGet
342     */
343    public <TValue> ByProjectKeyMeCartsGet addLimit(final Collection<TValue> limit) {
344        return copy().addQueryParams(
345            limit.stream().map(s -> new ParamEntry<>("limit", s.toString())).collect(Collectors.toList()));
346    }
347
348    /**
349     * set offset with the specified value
350     * @param offset value to be set
351     * @param <TValue> value type
352     * @return ByProjectKeyMeCartsGet
353     */
354    public <TValue> ByProjectKeyMeCartsGet withOffset(final TValue offset) {
355        return copy().withQueryParam("offset", offset);
356    }
357
358    /**
359     * add additional offset query parameter
360     * @param offset value to be added
361     * @param <TValue> value type
362     * @return ByProjectKeyMeCartsGet
363     */
364    public <TValue> ByProjectKeyMeCartsGet addOffset(final TValue offset) {
365        return copy().addQueryParam("offset", offset);
366    }
367
368    /**
369     * set offset with the specified value
370     * @param supplier supplier for the value to be set
371     * @return ByProjectKeyMeCartsGet
372     */
373    public ByProjectKeyMeCartsGet withOffset(final Supplier<Integer> supplier) {
374        return copy().withQueryParam("offset", supplier.get());
375    }
376
377    /**
378     * add additional offset query parameter
379     * @param supplier supplier for the value to be added
380     * @return ByProjectKeyMeCartsGet
381     */
382    public ByProjectKeyMeCartsGet addOffset(final Supplier<Integer> supplier) {
383        return copy().addQueryParam("offset", supplier.get());
384    }
385
386    /**
387     * set offset with the specified value
388     * @param op builder for the value to be set
389     * @return ByProjectKeyMeCartsGet
390     */
391    public ByProjectKeyMeCartsGet withOffset(final Function<StringBuilder, StringBuilder> op) {
392        return copy().withQueryParam("offset", op.apply(new StringBuilder()));
393    }
394
395    /**
396     * add additional offset query parameter
397     * @param op builder for the value to be added
398     * @return ByProjectKeyMeCartsGet
399     */
400    public ByProjectKeyMeCartsGet addOffset(final Function<StringBuilder, StringBuilder> op) {
401        return copy().addQueryParam("offset", op.apply(new StringBuilder()));
402    }
403
404    /**
405     * set offset with the specified values
406     * @param offset values to be set
407     * @param <TValue> value type
408     * @return ByProjectKeyMeCartsGet
409     */
410    public <TValue> ByProjectKeyMeCartsGet withOffset(final Collection<TValue> offset) {
411        return copy().withoutQueryParam("offset")
412                .addQueryParams(
413                    offset.stream().map(s -> new ParamEntry<>("offset", s.toString())).collect(Collectors.toList()));
414    }
415
416    /**
417     * add additional offset query parameters
418     * @param offset values to be added
419     * @param <TValue> value type
420     * @return ByProjectKeyMeCartsGet
421     */
422    public <TValue> ByProjectKeyMeCartsGet addOffset(final Collection<TValue> offset) {
423        return copy().addQueryParams(
424            offset.stream().map(s -> new ParamEntry<>("offset", s.toString())).collect(Collectors.toList()));
425    }
426
427    /**
428     * set withTotal with the specified value
429     * @param withTotal value to be set
430     * @param <TValue> value type
431     * @return ByProjectKeyMeCartsGet
432     */
433    public <TValue> ByProjectKeyMeCartsGet withWithTotal(final TValue withTotal) {
434        return copy().withQueryParam("withTotal", withTotal);
435    }
436
437    /**
438     * add additional withTotal query parameter
439     * @param withTotal value to be added
440     * @param <TValue> value type
441     * @return ByProjectKeyMeCartsGet
442     */
443    public <TValue> ByProjectKeyMeCartsGet addWithTotal(final TValue withTotal) {
444        return copy().addQueryParam("withTotal", withTotal);
445    }
446
447    /**
448     * set withTotal with the specified value
449     * @param supplier supplier for the value to be set
450     * @return ByProjectKeyMeCartsGet
451     */
452    public ByProjectKeyMeCartsGet withWithTotal(final Supplier<Boolean> supplier) {
453        return copy().withQueryParam("withTotal", supplier.get());
454    }
455
456    /**
457     * add additional withTotal query parameter
458     * @param supplier supplier for the value to be added
459     * @return ByProjectKeyMeCartsGet
460     */
461    public ByProjectKeyMeCartsGet addWithTotal(final Supplier<Boolean> supplier) {
462        return copy().addQueryParam("withTotal", supplier.get());
463    }
464
465    /**
466     * set withTotal with the specified value
467     * @param op builder for the value to be set
468     * @return ByProjectKeyMeCartsGet
469     */
470    public ByProjectKeyMeCartsGet withWithTotal(final Function<StringBuilder, StringBuilder> op) {
471        return copy().withQueryParam("withTotal", op.apply(new StringBuilder()));
472    }
473
474    /**
475     * add additional withTotal query parameter
476     * @param op builder for the value to be added
477     * @return ByProjectKeyMeCartsGet
478     */
479    public ByProjectKeyMeCartsGet addWithTotal(final Function<StringBuilder, StringBuilder> op) {
480        return copy().addQueryParam("withTotal", op.apply(new StringBuilder()));
481    }
482
483    /**
484     * set withTotal with the specified values
485     * @param withTotal values to be set
486     * @param <TValue> value type
487     * @return ByProjectKeyMeCartsGet
488     */
489    public <TValue> ByProjectKeyMeCartsGet withWithTotal(final Collection<TValue> withTotal) {
490        return copy().withoutQueryParam("withTotal")
491                .addQueryParams(withTotal.stream()
492                        .map(s -> new ParamEntry<>("withTotal", s.toString()))
493                        .collect(Collectors.toList()));
494    }
495
496    /**
497     * add additional withTotal query parameters
498     * @param withTotal values to be added
499     * @param <TValue> value type
500     * @return ByProjectKeyMeCartsGet
501     */
502    public <TValue> ByProjectKeyMeCartsGet addWithTotal(final Collection<TValue> withTotal) {
503        return copy().addQueryParams(
504            withTotal.stream().map(s -> new ParamEntry<>("withTotal", s.toString())).collect(Collectors.toList()));
505    }
506
507    /**
508     * set where with the specified value
509     * @param where value to be set
510     * @param <TValue> value type
511     * @return ByProjectKeyMeCartsGet
512     */
513    public <TValue> ByProjectKeyMeCartsGet withWhere(final TValue where) {
514        return copy().withQueryParam("where", where);
515    }
516
517    /**
518     * add additional where query parameter
519     * @param where value to be added
520     * @param <TValue> value type
521     * @return ByProjectKeyMeCartsGet
522     */
523    public <TValue> ByProjectKeyMeCartsGet addWhere(final TValue where) {
524        return copy().addQueryParam("where", where);
525    }
526
527    /**
528     * set where with the specified value
529     * @param supplier supplier for the value to be set
530     * @return ByProjectKeyMeCartsGet
531     */
532    public ByProjectKeyMeCartsGet withWhere(final Supplier<String> supplier) {
533        return copy().withQueryParam("where", supplier.get());
534    }
535
536    /**
537     * add additional where query parameter
538     * @param supplier supplier for the value to be added
539     * @return ByProjectKeyMeCartsGet
540     */
541    public ByProjectKeyMeCartsGet addWhere(final Supplier<String> supplier) {
542        return copy().addQueryParam("where", supplier.get());
543    }
544
545    /**
546     * set where with the specified value
547     * @param op builder for the value to be set
548     * @return ByProjectKeyMeCartsGet
549     */
550    public ByProjectKeyMeCartsGet withWhere(final Function<StringBuilder, StringBuilder> op) {
551        return copy().withQueryParam("where", op.apply(new StringBuilder()));
552    }
553
554    /**
555     * add additional where query parameter
556     * @param op builder for the value to be added
557     * @return ByProjectKeyMeCartsGet
558     */
559    public ByProjectKeyMeCartsGet addWhere(final Function<StringBuilder, StringBuilder> op) {
560        return copy().addQueryParam("where", op.apply(new StringBuilder()));
561    }
562
563    /**
564     * set where with the specified values
565     * @param where values to be set
566     * @param <TValue> value type
567     * @return ByProjectKeyMeCartsGet
568     */
569    public <TValue> ByProjectKeyMeCartsGet withWhere(final Collection<TValue> where) {
570        return copy().withoutQueryParam("where")
571                .addQueryParams(
572                    where.stream().map(s -> new ParamEntry<>("where", s.toString())).collect(Collectors.toList()));
573    }
574
575    /**
576     * add additional where query parameters
577     * @param where values to be added
578     * @param <TValue> value type
579     * @return ByProjectKeyMeCartsGet
580     */
581    public <TValue> ByProjectKeyMeCartsGet addWhere(final Collection<TValue> where) {
582        return copy().addQueryParams(
583            where.stream().map(s -> new ParamEntry<>("where", s.toString())).collect(Collectors.toList()));
584    }
585
586    /**
587     * set predicateVar with the specificied value
588     * @param <TValue> value type
589     * @param varName parameter name
590     * @param predicateVar parameter value
591     * @return ByProjectKeyMeCartsGet
592     */
593    public <TValue> ByProjectKeyMeCartsGet withPredicateVar(final String varName, final TValue predicateVar) {
594        return copy().withQueryParam(String.format("var.%s", varName), predicateVar);
595    }
596
597    /**
598     * add additional predicateVar query parameter
599     * @param <TValue> value type
600     * @param varName parameter name
601     * @param predicateVar parameter value
602     * @return ByProjectKeyMeCartsGet
603     */
604    public <TValue> ByProjectKeyMeCartsGet addPredicateVar(final String varName, final TValue predicateVar) {
605        return copy().addQueryParam(String.format("var.%s", varName), predicateVar);
606    }
607
608    /**
609     * set predicateVar with the specificied values
610     * @param <TValue> value type
611     * @param varName parameter name
612     * @param predicateVar parameter values
613     * @return ByProjectKeyMeCartsGet
614     */
615    public <TValue> ByProjectKeyMeCartsGet withPredicateVar(final String varName,
616            final Collection<TValue> predicateVar) {
617        final String placeholderName = String.format("var.%s", varName);
618        return copy().withoutQueryParam(placeholderName)
619                .addQueryParams(predicateVar.stream()
620                        .map(s -> new ParamEntry<>(placeholderName, s.toString()))
621                        .collect(Collectors.toList()));
622    }
623
624    /**
625     * add additional predicateVar query parameters
626     * @param <TValue> value type
627     * @param varName parameter name
628     * @param predicateVar parameter values
629     * @return ByProjectKeyMeCartsGet
630     */
631    public <TValue> ByProjectKeyMeCartsGet addPredicateVar(final String varName,
632            final Collection<TValue> predicateVar) {
633        final String placeholderName = String.format("var.%s", varName);
634        return copy().addQueryParams(predicateVar.stream()
635                .map(s -> new ParamEntry<>(placeholderName, s.toString()))
636                .collect(Collectors.toList()));
637    }
638
639    @Override
640    public boolean equals(Object o) {
641        if (this == o)
642            return true;
643
644        if (o == null || getClass() != o.getClass())
645            return false;
646
647        ByProjectKeyMeCartsGet that = (ByProjectKeyMeCartsGet) o;
648
649        return new EqualsBuilder().append(projectKey, that.projectKey).isEquals();
650    }
651
652    @Override
653    public int hashCode() {
654        return new HashCodeBuilder(17, 37).append(projectKey).toHashCode();
655    }
656
657    @Override
658    protected ByProjectKeyMeCartsGet copy() {
659        return new ByProjectKeyMeCartsGet(this);
660    }
661}