001
002package com.commercetools.history.models.common;
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 * ProductVariantAvailabilityBuilder
012 * <hr>
013 * Example to create an instance using the builder pattern
014 * <div class=code-example>
015 * <pre><code class='java'>
016 *     ProductVariantAvailability productVariantAvailability = ProductVariantAvailability.builder()
017 *             .isOnStock(true)
018 *             .restockableInDays(1)
019 *             .availableQuantity(1)
020 *             .channels(channelsBuilder -> channelsBuilder)
021 *             .build()
022 * </code></pre>
023 * </div>
024 */
025@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
026public class ProductVariantAvailabilityBuilder implements Builder<ProductVariantAvailability> {
027
028    private Boolean isOnStock;
029
030    private Integer restockableInDays;
031
032    private Integer availableQuantity;
033
034    private com.commercetools.history.models.common.ProductVariantChannelAvailabilityMap channels;
035
036    /**
037     * set the value to the isOnStock
038     * @param isOnStock value to be set
039     * @return Builder
040     */
041
042    public ProductVariantAvailabilityBuilder isOnStock(final Boolean isOnStock) {
043        this.isOnStock = isOnStock;
044        return this;
045    }
046
047    /**
048     * set the value to the restockableInDays
049     * @param restockableInDays value to be set
050     * @return Builder
051     */
052
053    public ProductVariantAvailabilityBuilder restockableInDays(final Integer restockableInDays) {
054        this.restockableInDays = restockableInDays;
055        return this;
056    }
057
058    /**
059     * set the value to the availableQuantity
060     * @param availableQuantity value to be set
061     * @return Builder
062     */
063
064    public ProductVariantAvailabilityBuilder availableQuantity(final Integer availableQuantity) {
065        this.availableQuantity = availableQuantity;
066        return this;
067    }
068
069    /**
070     * set the value to the channels using the builder function
071     * @param builder function to build the channels value
072     * @return Builder
073     */
074
075    public ProductVariantAvailabilityBuilder channels(
076            Function<com.commercetools.history.models.common.ProductVariantChannelAvailabilityMapBuilder, com.commercetools.history.models.common.ProductVariantChannelAvailabilityMapBuilder> builder) {
077        this.channels = builder
078                .apply(com.commercetools.history.models.common.ProductVariantChannelAvailabilityMapBuilder.of())
079                .build();
080        return this;
081    }
082
083    /**
084     * set the value to the channels using the builder function
085     * @param builder function to build the channels value
086     * @return Builder
087     */
088
089    public ProductVariantAvailabilityBuilder withChannels(
090            Function<com.commercetools.history.models.common.ProductVariantChannelAvailabilityMapBuilder, com.commercetools.history.models.common.ProductVariantChannelAvailabilityMap> builder) {
091        this.channels = builder
092                .apply(com.commercetools.history.models.common.ProductVariantChannelAvailabilityMapBuilder.of());
093        return this;
094    }
095
096    /**
097     * set the value to the channels
098     * @param channels value to be set
099     * @return Builder
100     */
101
102    public ProductVariantAvailabilityBuilder channels(
103            final com.commercetools.history.models.common.ProductVariantChannelAvailabilityMap channels) {
104        this.channels = channels;
105        return this;
106    }
107
108    /**
109     * value of isOnStock}
110     * @return isOnStock
111     */
112
113    public Boolean getIsOnStock() {
114        return this.isOnStock;
115    }
116
117    /**
118     * value of restockableInDays}
119     * @return restockableInDays
120     */
121
122    public Integer getRestockableInDays() {
123        return this.restockableInDays;
124    }
125
126    /**
127     * value of availableQuantity}
128     * @return availableQuantity
129     */
130
131    public Integer getAvailableQuantity() {
132        return this.availableQuantity;
133    }
134
135    /**
136     * value of channels}
137     * @return channels
138     */
139
140    public com.commercetools.history.models.common.ProductVariantChannelAvailabilityMap getChannels() {
141        return this.channels;
142    }
143
144    /**
145     * builds ProductVariantAvailability with checking for non-null required values
146     * @return ProductVariantAvailability
147     */
148    public ProductVariantAvailability build() {
149        Objects.requireNonNull(isOnStock, ProductVariantAvailability.class + ": isOnStock is missing");
150        Objects.requireNonNull(restockableInDays, ProductVariantAvailability.class + ": restockableInDays is missing");
151        Objects.requireNonNull(availableQuantity, ProductVariantAvailability.class + ": availableQuantity is missing");
152        Objects.requireNonNull(channels, ProductVariantAvailability.class + ": channels is missing");
153        return new ProductVariantAvailabilityImpl(isOnStock, restockableInDays, availableQuantity, channels);
154    }
155
156    /**
157     * builds ProductVariantAvailability without checking for non-null required values
158     * @return ProductVariantAvailability
159     */
160    public ProductVariantAvailability buildUnchecked() {
161        return new ProductVariantAvailabilityImpl(isOnStock, restockableInDays, availableQuantity, channels);
162    }
163
164    /**
165     * factory method for an instance of ProductVariantAvailabilityBuilder
166     * @return builder
167     */
168    public static ProductVariantAvailabilityBuilder of() {
169        return new ProductVariantAvailabilityBuilder();
170    }
171
172    /**
173     * create builder for ProductVariantAvailability instance
174     * @param template instance with prefilled values for the builder
175     * @return builder
176     */
177    public static ProductVariantAvailabilityBuilder of(final ProductVariantAvailability template) {
178        ProductVariantAvailabilityBuilder builder = new ProductVariantAvailabilityBuilder();
179        builder.isOnStock = template.getIsOnStock();
180        builder.restockableInDays = template.getRestockableInDays();
181        builder.availableQuantity = template.getAvailableQuantity();
182        builder.channels = template.getChannels();
183        return builder;
184    }
185
186}