001
002package com.commercetools.api.models.message;
003
004import java.time.*;
005import java.util.*;
006import java.util.function.Function;
007
008import javax.annotation.Nullable;
009import javax.validation.Valid;
010import javax.validation.constraints.NotNull;
011
012import com.commercetools.api.models.common.Price;
013import com.fasterxml.jackson.annotation.*;
014import com.fasterxml.jackson.databind.annotation.*;
015
016import io.vrap.rmf.base.client.utils.Generated;
017
018/**
019 *  <p>Generated after a successful Change Embedded Price update action.</p>
020 *
021 * <hr>
022 * Example to create an instance using the builder pattern
023 * <div class=code-example>
024 * <pre><code class='java'>
025 *     ProductPriceChangedMessage productPriceChangedMessage = ProductPriceChangedMessage.builder()
026 *             .id("{id}")
027 *             .version(0.3)
028 *             .createdAt(ZonedDateTime.parse("2022-01-01T12:00:00.301Z"))
029 *             .lastModifiedAt(ZonedDateTime.parse("2022-01-01T12:00:00.301Z"))
030 *             .sequenceNumber(0.3)
031 *             .resource(resourceBuilder -> resourceBuilder)
032 *             .resourceVersion(0.3)
033 *             .variantId(0.3)
034 *             .oldPrice(oldPriceBuilder -> oldPriceBuilder)
035 *             .newPrice(newPriceBuilder -> newPriceBuilder)
036 *             .staged(true)
037 *             .build()
038 * </code></pre>
039 * </div>
040 */
041@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
042@JsonDeserialize(as = ProductPriceChangedMessageImpl.class)
043public interface ProductPriceChangedMessage extends Message {
044
045    /**
046     * discriminator value for ProductPriceChangedMessage
047     */
048    String PRODUCT_PRICE_CHANGED = "ProductPriceChanged";
049
050    /**
051     *  <p>Unique identifier of the ProductVariant for which the Price was changed.</p>
052     * @return variantId
053     */
054    @NotNull
055    @JsonProperty("variantId")
056    public Long getVariantId();
057
058    /**
059     *  <p>The current Embedded Price before the Change Embedded Price update action.</p>
060     * @return oldPrice
061     */
062    @NotNull
063    @Valid
064    @JsonProperty("oldPrice")
065    public Price getOldPrice();
066
067    /**
068     *  <p>The Embedded Price after the Change Embedded Price update action.</p>
069     * @return newPrice
070     */
071    @NotNull
072    @Valid
073    @JsonProperty("newPrice")
074    public Price getNewPrice();
075
076    /**
077     *  <p>Whether the update was only applied to the staged Product Projection.</p>
078     * @return staged
079     */
080    @NotNull
081    @JsonProperty("staged")
082    public Boolean getStaged();
083
084    /**
085     *  <p>The staged Embedded Price before the Change Embedded Price update action.</p>
086     * @return oldStagedPrice
087     */
088    @Valid
089    @JsonProperty("oldStagedPrice")
090    public Price getOldStagedPrice();
091
092    /**
093     *  <p>Unique identifier of the ProductVariant for which the Price was changed.</p>
094     * @param variantId value to be set
095     */
096
097    public void setVariantId(final Long variantId);
098
099    /**
100     *  <p>The current Embedded Price before the Change Embedded Price update action.</p>
101     * @param oldPrice value to be set
102     */
103
104    public void setOldPrice(final Price oldPrice);
105
106    /**
107     *  <p>The Embedded Price after the Change Embedded Price update action.</p>
108     * @param newPrice value to be set
109     */
110
111    public void setNewPrice(final Price newPrice);
112
113    /**
114     *  <p>Whether the update was only applied to the staged Product Projection.</p>
115     * @param staged value to be set
116     */
117
118    public void setStaged(final Boolean staged);
119
120    /**
121     *  <p>The staged Embedded Price before the Change Embedded Price update action.</p>
122     * @param oldStagedPrice value to be set
123     */
124
125    public void setOldStagedPrice(final Price oldStagedPrice);
126
127    /**
128     * factory method
129     * @return instance of ProductPriceChangedMessage
130     */
131    public static ProductPriceChangedMessage of() {
132        return new ProductPriceChangedMessageImpl();
133    }
134
135    /**
136     * factory method to create a shallow copy ProductPriceChangedMessage
137     * @param template instance to be copied
138     * @return copy instance
139     */
140    public static ProductPriceChangedMessage of(final ProductPriceChangedMessage template) {
141        ProductPriceChangedMessageImpl instance = new ProductPriceChangedMessageImpl();
142        instance.setId(template.getId());
143        instance.setVersion(template.getVersion());
144        instance.setCreatedAt(template.getCreatedAt());
145        instance.setLastModifiedAt(template.getLastModifiedAt());
146        instance.setLastModifiedBy(template.getLastModifiedBy());
147        instance.setCreatedBy(template.getCreatedBy());
148        instance.setSequenceNumber(template.getSequenceNumber());
149        instance.setResource(template.getResource());
150        instance.setResourceVersion(template.getResourceVersion());
151        instance.setResourceUserProvidedIdentifiers(template.getResourceUserProvidedIdentifiers());
152        instance.setVariantId(template.getVariantId());
153        instance.setOldPrice(template.getOldPrice());
154        instance.setNewPrice(template.getNewPrice());
155        instance.setStaged(template.getStaged());
156        instance.setOldStagedPrice(template.getOldStagedPrice());
157        return instance;
158    }
159
160    /**
161     * factory method to create a deep copy of ProductPriceChangedMessage
162     * @param template instance to be copied
163     * @return copy instance
164     */
165    @Nullable
166    public static ProductPriceChangedMessage deepCopy(@Nullable final ProductPriceChangedMessage template) {
167        if (template == null) {
168            return null;
169        }
170        ProductPriceChangedMessageImpl instance = new ProductPriceChangedMessageImpl();
171        instance.setId(template.getId());
172        instance.setVersion(template.getVersion());
173        instance.setCreatedAt(template.getCreatedAt());
174        instance.setLastModifiedAt(template.getLastModifiedAt());
175        instance.setLastModifiedBy(
176            com.commercetools.api.models.common.LastModifiedBy.deepCopy(template.getLastModifiedBy()));
177        instance.setCreatedBy(com.commercetools.api.models.common.CreatedBy.deepCopy(template.getCreatedBy()));
178        instance.setSequenceNumber(template.getSequenceNumber());
179        instance.setResource(com.commercetools.api.models.common.Reference.deepCopy(template.getResource()));
180        instance.setResourceVersion(template.getResourceVersion());
181        instance.setResourceUserProvidedIdentifiers(com.commercetools.api.models.message.UserProvidedIdentifiers
182                .deepCopy(template.getResourceUserProvidedIdentifiers()));
183        instance.setVariantId(template.getVariantId());
184        instance.setOldPrice(com.commercetools.api.models.common.Price.deepCopy(template.getOldPrice()));
185        instance.setNewPrice(com.commercetools.api.models.common.Price.deepCopy(template.getNewPrice()));
186        instance.setStaged(template.getStaged());
187        instance.setOldStagedPrice(com.commercetools.api.models.common.Price.deepCopy(template.getOldStagedPrice()));
188        return instance;
189    }
190
191    /**
192     * builder factory method for ProductPriceChangedMessage
193     * @return builder
194     */
195    public static ProductPriceChangedMessageBuilder builder() {
196        return ProductPriceChangedMessageBuilder.of();
197    }
198
199    /**
200     * create builder for ProductPriceChangedMessage instance
201     * @param template instance with prefilled values for the builder
202     * @return builder
203     */
204    public static ProductPriceChangedMessageBuilder builder(final ProductPriceChangedMessage template) {
205        return ProductPriceChangedMessageBuilder.of(template);
206    }
207
208    /**
209     * accessor map function
210     * @param <T> mapped type
211     * @param helper function to map the object
212     * @return mapped value
213     */
214    default <T> T withProductPriceChangedMessage(Function<ProductPriceChangedMessage, T> helper) {
215        return helper.apply(this);
216    }
217
218    /**
219     * gives a TypeReference for usage with Jackson DataBind
220     * @return TypeReference
221     */
222    public static com.fasterxml.jackson.core.type.TypeReference<ProductPriceChangedMessage> typeReference() {
223        return new com.fasterxml.jackson.core.type.TypeReference<ProductPriceChangedMessage>() {
224            @Override
225            public String toString() {
226                return "TypeReference<ProductPriceChangedMessage>";
227            }
228        };
229    }
230}