001
002package com.commercetools.api.models.cart;
003
004import java.util.*;
005import java.util.function.Function;
006
007import javax.annotation.Nullable;
008
009import io.vrap.rmf.base.client.Builder;
010import io.vrap.rmf.base.client.utils.Generated;
011
012/**
013 * CartAddShippingMethodActionBuilder
014 * <hr>
015 * Example to create an instance using the builder pattern
016 * <div class=code-example>
017 * <pre><code class='java'>
018 *     CartAddShippingMethodAction cartAddShippingMethodAction = CartAddShippingMethodAction.builder()
019 *             .shippingKey("{shippingKey}")
020 *             .shippingMethod(shippingMethodBuilder -> shippingMethodBuilder)
021 *             .shippingAddress(shippingAddressBuilder -> shippingAddressBuilder)
022 *             .build()
023 * </code></pre>
024 * </div>
025 */
026@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
027public class CartAddShippingMethodActionBuilder implements Builder<CartAddShippingMethodAction> {
028
029    private String shippingKey;
030
031    private com.commercetools.api.models.shipping_method.ShippingMethodResourceIdentifier shippingMethod;
032
033    private com.commercetools.api.models.common.BaseAddress shippingAddress;
034
035    @Nullable
036    private com.commercetools.api.models.cart.ShippingRateInputDraft shippingRateInput;
037
038    @Nullable
039    private com.commercetools.api.models.cart.ExternalTaxRateDraft externalTaxRate;
040
041    @Nullable
042    private java.util.List<com.commercetools.api.models.order.DeliveryDraft> deliveries;
043
044    @Nullable
045    private com.commercetools.api.models.type.CustomFieldsDraft custom;
046
047    /**
048     *  <p>User-defined identifier for the Shipping that must be unique across the Cart with <code>Multiple</code> ShippingMode.</p>
049     * @param shippingKey value to be set
050     * @return Builder
051     */
052
053    public CartAddShippingMethodActionBuilder shippingKey(final String shippingKey) {
054        this.shippingKey = shippingKey;
055        return this;
056    }
057
058    /**
059     *  <p>RecourceIdentifier to a ShippingMethod to add to the Cart with <code>Multiple</code> ShippingMode. If the referenced Shipping Method has a predicate that does not match the Cart, an InvalidOperation error is returned.</p>
060     * @param builder function to build the shippingMethod value
061     * @return Builder
062     */
063
064    public CartAddShippingMethodActionBuilder shippingMethod(
065            Function<com.commercetools.api.models.shipping_method.ShippingMethodResourceIdentifierBuilder, com.commercetools.api.models.shipping_method.ShippingMethodResourceIdentifierBuilder> builder) {
066        this.shippingMethod = builder
067                .apply(com.commercetools.api.models.shipping_method.ShippingMethodResourceIdentifierBuilder.of())
068                .build();
069        return this;
070    }
071
072    /**
073     *  <p>RecourceIdentifier to a ShippingMethod to add to the Cart with <code>Multiple</code> ShippingMode. If the referenced Shipping Method has a predicate that does not match the Cart, an InvalidOperation error is returned.</p>
074     * @param builder function to build the shippingMethod value
075     * @return Builder
076     */
077
078    public CartAddShippingMethodActionBuilder withShippingMethod(
079            Function<com.commercetools.api.models.shipping_method.ShippingMethodResourceIdentifierBuilder, com.commercetools.api.models.shipping_method.ShippingMethodResourceIdentifier> builder) {
080        this.shippingMethod = builder
081                .apply(com.commercetools.api.models.shipping_method.ShippingMethodResourceIdentifierBuilder.of());
082        return this;
083    }
084
085    /**
086     *  <p>RecourceIdentifier to a ShippingMethod to add to the Cart with <code>Multiple</code> ShippingMode. If the referenced Shipping Method has a predicate that does not match the Cart, an InvalidOperation error is returned.</p>
087     * @param shippingMethod value to be set
088     * @return Builder
089     */
090
091    public CartAddShippingMethodActionBuilder shippingMethod(
092            final com.commercetools.api.models.shipping_method.ShippingMethodResourceIdentifier shippingMethod) {
093        this.shippingMethod = shippingMethod;
094        return this;
095    }
096
097    /**
098     *  <p>Determines the shipping rate and Tax Rate of the Line Items.</p>
099     * @param builder function to build the shippingAddress value
100     * @return Builder
101     */
102
103    public CartAddShippingMethodActionBuilder shippingAddress(
104            Function<com.commercetools.api.models.common.BaseAddressBuilder, com.commercetools.api.models.common.BaseAddressBuilder> builder) {
105        this.shippingAddress = builder.apply(com.commercetools.api.models.common.BaseAddressBuilder.of()).build();
106        return this;
107    }
108
109    /**
110     *  <p>Determines the shipping rate and Tax Rate of the Line Items.</p>
111     * @param builder function to build the shippingAddress value
112     * @return Builder
113     */
114
115    public CartAddShippingMethodActionBuilder withShippingAddress(
116            Function<com.commercetools.api.models.common.BaseAddressBuilder, com.commercetools.api.models.common.BaseAddress> builder) {
117        this.shippingAddress = builder.apply(com.commercetools.api.models.common.BaseAddressBuilder.of());
118        return this;
119    }
120
121    /**
122     *  <p>Determines the shipping rate and Tax Rate of the Line Items.</p>
123     * @param shippingAddress value to be set
124     * @return Builder
125     */
126
127    public CartAddShippingMethodActionBuilder shippingAddress(
128            final com.commercetools.api.models.common.BaseAddress shippingAddress) {
129        this.shippingAddress = shippingAddress;
130        return this;
131    }
132
133    /**
134     *  <p>Input used to select a ShippingRatePriceTier. The data type of this field depends on the <code>shippingRateInputType.type</code> configured in the Project:</p>
135     *  <ul>
136     *   <li>If <code>CartClassification</code>, it must be ClassificationShippingRateInputDraft.</li>
137     *   <li>If <code>CartScore</code>, it must be ScoreShippingRateInputDraft.</li>
138     *   <li>If <code>CartValue</code>, it cannot be set.</li>
139     *  </ul>
140     * @param shippingRateInput value to be set
141     * @return Builder
142     */
143
144    public CartAddShippingMethodActionBuilder shippingRateInput(
145            @Nullable final com.commercetools.api.models.cart.ShippingRateInputDraft shippingRateInput) {
146        this.shippingRateInput = shippingRateInput;
147        return this;
148    }
149
150    /**
151     *  <p>Input used to select a ShippingRatePriceTier. The data type of this field depends on the <code>shippingRateInputType.type</code> configured in the Project:</p>
152     *  <ul>
153     *   <li>If <code>CartClassification</code>, it must be ClassificationShippingRateInputDraft.</li>
154     *   <li>If <code>CartScore</code>, it must be ScoreShippingRateInputDraft.</li>
155     *   <li>If <code>CartValue</code>, it cannot be set.</li>
156     *  </ul>
157     * @param builder function to build the shippingRateInput value
158     * @return Builder
159     */
160
161    public CartAddShippingMethodActionBuilder shippingRateInput(
162            Function<com.commercetools.api.models.cart.ShippingRateInputDraftBuilder, Builder<? extends com.commercetools.api.models.cart.ShippingRateInputDraft>> builder) {
163        this.shippingRateInput = builder.apply(com.commercetools.api.models.cart.ShippingRateInputDraftBuilder.of())
164                .build();
165        return this;
166    }
167
168    /**
169     *  <p>Tax Rate used to tax a shipping expense if the Cart has the <code>External</code> TaxMode.</p>
170     * @param builder function to build the externalTaxRate value
171     * @return Builder
172     */
173
174    public CartAddShippingMethodActionBuilder externalTaxRate(
175            Function<com.commercetools.api.models.cart.ExternalTaxRateDraftBuilder, com.commercetools.api.models.cart.ExternalTaxRateDraftBuilder> builder) {
176        this.externalTaxRate = builder.apply(com.commercetools.api.models.cart.ExternalTaxRateDraftBuilder.of())
177                .build();
178        return this;
179    }
180
181    /**
182     *  <p>Tax Rate used to tax a shipping expense if the Cart has the <code>External</code> TaxMode.</p>
183     * @param builder function to build the externalTaxRate value
184     * @return Builder
185     */
186
187    public CartAddShippingMethodActionBuilder withExternalTaxRate(
188            Function<com.commercetools.api.models.cart.ExternalTaxRateDraftBuilder, com.commercetools.api.models.cart.ExternalTaxRateDraft> builder) {
189        this.externalTaxRate = builder.apply(com.commercetools.api.models.cart.ExternalTaxRateDraftBuilder.of());
190        return this;
191    }
192
193    /**
194     *  <p>Tax Rate used to tax a shipping expense if the Cart has the <code>External</code> TaxMode.</p>
195     * @param externalTaxRate value to be set
196     * @return Builder
197     */
198
199    public CartAddShippingMethodActionBuilder externalTaxRate(
200            @Nullable final com.commercetools.api.models.cart.ExternalTaxRateDraft externalTaxRate) {
201        this.externalTaxRate = externalTaxRate;
202        return this;
203    }
204
205    /**
206     *  <p>Deliveries to be shipped with the referenced Shipping Method.</p>
207     * @param deliveries value to be set
208     * @return Builder
209     */
210
211    public CartAddShippingMethodActionBuilder deliveries(
212            @Nullable final com.commercetools.api.models.order.DeliveryDraft... deliveries) {
213        this.deliveries = new ArrayList<>(Arrays.asList(deliveries));
214        return this;
215    }
216
217    /**
218     *  <p>Deliveries to be shipped with the referenced Shipping Method.</p>
219     * @param deliveries value to be set
220     * @return Builder
221     */
222
223    public CartAddShippingMethodActionBuilder deliveries(
224            @Nullable final java.util.List<com.commercetools.api.models.order.DeliveryDraft> deliveries) {
225        this.deliveries = deliveries;
226        return this;
227    }
228
229    /**
230     *  <p>Deliveries to be shipped with the referenced Shipping Method.</p>
231     * @param deliveries value to be set
232     * @return Builder
233     */
234
235    public CartAddShippingMethodActionBuilder plusDeliveries(
236            @Nullable final com.commercetools.api.models.order.DeliveryDraft... deliveries) {
237        if (this.deliveries == null) {
238            this.deliveries = new ArrayList<>();
239        }
240        this.deliveries.addAll(Arrays.asList(deliveries));
241        return this;
242    }
243
244    /**
245     *  <p>Deliveries to be shipped with the referenced Shipping Method.</p>
246     * @param builder function to build the deliveries value
247     * @return Builder
248     */
249
250    public CartAddShippingMethodActionBuilder plusDeliveries(
251            Function<com.commercetools.api.models.order.DeliveryDraftBuilder, com.commercetools.api.models.order.DeliveryDraftBuilder> builder) {
252        if (this.deliveries == null) {
253            this.deliveries = new ArrayList<>();
254        }
255        this.deliveries.add(builder.apply(com.commercetools.api.models.order.DeliveryDraftBuilder.of()).build());
256        return this;
257    }
258
259    /**
260     *  <p>Deliveries to be shipped with the referenced Shipping Method.</p>
261     * @param builder function to build the deliveries value
262     * @return Builder
263     */
264
265    public CartAddShippingMethodActionBuilder withDeliveries(
266            Function<com.commercetools.api.models.order.DeliveryDraftBuilder, com.commercetools.api.models.order.DeliveryDraftBuilder> builder) {
267        this.deliveries = new ArrayList<>();
268        this.deliveries.add(builder.apply(com.commercetools.api.models.order.DeliveryDraftBuilder.of()).build());
269        return this;
270    }
271
272    /**
273     *  <p>Deliveries to be shipped with the referenced Shipping Method.</p>
274     * @param builder function to build the deliveries value
275     * @return Builder
276     */
277
278    public CartAddShippingMethodActionBuilder addDeliveries(
279            Function<com.commercetools.api.models.order.DeliveryDraftBuilder, com.commercetools.api.models.order.DeliveryDraft> builder) {
280        return plusDeliveries(builder.apply(com.commercetools.api.models.order.DeliveryDraftBuilder.of()));
281    }
282
283    /**
284     *  <p>Deliveries to be shipped with the referenced Shipping Method.</p>
285     * @param builder function to build the deliveries value
286     * @return Builder
287     */
288
289    public CartAddShippingMethodActionBuilder setDeliveries(
290            Function<com.commercetools.api.models.order.DeliveryDraftBuilder, com.commercetools.api.models.order.DeliveryDraft> builder) {
291        return deliveries(builder.apply(com.commercetools.api.models.order.DeliveryDraftBuilder.of()));
292    }
293
294    /**
295     *  <p>Custom Fields for the Shipping Method.</p>
296     * @param builder function to build the custom value
297     * @return Builder
298     */
299
300    public CartAddShippingMethodActionBuilder custom(
301            Function<com.commercetools.api.models.type.CustomFieldsDraftBuilder, com.commercetools.api.models.type.CustomFieldsDraftBuilder> builder) {
302        this.custom = builder.apply(com.commercetools.api.models.type.CustomFieldsDraftBuilder.of()).build();
303        return this;
304    }
305
306    /**
307     *  <p>Custom Fields for the Shipping Method.</p>
308     * @param builder function to build the custom value
309     * @return Builder
310     */
311
312    public CartAddShippingMethodActionBuilder withCustom(
313            Function<com.commercetools.api.models.type.CustomFieldsDraftBuilder, com.commercetools.api.models.type.CustomFieldsDraft> builder) {
314        this.custom = builder.apply(com.commercetools.api.models.type.CustomFieldsDraftBuilder.of());
315        return this;
316    }
317
318    /**
319     *  <p>Custom Fields for the Shipping Method.</p>
320     * @param custom value to be set
321     * @return Builder
322     */
323
324    public CartAddShippingMethodActionBuilder custom(
325            @Nullable final com.commercetools.api.models.type.CustomFieldsDraft custom) {
326        this.custom = custom;
327        return this;
328    }
329
330    /**
331     *  <p>User-defined identifier for the Shipping that must be unique across the Cart with <code>Multiple</code> ShippingMode.</p>
332     * @return shippingKey
333     */
334
335    public String getShippingKey() {
336        return this.shippingKey;
337    }
338
339    /**
340     *  <p>RecourceIdentifier to a ShippingMethod to add to the Cart with <code>Multiple</code> ShippingMode. If the referenced Shipping Method has a predicate that does not match the Cart, an InvalidOperation error is returned.</p>
341     * @return shippingMethod
342     */
343
344    public com.commercetools.api.models.shipping_method.ShippingMethodResourceIdentifier getShippingMethod() {
345        return this.shippingMethod;
346    }
347
348    /**
349     *  <p>Determines the shipping rate and Tax Rate of the Line Items.</p>
350     * @return shippingAddress
351     */
352
353    public com.commercetools.api.models.common.BaseAddress getShippingAddress() {
354        return this.shippingAddress;
355    }
356
357    /**
358     *  <p>Input used to select a ShippingRatePriceTier. The data type of this field depends on the <code>shippingRateInputType.type</code> configured in the Project:</p>
359     *  <ul>
360     *   <li>If <code>CartClassification</code>, it must be ClassificationShippingRateInputDraft.</li>
361     *   <li>If <code>CartScore</code>, it must be ScoreShippingRateInputDraft.</li>
362     *   <li>If <code>CartValue</code>, it cannot be set.</li>
363     *  </ul>
364     * @return shippingRateInput
365     */
366
367    @Nullable
368    public com.commercetools.api.models.cart.ShippingRateInputDraft getShippingRateInput() {
369        return this.shippingRateInput;
370    }
371
372    /**
373     *  <p>Tax Rate used to tax a shipping expense if the Cart has the <code>External</code> TaxMode.</p>
374     * @return externalTaxRate
375     */
376
377    @Nullable
378    public com.commercetools.api.models.cart.ExternalTaxRateDraft getExternalTaxRate() {
379        return this.externalTaxRate;
380    }
381
382    /**
383     *  <p>Deliveries to be shipped with the referenced Shipping Method.</p>
384     * @return deliveries
385     */
386
387    @Nullable
388    public java.util.List<com.commercetools.api.models.order.DeliveryDraft> getDeliveries() {
389        return this.deliveries;
390    }
391
392    /**
393     *  <p>Custom Fields for the Shipping Method.</p>
394     * @return custom
395     */
396
397    @Nullable
398    public com.commercetools.api.models.type.CustomFieldsDraft getCustom() {
399        return this.custom;
400    }
401
402    /**
403     * builds CartAddShippingMethodAction with checking for non-null required values
404     * @return CartAddShippingMethodAction
405     */
406    public CartAddShippingMethodAction build() {
407        Objects.requireNonNull(shippingKey, CartAddShippingMethodAction.class + ": shippingKey is missing");
408        Objects.requireNonNull(shippingMethod, CartAddShippingMethodAction.class + ": shippingMethod is missing");
409        Objects.requireNonNull(shippingAddress, CartAddShippingMethodAction.class + ": shippingAddress is missing");
410        return new CartAddShippingMethodActionImpl(shippingKey, shippingMethod, shippingAddress, shippingRateInput,
411            externalTaxRate, deliveries, custom);
412    }
413
414    /**
415     * builds CartAddShippingMethodAction without checking for non-null required values
416     * @return CartAddShippingMethodAction
417     */
418    public CartAddShippingMethodAction buildUnchecked() {
419        return new CartAddShippingMethodActionImpl(shippingKey, shippingMethod, shippingAddress, shippingRateInput,
420            externalTaxRate, deliveries, custom);
421    }
422
423    /**
424     * factory method for an instance of CartAddShippingMethodActionBuilder
425     * @return builder
426     */
427    public static CartAddShippingMethodActionBuilder of() {
428        return new CartAddShippingMethodActionBuilder();
429    }
430
431    /**
432     * create builder for CartAddShippingMethodAction instance
433     * @param template instance with prefilled values for the builder
434     * @return builder
435     */
436    public static CartAddShippingMethodActionBuilder of(final CartAddShippingMethodAction template) {
437        CartAddShippingMethodActionBuilder builder = new CartAddShippingMethodActionBuilder();
438        builder.shippingKey = template.getShippingKey();
439        builder.shippingMethod = template.getShippingMethod();
440        builder.shippingAddress = template.getShippingAddress();
441        builder.shippingRateInput = template.getShippingRateInput();
442        builder.externalTaxRate = template.getExternalTaxRate();
443        builder.deliveries = template.getDeliveries();
444        builder.custom = template.getCustom();
445        return builder;
446    }
447
448}