001
002package com.commercetools.history.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 com.commercetools.history.models.change_history.ChangeHistoryResourceType;
015import com.commercetools.history.models.change_history.PlatformInitiatedChange;
016
017import io.vrap.rmf.base.client.*;
018import io.vrap.rmf.base.client.utils.Generated;
019
020import org.apache.commons.lang3.builder.EqualsBuilder;
021import org.apache.commons.lang3.builder.HashCodeBuilder;
022
023/**
024 *  <p>The <code>view_audit_log:{projectKey}</code> scope is required, and depending on the resource type queried, their respective scopes must be granted.</p>
025 *
026 * <hr>
027 * <div class=code-example>
028 * <pre><code class='java'>{@code
029 *   CompletableFuture<ApiHttpResponse<com.commercetools.history.models.change_history.RecordPagedQueryResponse>> result = apiRoot
030 *            .withProjectKeyValue("{projectKey}")
031 *            .get()
032 *            .execute()
033 * }</code></pre>
034 * </div>
035 */
036@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
037public class ByProjectKeyGet
038        extends ApiMethod<ByProjectKeyGet, com.commercetools.history.models.change_history.RecordPagedQueryResponse> {
039
040    private String projectKey;
041
042    public ByProjectKeyGet(final ApiHttpClient apiHttpClient, String projectKey) {
043        super(apiHttpClient);
044        this.projectKey = projectKey;
045    }
046
047    public ByProjectKeyGet(ByProjectKeyGet t) {
048        super(t);
049        this.projectKey = t.projectKey;
050    }
051
052    @Override
053    protected ApiHttpRequest buildHttpRequest() {
054        List<String> params = new ArrayList<>(getQueryParamUriStrings());
055        String httpRequestPath = String.format("%s", this.projectKey);
056        if (!params.isEmpty()) {
057            httpRequestPath += "?" + String.join("&", params);
058        }
059        return new ApiHttpRequest(ApiHttpMethod.GET, URI.create(httpRequestPath), getHeaders(), null);
060    }
061
062    @Override
063    public ApiHttpResponse<com.commercetools.history.models.change_history.RecordPagedQueryResponse> executeBlocking(
064            final ApiHttpClient client, final Duration timeout) {
065        return executeBlocking(client, timeout,
066            com.commercetools.history.models.change_history.RecordPagedQueryResponse.class);
067    }
068
069    @Override
070    public CompletableFuture<ApiHttpResponse<com.commercetools.history.models.change_history.RecordPagedQueryResponse>> execute(
071            final ApiHttpClient client) {
072        return execute(client, com.commercetools.history.models.change_history.RecordPagedQueryResponse.class);
073    }
074
075    public String getProjectKey() {
076        return this.projectKey;
077    }
078
079    public List<String> getResourceTypes() {
080        return this.getQueryParam("resourceTypes");
081    }
082
083    public List<String> getDateFrom() {
084        return this.getQueryParam("date.from");
085    }
086
087    public List<String> getDateTo() {
088        return this.getQueryParam("date.to");
089    }
090
091    public List<String> getLimit() {
092        return this.getQueryParam("limit");
093    }
094
095    public List<String> getOffset() {
096        return this.getQueryParam("offset");
097    }
098
099    public List<String> getUserId() {
100        return this.getQueryParam("userId");
101    }
102
103    public List<String> getType() {
104        return this.getQueryParam("type");
105    }
106
107    public List<String> getClientId() {
108        return this.getQueryParam("clientId");
109    }
110
111    public List<String> getResourceId() {
112        return this.getQueryParam("resourceId");
113    }
114
115    public List<String> getResourceKey() {
116        return this.getQueryParam("resourceKey");
117    }
118
119    public List<String> getSource() {
120        return this.getQueryParam("source");
121    }
122
123    public List<String> getChanges() {
124        return this.getQueryParam("changes");
125    }
126
127    public List<String> getStores() {
128        return this.getQueryParam("stores");
129    }
130
131    public List<String> getCustomerId() {
132        return this.getQueryParam("customerId");
133    }
134
135    public List<String> getExcludePlatformInitiatedChanges() {
136        return this.getQueryParam("excludePlatformInitiatedChanges");
137    }
138
139    public List<String> getExpand() {
140        return this.getQueryParam("expand");
141    }
142
143    public void setProjectKey(final String projectKey) {
144        this.projectKey = projectKey;
145    }
146
147    /**
148     * set resourceTypes with the specified value
149     * @param resourceTypes value to be set
150     * @param <TValue> value type
151     * @return ByProjectKeyGet
152     */
153    public <TValue> ByProjectKeyGet withResourceTypes(final TValue resourceTypes) {
154        return copy().withQueryParam("resourceTypes", resourceTypes);
155    }
156
157    /**
158     * add additional resourceTypes query parameter
159     * @param resourceTypes value to be added
160     * @param <TValue> value type
161     * @return ByProjectKeyGet
162     */
163    public <TValue> ByProjectKeyGet addResourceTypes(final TValue resourceTypes) {
164        return copy().addQueryParam("resourceTypes", resourceTypes);
165    }
166
167    /**
168     * set resourceTypes with the specified value
169     * @param supplier supplier for the value to be set
170     * @return ByProjectKeyGet
171     */
172    public ByProjectKeyGet withResourceTypes(final Supplier<ChangeHistoryResourceType> supplier) {
173        return copy().withQueryParam("resourceTypes", supplier.get());
174    }
175
176    /**
177     * add additional resourceTypes query parameter
178     * @param supplier supplier for the value to be added
179     * @return ByProjectKeyGet
180     */
181    public ByProjectKeyGet addResourceTypes(final Supplier<ChangeHistoryResourceType> supplier) {
182        return copy().addQueryParam("resourceTypes", supplier.get());
183    }
184
185    /**
186     * set resourceTypes with the specified value
187     * @param op builder for the value to be set
188     * @return ByProjectKeyGet
189     */
190    public ByProjectKeyGet withResourceTypes(final Function<StringBuilder, StringBuilder> op) {
191        return copy().withQueryParam("resourceTypes", op.apply(new StringBuilder()));
192    }
193
194    /**
195     * add additional resourceTypes query parameter
196     * @param op builder for the value to be added
197     * @return ByProjectKeyGet
198     */
199    public ByProjectKeyGet addResourceTypes(final Function<StringBuilder, StringBuilder> op) {
200        return copy().addQueryParam("resourceTypes", op.apply(new StringBuilder()));
201    }
202
203    /**
204     * set resourceTypes with the specified values
205     * @param resourceTypes values to be set
206     * @param <TValue> value type
207     * @return ByProjectKeyGet
208     */
209    public <TValue> ByProjectKeyGet withResourceTypes(final Collection<TValue> resourceTypes) {
210        return copy().withoutQueryParam("resourceTypes")
211                .addQueryParams(resourceTypes.stream()
212                        .map(s -> new ParamEntry<>("resourceTypes", s.toString()))
213                        .collect(Collectors.toList()));
214    }
215
216    /**
217     * add additional resourceTypes query parameters
218     * @param resourceTypes values to be added
219     * @param <TValue> value type
220     * @return ByProjectKeyGet
221     */
222    public <TValue> ByProjectKeyGet addResourceTypes(final Collection<TValue> resourceTypes) {
223        return copy().addQueryParams(resourceTypes.stream()
224                .map(s -> new ParamEntry<>("resourceTypes", s.toString()))
225                .collect(Collectors.toList()));
226    }
227
228    /**
229     * set dateFrom with the specified value
230     * @param dateFrom value to be set
231     * @param <TValue> value type
232     * @return ByProjectKeyGet
233     */
234    public <TValue> ByProjectKeyGet withDateFrom(final TValue dateFrom) {
235        return copy().withQueryParam("date.from", dateFrom);
236    }
237
238    /**
239     * add additional dateFrom query parameter
240     * @param dateFrom value to be added
241     * @param <TValue> value type
242     * @return ByProjectKeyGet
243     */
244    public <TValue> ByProjectKeyGet addDateFrom(final TValue dateFrom) {
245        return copy().addQueryParam("date.from", dateFrom);
246    }
247
248    /**
249     * set dateFrom with the specified value
250     * @param supplier supplier for the value to be set
251     * @return ByProjectKeyGet
252     */
253    public ByProjectKeyGet withDateFrom(final Supplier<Object> supplier) {
254        return copy().withQueryParam("date.from", supplier.get());
255    }
256
257    /**
258     * add additional dateFrom query parameter
259     * @param supplier supplier for the value to be added
260     * @return ByProjectKeyGet
261     */
262    public ByProjectKeyGet addDateFrom(final Supplier<Object> supplier) {
263        return copy().addQueryParam("date.from", supplier.get());
264    }
265
266    /**
267     * set dateFrom with the specified value
268     * @param op builder for the value to be set
269     * @return ByProjectKeyGet
270     */
271    public ByProjectKeyGet withDateFrom(final Function<StringBuilder, StringBuilder> op) {
272        return copy().withQueryParam("date.from", op.apply(new StringBuilder()));
273    }
274
275    /**
276     * add additional dateFrom query parameter
277     * @param op builder for the value to be added
278     * @return ByProjectKeyGet
279     */
280    public ByProjectKeyGet addDateFrom(final Function<StringBuilder, StringBuilder> op) {
281        return copy().addQueryParam("date.from", op.apply(new StringBuilder()));
282    }
283
284    /**
285     * set dateFrom with the specified values
286     * @param dateFrom values to be set
287     * @param <TValue> value type
288     * @return ByProjectKeyGet
289     */
290    public <TValue> ByProjectKeyGet withDateFrom(final Collection<TValue> dateFrom) {
291        return copy().withoutQueryParam("date.from")
292                .addQueryParams(dateFrom.stream()
293                        .map(s -> new ParamEntry<>("date.from", s.toString()))
294                        .collect(Collectors.toList()));
295    }
296
297    /**
298     * add additional dateFrom query parameters
299     * @param dateFrom values to be added
300     * @param <TValue> value type
301     * @return ByProjectKeyGet
302     */
303    public <TValue> ByProjectKeyGet addDateFrom(final Collection<TValue> dateFrom) {
304        return copy().addQueryParams(
305            dateFrom.stream().map(s -> new ParamEntry<>("date.from", s.toString())).collect(Collectors.toList()));
306    }
307
308    /**
309     * set dateTo with the specified value
310     * @param dateTo value to be set
311     * @param <TValue> value type
312     * @return ByProjectKeyGet
313     */
314    public <TValue> ByProjectKeyGet withDateTo(final TValue dateTo) {
315        return copy().withQueryParam("date.to", dateTo);
316    }
317
318    /**
319     * add additional dateTo query parameter
320     * @param dateTo value to be added
321     * @param <TValue> value type
322     * @return ByProjectKeyGet
323     */
324    public <TValue> ByProjectKeyGet addDateTo(final TValue dateTo) {
325        return copy().addQueryParam("date.to", dateTo);
326    }
327
328    /**
329     * set dateTo with the specified value
330     * @param supplier supplier for the value to be set
331     * @return ByProjectKeyGet
332     */
333    public ByProjectKeyGet withDateTo(final Supplier<Object> supplier) {
334        return copy().withQueryParam("date.to", supplier.get());
335    }
336
337    /**
338     * add additional dateTo query parameter
339     * @param supplier supplier for the value to be added
340     * @return ByProjectKeyGet
341     */
342    public ByProjectKeyGet addDateTo(final Supplier<Object> supplier) {
343        return copy().addQueryParam("date.to", supplier.get());
344    }
345
346    /**
347     * set dateTo with the specified value
348     * @param op builder for the value to be set
349     * @return ByProjectKeyGet
350     */
351    public ByProjectKeyGet withDateTo(final Function<StringBuilder, StringBuilder> op) {
352        return copy().withQueryParam("date.to", op.apply(new StringBuilder()));
353    }
354
355    /**
356     * add additional dateTo query parameter
357     * @param op builder for the value to be added
358     * @return ByProjectKeyGet
359     */
360    public ByProjectKeyGet addDateTo(final Function<StringBuilder, StringBuilder> op) {
361        return copy().addQueryParam("date.to", op.apply(new StringBuilder()));
362    }
363
364    /**
365     * set dateTo with the specified values
366     * @param dateTo values to be set
367     * @param <TValue> value type
368     * @return ByProjectKeyGet
369     */
370    public <TValue> ByProjectKeyGet withDateTo(final Collection<TValue> dateTo) {
371        return copy().withoutQueryParam("date.to")
372                .addQueryParams(
373                    dateTo.stream().map(s -> new ParamEntry<>("date.to", s.toString())).collect(Collectors.toList()));
374    }
375
376    /**
377     * add additional dateTo query parameters
378     * @param dateTo values to be added
379     * @param <TValue> value type
380     * @return ByProjectKeyGet
381     */
382    public <TValue> ByProjectKeyGet addDateTo(final Collection<TValue> dateTo) {
383        return copy().addQueryParams(
384            dateTo.stream().map(s -> new ParamEntry<>("date.to", s.toString())).collect(Collectors.toList()));
385    }
386
387    /**
388     * set limit with the specified value
389     * @param limit value to be set
390     * @param <TValue> value type
391     * @return ByProjectKeyGet
392     */
393    public <TValue> ByProjectKeyGet withLimit(final TValue limit) {
394        return copy().withQueryParam("limit", limit);
395    }
396
397    /**
398     * add additional limit query parameter
399     * @param limit value to be added
400     * @param <TValue> value type
401     * @return ByProjectKeyGet
402     */
403    public <TValue> ByProjectKeyGet addLimit(final TValue limit) {
404        return copy().addQueryParam("limit", limit);
405    }
406
407    /**
408     * set limit with the specified value
409     * @param supplier supplier for the value to be set
410     * @return ByProjectKeyGet
411     */
412    public ByProjectKeyGet withLimit(final Supplier<Integer> supplier) {
413        return copy().withQueryParam("limit", supplier.get());
414    }
415
416    /**
417     * add additional limit query parameter
418     * @param supplier supplier for the value to be added
419     * @return ByProjectKeyGet
420     */
421    public ByProjectKeyGet addLimit(final Supplier<Integer> supplier) {
422        return copy().addQueryParam("limit", supplier.get());
423    }
424
425    /**
426     * set limit with the specified value
427     * @param op builder for the value to be set
428     * @return ByProjectKeyGet
429     */
430    public ByProjectKeyGet withLimit(final Function<StringBuilder, StringBuilder> op) {
431        return copy().withQueryParam("limit", op.apply(new StringBuilder()));
432    }
433
434    /**
435     * add additional limit query parameter
436     * @param op builder for the value to be added
437     * @return ByProjectKeyGet
438     */
439    public ByProjectKeyGet addLimit(final Function<StringBuilder, StringBuilder> op) {
440        return copy().addQueryParam("limit", op.apply(new StringBuilder()));
441    }
442
443    /**
444     * set limit with the specified values
445     * @param limit values to be set
446     * @param <TValue> value type
447     * @return ByProjectKeyGet
448     */
449    public <TValue> ByProjectKeyGet withLimit(final Collection<TValue> limit) {
450        return copy().withoutQueryParam("limit")
451                .addQueryParams(
452                    limit.stream().map(s -> new ParamEntry<>("limit", s.toString())).collect(Collectors.toList()));
453    }
454
455    /**
456     * add additional limit query parameters
457     * @param limit values to be added
458     * @param <TValue> value type
459     * @return ByProjectKeyGet
460     */
461    public <TValue> ByProjectKeyGet addLimit(final Collection<TValue> limit) {
462        return copy().addQueryParams(
463            limit.stream().map(s -> new ParamEntry<>("limit", s.toString())).collect(Collectors.toList()));
464    }
465
466    /**
467     * set offset with the specified value
468     * @param offset value to be set
469     * @param <TValue> value type
470     * @return ByProjectKeyGet
471     */
472    public <TValue> ByProjectKeyGet withOffset(final TValue offset) {
473        return copy().withQueryParam("offset", offset);
474    }
475
476    /**
477     * add additional offset query parameter
478     * @param offset value to be added
479     * @param <TValue> value type
480     * @return ByProjectKeyGet
481     */
482    public <TValue> ByProjectKeyGet addOffset(final TValue offset) {
483        return copy().addQueryParam("offset", offset);
484    }
485
486    /**
487     * set offset with the specified value
488     * @param supplier supplier for the value to be set
489     * @return ByProjectKeyGet
490     */
491    public ByProjectKeyGet withOffset(final Supplier<Integer> supplier) {
492        return copy().withQueryParam("offset", supplier.get());
493    }
494
495    /**
496     * add additional offset query parameter
497     * @param supplier supplier for the value to be added
498     * @return ByProjectKeyGet
499     */
500    public ByProjectKeyGet addOffset(final Supplier<Integer> supplier) {
501        return copy().addQueryParam("offset", supplier.get());
502    }
503
504    /**
505     * set offset with the specified value
506     * @param op builder for the value to be set
507     * @return ByProjectKeyGet
508     */
509    public ByProjectKeyGet withOffset(final Function<StringBuilder, StringBuilder> op) {
510        return copy().withQueryParam("offset", op.apply(new StringBuilder()));
511    }
512
513    /**
514     * add additional offset query parameter
515     * @param op builder for the value to be added
516     * @return ByProjectKeyGet
517     */
518    public ByProjectKeyGet addOffset(final Function<StringBuilder, StringBuilder> op) {
519        return copy().addQueryParam("offset", op.apply(new StringBuilder()));
520    }
521
522    /**
523     * set offset with the specified values
524     * @param offset values to be set
525     * @param <TValue> value type
526     * @return ByProjectKeyGet
527     */
528    public <TValue> ByProjectKeyGet withOffset(final Collection<TValue> offset) {
529        return copy().withoutQueryParam("offset")
530                .addQueryParams(
531                    offset.stream().map(s -> new ParamEntry<>("offset", s.toString())).collect(Collectors.toList()));
532    }
533
534    /**
535     * add additional offset query parameters
536     * @param offset values to be added
537     * @param <TValue> value type
538     * @return ByProjectKeyGet
539     */
540    public <TValue> ByProjectKeyGet addOffset(final Collection<TValue> offset) {
541        return copy().addQueryParams(
542            offset.stream().map(s -> new ParamEntry<>("offset", s.toString())).collect(Collectors.toList()));
543    }
544
545    /**
546     * set userId with the specified value
547     * @param userId value to be set
548     * @param <TValue> value type
549     * @return ByProjectKeyGet
550     */
551    public <TValue> ByProjectKeyGet withUserId(final TValue userId) {
552        return copy().withQueryParam("userId", userId);
553    }
554
555    /**
556     * add additional userId query parameter
557     * @param userId value to be added
558     * @param <TValue> value type
559     * @return ByProjectKeyGet
560     */
561    public <TValue> ByProjectKeyGet addUserId(final TValue userId) {
562        return copy().addQueryParam("userId", userId);
563    }
564
565    /**
566     * set userId with the specified value
567     * @param supplier supplier for the value to be set
568     * @return ByProjectKeyGet
569     */
570    public ByProjectKeyGet withUserId(final Supplier<String> supplier) {
571        return copy().withQueryParam("userId", supplier.get());
572    }
573
574    /**
575     * add additional userId query parameter
576     * @param supplier supplier for the value to be added
577     * @return ByProjectKeyGet
578     */
579    public ByProjectKeyGet addUserId(final Supplier<String> supplier) {
580        return copy().addQueryParam("userId", supplier.get());
581    }
582
583    /**
584     * set userId with the specified value
585     * @param op builder for the value to be set
586     * @return ByProjectKeyGet
587     */
588    public ByProjectKeyGet withUserId(final Function<StringBuilder, StringBuilder> op) {
589        return copy().withQueryParam("userId", op.apply(new StringBuilder()));
590    }
591
592    /**
593     * add additional userId query parameter
594     * @param op builder for the value to be added
595     * @return ByProjectKeyGet
596     */
597    public ByProjectKeyGet addUserId(final Function<StringBuilder, StringBuilder> op) {
598        return copy().addQueryParam("userId", op.apply(new StringBuilder()));
599    }
600
601    /**
602     * set userId with the specified values
603     * @param userId values to be set
604     * @param <TValue> value type
605     * @return ByProjectKeyGet
606     */
607    public <TValue> ByProjectKeyGet withUserId(final Collection<TValue> userId) {
608        return copy().withoutQueryParam("userId")
609                .addQueryParams(
610                    userId.stream().map(s -> new ParamEntry<>("userId", s.toString())).collect(Collectors.toList()));
611    }
612
613    /**
614     * add additional userId query parameters
615     * @param userId values to be added
616     * @param <TValue> value type
617     * @return ByProjectKeyGet
618     */
619    public <TValue> ByProjectKeyGet addUserId(final Collection<TValue> userId) {
620        return copy().addQueryParams(
621            userId.stream().map(s -> new ParamEntry<>("userId", s.toString())).collect(Collectors.toList()));
622    }
623
624    /**
625     * set type with the specified value
626     * @param type value to be set
627     * @param <TValue> value type
628     * @return ByProjectKeyGet
629     */
630    public <TValue> ByProjectKeyGet withType(final TValue type) {
631        return copy().withQueryParam("type", type);
632    }
633
634    /**
635     * add additional type query parameter
636     * @param type value to be added
637     * @param <TValue> value type
638     * @return ByProjectKeyGet
639     */
640    public <TValue> ByProjectKeyGet addType(final TValue type) {
641        return copy().addQueryParam("type", type);
642    }
643
644    /**
645     * set type with the specified value
646     * @param supplier supplier for the value to be set
647     * @return ByProjectKeyGet
648     */
649    public ByProjectKeyGet withType(final Supplier<String> supplier) {
650        return copy().withQueryParam("type", supplier.get());
651    }
652
653    /**
654     * add additional type query parameter
655     * @param supplier supplier for the value to be added
656     * @return ByProjectKeyGet
657     */
658    public ByProjectKeyGet addType(final Supplier<String> supplier) {
659        return copy().addQueryParam("type", supplier.get());
660    }
661
662    /**
663     * set type with the specified value
664     * @param op builder for the value to be set
665     * @return ByProjectKeyGet
666     */
667    public ByProjectKeyGet withType(final Function<StringBuilder, StringBuilder> op) {
668        return copy().withQueryParam("type", op.apply(new StringBuilder()));
669    }
670
671    /**
672     * add additional type query parameter
673     * @param op builder for the value to be added
674     * @return ByProjectKeyGet
675     */
676    public ByProjectKeyGet addType(final Function<StringBuilder, StringBuilder> op) {
677        return copy().addQueryParam("type", op.apply(new StringBuilder()));
678    }
679
680    /**
681     * set type with the specified values
682     * @param type values to be set
683     * @param <TValue> value type
684     * @return ByProjectKeyGet
685     */
686    public <TValue> ByProjectKeyGet withType(final Collection<TValue> type) {
687        return copy().withoutQueryParam("type")
688                .addQueryParams(
689                    type.stream().map(s -> new ParamEntry<>("type", s.toString())).collect(Collectors.toList()));
690    }
691
692    /**
693     * add additional type query parameters
694     * @param type values to be added
695     * @param <TValue> value type
696     * @return ByProjectKeyGet
697     */
698    public <TValue> ByProjectKeyGet addType(final Collection<TValue> type) {
699        return copy().addQueryParams(
700            type.stream().map(s -> new ParamEntry<>("type", s.toString())).collect(Collectors.toList()));
701    }
702
703    /**
704     * set clientId with the specified value
705     * @param clientId value to be set
706     * @param <TValue> value type
707     * @return ByProjectKeyGet
708     */
709    public <TValue> ByProjectKeyGet withClientId(final TValue clientId) {
710        return copy().withQueryParam("clientId", clientId);
711    }
712
713    /**
714     * add additional clientId query parameter
715     * @param clientId value to be added
716     * @param <TValue> value type
717     * @return ByProjectKeyGet
718     */
719    public <TValue> ByProjectKeyGet addClientId(final TValue clientId) {
720        return copy().addQueryParam("clientId", clientId);
721    }
722
723    /**
724     * set clientId with the specified value
725     * @param supplier supplier for the value to be set
726     * @return ByProjectKeyGet
727     */
728    public ByProjectKeyGet withClientId(final Supplier<String> supplier) {
729        return copy().withQueryParam("clientId", supplier.get());
730    }
731
732    /**
733     * add additional clientId query parameter
734     * @param supplier supplier for the value to be added
735     * @return ByProjectKeyGet
736     */
737    public ByProjectKeyGet addClientId(final Supplier<String> supplier) {
738        return copy().addQueryParam("clientId", supplier.get());
739    }
740
741    /**
742     * set clientId with the specified value
743     * @param op builder for the value to be set
744     * @return ByProjectKeyGet
745     */
746    public ByProjectKeyGet withClientId(final Function<StringBuilder, StringBuilder> op) {
747        return copy().withQueryParam("clientId", op.apply(new StringBuilder()));
748    }
749
750    /**
751     * add additional clientId query parameter
752     * @param op builder for the value to be added
753     * @return ByProjectKeyGet
754     */
755    public ByProjectKeyGet addClientId(final Function<StringBuilder, StringBuilder> op) {
756        return copy().addQueryParam("clientId", op.apply(new StringBuilder()));
757    }
758
759    /**
760     * set clientId with the specified values
761     * @param clientId values to be set
762     * @param <TValue> value type
763     * @return ByProjectKeyGet
764     */
765    public <TValue> ByProjectKeyGet withClientId(final Collection<TValue> clientId) {
766        return copy().withoutQueryParam("clientId")
767                .addQueryParams(clientId.stream()
768                        .map(s -> new ParamEntry<>("clientId", s.toString()))
769                        .collect(Collectors.toList()));
770    }
771
772    /**
773     * add additional clientId query parameters
774     * @param clientId values to be added
775     * @param <TValue> value type
776     * @return ByProjectKeyGet
777     */
778    public <TValue> ByProjectKeyGet addClientId(final Collection<TValue> clientId) {
779        return copy().addQueryParams(
780            clientId.stream().map(s -> new ParamEntry<>("clientId", s.toString())).collect(Collectors.toList()));
781    }
782
783    /**
784     * set resourceId with the specified value
785     * @param resourceId value to be set
786     * @param <TValue> value type
787     * @return ByProjectKeyGet
788     */
789    public <TValue> ByProjectKeyGet withResourceId(final TValue resourceId) {
790        return copy().withQueryParam("resourceId", resourceId);
791    }
792
793    /**
794     * add additional resourceId query parameter
795     * @param resourceId value to be added
796     * @param <TValue> value type
797     * @return ByProjectKeyGet
798     */
799    public <TValue> ByProjectKeyGet addResourceId(final TValue resourceId) {
800        return copy().addQueryParam("resourceId", resourceId);
801    }
802
803    /**
804     * set resourceId with the specified value
805     * @param supplier supplier for the value to be set
806     * @return ByProjectKeyGet
807     */
808    public ByProjectKeyGet withResourceId(final Supplier<String> supplier) {
809        return copy().withQueryParam("resourceId", supplier.get());
810    }
811
812    /**
813     * add additional resourceId query parameter
814     * @param supplier supplier for the value to be added
815     * @return ByProjectKeyGet
816     */
817    public ByProjectKeyGet addResourceId(final Supplier<String> supplier) {
818        return copy().addQueryParam("resourceId", supplier.get());
819    }
820
821    /**
822     * set resourceId with the specified value
823     * @param op builder for the value to be set
824     * @return ByProjectKeyGet
825     */
826    public ByProjectKeyGet withResourceId(final Function<StringBuilder, StringBuilder> op) {
827        return copy().withQueryParam("resourceId", op.apply(new StringBuilder()));
828    }
829
830    /**
831     * add additional resourceId query parameter
832     * @param op builder for the value to be added
833     * @return ByProjectKeyGet
834     */
835    public ByProjectKeyGet addResourceId(final Function<StringBuilder, StringBuilder> op) {
836        return copy().addQueryParam("resourceId", op.apply(new StringBuilder()));
837    }
838
839    /**
840     * set resourceId with the specified values
841     * @param resourceId values to be set
842     * @param <TValue> value type
843     * @return ByProjectKeyGet
844     */
845    public <TValue> ByProjectKeyGet withResourceId(final Collection<TValue> resourceId) {
846        return copy().withoutQueryParam("resourceId")
847                .addQueryParams(resourceId.stream()
848                        .map(s -> new ParamEntry<>("resourceId", s.toString()))
849                        .collect(Collectors.toList()));
850    }
851
852    /**
853     * add additional resourceId query parameters
854     * @param resourceId values to be added
855     * @param <TValue> value type
856     * @return ByProjectKeyGet
857     */
858    public <TValue> ByProjectKeyGet addResourceId(final Collection<TValue> resourceId) {
859        return copy().addQueryParams(
860            resourceId.stream().map(s -> new ParamEntry<>("resourceId", s.toString())).collect(Collectors.toList()));
861    }
862
863    /**
864     * set resourceKey with the specified value
865     * @param resourceKey value to be set
866     * @param <TValue> value type
867     * @return ByProjectKeyGet
868     */
869    public <TValue> ByProjectKeyGet withResourceKey(final TValue resourceKey) {
870        return copy().withQueryParam("resourceKey", resourceKey);
871    }
872
873    /**
874     * add additional resourceKey query parameter
875     * @param resourceKey value to be added
876     * @param <TValue> value type
877     * @return ByProjectKeyGet
878     */
879    public <TValue> ByProjectKeyGet addResourceKey(final TValue resourceKey) {
880        return copy().addQueryParam("resourceKey", resourceKey);
881    }
882
883    /**
884     * set resourceKey with the specified value
885     * @param supplier supplier for the value to be set
886     * @return ByProjectKeyGet
887     */
888    public ByProjectKeyGet withResourceKey(final Supplier<String> supplier) {
889        return copy().withQueryParam("resourceKey", supplier.get());
890    }
891
892    /**
893     * add additional resourceKey query parameter
894     * @param supplier supplier for the value to be added
895     * @return ByProjectKeyGet
896     */
897    public ByProjectKeyGet addResourceKey(final Supplier<String> supplier) {
898        return copy().addQueryParam("resourceKey", supplier.get());
899    }
900
901    /**
902     * set resourceKey with the specified value
903     * @param op builder for the value to be set
904     * @return ByProjectKeyGet
905     */
906    public ByProjectKeyGet withResourceKey(final Function<StringBuilder, StringBuilder> op) {
907        return copy().withQueryParam("resourceKey", op.apply(new StringBuilder()));
908    }
909
910    /**
911     * add additional resourceKey query parameter
912     * @param op builder for the value to be added
913     * @return ByProjectKeyGet
914     */
915    public ByProjectKeyGet addResourceKey(final Function<StringBuilder, StringBuilder> op) {
916        return copy().addQueryParam("resourceKey", op.apply(new StringBuilder()));
917    }
918
919    /**
920     * set resourceKey with the specified values
921     * @param resourceKey values to be set
922     * @param <TValue> value type
923     * @return ByProjectKeyGet
924     */
925    public <TValue> ByProjectKeyGet withResourceKey(final Collection<TValue> resourceKey) {
926        return copy().withoutQueryParam("resourceKey")
927                .addQueryParams(resourceKey.stream()
928                        .map(s -> new ParamEntry<>("resourceKey", s.toString()))
929                        .collect(Collectors.toList()));
930    }
931
932    /**
933     * add additional resourceKey query parameters
934     * @param resourceKey values to be added
935     * @param <TValue> value type
936     * @return ByProjectKeyGet
937     */
938    public <TValue> ByProjectKeyGet addResourceKey(final Collection<TValue> resourceKey) {
939        return copy().addQueryParams(
940            resourceKey.stream().map(s -> new ParamEntry<>("resourceKey", s.toString())).collect(Collectors.toList()));
941    }
942
943    /**
944     * set source with the specified value
945     * @param source value to be set
946     * @param <TValue> value type
947     * @return ByProjectKeyGet
948     */
949    public <TValue> ByProjectKeyGet withSource(final TValue source) {
950        return copy().withQueryParam("source", source);
951    }
952
953    /**
954     * add additional source query parameter
955     * @param source value to be added
956     * @param <TValue> value type
957     * @return ByProjectKeyGet
958     */
959    public <TValue> ByProjectKeyGet addSource(final TValue source) {
960        return copy().addQueryParam("source", source);
961    }
962
963    /**
964     * set source with the specified value
965     * @param supplier supplier for the value to be set
966     * @return ByProjectKeyGet
967     */
968    public ByProjectKeyGet withSource(final Supplier<String> supplier) {
969        return copy().withQueryParam("source", supplier.get());
970    }
971
972    /**
973     * add additional source query parameter
974     * @param supplier supplier for the value to be added
975     * @return ByProjectKeyGet
976     */
977    public ByProjectKeyGet addSource(final Supplier<String> supplier) {
978        return copy().addQueryParam("source", supplier.get());
979    }
980
981    /**
982     * set source with the specified value
983     * @param op builder for the value to be set
984     * @return ByProjectKeyGet
985     */
986    public ByProjectKeyGet withSource(final Function<StringBuilder, StringBuilder> op) {
987        return copy().withQueryParam("source", op.apply(new StringBuilder()));
988    }
989
990    /**
991     * add additional source query parameter
992     * @param op builder for the value to be added
993     * @return ByProjectKeyGet
994     */
995    public ByProjectKeyGet addSource(final Function<StringBuilder, StringBuilder> op) {
996        return copy().addQueryParam("source", op.apply(new StringBuilder()));
997    }
998
999    /**
1000     * set source with the specified values
1001     * @param source values to be set
1002     * @param <TValue> value type
1003     * @return ByProjectKeyGet
1004     */
1005    public <TValue> ByProjectKeyGet withSource(final Collection<TValue> source) {
1006        return copy().withoutQueryParam("source")
1007                .addQueryParams(
1008                    source.stream().map(s -> new ParamEntry<>("source", s.toString())).collect(Collectors.toList()));
1009    }
1010
1011    /**
1012     * add additional source query parameters
1013     * @param source values to be added
1014     * @param <TValue> value type
1015     * @return ByProjectKeyGet
1016     */
1017    public <TValue> ByProjectKeyGet addSource(final Collection<TValue> source) {
1018        return copy().addQueryParams(
1019            source.stream().map(s -> new ParamEntry<>("source", s.toString())).collect(Collectors.toList()));
1020    }
1021
1022    /**
1023     * set changes with the specified value
1024     * @param changes value to be set
1025     * @param <TValue> value type
1026     * @return ByProjectKeyGet
1027     */
1028    public <TValue> ByProjectKeyGet withChanges(final TValue changes) {
1029        return copy().withQueryParam("changes", changes);
1030    }
1031
1032    /**
1033     * add additional changes query parameter
1034     * @param changes value to be added
1035     * @param <TValue> value type
1036     * @return ByProjectKeyGet
1037     */
1038    public <TValue> ByProjectKeyGet addChanges(final TValue changes) {
1039        return copy().addQueryParam("changes", changes);
1040    }
1041
1042    /**
1043     * set changes with the specified value
1044     * @param supplier supplier for the value to be set
1045     * @return ByProjectKeyGet
1046     */
1047    public ByProjectKeyGet withChanges(final Supplier<String> supplier) {
1048        return copy().withQueryParam("changes", supplier.get());
1049    }
1050
1051    /**
1052     * add additional changes query parameter
1053     * @param supplier supplier for the value to be added
1054     * @return ByProjectKeyGet
1055     */
1056    public ByProjectKeyGet addChanges(final Supplier<String> supplier) {
1057        return copy().addQueryParam("changes", supplier.get());
1058    }
1059
1060    /**
1061     * set changes with the specified value
1062     * @param op builder for the value to be set
1063     * @return ByProjectKeyGet
1064     */
1065    public ByProjectKeyGet withChanges(final Function<StringBuilder, StringBuilder> op) {
1066        return copy().withQueryParam("changes", op.apply(new StringBuilder()));
1067    }
1068
1069    /**
1070     * add additional changes query parameter
1071     * @param op builder for the value to be added
1072     * @return ByProjectKeyGet
1073     */
1074    public ByProjectKeyGet addChanges(final Function<StringBuilder, StringBuilder> op) {
1075        return copy().addQueryParam("changes", op.apply(new StringBuilder()));
1076    }
1077
1078    /**
1079     * set changes with the specified values
1080     * @param changes values to be set
1081     * @param <TValue> value type
1082     * @return ByProjectKeyGet
1083     */
1084    public <TValue> ByProjectKeyGet withChanges(final Collection<TValue> changes) {
1085        return copy().withoutQueryParam("changes")
1086                .addQueryParams(
1087                    changes.stream().map(s -> new ParamEntry<>("changes", s.toString())).collect(Collectors.toList()));
1088    }
1089
1090    /**
1091     * add additional changes query parameters
1092     * @param changes values to be added
1093     * @param <TValue> value type
1094     * @return ByProjectKeyGet
1095     */
1096    public <TValue> ByProjectKeyGet addChanges(final Collection<TValue> changes) {
1097        return copy().addQueryParams(
1098            changes.stream().map(s -> new ParamEntry<>("changes", s.toString())).collect(Collectors.toList()));
1099    }
1100
1101    /**
1102     * set stores with the specified value
1103     * @param stores value to be set
1104     * @param <TValue> value type
1105     * @return ByProjectKeyGet
1106     */
1107    public <TValue> ByProjectKeyGet withStores(final TValue stores) {
1108        return copy().withQueryParam("stores", stores);
1109    }
1110
1111    /**
1112     * add additional stores query parameter
1113     * @param stores value to be added
1114     * @param <TValue> value type
1115     * @return ByProjectKeyGet
1116     */
1117    public <TValue> ByProjectKeyGet addStores(final TValue stores) {
1118        return copy().addQueryParam("stores", stores);
1119    }
1120
1121    /**
1122     * set stores with the specified value
1123     * @param supplier supplier for the value to be set
1124     * @return ByProjectKeyGet
1125     */
1126    public ByProjectKeyGet withStores(final Supplier<String> supplier) {
1127        return copy().withQueryParam("stores", supplier.get());
1128    }
1129
1130    /**
1131     * add additional stores query parameter
1132     * @param supplier supplier for the value to be added
1133     * @return ByProjectKeyGet
1134     */
1135    public ByProjectKeyGet addStores(final Supplier<String> supplier) {
1136        return copy().addQueryParam("stores", supplier.get());
1137    }
1138
1139    /**
1140     * set stores with the specified value
1141     * @param op builder for the value to be set
1142     * @return ByProjectKeyGet
1143     */
1144    public ByProjectKeyGet withStores(final Function<StringBuilder, StringBuilder> op) {
1145        return copy().withQueryParam("stores", op.apply(new StringBuilder()));
1146    }
1147
1148    /**
1149     * add additional stores query parameter
1150     * @param op builder for the value to be added
1151     * @return ByProjectKeyGet
1152     */
1153    public ByProjectKeyGet addStores(final Function<StringBuilder, StringBuilder> op) {
1154        return copy().addQueryParam("stores", op.apply(new StringBuilder()));
1155    }
1156
1157    /**
1158     * set stores with the specified values
1159     * @param stores values to be set
1160     * @param <TValue> value type
1161     * @return ByProjectKeyGet
1162     */
1163    public <TValue> ByProjectKeyGet withStores(final Collection<TValue> stores) {
1164        return copy().withoutQueryParam("stores")
1165                .addQueryParams(
1166                    stores.stream().map(s -> new ParamEntry<>("stores", s.toString())).collect(Collectors.toList()));
1167    }
1168
1169    /**
1170     * add additional stores query parameters
1171     * @param stores values to be added
1172     * @param <TValue> value type
1173     * @return ByProjectKeyGet
1174     */
1175    public <TValue> ByProjectKeyGet addStores(final Collection<TValue> stores) {
1176        return copy().addQueryParams(
1177            stores.stream().map(s -> new ParamEntry<>("stores", s.toString())).collect(Collectors.toList()));
1178    }
1179
1180    /**
1181     * set customerId with the specified value
1182     * @param customerId value to be set
1183     * @param <TValue> value type
1184     * @return ByProjectKeyGet
1185     */
1186    public <TValue> ByProjectKeyGet withCustomerId(final TValue customerId) {
1187        return copy().withQueryParam("customerId", customerId);
1188    }
1189
1190    /**
1191     * add additional customerId query parameter
1192     * @param customerId value to be added
1193     * @param <TValue> value type
1194     * @return ByProjectKeyGet
1195     */
1196    public <TValue> ByProjectKeyGet addCustomerId(final TValue customerId) {
1197        return copy().addQueryParam("customerId", customerId);
1198    }
1199
1200    /**
1201     * set customerId with the specified value
1202     * @param supplier supplier for the value to be set
1203     * @return ByProjectKeyGet
1204     */
1205    public ByProjectKeyGet withCustomerId(final Supplier<String> supplier) {
1206        return copy().withQueryParam("customerId", supplier.get());
1207    }
1208
1209    /**
1210     * add additional customerId query parameter
1211     * @param supplier supplier for the value to be added
1212     * @return ByProjectKeyGet
1213     */
1214    public ByProjectKeyGet addCustomerId(final Supplier<String> supplier) {
1215        return copy().addQueryParam("customerId", supplier.get());
1216    }
1217
1218    /**
1219     * set customerId with the specified value
1220     * @param op builder for the value to be set
1221     * @return ByProjectKeyGet
1222     */
1223    public ByProjectKeyGet withCustomerId(final Function<StringBuilder, StringBuilder> op) {
1224        return copy().withQueryParam("customerId", op.apply(new StringBuilder()));
1225    }
1226
1227    /**
1228     * add additional customerId query parameter
1229     * @param op builder for the value to be added
1230     * @return ByProjectKeyGet
1231     */
1232    public ByProjectKeyGet addCustomerId(final Function<StringBuilder, StringBuilder> op) {
1233        return copy().addQueryParam("customerId", op.apply(new StringBuilder()));
1234    }
1235
1236    /**
1237     * set customerId with the specified values
1238     * @param customerId values to be set
1239     * @param <TValue> value type
1240     * @return ByProjectKeyGet
1241     */
1242    public <TValue> ByProjectKeyGet withCustomerId(final Collection<TValue> customerId) {
1243        return copy().withoutQueryParam("customerId")
1244                .addQueryParams(customerId.stream()
1245                        .map(s -> new ParamEntry<>("customerId", s.toString()))
1246                        .collect(Collectors.toList()));
1247    }
1248
1249    /**
1250     * add additional customerId query parameters
1251     * @param customerId values to be added
1252     * @param <TValue> value type
1253     * @return ByProjectKeyGet
1254     */
1255    public <TValue> ByProjectKeyGet addCustomerId(final Collection<TValue> customerId) {
1256        return copy().addQueryParams(
1257            customerId.stream().map(s -> new ParamEntry<>("customerId", s.toString())).collect(Collectors.toList()));
1258    }
1259
1260    /**
1261     * set excludePlatformInitiatedChanges with the specified value
1262     * @param excludePlatformInitiatedChanges value to be set
1263     * @param <TValue> value type
1264     * @return ByProjectKeyGet
1265     */
1266    public <TValue> ByProjectKeyGet withExcludePlatformInitiatedChanges(final TValue excludePlatformInitiatedChanges) {
1267        return copy().withQueryParam("excludePlatformInitiatedChanges", excludePlatformInitiatedChanges);
1268    }
1269
1270    /**
1271     * add additional excludePlatformInitiatedChanges query parameter
1272     * @param excludePlatformInitiatedChanges value to be added
1273     * @param <TValue> value type
1274     * @return ByProjectKeyGet
1275     */
1276    public <TValue> ByProjectKeyGet addExcludePlatformInitiatedChanges(final TValue excludePlatformInitiatedChanges) {
1277        return copy().addQueryParam("excludePlatformInitiatedChanges", excludePlatformInitiatedChanges);
1278    }
1279
1280    /**
1281     * set excludePlatformInitiatedChanges with the specified value
1282     * @param supplier supplier for the value to be set
1283     * @return ByProjectKeyGet
1284     */
1285    public ByProjectKeyGet withExcludePlatformInitiatedChanges(final Supplier<PlatformInitiatedChange> supplier) {
1286        return copy().withQueryParam("excludePlatformInitiatedChanges", supplier.get());
1287    }
1288
1289    /**
1290     * add additional excludePlatformInitiatedChanges query parameter
1291     * @param supplier supplier for the value to be added
1292     * @return ByProjectKeyGet
1293     */
1294    public ByProjectKeyGet addExcludePlatformInitiatedChanges(final Supplier<PlatformInitiatedChange> supplier) {
1295        return copy().addQueryParam("excludePlatformInitiatedChanges", supplier.get());
1296    }
1297
1298    /**
1299     * set excludePlatformInitiatedChanges with the specified value
1300     * @param op builder for the value to be set
1301     * @return ByProjectKeyGet
1302     */
1303    public ByProjectKeyGet withExcludePlatformInitiatedChanges(final Function<StringBuilder, StringBuilder> op) {
1304        return copy().withQueryParam("excludePlatformInitiatedChanges", op.apply(new StringBuilder()));
1305    }
1306
1307    /**
1308     * add additional excludePlatformInitiatedChanges query parameter
1309     * @param op builder for the value to be added
1310     * @return ByProjectKeyGet
1311     */
1312    public ByProjectKeyGet addExcludePlatformInitiatedChanges(final Function<StringBuilder, StringBuilder> op) {
1313        return copy().addQueryParam("excludePlatformInitiatedChanges", op.apply(new StringBuilder()));
1314    }
1315
1316    /**
1317     * set excludePlatformInitiatedChanges with the specified values
1318     * @param excludePlatformInitiatedChanges values to be set
1319     * @param <TValue> value type
1320     * @return ByProjectKeyGet
1321     */
1322    public <TValue> ByProjectKeyGet withExcludePlatformInitiatedChanges(
1323            final Collection<TValue> excludePlatformInitiatedChanges) {
1324        return copy().withoutQueryParam("excludePlatformInitiatedChanges")
1325                .addQueryParams(excludePlatformInitiatedChanges.stream()
1326                        .map(s -> new ParamEntry<>("excludePlatformInitiatedChanges", s.toString()))
1327                        .collect(Collectors.toList()));
1328    }
1329
1330    /**
1331     * add additional excludePlatformInitiatedChanges query parameters
1332     * @param excludePlatformInitiatedChanges values to be added
1333     * @param <TValue> value type
1334     * @return ByProjectKeyGet
1335     */
1336    public <TValue> ByProjectKeyGet addExcludePlatformInitiatedChanges(
1337            final Collection<TValue> excludePlatformInitiatedChanges) {
1338        return copy().addQueryParams(excludePlatformInitiatedChanges.stream()
1339                .map(s -> new ParamEntry<>("excludePlatformInitiatedChanges", s.toString()))
1340                .collect(Collectors.toList()));
1341    }
1342
1343    /**
1344     * set expand with the specified value
1345     * @param expand value to be set
1346     * @param <TValue> value type
1347     * @return ByProjectKeyGet
1348     */
1349    public <TValue> ByProjectKeyGet withExpand(final TValue expand) {
1350        return copy().withQueryParam("expand", expand);
1351    }
1352
1353    /**
1354     * add additional expand query parameter
1355     * @param expand value to be added
1356     * @param <TValue> value type
1357     * @return ByProjectKeyGet
1358     */
1359    public <TValue> ByProjectKeyGet addExpand(final TValue expand) {
1360        return copy().addQueryParam("expand", expand);
1361    }
1362
1363    /**
1364     * set expand with the specified value
1365     * @param supplier supplier for the value to be set
1366     * @return ByProjectKeyGet
1367     */
1368    public ByProjectKeyGet withExpand(final Supplier<Boolean> supplier) {
1369        return copy().withQueryParam("expand", supplier.get());
1370    }
1371
1372    /**
1373     * add additional expand query parameter
1374     * @param supplier supplier for the value to be added
1375     * @return ByProjectKeyGet
1376     */
1377    public ByProjectKeyGet addExpand(final Supplier<Boolean> supplier) {
1378        return copy().addQueryParam("expand", supplier.get());
1379    }
1380
1381    /**
1382     * set expand with the specified value
1383     * @param op builder for the value to be set
1384     * @return ByProjectKeyGet
1385     */
1386    public ByProjectKeyGet withExpand(final Function<StringBuilder, StringBuilder> op) {
1387        return copy().withQueryParam("expand", op.apply(new StringBuilder()));
1388    }
1389
1390    /**
1391     * add additional expand query parameter
1392     * @param op builder for the value to be added
1393     * @return ByProjectKeyGet
1394     */
1395    public ByProjectKeyGet addExpand(final Function<StringBuilder, StringBuilder> op) {
1396        return copy().addQueryParam("expand", op.apply(new StringBuilder()));
1397    }
1398
1399    /**
1400     * set expand with the specified values
1401     * @param expand values to be set
1402     * @param <TValue> value type
1403     * @return ByProjectKeyGet
1404     */
1405    public <TValue> ByProjectKeyGet withExpand(final Collection<TValue> expand) {
1406        return copy().withoutQueryParam("expand")
1407                .addQueryParams(
1408                    expand.stream().map(s -> new ParamEntry<>("expand", s.toString())).collect(Collectors.toList()));
1409    }
1410
1411    /**
1412     * add additional expand query parameters
1413     * @param expand values to be added
1414     * @param <TValue> value type
1415     * @return ByProjectKeyGet
1416     */
1417    public <TValue> ByProjectKeyGet addExpand(final Collection<TValue> expand) {
1418        return copy().addQueryParams(
1419            expand.stream().map(s -> new ParamEntry<>("expand", s.toString())).collect(Collectors.toList()));
1420    }
1421
1422    @Override
1423    public boolean equals(Object o) {
1424        if (this == o)
1425            return true;
1426
1427        if (o == null || getClass() != o.getClass())
1428            return false;
1429
1430        ByProjectKeyGet that = (ByProjectKeyGet) o;
1431
1432        return new EqualsBuilder().append(projectKey, that.projectKey).isEquals();
1433    }
1434
1435    @Override
1436    public int hashCode() {
1437        return new HashCodeBuilder(17, 37).append(projectKey).toHashCode();
1438    }
1439
1440    @Override
1441    protected ByProjectKeyGet copy() {
1442        return new ByProjectKeyGet(this);
1443    }
1444}