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}