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 *  <p>Product Projection Search</p>
022 *
023 * <hr>
024 * <div class=code-example>
025 * <pre><code class='java'>{@code
026 *   CompletableFuture<ApiHttpResponse<com.commercetools.api.models.product.ProductProjectionPagedSearchResponse>> result = apiRoot
027 *            .withProjectKey("{projectKey}")
028 *            .productProjections()
029 *            .search()
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 ByProjectKeyProductProjectionsSearchGet extends
037        ApiMethod<ByProjectKeyProductProjectionsSearchGet, com.commercetools.api.models.product.ProductProjectionPagedSearchResponse>
038        implements com.commercetools.api.client.SortableTrait<ByProjectKeyProductProjectionsSearchGet>,
039        com.commercetools.api.client.PagingTrait<ByProjectKeyProductProjectionsSearchGet>,
040        com.commercetools.api.client.ProjectionselectingTrait<ByProjectKeyProductProjectionsSearchGet>,
041        com.commercetools.api.client.PriceselectingTrait<ByProjectKeyProductProjectionsSearchGet>,
042        com.commercetools.api.client.LocaleprojectingTrait<ByProjectKeyProductProjectionsSearchGet>,
043        com.commercetools.api.client.StoreprojectingTrait<ByProjectKeyProductProjectionsSearchGet>,
044        com.commercetools.api.client.ExpandableTrait<ByProjectKeyProductProjectionsSearchGet>,
045        com.commercetools.api.client.ErrorableTrait<ByProjectKeyProductProjectionsSearchGet>,
046        com.commercetools.api.client.Deprecatable200Trait<ByProjectKeyProductProjectionsSearchGet> {
047
048    private String projectKey;
049
050    public ByProjectKeyProductProjectionsSearchGet(final ApiHttpClient apiHttpClient, String projectKey) {
051        super(apiHttpClient);
052        this.projectKey = projectKey;
053    }
054
055    public ByProjectKeyProductProjectionsSearchGet(ByProjectKeyProductProjectionsSearchGet t) {
056        super(t);
057        this.projectKey = t.projectKey;
058    }
059
060    @Override
061    protected ApiHttpRequest buildHttpRequest() {
062        List<String> params = new ArrayList<>(getQueryParamUriStrings());
063        String httpRequestPath = String.format("%s/product-projections/search", this.projectKey);
064        if (!params.isEmpty()) {
065            httpRequestPath += "?" + String.join("&", params);
066        }
067        return new ApiHttpRequest(ApiHttpMethod.GET, URI.create(httpRequestPath), getHeaders(), null);
068    }
069
070    @Override
071    public ApiHttpResponse<com.commercetools.api.models.product.ProductProjectionPagedSearchResponse> executeBlocking(
072            final ApiHttpClient client, final Duration timeout) {
073        return executeBlocking(client, timeout,
074            com.commercetools.api.models.product.ProductProjectionPagedSearchResponse.class);
075    }
076
077    @Override
078    public CompletableFuture<ApiHttpResponse<com.commercetools.api.models.product.ProductProjectionPagedSearchResponse>> execute(
079            final ApiHttpClient client) {
080        return execute(client, com.commercetools.api.models.product.ProductProjectionPagedSearchResponse.class);
081    }
082
083    public String getProjectKey() {
084        return this.projectKey;
085    }
086
087    public List<String> getFuzzy() {
088        return this.getQueryParam("fuzzy");
089    }
090
091    public List<String> getFuzzyLevel() {
092        return this.getQueryParam("fuzzyLevel");
093    }
094
095    public List<String> getMarkMatchingVariants() {
096        return this.getQueryParam("markMatchingVariants");
097    }
098
099    public List<String> getFilter() {
100        return this.getQueryParam("filter");
101    }
102
103    public List<String> getFilterFacets() {
104        return this.getQueryParam("filter.facets");
105    }
106
107    public List<String> getFilterQuery() {
108        return this.getQueryParam("filter.query");
109    }
110
111    public List<String> getFacet() {
112        return this.getQueryParam("facet");
113    }
114
115    public List<String> getSort() {
116        return this.getQueryParam("sort");
117    }
118
119    public List<String> getLimit() {
120        return this.getQueryParam("limit");
121    }
122
123    public List<String> getOffset() {
124        return this.getQueryParam("offset");
125    }
126
127    public List<String> getWithTotal() {
128        return this.getQueryParam("withTotal");
129    }
130
131    public List<String> getStaged() {
132        return this.getQueryParam("staged");
133    }
134
135    public List<String> getPriceCurrency() {
136        return this.getQueryParam("priceCurrency");
137    }
138
139    public List<String> getPriceCountry() {
140        return this.getQueryParam("priceCountry");
141    }
142
143    public List<String> getPriceCustomerGroup() {
144        return this.getQueryParam("priceCustomerGroup");
145    }
146
147    public List<String> getPriceChannel() {
148        return this.getQueryParam("priceChannel");
149    }
150
151    public List<String> getLocaleProjection() {
152        return this.getQueryParam("localeProjection");
153    }
154
155    public List<String> getStoreProjection() {
156        return this.getQueryParam("storeProjection");
157    }
158
159    public List<String> getExpand() {
160        return this.getQueryParam("expand");
161    }
162
163    public void setProjectKey(final String projectKey) {
164        this.projectKey = projectKey;
165    }
166
167    /**
168     * set fuzzy with the specified value
169     * @param fuzzy value to be set
170     * @param <TValue> value type
171     * @return ByProjectKeyProductProjectionsSearchGet
172     */
173    public <TValue> ByProjectKeyProductProjectionsSearchGet withFuzzy(final TValue fuzzy) {
174        return copy().withQueryParam("fuzzy", fuzzy);
175    }
176
177    /**
178     * add additional fuzzy query parameter
179     * @param fuzzy value to be added
180     * @param <TValue> value type
181     * @return ByProjectKeyProductProjectionsSearchGet
182     */
183    public <TValue> ByProjectKeyProductProjectionsSearchGet addFuzzy(final TValue fuzzy) {
184        return copy().addQueryParam("fuzzy", fuzzy);
185    }
186
187    /**
188     * set fuzzy with the specified value
189     * @param supplier supplier for the value to be set
190     * @return ByProjectKeyProductProjectionsSearchGet
191     */
192    public ByProjectKeyProductProjectionsSearchGet withFuzzy(final Supplier<Boolean> supplier) {
193        return copy().withQueryParam("fuzzy", supplier.get());
194    }
195
196    /**
197     * add additional fuzzy query parameter
198     * @param supplier supplier for the value to be added
199     * @return ByProjectKeyProductProjectionsSearchGet
200     */
201    public ByProjectKeyProductProjectionsSearchGet addFuzzy(final Supplier<Boolean> supplier) {
202        return copy().addQueryParam("fuzzy", supplier.get());
203    }
204
205    /**
206     * set fuzzy with the specified value
207     * @param op builder for the value to be set
208     * @return ByProjectKeyProductProjectionsSearchGet
209     */
210    public ByProjectKeyProductProjectionsSearchGet withFuzzy(final Function<StringBuilder, StringBuilder> op) {
211        return copy().withQueryParam("fuzzy", op.apply(new StringBuilder()));
212    }
213
214    /**
215     * add additional fuzzy query parameter
216     * @param op builder for the value to be added
217     * @return ByProjectKeyProductProjectionsSearchGet
218     */
219    public ByProjectKeyProductProjectionsSearchGet addFuzzy(final Function<StringBuilder, StringBuilder> op) {
220        return copy().addQueryParam("fuzzy", op.apply(new StringBuilder()));
221    }
222
223    /**
224     * set fuzzy with the specified values
225     * @param fuzzy values to be set
226     * @param <TValue> value type
227     * @return ByProjectKeyProductProjectionsSearchGet
228     */
229    public <TValue> ByProjectKeyProductProjectionsSearchGet withFuzzy(final Collection<TValue> fuzzy) {
230        return copy().withoutQueryParam("fuzzy")
231                .addQueryParams(
232                    fuzzy.stream().map(s -> new ParamEntry<>("fuzzy", s.toString())).collect(Collectors.toList()));
233    }
234
235    /**
236     * add additional fuzzy query parameters
237     * @param fuzzy values to be added
238     * @param <TValue> value type
239     * @return ByProjectKeyProductProjectionsSearchGet
240     */
241    public <TValue> ByProjectKeyProductProjectionsSearchGet addFuzzy(final Collection<TValue> fuzzy) {
242        return copy().addQueryParams(
243            fuzzy.stream().map(s -> new ParamEntry<>("fuzzy", s.toString())).collect(Collectors.toList()));
244    }
245
246    /**
247     * set fuzzyLevel with the specified value
248     * @param fuzzyLevel value to be set
249     * @param <TValue> value type
250     * @return ByProjectKeyProductProjectionsSearchGet
251     */
252    public <TValue> ByProjectKeyProductProjectionsSearchGet withFuzzyLevel(final TValue fuzzyLevel) {
253        return copy().withQueryParam("fuzzyLevel", fuzzyLevel);
254    }
255
256    /**
257     * add additional fuzzyLevel query parameter
258     * @param fuzzyLevel value to be added
259     * @param <TValue> value type
260     * @return ByProjectKeyProductProjectionsSearchGet
261     */
262    public <TValue> ByProjectKeyProductProjectionsSearchGet addFuzzyLevel(final TValue fuzzyLevel) {
263        return copy().addQueryParam("fuzzyLevel", fuzzyLevel);
264    }
265
266    /**
267     * set fuzzyLevel with the specified value
268     * @param supplier supplier for the value to be set
269     * @return ByProjectKeyProductProjectionsSearchGet
270     */
271    public ByProjectKeyProductProjectionsSearchGet withFuzzyLevel(final Supplier<Integer> supplier) {
272        return copy().withQueryParam("fuzzyLevel", supplier.get());
273    }
274
275    /**
276     * add additional fuzzyLevel query parameter
277     * @param supplier supplier for the value to be added
278     * @return ByProjectKeyProductProjectionsSearchGet
279     */
280    public ByProjectKeyProductProjectionsSearchGet addFuzzyLevel(final Supplier<Integer> supplier) {
281        return copy().addQueryParam("fuzzyLevel", supplier.get());
282    }
283
284    /**
285     * set fuzzyLevel with the specified value
286     * @param op builder for the value to be set
287     * @return ByProjectKeyProductProjectionsSearchGet
288     */
289    public ByProjectKeyProductProjectionsSearchGet withFuzzyLevel(final Function<StringBuilder, StringBuilder> op) {
290        return copy().withQueryParam("fuzzyLevel", op.apply(new StringBuilder()));
291    }
292
293    /**
294     * add additional fuzzyLevel query parameter
295     * @param op builder for the value to be added
296     * @return ByProjectKeyProductProjectionsSearchGet
297     */
298    public ByProjectKeyProductProjectionsSearchGet addFuzzyLevel(final Function<StringBuilder, StringBuilder> op) {
299        return copy().addQueryParam("fuzzyLevel", op.apply(new StringBuilder()));
300    }
301
302    /**
303     * set fuzzyLevel with the specified values
304     * @param fuzzyLevel values to be set
305     * @param <TValue> value type
306     * @return ByProjectKeyProductProjectionsSearchGet
307     */
308    public <TValue> ByProjectKeyProductProjectionsSearchGet withFuzzyLevel(final Collection<TValue> fuzzyLevel) {
309        return copy().withoutQueryParam("fuzzyLevel")
310                .addQueryParams(fuzzyLevel.stream()
311                        .map(s -> new ParamEntry<>("fuzzyLevel", s.toString()))
312                        .collect(Collectors.toList()));
313    }
314
315    /**
316     * add additional fuzzyLevel query parameters
317     * @param fuzzyLevel values to be added
318     * @param <TValue> value type
319     * @return ByProjectKeyProductProjectionsSearchGet
320     */
321    public <TValue> ByProjectKeyProductProjectionsSearchGet addFuzzyLevel(final Collection<TValue> fuzzyLevel) {
322        return copy().addQueryParams(
323            fuzzyLevel.stream().map(s -> new ParamEntry<>("fuzzyLevel", s.toString())).collect(Collectors.toList()));
324    }
325
326    /**
327     * set markMatchingVariants with the specified value
328     * @param markMatchingVariants value to be set
329     * @param <TValue> value type
330     * @return ByProjectKeyProductProjectionsSearchGet
331     */
332    public <TValue> ByProjectKeyProductProjectionsSearchGet withMarkMatchingVariants(
333            final TValue markMatchingVariants) {
334        return copy().withQueryParam("markMatchingVariants", markMatchingVariants);
335    }
336
337    /**
338     * add additional markMatchingVariants query parameter
339     * @param markMatchingVariants value to be added
340     * @param <TValue> value type
341     * @return ByProjectKeyProductProjectionsSearchGet
342     */
343    public <TValue> ByProjectKeyProductProjectionsSearchGet addMarkMatchingVariants(final TValue markMatchingVariants) {
344        return copy().addQueryParam("markMatchingVariants", markMatchingVariants);
345    }
346
347    /**
348     * set markMatchingVariants with the specified value
349     * @param supplier supplier for the value to be set
350     * @return ByProjectKeyProductProjectionsSearchGet
351     */
352    public ByProjectKeyProductProjectionsSearchGet withMarkMatchingVariants(final Supplier<Boolean> supplier) {
353        return copy().withQueryParam("markMatchingVariants", supplier.get());
354    }
355
356    /**
357     * add additional markMatchingVariants query parameter
358     * @param supplier supplier for the value to be added
359     * @return ByProjectKeyProductProjectionsSearchGet
360     */
361    public ByProjectKeyProductProjectionsSearchGet addMarkMatchingVariants(final Supplier<Boolean> supplier) {
362        return copy().addQueryParam("markMatchingVariants", supplier.get());
363    }
364
365    /**
366     * set markMatchingVariants with the specified value
367     * @param op builder for the value to be set
368     * @return ByProjectKeyProductProjectionsSearchGet
369     */
370    public ByProjectKeyProductProjectionsSearchGet withMarkMatchingVariants(
371            final Function<StringBuilder, StringBuilder> op) {
372        return copy().withQueryParam("markMatchingVariants", op.apply(new StringBuilder()));
373    }
374
375    /**
376     * add additional markMatchingVariants query parameter
377     * @param op builder for the value to be added
378     * @return ByProjectKeyProductProjectionsSearchGet
379     */
380    public ByProjectKeyProductProjectionsSearchGet addMarkMatchingVariants(
381            final Function<StringBuilder, StringBuilder> op) {
382        return copy().addQueryParam("markMatchingVariants", op.apply(new StringBuilder()));
383    }
384
385    /**
386     * set markMatchingVariants with the specified values
387     * @param markMatchingVariants values to be set
388     * @param <TValue> value type
389     * @return ByProjectKeyProductProjectionsSearchGet
390     */
391    public <TValue> ByProjectKeyProductProjectionsSearchGet withMarkMatchingVariants(
392            final Collection<TValue> markMatchingVariants) {
393        return copy().withoutQueryParam("markMatchingVariants")
394                .addQueryParams(markMatchingVariants.stream()
395                        .map(s -> new ParamEntry<>("markMatchingVariants", s.toString()))
396                        .collect(Collectors.toList()));
397    }
398
399    /**
400     * add additional markMatchingVariants query parameters
401     * @param markMatchingVariants values to be added
402     * @param <TValue> value type
403     * @return ByProjectKeyProductProjectionsSearchGet
404     */
405    public <TValue> ByProjectKeyProductProjectionsSearchGet addMarkMatchingVariants(
406            final Collection<TValue> markMatchingVariants) {
407        return copy().addQueryParams(markMatchingVariants.stream()
408                .map(s -> new ParamEntry<>("markMatchingVariants", s.toString()))
409                .collect(Collectors.toList()));
410    }
411
412    /**
413     * set filter with the specified value
414     * @param filter value to be set
415     * @param <TValue> value type
416     * @return ByProjectKeyProductProjectionsSearchGet
417     */
418    public <TValue> ByProjectKeyProductProjectionsSearchGet withFilter(final TValue filter) {
419        return copy().withQueryParam("filter", filter);
420    }
421
422    /**
423     * add additional filter query parameter
424     * @param filter value to be added
425     * @param <TValue> value type
426     * @return ByProjectKeyProductProjectionsSearchGet
427     */
428    public <TValue> ByProjectKeyProductProjectionsSearchGet addFilter(final TValue filter) {
429        return copy().addQueryParam("filter", filter);
430    }
431
432    /**
433     * set filter with the specified value
434     * @param supplier supplier for the value to be set
435     * @return ByProjectKeyProductProjectionsSearchGet
436     */
437    public ByProjectKeyProductProjectionsSearchGet withFilter(final Supplier<String> supplier) {
438        return copy().withQueryParam("filter", supplier.get());
439    }
440
441    /**
442     * add additional filter query parameter
443     * @param supplier supplier for the value to be added
444     * @return ByProjectKeyProductProjectionsSearchGet
445     */
446    public ByProjectKeyProductProjectionsSearchGet addFilter(final Supplier<String> supplier) {
447        return copy().addQueryParam("filter", supplier.get());
448    }
449
450    /**
451     * set filter with the specified value
452     * @param op builder for the value to be set
453     * @return ByProjectKeyProductProjectionsSearchGet
454     */
455    public ByProjectKeyProductProjectionsSearchGet withFilter(final Function<StringBuilder, StringBuilder> op) {
456        return copy().withQueryParam("filter", op.apply(new StringBuilder()));
457    }
458
459    /**
460     * add additional filter query parameter
461     * @param op builder for the value to be added
462     * @return ByProjectKeyProductProjectionsSearchGet
463     */
464    public ByProjectKeyProductProjectionsSearchGet addFilter(final Function<StringBuilder, StringBuilder> op) {
465        return copy().addQueryParam("filter", op.apply(new StringBuilder()));
466    }
467
468    /**
469     * set filter with the specified values
470     * @param filter values to be set
471     * @param <TValue> value type
472     * @return ByProjectKeyProductProjectionsSearchGet
473     */
474    public <TValue> ByProjectKeyProductProjectionsSearchGet withFilter(final Collection<TValue> filter) {
475        return copy().withoutQueryParam("filter")
476                .addQueryParams(
477                    filter.stream().map(s -> new ParamEntry<>("filter", s.toString())).collect(Collectors.toList()));
478    }
479
480    /**
481     * add additional filter query parameters
482     * @param filter values to be added
483     * @param <TValue> value type
484     * @return ByProjectKeyProductProjectionsSearchGet
485     */
486    public <TValue> ByProjectKeyProductProjectionsSearchGet addFilter(final Collection<TValue> filter) {
487        return copy().addQueryParams(
488            filter.stream().map(s -> new ParamEntry<>("filter", s.toString())).collect(Collectors.toList()));
489    }
490
491    /**
492     * set filterFacets with the specified value
493     * @param filterFacets value to be set
494     * @param <TValue> value type
495     * @return ByProjectKeyProductProjectionsSearchGet
496     */
497    public <TValue> ByProjectKeyProductProjectionsSearchGet withFilterFacets(final TValue filterFacets) {
498        return copy().withQueryParam("filter.facets", filterFacets);
499    }
500
501    /**
502     * add additional filterFacets query parameter
503     * @param filterFacets value to be added
504     * @param <TValue> value type
505     * @return ByProjectKeyProductProjectionsSearchGet
506     */
507    public <TValue> ByProjectKeyProductProjectionsSearchGet addFilterFacets(final TValue filterFacets) {
508        return copy().addQueryParam("filter.facets", filterFacets);
509    }
510
511    /**
512     * set filterFacets with the specified value
513     * @param supplier supplier for the value to be set
514     * @return ByProjectKeyProductProjectionsSearchGet
515     */
516    public ByProjectKeyProductProjectionsSearchGet withFilterFacets(final Supplier<String> supplier) {
517        return copy().withQueryParam("filter.facets", supplier.get());
518    }
519
520    /**
521     * add additional filterFacets query parameter
522     * @param supplier supplier for the value to be added
523     * @return ByProjectKeyProductProjectionsSearchGet
524     */
525    public ByProjectKeyProductProjectionsSearchGet addFilterFacets(final Supplier<String> supplier) {
526        return copy().addQueryParam("filter.facets", supplier.get());
527    }
528
529    /**
530     * set filterFacets with the specified value
531     * @param op builder for the value to be set
532     * @return ByProjectKeyProductProjectionsSearchGet
533     */
534    public ByProjectKeyProductProjectionsSearchGet withFilterFacets(final Function<StringBuilder, StringBuilder> op) {
535        return copy().withQueryParam("filter.facets", op.apply(new StringBuilder()));
536    }
537
538    /**
539     * add additional filterFacets query parameter
540     * @param op builder for the value to be added
541     * @return ByProjectKeyProductProjectionsSearchGet
542     */
543    public ByProjectKeyProductProjectionsSearchGet addFilterFacets(final Function<StringBuilder, StringBuilder> op) {
544        return copy().addQueryParam("filter.facets", op.apply(new StringBuilder()));
545    }
546
547    /**
548     * set filterFacets with the specified values
549     * @param filterFacets values to be set
550     * @param <TValue> value type
551     * @return ByProjectKeyProductProjectionsSearchGet
552     */
553    public <TValue> ByProjectKeyProductProjectionsSearchGet withFilterFacets(final Collection<TValue> filterFacets) {
554        return copy().withoutQueryParam("filter.facets")
555                .addQueryParams(filterFacets.stream()
556                        .map(s -> new ParamEntry<>("filter.facets", s.toString()))
557                        .collect(Collectors.toList()));
558    }
559
560    /**
561     * add additional filterFacets query parameters
562     * @param filterFacets values to be added
563     * @param <TValue> value type
564     * @return ByProjectKeyProductProjectionsSearchGet
565     */
566    public <TValue> ByProjectKeyProductProjectionsSearchGet addFilterFacets(final Collection<TValue> filterFacets) {
567        return copy().addQueryParams(filterFacets.stream()
568                .map(s -> new ParamEntry<>("filter.facets", s.toString()))
569                .collect(Collectors.toList()));
570    }
571
572    /**
573     * set filterQuery with the specified value
574     * @param filterQuery value to be set
575     * @param <TValue> value type
576     * @return ByProjectKeyProductProjectionsSearchGet
577     */
578    public <TValue> ByProjectKeyProductProjectionsSearchGet withFilterQuery(final TValue filterQuery) {
579        return copy().withQueryParam("filter.query", filterQuery);
580    }
581
582    /**
583     * add additional filterQuery query parameter
584     * @param filterQuery value to be added
585     * @param <TValue> value type
586     * @return ByProjectKeyProductProjectionsSearchGet
587     */
588    public <TValue> ByProjectKeyProductProjectionsSearchGet addFilterQuery(final TValue filterQuery) {
589        return copy().addQueryParam("filter.query", filterQuery);
590    }
591
592    /**
593     * set filterQuery with the specified value
594     * @param supplier supplier for the value to be set
595     * @return ByProjectKeyProductProjectionsSearchGet
596     */
597    public ByProjectKeyProductProjectionsSearchGet withFilterQuery(final Supplier<String> supplier) {
598        return copy().withQueryParam("filter.query", supplier.get());
599    }
600
601    /**
602     * add additional filterQuery query parameter
603     * @param supplier supplier for the value to be added
604     * @return ByProjectKeyProductProjectionsSearchGet
605     */
606    public ByProjectKeyProductProjectionsSearchGet addFilterQuery(final Supplier<String> supplier) {
607        return copy().addQueryParam("filter.query", supplier.get());
608    }
609
610    /**
611     * set filterQuery with the specified value
612     * @param op builder for the value to be set
613     * @return ByProjectKeyProductProjectionsSearchGet
614     */
615    public ByProjectKeyProductProjectionsSearchGet withFilterQuery(final Function<StringBuilder, StringBuilder> op) {
616        return copy().withQueryParam("filter.query", op.apply(new StringBuilder()));
617    }
618
619    /**
620     * add additional filterQuery query parameter
621     * @param op builder for the value to be added
622     * @return ByProjectKeyProductProjectionsSearchGet
623     */
624    public ByProjectKeyProductProjectionsSearchGet addFilterQuery(final Function<StringBuilder, StringBuilder> op) {
625        return copy().addQueryParam("filter.query", op.apply(new StringBuilder()));
626    }
627
628    /**
629     * set filterQuery with the specified values
630     * @param filterQuery values to be set
631     * @param <TValue> value type
632     * @return ByProjectKeyProductProjectionsSearchGet
633     */
634    public <TValue> ByProjectKeyProductProjectionsSearchGet withFilterQuery(final Collection<TValue> filterQuery) {
635        return copy().withoutQueryParam("filter.query")
636                .addQueryParams(filterQuery.stream()
637                        .map(s -> new ParamEntry<>("filter.query", s.toString()))
638                        .collect(Collectors.toList()));
639    }
640
641    /**
642     * add additional filterQuery query parameters
643     * @param filterQuery values to be added
644     * @param <TValue> value type
645     * @return ByProjectKeyProductProjectionsSearchGet
646     */
647    public <TValue> ByProjectKeyProductProjectionsSearchGet addFilterQuery(final Collection<TValue> filterQuery) {
648        return copy().addQueryParams(
649            filterQuery.stream().map(s -> new ParamEntry<>("filter.query", s.toString())).collect(Collectors.toList()));
650    }
651
652    /**
653     * set facet with the specified value
654     * @param facet value to be set
655     * @param <TValue> value type
656     * @return ByProjectKeyProductProjectionsSearchGet
657     */
658    public <TValue> ByProjectKeyProductProjectionsSearchGet withFacet(final TValue facet) {
659        return copy().withQueryParam("facet", facet);
660    }
661
662    /**
663     * add additional facet query parameter
664     * @param facet value to be added
665     * @param <TValue> value type
666     * @return ByProjectKeyProductProjectionsSearchGet
667     */
668    public <TValue> ByProjectKeyProductProjectionsSearchGet addFacet(final TValue facet) {
669        return copy().addQueryParam("facet", facet);
670    }
671
672    /**
673     * set facet with the specified value
674     * @param supplier supplier for the value to be set
675     * @return ByProjectKeyProductProjectionsSearchGet
676     */
677    public ByProjectKeyProductProjectionsSearchGet withFacet(final Supplier<String> supplier) {
678        return copy().withQueryParam("facet", supplier.get());
679    }
680
681    /**
682     * add additional facet query parameter
683     * @param supplier supplier for the value to be added
684     * @return ByProjectKeyProductProjectionsSearchGet
685     */
686    public ByProjectKeyProductProjectionsSearchGet addFacet(final Supplier<String> supplier) {
687        return copy().addQueryParam("facet", supplier.get());
688    }
689
690    /**
691     * set facet with the specified value
692     * @param op builder for the value to be set
693     * @return ByProjectKeyProductProjectionsSearchGet
694     */
695    public ByProjectKeyProductProjectionsSearchGet withFacet(final Function<StringBuilder, StringBuilder> op) {
696        return copy().withQueryParam("facet", op.apply(new StringBuilder()));
697    }
698
699    /**
700     * add additional facet query parameter
701     * @param op builder for the value to be added
702     * @return ByProjectKeyProductProjectionsSearchGet
703     */
704    public ByProjectKeyProductProjectionsSearchGet addFacet(final Function<StringBuilder, StringBuilder> op) {
705        return copy().addQueryParam("facet", op.apply(new StringBuilder()));
706    }
707
708    /**
709     * set facet with the specified values
710     * @param facet values to be set
711     * @param <TValue> value type
712     * @return ByProjectKeyProductProjectionsSearchGet
713     */
714    public <TValue> ByProjectKeyProductProjectionsSearchGet withFacet(final Collection<TValue> facet) {
715        return copy().withoutQueryParam("facet")
716                .addQueryParams(
717                    facet.stream().map(s -> new ParamEntry<>("facet", s.toString())).collect(Collectors.toList()));
718    }
719
720    /**
721     * add additional facet query parameters
722     * @param facet values to be added
723     * @param <TValue> value type
724     * @return ByProjectKeyProductProjectionsSearchGet
725     */
726    public <TValue> ByProjectKeyProductProjectionsSearchGet addFacet(final Collection<TValue> facet) {
727        return copy().addQueryParams(
728            facet.stream().map(s -> new ParamEntry<>("facet", s.toString())).collect(Collectors.toList()));
729    }
730
731    /**
732     * set sort with the specified value
733     * @param sort value to be set
734     * @param <TValue> value type
735     * @return ByProjectKeyProductProjectionsSearchGet
736     */
737    public <TValue> ByProjectKeyProductProjectionsSearchGet withSort(final TValue sort) {
738        return copy().withQueryParam("sort", sort);
739    }
740
741    /**
742     * add additional sort query parameter
743     * @param sort value to be added
744     * @param <TValue> value type
745     * @return ByProjectKeyProductProjectionsSearchGet
746     */
747    public <TValue> ByProjectKeyProductProjectionsSearchGet addSort(final TValue sort) {
748        return copy().addQueryParam("sort", sort);
749    }
750
751    /**
752     * set sort with the specified value
753     * @param supplier supplier for the value to be set
754     * @return ByProjectKeyProductProjectionsSearchGet
755     */
756    public ByProjectKeyProductProjectionsSearchGet withSort(final Supplier<String> supplier) {
757        return copy().withQueryParam("sort", supplier.get());
758    }
759
760    /**
761     * add additional sort query parameter
762     * @param supplier supplier for the value to be added
763     * @return ByProjectKeyProductProjectionsSearchGet
764     */
765    public ByProjectKeyProductProjectionsSearchGet addSort(final Supplier<String> supplier) {
766        return copy().addQueryParam("sort", supplier.get());
767    }
768
769    /**
770     * set sort with the specified value
771     * @param op builder for the value to be set
772     * @return ByProjectKeyProductProjectionsSearchGet
773     */
774    public ByProjectKeyProductProjectionsSearchGet withSort(final Function<StringBuilder, StringBuilder> op) {
775        return copy().withQueryParam("sort", op.apply(new StringBuilder()));
776    }
777
778    /**
779     * add additional sort query parameter
780     * @param op builder for the value to be added
781     * @return ByProjectKeyProductProjectionsSearchGet
782     */
783    public ByProjectKeyProductProjectionsSearchGet addSort(final Function<StringBuilder, StringBuilder> op) {
784        return copy().addQueryParam("sort", op.apply(new StringBuilder()));
785    }
786
787    /**
788     * set sort with the specified values
789     * @param sort values to be set
790     * @param <TValue> value type
791     * @return ByProjectKeyProductProjectionsSearchGet
792     */
793    public <TValue> ByProjectKeyProductProjectionsSearchGet withSort(final Collection<TValue> sort) {
794        return copy().withoutQueryParam("sort")
795                .addQueryParams(
796                    sort.stream().map(s -> new ParamEntry<>("sort", s.toString())).collect(Collectors.toList()));
797    }
798
799    /**
800     * add additional sort query parameters
801     * @param sort values to be added
802     * @param <TValue> value type
803     * @return ByProjectKeyProductProjectionsSearchGet
804     */
805    public <TValue> ByProjectKeyProductProjectionsSearchGet addSort(final Collection<TValue> sort) {
806        return copy().addQueryParams(
807            sort.stream().map(s -> new ParamEntry<>("sort", s.toString())).collect(Collectors.toList()));
808    }
809
810    /**
811     * set limit with the specified value
812     * @param limit value to be set
813     * @param <TValue> value type
814     * @return ByProjectKeyProductProjectionsSearchGet
815     */
816    public <TValue> ByProjectKeyProductProjectionsSearchGet withLimit(final TValue limit) {
817        return copy().withQueryParam("limit", limit);
818    }
819
820    /**
821     * add additional limit query parameter
822     * @param limit value to be added
823     * @param <TValue> value type
824     * @return ByProjectKeyProductProjectionsSearchGet
825     */
826    public <TValue> ByProjectKeyProductProjectionsSearchGet addLimit(final TValue limit) {
827        return copy().addQueryParam("limit", limit);
828    }
829
830    /**
831     * set limit with the specified value
832     * @param supplier supplier for the value to be set
833     * @return ByProjectKeyProductProjectionsSearchGet
834     */
835    public ByProjectKeyProductProjectionsSearchGet withLimit(final Supplier<Integer> supplier) {
836        return copy().withQueryParam("limit", supplier.get());
837    }
838
839    /**
840     * add additional limit query parameter
841     * @param supplier supplier for the value to be added
842     * @return ByProjectKeyProductProjectionsSearchGet
843     */
844    public ByProjectKeyProductProjectionsSearchGet addLimit(final Supplier<Integer> supplier) {
845        return copy().addQueryParam("limit", supplier.get());
846    }
847
848    /**
849     * set limit with the specified value
850     * @param op builder for the value to be set
851     * @return ByProjectKeyProductProjectionsSearchGet
852     */
853    public ByProjectKeyProductProjectionsSearchGet withLimit(final Function<StringBuilder, StringBuilder> op) {
854        return copy().withQueryParam("limit", op.apply(new StringBuilder()));
855    }
856
857    /**
858     * add additional limit query parameter
859     * @param op builder for the value to be added
860     * @return ByProjectKeyProductProjectionsSearchGet
861     */
862    public ByProjectKeyProductProjectionsSearchGet addLimit(final Function<StringBuilder, StringBuilder> op) {
863        return copy().addQueryParam("limit", op.apply(new StringBuilder()));
864    }
865
866    /**
867     * set limit with the specified values
868     * @param limit values to be set
869     * @param <TValue> value type
870     * @return ByProjectKeyProductProjectionsSearchGet
871     */
872    public <TValue> ByProjectKeyProductProjectionsSearchGet withLimit(final Collection<TValue> limit) {
873        return copy().withoutQueryParam("limit")
874                .addQueryParams(
875                    limit.stream().map(s -> new ParamEntry<>("limit", s.toString())).collect(Collectors.toList()));
876    }
877
878    /**
879     * add additional limit query parameters
880     * @param limit values to be added
881     * @param <TValue> value type
882     * @return ByProjectKeyProductProjectionsSearchGet
883     */
884    public <TValue> ByProjectKeyProductProjectionsSearchGet addLimit(final Collection<TValue> limit) {
885        return copy().addQueryParams(
886            limit.stream().map(s -> new ParamEntry<>("limit", s.toString())).collect(Collectors.toList()));
887    }
888
889    /**
890     * set offset with the specified value
891     * @param offset value to be set
892     * @param <TValue> value type
893     * @return ByProjectKeyProductProjectionsSearchGet
894     */
895    public <TValue> ByProjectKeyProductProjectionsSearchGet withOffset(final TValue offset) {
896        return copy().withQueryParam("offset", offset);
897    }
898
899    /**
900     * add additional offset query parameter
901     * @param offset value to be added
902     * @param <TValue> value type
903     * @return ByProjectKeyProductProjectionsSearchGet
904     */
905    public <TValue> ByProjectKeyProductProjectionsSearchGet addOffset(final TValue offset) {
906        return copy().addQueryParam("offset", offset);
907    }
908
909    /**
910     * set offset with the specified value
911     * @param supplier supplier for the value to be set
912     * @return ByProjectKeyProductProjectionsSearchGet
913     */
914    public ByProjectKeyProductProjectionsSearchGet withOffset(final Supplier<Integer> supplier) {
915        return copy().withQueryParam("offset", supplier.get());
916    }
917
918    /**
919     * add additional offset query parameter
920     * @param supplier supplier for the value to be added
921     * @return ByProjectKeyProductProjectionsSearchGet
922     */
923    public ByProjectKeyProductProjectionsSearchGet addOffset(final Supplier<Integer> supplier) {
924        return copy().addQueryParam("offset", supplier.get());
925    }
926
927    /**
928     * set offset with the specified value
929     * @param op builder for the value to be set
930     * @return ByProjectKeyProductProjectionsSearchGet
931     */
932    public ByProjectKeyProductProjectionsSearchGet withOffset(final Function<StringBuilder, StringBuilder> op) {
933        return copy().withQueryParam("offset", op.apply(new StringBuilder()));
934    }
935
936    /**
937     * add additional offset query parameter
938     * @param op builder for the value to be added
939     * @return ByProjectKeyProductProjectionsSearchGet
940     */
941    public ByProjectKeyProductProjectionsSearchGet addOffset(final Function<StringBuilder, StringBuilder> op) {
942        return copy().addQueryParam("offset", op.apply(new StringBuilder()));
943    }
944
945    /**
946     * set offset with the specified values
947     * @param offset values to be set
948     * @param <TValue> value type
949     * @return ByProjectKeyProductProjectionsSearchGet
950     */
951    public <TValue> ByProjectKeyProductProjectionsSearchGet withOffset(final Collection<TValue> offset) {
952        return copy().withoutQueryParam("offset")
953                .addQueryParams(
954                    offset.stream().map(s -> new ParamEntry<>("offset", s.toString())).collect(Collectors.toList()));
955    }
956
957    /**
958     * add additional offset query parameters
959     * @param offset values to be added
960     * @param <TValue> value type
961     * @return ByProjectKeyProductProjectionsSearchGet
962     */
963    public <TValue> ByProjectKeyProductProjectionsSearchGet addOffset(final Collection<TValue> offset) {
964        return copy().addQueryParams(
965            offset.stream().map(s -> new ParamEntry<>("offset", s.toString())).collect(Collectors.toList()));
966    }
967
968    /**
969     * set withTotal with the specified value
970     * @param withTotal value to be set
971     * @param <TValue> value type
972     * @return ByProjectKeyProductProjectionsSearchGet
973     */
974    public <TValue> ByProjectKeyProductProjectionsSearchGet withWithTotal(final TValue withTotal) {
975        return copy().withQueryParam("withTotal", withTotal);
976    }
977
978    /**
979     * add additional withTotal query parameter
980     * @param withTotal value to be added
981     * @param <TValue> value type
982     * @return ByProjectKeyProductProjectionsSearchGet
983     */
984    public <TValue> ByProjectKeyProductProjectionsSearchGet addWithTotal(final TValue withTotal) {
985        return copy().addQueryParam("withTotal", withTotal);
986    }
987
988    /**
989     * set withTotal with the specified value
990     * @param supplier supplier for the value to be set
991     * @return ByProjectKeyProductProjectionsSearchGet
992     */
993    public ByProjectKeyProductProjectionsSearchGet withWithTotal(final Supplier<Boolean> supplier) {
994        return copy().withQueryParam("withTotal", supplier.get());
995    }
996
997    /**
998     * add additional withTotal query parameter
999     * @param supplier supplier for the value to be added
1000     * @return ByProjectKeyProductProjectionsSearchGet
1001     */
1002    public ByProjectKeyProductProjectionsSearchGet addWithTotal(final Supplier<Boolean> supplier) {
1003        return copy().addQueryParam("withTotal", supplier.get());
1004    }
1005
1006    /**
1007     * set withTotal with the specified value
1008     * @param op builder for the value to be set
1009     * @return ByProjectKeyProductProjectionsSearchGet
1010     */
1011    public ByProjectKeyProductProjectionsSearchGet withWithTotal(final Function<StringBuilder, StringBuilder> op) {
1012        return copy().withQueryParam("withTotal", op.apply(new StringBuilder()));
1013    }
1014
1015    /**
1016     * add additional withTotal query parameter
1017     * @param op builder for the value to be added
1018     * @return ByProjectKeyProductProjectionsSearchGet
1019     */
1020    public ByProjectKeyProductProjectionsSearchGet addWithTotal(final Function<StringBuilder, StringBuilder> op) {
1021        return copy().addQueryParam("withTotal", op.apply(new StringBuilder()));
1022    }
1023
1024    /**
1025     * set withTotal with the specified values
1026     * @param withTotal values to be set
1027     * @param <TValue> value type
1028     * @return ByProjectKeyProductProjectionsSearchGet
1029     */
1030    public <TValue> ByProjectKeyProductProjectionsSearchGet withWithTotal(final Collection<TValue> withTotal) {
1031        return copy().withoutQueryParam("withTotal")
1032                .addQueryParams(withTotal.stream()
1033                        .map(s -> new ParamEntry<>("withTotal", s.toString()))
1034                        .collect(Collectors.toList()));
1035    }
1036
1037    /**
1038     * add additional withTotal query parameters
1039     * @param withTotal values to be added
1040     * @param <TValue> value type
1041     * @return ByProjectKeyProductProjectionsSearchGet
1042     */
1043    public <TValue> ByProjectKeyProductProjectionsSearchGet addWithTotal(final Collection<TValue> withTotal) {
1044        return copy().addQueryParams(
1045            withTotal.stream().map(s -> new ParamEntry<>("withTotal", s.toString())).collect(Collectors.toList()));
1046    }
1047
1048    /**
1049     * set staged with the specified value
1050     * @param staged value to be set
1051     * @param <TValue> value type
1052     * @return ByProjectKeyProductProjectionsSearchGet
1053     */
1054    public <TValue> ByProjectKeyProductProjectionsSearchGet withStaged(final TValue staged) {
1055        return copy().withQueryParam("staged", staged);
1056    }
1057
1058    /**
1059     * add additional staged query parameter
1060     * @param staged value to be added
1061     * @param <TValue> value type
1062     * @return ByProjectKeyProductProjectionsSearchGet
1063     */
1064    public <TValue> ByProjectKeyProductProjectionsSearchGet addStaged(final TValue staged) {
1065        return copy().addQueryParam("staged", staged);
1066    }
1067
1068    /**
1069     * set staged with the specified value
1070     * @param supplier supplier for the value to be set
1071     * @return ByProjectKeyProductProjectionsSearchGet
1072     */
1073    public ByProjectKeyProductProjectionsSearchGet withStaged(final Supplier<Boolean> supplier) {
1074        return copy().withQueryParam("staged", supplier.get());
1075    }
1076
1077    /**
1078     * add additional staged query parameter
1079     * @param supplier supplier for the value to be added
1080     * @return ByProjectKeyProductProjectionsSearchGet
1081     */
1082    public ByProjectKeyProductProjectionsSearchGet addStaged(final Supplier<Boolean> supplier) {
1083        return copy().addQueryParam("staged", supplier.get());
1084    }
1085
1086    /**
1087     * set staged with the specified value
1088     * @param op builder for the value to be set
1089     * @return ByProjectKeyProductProjectionsSearchGet
1090     */
1091    public ByProjectKeyProductProjectionsSearchGet withStaged(final Function<StringBuilder, StringBuilder> op) {
1092        return copy().withQueryParam("staged", op.apply(new StringBuilder()));
1093    }
1094
1095    /**
1096     * add additional staged query parameter
1097     * @param op builder for the value to be added
1098     * @return ByProjectKeyProductProjectionsSearchGet
1099     */
1100    public ByProjectKeyProductProjectionsSearchGet addStaged(final Function<StringBuilder, StringBuilder> op) {
1101        return copy().addQueryParam("staged", op.apply(new StringBuilder()));
1102    }
1103
1104    /**
1105     * set staged with the specified values
1106     * @param staged values to be set
1107     * @param <TValue> value type
1108     * @return ByProjectKeyProductProjectionsSearchGet
1109     */
1110    public <TValue> ByProjectKeyProductProjectionsSearchGet withStaged(final Collection<TValue> staged) {
1111        return copy().withoutQueryParam("staged")
1112                .addQueryParams(
1113                    staged.stream().map(s -> new ParamEntry<>("staged", s.toString())).collect(Collectors.toList()));
1114    }
1115
1116    /**
1117     * add additional staged query parameters
1118     * @param staged values to be added
1119     * @param <TValue> value type
1120     * @return ByProjectKeyProductProjectionsSearchGet
1121     */
1122    public <TValue> ByProjectKeyProductProjectionsSearchGet addStaged(final Collection<TValue> staged) {
1123        return copy().addQueryParams(
1124            staged.stream().map(s -> new ParamEntry<>("staged", s.toString())).collect(Collectors.toList()));
1125    }
1126
1127    /**
1128     * set priceCurrency with the specified value
1129     * @param priceCurrency value to be set
1130     * @param <TValue> value type
1131     * @return ByProjectKeyProductProjectionsSearchGet
1132     */
1133    public <TValue> ByProjectKeyProductProjectionsSearchGet withPriceCurrency(final TValue priceCurrency) {
1134        return copy().withQueryParam("priceCurrency", priceCurrency);
1135    }
1136
1137    /**
1138     * add additional priceCurrency query parameter
1139     * @param priceCurrency value to be added
1140     * @param <TValue> value type
1141     * @return ByProjectKeyProductProjectionsSearchGet
1142     */
1143    public <TValue> ByProjectKeyProductProjectionsSearchGet addPriceCurrency(final TValue priceCurrency) {
1144        return copy().addQueryParam("priceCurrency", priceCurrency);
1145    }
1146
1147    /**
1148     * set priceCurrency with the specified value
1149     * @param supplier supplier for the value to be set
1150     * @return ByProjectKeyProductProjectionsSearchGet
1151     */
1152    public ByProjectKeyProductProjectionsSearchGet withPriceCurrency(final Supplier<String> supplier) {
1153        return copy().withQueryParam("priceCurrency", supplier.get());
1154    }
1155
1156    /**
1157     * add additional priceCurrency query parameter
1158     * @param supplier supplier for the value to be added
1159     * @return ByProjectKeyProductProjectionsSearchGet
1160     */
1161    public ByProjectKeyProductProjectionsSearchGet addPriceCurrency(final Supplier<String> supplier) {
1162        return copy().addQueryParam("priceCurrency", supplier.get());
1163    }
1164
1165    /**
1166     * set priceCurrency with the specified value
1167     * @param op builder for the value to be set
1168     * @return ByProjectKeyProductProjectionsSearchGet
1169     */
1170    public ByProjectKeyProductProjectionsSearchGet withPriceCurrency(final Function<StringBuilder, StringBuilder> op) {
1171        return copy().withQueryParam("priceCurrency", op.apply(new StringBuilder()));
1172    }
1173
1174    /**
1175     * add additional priceCurrency query parameter
1176     * @param op builder for the value to be added
1177     * @return ByProjectKeyProductProjectionsSearchGet
1178     */
1179    public ByProjectKeyProductProjectionsSearchGet addPriceCurrency(final Function<StringBuilder, StringBuilder> op) {
1180        return copy().addQueryParam("priceCurrency", op.apply(new StringBuilder()));
1181    }
1182
1183    /**
1184     * set priceCurrency with the specified values
1185     * @param priceCurrency values to be set
1186     * @param <TValue> value type
1187     * @return ByProjectKeyProductProjectionsSearchGet
1188     */
1189    public <TValue> ByProjectKeyProductProjectionsSearchGet withPriceCurrency(final Collection<TValue> priceCurrency) {
1190        return copy().withoutQueryParam("priceCurrency")
1191                .addQueryParams(priceCurrency.stream()
1192                        .map(s -> new ParamEntry<>("priceCurrency", s.toString()))
1193                        .collect(Collectors.toList()));
1194    }
1195
1196    /**
1197     * add additional priceCurrency query parameters
1198     * @param priceCurrency values to be added
1199     * @param <TValue> value type
1200     * @return ByProjectKeyProductProjectionsSearchGet
1201     */
1202    public <TValue> ByProjectKeyProductProjectionsSearchGet addPriceCurrency(final Collection<TValue> priceCurrency) {
1203        return copy().addQueryParams(priceCurrency.stream()
1204                .map(s -> new ParamEntry<>("priceCurrency", s.toString()))
1205                .collect(Collectors.toList()));
1206    }
1207
1208    /**
1209     * set priceCountry with the specified value
1210     * @param priceCountry value to be set
1211     * @param <TValue> value type
1212     * @return ByProjectKeyProductProjectionsSearchGet
1213     */
1214    public <TValue> ByProjectKeyProductProjectionsSearchGet withPriceCountry(final TValue priceCountry) {
1215        return copy().withQueryParam("priceCountry", priceCountry);
1216    }
1217
1218    /**
1219     * add additional priceCountry query parameter
1220     * @param priceCountry value to be added
1221     * @param <TValue> value type
1222     * @return ByProjectKeyProductProjectionsSearchGet
1223     */
1224    public <TValue> ByProjectKeyProductProjectionsSearchGet addPriceCountry(final TValue priceCountry) {
1225        return copy().addQueryParam("priceCountry", priceCountry);
1226    }
1227
1228    /**
1229     * set priceCountry with the specified value
1230     * @param supplier supplier for the value to be set
1231     * @return ByProjectKeyProductProjectionsSearchGet
1232     */
1233    public ByProjectKeyProductProjectionsSearchGet withPriceCountry(final Supplier<String> supplier) {
1234        return copy().withQueryParam("priceCountry", supplier.get());
1235    }
1236
1237    /**
1238     * add additional priceCountry query parameter
1239     * @param supplier supplier for the value to be added
1240     * @return ByProjectKeyProductProjectionsSearchGet
1241     */
1242    public ByProjectKeyProductProjectionsSearchGet addPriceCountry(final Supplier<String> supplier) {
1243        return copy().addQueryParam("priceCountry", supplier.get());
1244    }
1245
1246    /**
1247     * set priceCountry with the specified value
1248     * @param op builder for the value to be set
1249     * @return ByProjectKeyProductProjectionsSearchGet
1250     */
1251    public ByProjectKeyProductProjectionsSearchGet withPriceCountry(final Function<StringBuilder, StringBuilder> op) {
1252        return copy().withQueryParam("priceCountry", op.apply(new StringBuilder()));
1253    }
1254
1255    /**
1256     * add additional priceCountry query parameter
1257     * @param op builder for the value to be added
1258     * @return ByProjectKeyProductProjectionsSearchGet
1259     */
1260    public ByProjectKeyProductProjectionsSearchGet addPriceCountry(final Function<StringBuilder, StringBuilder> op) {
1261        return copy().addQueryParam("priceCountry", op.apply(new StringBuilder()));
1262    }
1263
1264    /**
1265     * set priceCountry with the specified values
1266     * @param priceCountry values to be set
1267     * @param <TValue> value type
1268     * @return ByProjectKeyProductProjectionsSearchGet
1269     */
1270    public <TValue> ByProjectKeyProductProjectionsSearchGet withPriceCountry(final Collection<TValue> priceCountry) {
1271        return copy().withoutQueryParam("priceCountry")
1272                .addQueryParams(priceCountry.stream()
1273                        .map(s -> new ParamEntry<>("priceCountry", s.toString()))
1274                        .collect(Collectors.toList()));
1275    }
1276
1277    /**
1278     * add additional priceCountry query parameters
1279     * @param priceCountry values to be added
1280     * @param <TValue> value type
1281     * @return ByProjectKeyProductProjectionsSearchGet
1282     */
1283    public <TValue> ByProjectKeyProductProjectionsSearchGet addPriceCountry(final Collection<TValue> priceCountry) {
1284        return copy().addQueryParams(priceCountry.stream()
1285                .map(s -> new ParamEntry<>("priceCountry", s.toString()))
1286                .collect(Collectors.toList()));
1287    }
1288
1289    /**
1290     * set priceCustomerGroup with the specified value
1291     * @param priceCustomerGroup value to be set
1292     * @param <TValue> value type
1293     * @return ByProjectKeyProductProjectionsSearchGet
1294     */
1295    public <TValue> ByProjectKeyProductProjectionsSearchGet withPriceCustomerGroup(final TValue priceCustomerGroup) {
1296        return copy().withQueryParam("priceCustomerGroup", priceCustomerGroup);
1297    }
1298
1299    /**
1300     * add additional priceCustomerGroup query parameter
1301     * @param priceCustomerGroup value to be added
1302     * @param <TValue> value type
1303     * @return ByProjectKeyProductProjectionsSearchGet
1304     */
1305    public <TValue> ByProjectKeyProductProjectionsSearchGet addPriceCustomerGroup(final TValue priceCustomerGroup) {
1306        return copy().addQueryParam("priceCustomerGroup", priceCustomerGroup);
1307    }
1308
1309    /**
1310     * set priceCustomerGroup with the specified value
1311     * @param supplier supplier for the value to be set
1312     * @return ByProjectKeyProductProjectionsSearchGet
1313     */
1314    public ByProjectKeyProductProjectionsSearchGet withPriceCustomerGroup(final Supplier<String> supplier) {
1315        return copy().withQueryParam("priceCustomerGroup", supplier.get());
1316    }
1317
1318    /**
1319     * add additional priceCustomerGroup query parameter
1320     * @param supplier supplier for the value to be added
1321     * @return ByProjectKeyProductProjectionsSearchGet
1322     */
1323    public ByProjectKeyProductProjectionsSearchGet addPriceCustomerGroup(final Supplier<String> supplier) {
1324        return copy().addQueryParam("priceCustomerGroup", supplier.get());
1325    }
1326
1327    /**
1328     * set priceCustomerGroup with the specified value
1329     * @param op builder for the value to be set
1330     * @return ByProjectKeyProductProjectionsSearchGet
1331     */
1332    public ByProjectKeyProductProjectionsSearchGet withPriceCustomerGroup(
1333            final Function<StringBuilder, StringBuilder> op) {
1334        return copy().withQueryParam("priceCustomerGroup", op.apply(new StringBuilder()));
1335    }
1336
1337    /**
1338     * add additional priceCustomerGroup query parameter
1339     * @param op builder for the value to be added
1340     * @return ByProjectKeyProductProjectionsSearchGet
1341     */
1342    public ByProjectKeyProductProjectionsSearchGet addPriceCustomerGroup(
1343            final Function<StringBuilder, StringBuilder> op) {
1344        return copy().addQueryParam("priceCustomerGroup", op.apply(new StringBuilder()));
1345    }
1346
1347    /**
1348     * set priceCustomerGroup with the specified values
1349     * @param priceCustomerGroup values to be set
1350     * @param <TValue> value type
1351     * @return ByProjectKeyProductProjectionsSearchGet
1352     */
1353    public <TValue> ByProjectKeyProductProjectionsSearchGet withPriceCustomerGroup(
1354            final Collection<TValue> priceCustomerGroup) {
1355        return copy().withoutQueryParam("priceCustomerGroup")
1356                .addQueryParams(priceCustomerGroup.stream()
1357                        .map(s -> new ParamEntry<>("priceCustomerGroup", s.toString()))
1358                        .collect(Collectors.toList()));
1359    }
1360
1361    /**
1362     * add additional priceCustomerGroup query parameters
1363     * @param priceCustomerGroup values to be added
1364     * @param <TValue> value type
1365     * @return ByProjectKeyProductProjectionsSearchGet
1366     */
1367    public <TValue> ByProjectKeyProductProjectionsSearchGet addPriceCustomerGroup(
1368            final Collection<TValue> priceCustomerGroup) {
1369        return copy().addQueryParams(priceCustomerGroup.stream()
1370                .map(s -> new ParamEntry<>("priceCustomerGroup", s.toString()))
1371                .collect(Collectors.toList()));
1372    }
1373
1374    /**
1375     * set priceChannel with the specified value
1376     * @param priceChannel value to be set
1377     * @param <TValue> value type
1378     * @return ByProjectKeyProductProjectionsSearchGet
1379     */
1380    public <TValue> ByProjectKeyProductProjectionsSearchGet withPriceChannel(final TValue priceChannel) {
1381        return copy().withQueryParam("priceChannel", priceChannel);
1382    }
1383
1384    /**
1385     * add additional priceChannel query parameter
1386     * @param priceChannel value to be added
1387     * @param <TValue> value type
1388     * @return ByProjectKeyProductProjectionsSearchGet
1389     */
1390    public <TValue> ByProjectKeyProductProjectionsSearchGet addPriceChannel(final TValue priceChannel) {
1391        return copy().addQueryParam("priceChannel", priceChannel);
1392    }
1393
1394    /**
1395     * set priceChannel with the specified value
1396     * @param supplier supplier for the value to be set
1397     * @return ByProjectKeyProductProjectionsSearchGet
1398     */
1399    public ByProjectKeyProductProjectionsSearchGet withPriceChannel(final Supplier<String> supplier) {
1400        return copy().withQueryParam("priceChannel", supplier.get());
1401    }
1402
1403    /**
1404     * add additional priceChannel query parameter
1405     * @param supplier supplier for the value to be added
1406     * @return ByProjectKeyProductProjectionsSearchGet
1407     */
1408    public ByProjectKeyProductProjectionsSearchGet addPriceChannel(final Supplier<String> supplier) {
1409        return copy().addQueryParam("priceChannel", supplier.get());
1410    }
1411
1412    /**
1413     * set priceChannel with the specified value
1414     * @param op builder for the value to be set
1415     * @return ByProjectKeyProductProjectionsSearchGet
1416     */
1417    public ByProjectKeyProductProjectionsSearchGet withPriceChannel(final Function<StringBuilder, StringBuilder> op) {
1418        return copy().withQueryParam("priceChannel", op.apply(new StringBuilder()));
1419    }
1420
1421    /**
1422     * add additional priceChannel query parameter
1423     * @param op builder for the value to be added
1424     * @return ByProjectKeyProductProjectionsSearchGet
1425     */
1426    public ByProjectKeyProductProjectionsSearchGet addPriceChannel(final Function<StringBuilder, StringBuilder> op) {
1427        return copy().addQueryParam("priceChannel", op.apply(new StringBuilder()));
1428    }
1429
1430    /**
1431     * set priceChannel with the specified values
1432     * @param priceChannel values to be set
1433     * @param <TValue> value type
1434     * @return ByProjectKeyProductProjectionsSearchGet
1435     */
1436    public <TValue> ByProjectKeyProductProjectionsSearchGet withPriceChannel(final Collection<TValue> priceChannel) {
1437        return copy().withoutQueryParam("priceChannel")
1438                .addQueryParams(priceChannel.stream()
1439                        .map(s -> new ParamEntry<>("priceChannel", s.toString()))
1440                        .collect(Collectors.toList()));
1441    }
1442
1443    /**
1444     * add additional priceChannel query parameters
1445     * @param priceChannel values to be added
1446     * @param <TValue> value type
1447     * @return ByProjectKeyProductProjectionsSearchGet
1448     */
1449    public <TValue> ByProjectKeyProductProjectionsSearchGet addPriceChannel(final Collection<TValue> priceChannel) {
1450        return copy().addQueryParams(priceChannel.stream()
1451                .map(s -> new ParamEntry<>("priceChannel", s.toString()))
1452                .collect(Collectors.toList()));
1453    }
1454
1455    /**
1456     * set localeProjection with the specified value
1457     * @param localeProjection value to be set
1458     * @param <TValue> value type
1459     * @return ByProjectKeyProductProjectionsSearchGet
1460     */
1461    public <TValue> ByProjectKeyProductProjectionsSearchGet withLocaleProjection(final TValue localeProjection) {
1462        return copy().withQueryParam("localeProjection", localeProjection);
1463    }
1464
1465    /**
1466     * add additional localeProjection query parameter
1467     * @param localeProjection value to be added
1468     * @param <TValue> value type
1469     * @return ByProjectKeyProductProjectionsSearchGet
1470     */
1471    public <TValue> ByProjectKeyProductProjectionsSearchGet addLocaleProjection(final TValue localeProjection) {
1472        return copy().addQueryParam("localeProjection", localeProjection);
1473    }
1474
1475    /**
1476     * set localeProjection with the specified value
1477     * @param supplier supplier for the value to be set
1478     * @return ByProjectKeyProductProjectionsSearchGet
1479     */
1480    public ByProjectKeyProductProjectionsSearchGet withLocaleProjection(final Supplier<String> supplier) {
1481        return copy().withQueryParam("localeProjection", supplier.get());
1482    }
1483
1484    /**
1485     * add additional localeProjection query parameter
1486     * @param supplier supplier for the value to be added
1487     * @return ByProjectKeyProductProjectionsSearchGet
1488     */
1489    public ByProjectKeyProductProjectionsSearchGet addLocaleProjection(final Supplier<String> supplier) {
1490        return copy().addQueryParam("localeProjection", supplier.get());
1491    }
1492
1493    /**
1494     * set localeProjection with the specified value
1495     * @param op builder for the value to be set
1496     * @return ByProjectKeyProductProjectionsSearchGet
1497     */
1498    public ByProjectKeyProductProjectionsSearchGet withLocaleProjection(
1499            final Function<StringBuilder, StringBuilder> op) {
1500        return copy().withQueryParam("localeProjection", op.apply(new StringBuilder()));
1501    }
1502
1503    /**
1504     * add additional localeProjection query parameter
1505     * @param op builder for the value to be added
1506     * @return ByProjectKeyProductProjectionsSearchGet
1507     */
1508    public ByProjectKeyProductProjectionsSearchGet addLocaleProjection(
1509            final Function<StringBuilder, StringBuilder> op) {
1510        return copy().addQueryParam("localeProjection", op.apply(new StringBuilder()));
1511    }
1512
1513    /**
1514     * set localeProjection with the specified values
1515     * @param localeProjection values to be set
1516     * @param <TValue> value type
1517     * @return ByProjectKeyProductProjectionsSearchGet
1518     */
1519    public <TValue> ByProjectKeyProductProjectionsSearchGet withLocaleProjection(
1520            final Collection<TValue> localeProjection) {
1521        return copy().withoutQueryParam("localeProjection")
1522                .addQueryParams(localeProjection.stream()
1523                        .map(s -> new ParamEntry<>("localeProjection", s.toString()))
1524                        .collect(Collectors.toList()));
1525    }
1526
1527    /**
1528     * add additional localeProjection query parameters
1529     * @param localeProjection values to be added
1530     * @param <TValue> value type
1531     * @return ByProjectKeyProductProjectionsSearchGet
1532     */
1533    public <TValue> ByProjectKeyProductProjectionsSearchGet addLocaleProjection(
1534            final Collection<TValue> localeProjection) {
1535        return copy().addQueryParams(localeProjection.stream()
1536                .map(s -> new ParamEntry<>("localeProjection", s.toString()))
1537                .collect(Collectors.toList()));
1538    }
1539
1540    /**
1541     * set storeProjection with the specified value
1542     * @param storeProjection value to be set
1543     * @param <TValue> value type
1544     * @return ByProjectKeyProductProjectionsSearchGet
1545     */
1546    public <TValue> ByProjectKeyProductProjectionsSearchGet withStoreProjection(final TValue storeProjection) {
1547        return copy().withQueryParam("storeProjection", storeProjection);
1548    }
1549
1550    /**
1551     * add additional storeProjection query parameter
1552     * @param storeProjection value to be added
1553     * @param <TValue> value type
1554     * @return ByProjectKeyProductProjectionsSearchGet
1555     */
1556    public <TValue> ByProjectKeyProductProjectionsSearchGet addStoreProjection(final TValue storeProjection) {
1557        return copy().addQueryParam("storeProjection", storeProjection);
1558    }
1559
1560    /**
1561     * set storeProjection with the specified value
1562     * @param supplier supplier for the value to be set
1563     * @return ByProjectKeyProductProjectionsSearchGet
1564     */
1565    public ByProjectKeyProductProjectionsSearchGet withStoreProjection(final Supplier<String> supplier) {
1566        return copy().withQueryParam("storeProjection", supplier.get());
1567    }
1568
1569    /**
1570     * add additional storeProjection query parameter
1571     * @param supplier supplier for the value to be added
1572     * @return ByProjectKeyProductProjectionsSearchGet
1573     */
1574    public ByProjectKeyProductProjectionsSearchGet addStoreProjection(final Supplier<String> supplier) {
1575        return copy().addQueryParam("storeProjection", supplier.get());
1576    }
1577
1578    /**
1579     * set storeProjection with the specified value
1580     * @param op builder for the value to be set
1581     * @return ByProjectKeyProductProjectionsSearchGet
1582     */
1583    public ByProjectKeyProductProjectionsSearchGet withStoreProjection(
1584            final Function<StringBuilder, StringBuilder> op) {
1585        return copy().withQueryParam("storeProjection", op.apply(new StringBuilder()));
1586    }
1587
1588    /**
1589     * add additional storeProjection query parameter
1590     * @param op builder for the value to be added
1591     * @return ByProjectKeyProductProjectionsSearchGet
1592     */
1593    public ByProjectKeyProductProjectionsSearchGet addStoreProjection(final Function<StringBuilder, StringBuilder> op) {
1594        return copy().addQueryParam("storeProjection", op.apply(new StringBuilder()));
1595    }
1596
1597    /**
1598     * set storeProjection with the specified values
1599     * @param storeProjection values to be set
1600     * @param <TValue> value type
1601     * @return ByProjectKeyProductProjectionsSearchGet
1602     */
1603    public <TValue> ByProjectKeyProductProjectionsSearchGet withStoreProjection(
1604            final Collection<TValue> storeProjection) {
1605        return copy().withoutQueryParam("storeProjection")
1606                .addQueryParams(storeProjection.stream()
1607                        .map(s -> new ParamEntry<>("storeProjection", s.toString()))
1608                        .collect(Collectors.toList()));
1609    }
1610
1611    /**
1612     * add additional storeProjection query parameters
1613     * @param storeProjection values to be added
1614     * @param <TValue> value type
1615     * @return ByProjectKeyProductProjectionsSearchGet
1616     */
1617    public <TValue> ByProjectKeyProductProjectionsSearchGet addStoreProjection(
1618            final Collection<TValue> storeProjection) {
1619        return copy().addQueryParams(storeProjection.stream()
1620                .map(s -> new ParamEntry<>("storeProjection", s.toString()))
1621                .collect(Collectors.toList()));
1622    }
1623
1624    /**
1625     * set expand with the specified value
1626     * @param expand value to be set
1627     * @param <TValue> value type
1628     * @return ByProjectKeyProductProjectionsSearchGet
1629     */
1630    public <TValue> ByProjectKeyProductProjectionsSearchGet withExpand(final TValue expand) {
1631        return copy().withQueryParam("expand", expand);
1632    }
1633
1634    /**
1635     * add additional expand query parameter
1636     * @param expand value to be added
1637     * @param <TValue> value type
1638     * @return ByProjectKeyProductProjectionsSearchGet
1639     */
1640    public <TValue> ByProjectKeyProductProjectionsSearchGet addExpand(final TValue expand) {
1641        return copy().addQueryParam("expand", expand);
1642    }
1643
1644    /**
1645     * set expand with the specified value
1646     * @param supplier supplier for the value to be set
1647     * @return ByProjectKeyProductProjectionsSearchGet
1648     */
1649    public ByProjectKeyProductProjectionsSearchGet withExpand(final Supplier<String> supplier) {
1650        return copy().withQueryParam("expand", supplier.get());
1651    }
1652
1653    /**
1654     * add additional expand query parameter
1655     * @param supplier supplier for the value to be added
1656     * @return ByProjectKeyProductProjectionsSearchGet
1657     */
1658    public ByProjectKeyProductProjectionsSearchGet addExpand(final Supplier<String> supplier) {
1659        return copy().addQueryParam("expand", supplier.get());
1660    }
1661
1662    /**
1663     * set expand with the specified value
1664     * @param op builder for the value to be set
1665     * @return ByProjectKeyProductProjectionsSearchGet
1666     */
1667    public ByProjectKeyProductProjectionsSearchGet withExpand(final Function<StringBuilder, StringBuilder> op) {
1668        return copy().withQueryParam("expand", op.apply(new StringBuilder()));
1669    }
1670
1671    /**
1672     * add additional expand query parameter
1673     * @param op builder for the value to be added
1674     * @return ByProjectKeyProductProjectionsSearchGet
1675     */
1676    public ByProjectKeyProductProjectionsSearchGet addExpand(final Function<StringBuilder, StringBuilder> op) {
1677        return copy().addQueryParam("expand", op.apply(new StringBuilder()));
1678    }
1679
1680    /**
1681     * set expand with the specified values
1682     * @param expand values to be set
1683     * @param <TValue> value type
1684     * @return ByProjectKeyProductProjectionsSearchGet
1685     */
1686    public <TValue> ByProjectKeyProductProjectionsSearchGet withExpand(final Collection<TValue> expand) {
1687        return copy().withoutQueryParam("expand")
1688                .addQueryParams(
1689                    expand.stream().map(s -> new ParamEntry<>("expand", s.toString())).collect(Collectors.toList()));
1690    }
1691
1692    /**
1693     * add additional expand query parameters
1694     * @param expand values to be added
1695     * @param <TValue> value type
1696     * @return ByProjectKeyProductProjectionsSearchGet
1697     */
1698    public <TValue> ByProjectKeyProductProjectionsSearchGet addExpand(final Collection<TValue> expand) {
1699        return copy().addQueryParams(
1700            expand.stream().map(s -> new ParamEntry<>("expand", s.toString())).collect(Collectors.toList()));
1701    }
1702
1703    /**
1704     * set text with the specificied value
1705     * @param <TValue> value type
1706     * @param locale parameter name
1707     * @param text parameter value
1708     * @return ByProjectKeyProductProjectionsSearchGet
1709     */
1710    public <TValue> ByProjectKeyProductProjectionsSearchGet withText(final String locale, final TValue text) {
1711        return copy().withQueryParam(String.format("text.%s", locale), text);
1712    }
1713
1714    /**
1715     * add additional text query parameter
1716     * @param <TValue> value type
1717     * @param locale parameter name
1718     * @param text parameter value
1719     * @return ByProjectKeyProductProjectionsSearchGet
1720     */
1721    public <TValue> ByProjectKeyProductProjectionsSearchGet addText(final String locale, final TValue text) {
1722        return copy().addQueryParam(String.format("text.%s", locale), text);
1723    }
1724
1725    /**
1726     * set text with the specificied values
1727     * @param <TValue> value type
1728     * @param locale parameter name
1729     * @param text parameter values
1730     * @return ByProjectKeyProductProjectionsSearchGet
1731     */
1732    public <TValue> ByProjectKeyProductProjectionsSearchGet withText(final String locale,
1733            final Collection<TValue> text) {
1734        final String placeholderName = String.format("var.%s", locale);
1735        return copy().withoutQueryParam(placeholderName)
1736                .addQueryParams(text.stream()
1737                        .map(s -> new ParamEntry<>(placeholderName, s.toString()))
1738                        .collect(Collectors.toList()));
1739    }
1740
1741    /**
1742     * add additional text query parameters
1743     * @param <TValue> value type
1744     * @param locale parameter name
1745     * @param text parameter values
1746     * @return ByProjectKeyProductProjectionsSearchGet
1747     */
1748    public <TValue> ByProjectKeyProductProjectionsSearchGet addText(final String locale,
1749            final Collection<TValue> text) {
1750        final String placeholderName = String.format("var.%s", locale);
1751        return copy().addQueryParams(
1752            text.stream().map(s -> new ParamEntry<>(placeholderName, s.toString())).collect(Collectors.toList()));
1753    }
1754
1755    @Override
1756    public boolean equals(Object o) {
1757        if (this == o)
1758            return true;
1759
1760        if (o == null || getClass() != o.getClass())
1761            return false;
1762
1763        ByProjectKeyProductProjectionsSearchGet that = (ByProjectKeyProductProjectionsSearchGet) o;
1764
1765        return new EqualsBuilder().append(projectKey, that.projectKey).isEquals();
1766    }
1767
1768    @Override
1769    public int hashCode() {
1770        return new HashCodeBuilder(17, 37).append(projectKey).toHashCode();
1771    }
1772
1773    @Override
1774    protected ByProjectKeyProductProjectionsSearchGet copy() {
1775        return new ByProjectKeyProductProjectionsSearchGet(this);
1776    }
1777}