001
002package com.commercetools.history.models.change_value;
003
004import java.time.*;
005import java.util.*;
006import java.util.function.Function;
007
008import javax.annotation.Nullable;
009import javax.validation.constraints.NotNull;
010
011import com.fasterxml.jackson.annotation.*;
012import com.fasterxml.jackson.databind.annotation.*;
013
014import io.vrap.rmf.base.client.utils.Generated;
015
016/**
017 * ChangeTargetChangeValue
018 *
019 * <hr>
020 * Example to create a subtype instance using the builder pattern
021 * <div class=code-example>
022 * <pre><code class='java'>
023 *     ChangeTargetChangeValue changeTargetChangeValue = ChangeTargetChangeValue.customLineItemsBuilder()
024 *             predicate("{predicate}")
025 *             .build()
026 * </code></pre>
027 * </div>
028 */
029@JsonSubTypes({
030        @JsonSubTypes.Type(value = com.commercetools.history.models.change_value.ChangeTargetCustomLineItemsChangeValueImpl.class, name = ChangeTargetCustomLineItemsChangeValue.CUSTOM_LINE_ITEMS),
031        @JsonSubTypes.Type(value = com.commercetools.history.models.change_value.ChangeTargetLineItemsChangeValueImpl.class, name = ChangeTargetLineItemsChangeValue.LINE_ITEMS),
032        @JsonSubTypes.Type(value = com.commercetools.history.models.change_value.ChangeTargetMultiBuyCustomLineItemsChangeValueImpl.class, name = ChangeTargetMultiBuyCustomLineItemsChangeValue.MULTI_BUY_CUSTOM_LINE_ITEMS),
033        @JsonSubTypes.Type(value = com.commercetools.history.models.change_value.ChangeTargetMultiBuyLineItemsChangeValueImpl.class, name = ChangeTargetMultiBuyLineItemsChangeValue.MULTI_BUY_LINE_ITEMS),
034        @JsonSubTypes.Type(value = com.commercetools.history.models.change_value.ChangeTargetShippingChangeValueImpl.class, name = ChangeTargetShippingChangeValue.SHIPPING) })
035@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type", defaultImpl = ChangeTargetChangeValueImpl.class, visible = true)
036@JsonDeserialize(as = ChangeTargetChangeValueImpl.class)
037@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
038public interface ChangeTargetChangeValue {
039
040    /**
041     *
042     * @return type
043     */
044    @NotNull
045    @JsonProperty("type")
046    public String getType();
047
048    /**
049     * factory method to create a deep copy of ChangeTargetChangeValue
050     * @param template instance to be copied
051     * @return copy instance
052     */
053    @Nullable
054    public static ChangeTargetChangeValue deepCopy(@Nullable final ChangeTargetChangeValue template) {
055        if (template == null) {
056            return null;
057        }
058        if (template instanceof com.commercetools.history.models.change_value.ChangeTargetCustomLineItemsChangeValue) {
059            return com.commercetools.history.models.change_value.ChangeTargetCustomLineItemsChangeValue.deepCopy(
060                (com.commercetools.history.models.change_value.ChangeTargetCustomLineItemsChangeValue) template);
061        }
062        if (template instanceof com.commercetools.history.models.change_value.ChangeTargetLineItemsChangeValue) {
063            return com.commercetools.history.models.change_value.ChangeTargetLineItemsChangeValue.deepCopy(
064                (com.commercetools.history.models.change_value.ChangeTargetLineItemsChangeValue) template);
065        }
066        if (template instanceof com.commercetools.history.models.change_value.ChangeTargetMultiBuyCustomLineItemsChangeValue) {
067            return com.commercetools.history.models.change_value.ChangeTargetMultiBuyCustomLineItemsChangeValue
068                    .deepCopy(
069                        (com.commercetools.history.models.change_value.ChangeTargetMultiBuyCustomLineItemsChangeValue) template);
070        }
071        if (template instanceof com.commercetools.history.models.change_value.ChangeTargetMultiBuyLineItemsChangeValue) {
072            return com.commercetools.history.models.change_value.ChangeTargetMultiBuyLineItemsChangeValue.deepCopy(
073                (com.commercetools.history.models.change_value.ChangeTargetMultiBuyLineItemsChangeValue) template);
074        }
075        if (template instanceof com.commercetools.history.models.change_value.ChangeTargetShippingChangeValue) {
076            return com.commercetools.history.models.change_value.ChangeTargetShippingChangeValue
077                    .deepCopy((com.commercetools.history.models.change_value.ChangeTargetShippingChangeValue) template);
078        }
079        ChangeTargetChangeValueImpl instance = new ChangeTargetChangeValueImpl();
080        return instance;
081    }
082
083    /**
084     * builder for customLineItems subtype
085     * @return builder
086     */
087    public static com.commercetools.history.models.change_value.ChangeTargetCustomLineItemsChangeValueBuilder customLineItemsBuilder() {
088        return com.commercetools.history.models.change_value.ChangeTargetCustomLineItemsChangeValueBuilder.of();
089    }
090
091    /**
092     * builder for lineItems subtype
093     * @return builder
094     */
095    public static com.commercetools.history.models.change_value.ChangeTargetLineItemsChangeValueBuilder lineItemsBuilder() {
096        return com.commercetools.history.models.change_value.ChangeTargetLineItemsChangeValueBuilder.of();
097    }
098
099    /**
100     * builder for multiBuyCustomLineItems subtype
101     * @return builder
102     */
103    public static com.commercetools.history.models.change_value.ChangeTargetMultiBuyCustomLineItemsChangeValueBuilder multiBuyCustomLineItemsBuilder() {
104        return com.commercetools.history.models.change_value.ChangeTargetMultiBuyCustomLineItemsChangeValueBuilder.of();
105    }
106
107    /**
108     * builder for multiBuyLineItems subtype
109     * @return builder
110     */
111    public static com.commercetools.history.models.change_value.ChangeTargetMultiBuyLineItemsChangeValueBuilder multiBuyLineItemsBuilder() {
112        return com.commercetools.history.models.change_value.ChangeTargetMultiBuyLineItemsChangeValueBuilder.of();
113    }
114
115    /**
116     * builder for shipping subtype
117     * @return builder
118     */
119    public static com.commercetools.history.models.change_value.ChangeTargetShippingChangeValueBuilder shippingBuilder() {
120        return com.commercetools.history.models.change_value.ChangeTargetShippingChangeValueBuilder.of();
121    }
122
123    /**
124     * accessor map function
125     * @param <T> mapped type
126     * @param helper function to map the object
127     * @return mapped value
128     */
129    default <T> T withChangeTargetChangeValue(Function<ChangeTargetChangeValue, T> helper) {
130        return helper.apply(this);
131    }
132
133    /**
134     * gives a TypeReference for usage with Jackson DataBind
135     * @return TypeReference
136     */
137    public static com.fasterxml.jackson.core.type.TypeReference<ChangeTargetChangeValue> typeReference() {
138        return new com.fasterxml.jackson.core.type.TypeReference<ChangeTargetChangeValue>() {
139            @Override
140            public String toString() {
141                return "TypeReference<ChangeTargetChangeValue>";
142            }
143        };
144    }
145}