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 * ZoneRateBuilder
012 * <hr>
013 * Example to create an instance using the builder pattern
014 * <div class=code-example>
015 * <pre><code class='java'>
016 *     ZoneRate zoneRate = ZoneRate.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 ZoneRateBuilder implements Builder<ZoneRate> {
025
026    private com.commercetools.api.models.zone.ZoneReference zone;
027
028    private java.util.List<com.commercetools.api.models.shipping_method.ShippingRate> shippingRates;
029
030    /**
031     *  <p>Zone for which the shipping rates are valid.</p>
032     * @param builder function to build the zone value
033     * @return Builder
034     */
035
036    public ZoneRateBuilder zone(
037            Function<com.commercetools.api.models.zone.ZoneReferenceBuilder, com.commercetools.api.models.zone.ZoneReferenceBuilder> builder) {
038        this.zone = builder.apply(com.commercetools.api.models.zone.ZoneReferenceBuilder.of()).build();
039        return this;
040    }
041
042    /**
043     *  <p>Zone for which the shipping rates are valid.</p>
044     * @param builder function to build the zone value
045     * @return Builder
046     */
047
048    public ZoneRateBuilder withZone(
049            Function<com.commercetools.api.models.zone.ZoneReferenceBuilder, com.commercetools.api.models.zone.ZoneReference> builder) {
050        this.zone = builder.apply(com.commercetools.api.models.zone.ZoneReferenceBuilder.of());
051        return this;
052    }
053
054    /**
055     *  <p>Zone for which the shipping rates are valid.</p>
056     * @param zone value to be set
057     * @return Builder
058     */
059
060    public ZoneRateBuilder zone(final com.commercetools.api.models.zone.ZoneReference zone) {
061        this.zone = zone;
062        return this;
063    }
064
065    /**
066     *  <p>Shipping rates defined per currency.</p>
067     * @param shippingRates value to be set
068     * @return Builder
069     */
070
071    public ZoneRateBuilder shippingRates(
072            final com.commercetools.api.models.shipping_method.ShippingRate... shippingRates) {
073        this.shippingRates = new ArrayList<>(Arrays.asList(shippingRates));
074        return this;
075    }
076
077    /**
078     *  <p>Shipping rates defined per currency.</p>
079     * @param shippingRates value to be set
080     * @return Builder
081     */
082
083    public ZoneRateBuilder shippingRates(
084            final java.util.List<com.commercetools.api.models.shipping_method.ShippingRate> shippingRates) {
085        this.shippingRates = shippingRates;
086        return this;
087    }
088
089    /**
090     *  <p>Shipping rates defined per currency.</p>
091     * @param shippingRates value to be set
092     * @return Builder
093     */
094
095    public ZoneRateBuilder plusShippingRates(
096            final com.commercetools.api.models.shipping_method.ShippingRate... 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 defined per currency.</p>
106     * @param builder function to build the shippingRates value
107     * @return Builder
108     */
109
110    public ZoneRateBuilder plusShippingRates(
111            Function<com.commercetools.api.models.shipping_method.ShippingRateBuilder, com.commercetools.api.models.shipping_method.ShippingRateBuilder> 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.ShippingRateBuilder.of()).build());
117        return this;
118    }
119
120    /**
121     *  <p>Shipping rates defined per currency.</p>
122     * @param builder function to build the shippingRates value
123     * @return Builder
124     */
125
126    public ZoneRateBuilder withShippingRates(
127            Function<com.commercetools.api.models.shipping_method.ShippingRateBuilder, com.commercetools.api.models.shipping_method.ShippingRateBuilder> builder) {
128        this.shippingRates = new ArrayList<>();
129        this.shippingRates
130                .add(builder.apply(com.commercetools.api.models.shipping_method.ShippingRateBuilder.of()).build());
131        return this;
132    }
133
134    /**
135     *  <p>Shipping rates defined per currency.</p>
136     * @param builder function to build the shippingRates value
137     * @return Builder
138     */
139
140    public ZoneRateBuilder addShippingRates(
141            Function<com.commercetools.api.models.shipping_method.ShippingRateBuilder, com.commercetools.api.models.shipping_method.ShippingRate> builder) {
142        return plusShippingRates(builder.apply(com.commercetools.api.models.shipping_method.ShippingRateBuilder.of()));
143    }
144
145    /**
146     *  <p>Shipping rates defined per currency.</p>
147     * @param builder function to build the shippingRates value
148     * @return Builder
149     */
150
151    public ZoneRateBuilder setShippingRates(
152            Function<com.commercetools.api.models.shipping_method.ShippingRateBuilder, com.commercetools.api.models.shipping_method.ShippingRate> builder) {
153        return shippingRates(builder.apply(com.commercetools.api.models.shipping_method.ShippingRateBuilder.of()));
154    }
155
156    /**
157     *  <p>Zone for which the shipping rates are valid.</p>
158     * @return zone
159     */
160
161    public com.commercetools.api.models.zone.ZoneReference getZone() {
162        return this.zone;
163    }
164
165    /**
166     *  <p>Shipping rates defined per currency.</p>
167     * @return shippingRates
168     */
169
170    public java.util.List<com.commercetools.api.models.shipping_method.ShippingRate> getShippingRates() {
171        return this.shippingRates;
172    }
173
174    /**
175     * builds ZoneRate with checking for non-null required values
176     * @return ZoneRate
177     */
178    public ZoneRate build() {
179        Objects.requireNonNull(zone, ZoneRate.class + ": zone is missing");
180        Objects.requireNonNull(shippingRates, ZoneRate.class + ": shippingRates is missing");
181        return new ZoneRateImpl(zone, shippingRates);
182    }
183
184    /**
185     * builds ZoneRate without checking for non-null required values
186     * @return ZoneRate
187     */
188    public ZoneRate buildUnchecked() {
189        return new ZoneRateImpl(zone, shippingRates);
190    }
191
192    /**
193     * factory method for an instance of ZoneRateBuilder
194     * @return builder
195     */
196    public static ZoneRateBuilder of() {
197        return new ZoneRateBuilder();
198    }
199
200    /**
201     * create builder for ZoneRate instance
202     * @param template instance with prefilled values for the builder
203     * @return builder
204     */
205    public static ZoneRateBuilder of(final ZoneRate template) {
206        ZoneRateBuilder builder = new ZoneRateBuilder();
207        builder.zone = template.getZone();
208        builder.shippingRates = template.getShippingRates();
209        return builder;
210    }
211
212}