001
002package com.commercetools.importapi.models.orders;
003
004import java.time.*;
005import java.util.*;
006import java.util.function.Function;
007import java.util.stream.Collectors;
008
009import javax.annotation.Nullable;
010import javax.validation.Valid;
011
012import com.commercetools.importapi.models.common.Image;
013import com.commercetools.importapi.models.common.ProductVariantKeyReference;
014import com.commercetools.importapi.models.productvariants.Attribute;
015import com.fasterxml.jackson.annotation.*;
016import com.fasterxml.jackson.databind.annotation.*;
017
018import io.vrap.rmf.base.client.utils.Generated;
019
020/**
021 * LineItemProductVariantImportDraft
022 *
023 * <hr>
024 * Example to create an instance using the builder pattern
025 * <div class=code-example>
026 * <pre><code class='java'>
027 *     LineItemProductVariantImportDraft lineItemProductVariantImportDraft = LineItemProductVariantImportDraft.builder()
028 *             .build()
029 * </code></pre>
030 * </div>
031 */
032@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
033@JsonDeserialize(as = LineItemProductVariantImportDraftImpl.class)
034public interface LineItemProductVariantImportDraft
035        extends io.vrap.rmf.base.client.Draft<LineItemProductVariantImportDraft> {
036
037    /**
038     *  <p>Maps to <code>ProductVariant.product</code>.</p>
039     * @return productVariant
040     */
041    @Valid
042    @JsonProperty("productVariant")
043    public ProductVariantKeyReference getProductVariant();
044
045    /**
046     *  <p>Maps to <code>ProductVariantImportDraft.sku</code>.</p>
047     * @return sku
048     */
049
050    @JsonProperty("sku")
051    public String getSku();
052
053    /**
054     *  <p>Maps to <code>ProductVariantImportDraft.prices</code></p>
055     * @return prices
056     */
057    @Valid
058    @JsonProperty("prices")
059    public List<LineItemPrice> getPrices();
060
061    /**
062     *  <p>Maps to <code>ProductVariantImportDraft.attributes</code></p>
063     * @return attributes
064     */
065    @Valid
066    @JsonProperty("attributes")
067    public List<Attribute> getAttributes();
068
069    /**
070     *  <p>Maps to <code>ProductVariantImportDraft.images</code>.</p>
071     * @return images
072     */
073    @Valid
074    @JsonProperty("images")
075    public List<Image> getImages();
076
077    /**
078     *  <p>Maps to <code>ProductVariant.product</code>.</p>
079     * @param productVariant value to be set
080     */
081
082    public void setProductVariant(final ProductVariantKeyReference productVariant);
083
084    /**
085     *  <p>Maps to <code>ProductVariantImportDraft.sku</code>.</p>
086     * @param sku value to be set
087     */
088
089    public void setSku(final String sku);
090
091    /**
092     *  <p>Maps to <code>ProductVariantImportDraft.prices</code></p>
093     * @param prices values to be set
094     */
095
096    @JsonIgnore
097    public void setPrices(final LineItemPrice... prices);
098
099    /**
100     *  <p>Maps to <code>ProductVariantImportDraft.prices</code></p>
101     * @param prices values to be set
102     */
103
104    public void setPrices(final List<LineItemPrice> prices);
105
106    /**
107     *  <p>Maps to <code>ProductVariantImportDraft.attributes</code></p>
108     * @param attributes values to be set
109     */
110
111    @JsonIgnore
112    public void setAttributes(final Attribute... attributes);
113
114    /**
115     *  <p>Maps to <code>ProductVariantImportDraft.attributes</code></p>
116     * @param attributes values to be set
117     */
118
119    public void setAttributes(final List<Attribute> attributes);
120
121    /**
122     *  <p>Maps to <code>ProductVariantImportDraft.images</code>.</p>
123     * @param images values to be set
124     */
125
126    @JsonIgnore
127    public void setImages(final Image... images);
128
129    /**
130     *  <p>Maps to <code>ProductVariantImportDraft.images</code>.</p>
131     * @param images values to be set
132     */
133
134    public void setImages(final List<Image> images);
135
136    /**
137     * factory method
138     * @return instance of LineItemProductVariantImportDraft
139     */
140    public static LineItemProductVariantImportDraft of() {
141        return new LineItemProductVariantImportDraftImpl();
142    }
143
144    /**
145     * factory method to create a shallow copy LineItemProductVariantImportDraft
146     * @param template instance to be copied
147     * @return copy instance
148     */
149    public static LineItemProductVariantImportDraft of(final LineItemProductVariantImportDraft template) {
150        LineItemProductVariantImportDraftImpl instance = new LineItemProductVariantImportDraftImpl();
151        instance.setProductVariant(template.getProductVariant());
152        instance.setSku(template.getSku());
153        instance.setPrices(template.getPrices());
154        instance.setAttributes(template.getAttributes());
155        instance.setImages(template.getImages());
156        return instance;
157    }
158
159    /**
160     * factory method to create a deep copy of LineItemProductVariantImportDraft
161     * @param template instance to be copied
162     * @return copy instance
163     */
164    @Nullable
165    public static LineItemProductVariantImportDraft deepCopy(
166            @Nullable final LineItemProductVariantImportDraft template) {
167        if (template == null) {
168            return null;
169        }
170        LineItemProductVariantImportDraftImpl instance = new LineItemProductVariantImportDraftImpl();
171        instance.setProductVariant(com.commercetools.importapi.models.common.ProductVariantKeyReference
172                .deepCopy(template.getProductVariant()));
173        instance.setSku(template.getSku());
174        instance.setPrices(Optional.ofNullable(template.getPrices())
175                .map(t -> t.stream()
176                        .map(com.commercetools.importapi.models.orders.LineItemPrice::deepCopy)
177                        .collect(Collectors.toList()))
178                .orElse(null));
179        instance.setAttributes(Optional.ofNullable(template.getAttributes())
180                .map(t -> t.stream()
181                        .map(com.commercetools.importapi.models.productvariants.Attribute::deepCopy)
182                        .collect(Collectors.toList()))
183                .orElse(null));
184        instance.setImages(Optional.ofNullable(template.getImages())
185                .map(t -> t.stream()
186                        .map(com.commercetools.importapi.models.common.Image::deepCopy)
187                        .collect(Collectors.toList()))
188                .orElse(null));
189        return instance;
190    }
191
192    /**
193     * builder factory method for LineItemProductVariantImportDraft
194     * @return builder
195     */
196    public static LineItemProductVariantImportDraftBuilder builder() {
197        return LineItemProductVariantImportDraftBuilder.of();
198    }
199
200    /**
201     * create builder for LineItemProductVariantImportDraft instance
202     * @param template instance with prefilled values for the builder
203     * @return builder
204     */
205    public static LineItemProductVariantImportDraftBuilder builder(final LineItemProductVariantImportDraft template) {
206        return LineItemProductVariantImportDraftBuilder.of(template);
207    }
208
209    /**
210     * accessor map function
211     * @param <T> mapped type
212     * @param helper function to map the object
213     * @return mapped value
214     */
215    default <T> T withLineItemProductVariantImportDraft(Function<LineItemProductVariantImportDraft, T> helper) {
216        return helper.apply(this);
217    }
218
219    /**
220     * gives a TypeReference for usage with Jackson DataBind
221     * @return TypeReference
222     */
223    public static com.fasterxml.jackson.core.type.TypeReference<LineItemProductVariantImportDraft> typeReference() {
224        return new com.fasterxml.jackson.core.type.TypeReference<LineItemProductVariantImportDraft>() {
225            @Override
226            public String toString() {
227                return "TypeReference<LineItemProductVariantImportDraft>";
228            }
229        };
230    }
231}