001
002package com.commercetools.api.models.shipping_method;
003
004import java.util.*;
005import java.util.function.Function;
006
007import io.vrap.rmf.base.client.Builder;
008import io.vrap.rmf.base.client.utils.Generated;
009
010/**
011 * ZoneRateDraftBuilder
012 * <hr>
013 * Example to create an instance using the builder pattern
014 * <div class=code-example>
015 * <pre><code class='java'>
016 *     ZoneRateDraft zoneRateDraft = ZoneRateDraft.builder()
017 *             .zone(zoneBuilder -> zoneBuilder)
018 *             .plusShippingRates(shippingRatesBuilder -> shippingRatesBuilder)
019 *             .build()
020 * </code></pre>
021 * </div>
022 */
023@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
024public class ZoneRateDraftBuilder implements Builder<ZoneRateDraft> {
025
026    private com.commercetools.api.models.zone.ZoneResourceIdentifier zone;
027
028    private java.util.List<com.commercetools.api.models.shipping_method.ShippingRateDraft> shippingRates;
029
030    /**
031     *  <p>Sets the Zone for which the shippng rates are valid.</p>
032     * @param builder function to build the zone value
033     * @return Builder
034     */
035
036    public ZoneRateDraftBuilder zone(
037            Function<com.commercetools.api.models.zone.ZoneResourceIdentifierBuilder, com.commercetools.api.models.zone.ZoneResourceIdentifierBuilder> builder) {
038        this.zone = builder.apply(com.commercetools.api.models.zone.ZoneResourceIdentifierBuilder.of()).build();
039        return this;
040    }
041
042    /**
043     *  <p>Sets the Zone for which the shippng rates are valid.</p>
044     * @param builder function to build the zone value
045     * @return Builder
046     */
047
048    public ZoneRateDraftBuilder withZone(
049            Function<com.commercetools.api.models.zone.ZoneResourceIdentifierBuilder, com.commercetools.api.models.zone.ZoneResourceIdentifier> builder) {
050        this.zone = builder.apply(com.commercetools.api.models.zone.ZoneResourceIdentifierBuilder.of());
051        return this;
052    }
053
054    /**
055     *  <p>Sets the Zone for which the shippng rates are valid.</p>
056     * @param zone value to be set
057     * @return Builder
058     */
059
060    public ZoneRateDraftBuilder zone(final com.commercetools.api.models.zone.ZoneResourceIdentifier zone) {
061        this.zone = zone;
062        return this;
063    }
064
065    /**
066     *  <p>Shipping rates for the <code>currencies</code> configured in the Project. The array must not contain two ShippingRates with the same CurrencyCode.</p>
067     * @param shippingRates value to be set
068     * @return Builder
069     */
070
071    public ZoneRateDraftBuilder shippingRates(
072            final com.commercetools.api.models.shipping_method.ShippingRateDraft... shippingRates) {
073        this.shippingRates = new ArrayList<>(Arrays.asList(shippingRates));
074        return this;
075    }
076
077    /**
078     *  <p>Shipping rates for the <code>currencies</code> configured in the Project. The array must not contain two ShippingRates with the same CurrencyCode.</p>
079     * @param shippingRates value to be set
080     * @return Builder
081     */
082
083    public ZoneRateDraftBuilder shippingRates(
084            final java.util.List<com.commercetools.api.models.shipping_method.ShippingRateDraft> shippingRates) {
085        this.shippingRates = shippingRates;
086        return this;
087    }
088
089    /**
090     *  <p>Shipping rates for the <code>currencies</code> configured in the Project. The array must not contain two ShippingRates with the same CurrencyCode.</p>
091     * @param shippingRates value to be set
092     * @return Builder
093     */
094
095    public ZoneRateDraftBuilder plusShippingRates(
096            final com.commercetools.api.models.shipping_method.ShippingRateDraft... shippingRates) {
097        if (this.shippingRates == null) {
098            this.shippingRates = new ArrayList<>();
099        }
100        this.shippingRates.addAll(Arrays.asList(shippingRates));
101        return this;
102    }
103
104    /**
105     *  <p>Shipping rates for the <code>currencies</code> configured in the Project. The array must not contain two ShippingRates with the same CurrencyCode.</p>
106     * @param builder function to build the shippingRates value
107     * @return Builder
108     */
109
110    public ZoneRateDraftBuilder plusShippingRates(
111            Function<com.commercetools.api.models.shipping_method.ShippingRateDraftBuilder, com.commercetools.api.models.shipping_method.ShippingRateDraftBuilder> builder) {
112        if (this.shippingRates == null) {
113            this.shippingRates = new ArrayList<>();
114        }
115        this.shippingRates
116                .add(builder.apply(com.commercetools.api.models.shipping_method.ShippingRateDraftBuilder.of()).build());
117        return this;
118    }
119
120    /**
121     *  <p>Shipping rates for the <code>currencies</code> configured in the Project. The array must not contain two ShippingRates with the same CurrencyCode.</p>
122     * @param builder function to build the shippingRates value
123     * @return Builder
124     */
125
126    public ZoneRateDraftBuilder withShippingRates(
127            Function<com.commercetools.api.models.shipping_method.ShippingRateDraftBuilder, com.commercetools.api.models.shipping_method.ShippingRateDraftBuilder> builder) {
128        this.shippingRates = new ArrayList<>();
129        this.shippingRates
130                .add(builder.apply(com.commercetools.api.models.shipping_method.ShippingRateDraftBuilder.of()).build());
131        return this;
132    }
133
134    /**
135     *  <p>Shipping rates for the <code>currencies</code> configured in the Project. The array must not contain two ShippingRates with the same CurrencyCode.</p>
136     * @param builder function to build the shippingRates value
137     * @return Builder
138     */
139
140    public ZoneRateDraftBuilder addShippingRates(
141            Function<com.commercetools.api.models.shipping_method.ShippingRateDraftBuilder, com.commercetools.api.models.shipping_method.ShippingRateDraft> builder) {
142        return plusShippingRates(
143            builder.apply(com.commercetools.api.models.shipping_method.ShippingRateDraftBuilder.of()));
144    }
145
146    /**
147     *  <p>Shipping rates for the <code>currencies</code> configured in the Project. The array must not contain two ShippingRates with the same CurrencyCode.</p>
148     * @param builder function to build the shippingRates value
149     * @return Builder
150     */
151
152    public ZoneRateDraftBuilder setShippingRates(
153            Function<com.commercetools.api.models.shipping_method.ShippingRateDraftBuilder, com.commercetools.api.models.shipping_method.ShippingRateDraft> builder) {
154        return shippingRates(builder.apply(com.commercetools.api.models.shipping_method.ShippingRateDraftBuilder.of()));
155    }
156
157    /**
158     *  <p>Sets the Zone for which the shippng rates are valid.</p>
159     * @return zone
160     */
161
162    public com.commercetools.api.models.zone.ZoneResourceIdentifier getZone() {
163        return this.zone;
164    }
165
166    /**
167     *  <p>Shipping rates for the <code>currencies</code> configured in the Project. The array must not contain two ShippingRates with the same CurrencyCode.</p>
168     * @return shippingRates
169     */
170
171    public java.util.List<com.commercetools.api.models.shipping_method.ShippingRateDraft> getShippingRates() {
172        return this.shippingRates;
173    }
174
175    /**
176     * builds ZoneRateDraft with checking for non-null required values
177     * @return ZoneRateDraft
178     */
179    public ZoneRateDraft build() {
180        Objects.requireNonNull(zone, ZoneRateDraft.class + ": zone is missing");
181        Objects.requireNonNull(shippingRates, ZoneRateDraft.class + ": shippingRates is missing");
182        return new ZoneRateDraftImpl(zone, shippingRates);
183    }
184
185    /**
186     * builds ZoneRateDraft without checking for non-null required values
187     * @return ZoneRateDraft
188     */
189    public ZoneRateDraft buildUnchecked() {
190        return new ZoneRateDraftImpl(zone, shippingRates);
191    }
192
193    /**
194     * factory method for an instance of ZoneRateDraftBuilder
195     * @return builder
196     */
197    public static ZoneRateDraftBuilder of() {
198        return new ZoneRateDraftBuilder();
199    }
200
201    /**
202     * create builder for ZoneRateDraft instance
203     * @param template instance with prefilled values for the builder
204     * @return builder
205     */
206    public static ZoneRateDraftBuilder of(final ZoneRateDraft template) {
207        ZoneRateDraftBuilder builder = new ZoneRateDraftBuilder();
208        builder.zone = template.getZone();
209        builder.shippingRates = template.getShippingRates();
210        return builder;
211    }
212
213}