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