001
002package com.commercetools.history.models.label;
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 *  <p>Provides descriptive information specific to the resource.</p>
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 *     Label label = Label.associateRoleLabelBuilder()
024 *             key("{key}")
025 *             name("{name}")
026 *             .build()
027 * </code></pre>
028 * </div>
029 */
030@JsonSubTypes({
031        @JsonSubTypes.Type(value = com.commercetools.history.models.label.AssociateRoleLabelImpl.class, name = AssociateRoleLabel.ASSOCIATE_ROLE_LABEL),
032        @JsonSubTypes.Type(value = com.commercetools.history.models.label.BusinessUnitLabelImpl.class, name = BusinessUnitLabel.BUSINESS_UNIT_LABEL),
033        @JsonSubTypes.Type(value = com.commercetools.history.models.label.CustomObjectLabelImpl.class, name = CustomObjectLabel.CUSTOM_OBJECT_LABEL),
034        @JsonSubTypes.Type(value = com.commercetools.history.models.label.CustomerLabelImpl.class, name = CustomerLabel.CUSTOMER_LABEL),
035        @JsonSubTypes.Type(value = com.commercetools.history.models.label.LocalizedLabelImpl.class, name = LocalizedLabel.LOCALIZED_LABEL),
036        @JsonSubTypes.Type(value = com.commercetools.history.models.label.OrderLabelImpl.class, name = OrderLabel.ORDER_LABEL),
037        @JsonSubTypes.Type(value = com.commercetools.history.models.label.PaymentLabelImpl.class, name = PaymentLabel.PAYMENT_LABEL),
038        @JsonSubTypes.Type(value = com.commercetools.history.models.label.ProductLabelImpl.class, name = ProductLabel.PRODUCT_LABEL),
039        @JsonSubTypes.Type(value = com.commercetools.history.models.label.QuoteLabelImpl.class, name = QuoteLabel.QUOTE_LABEL),
040        @JsonSubTypes.Type(value = com.commercetools.history.models.label.QuoteRequestLabelImpl.class, name = QuoteRequestLabel.QUOTE_REQUEST_LABEL),
041        @JsonSubTypes.Type(value = com.commercetools.history.models.label.ReviewLabelImpl.class, name = ReviewLabel.REVIEW_LABEL),
042        @JsonSubTypes.Type(value = com.commercetools.history.models.label.StagedQuoteLabelImpl.class, name = StagedQuoteLabel.STAGED_QUOTE_LABEL),
043        @JsonSubTypes.Type(value = com.commercetools.history.models.label.StringLabelImpl.class, name = StringLabel.STRING_LABEL) })
044@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type", defaultImpl = LabelImpl.class, visible = true)
045@JsonDeserialize(as = LabelImpl.class)
046@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
047public interface Label {
048
049    /**
050     *
051     * @return type
052     */
053    @NotNull
054    @JsonProperty("type")
055    public String getType();
056
057    /**
058     * factory method to create a deep copy of Label
059     * @param template instance to be copied
060     * @return copy instance
061     */
062    @Nullable
063    public static Label deepCopy(@Nullable final Label template) {
064        if (template == null) {
065            return null;
066        }
067        if (template instanceof com.commercetools.history.models.label.AssociateRoleLabel) {
068            return com.commercetools.history.models.label.AssociateRoleLabel
069                    .deepCopy((com.commercetools.history.models.label.AssociateRoleLabel) template);
070        }
071        if (template instanceof com.commercetools.history.models.label.BusinessUnitLabel) {
072            return com.commercetools.history.models.label.BusinessUnitLabel
073                    .deepCopy((com.commercetools.history.models.label.BusinessUnitLabel) template);
074        }
075        if (template instanceof com.commercetools.history.models.label.CustomObjectLabel) {
076            return com.commercetools.history.models.label.CustomObjectLabel
077                    .deepCopy((com.commercetools.history.models.label.CustomObjectLabel) template);
078        }
079        if (template instanceof com.commercetools.history.models.label.CustomerLabel) {
080            return com.commercetools.history.models.label.CustomerLabel
081                    .deepCopy((com.commercetools.history.models.label.CustomerLabel) template);
082        }
083        if (template instanceof com.commercetools.history.models.label.LocalizedLabel) {
084            return com.commercetools.history.models.label.LocalizedLabel
085                    .deepCopy((com.commercetools.history.models.label.LocalizedLabel) template);
086        }
087        if (template instanceof com.commercetools.history.models.label.OrderLabel) {
088            return com.commercetools.history.models.label.OrderLabel
089                    .deepCopy((com.commercetools.history.models.label.OrderLabel) template);
090        }
091        if (template instanceof com.commercetools.history.models.label.PaymentLabel) {
092            return com.commercetools.history.models.label.PaymentLabel
093                    .deepCopy((com.commercetools.history.models.label.PaymentLabel) template);
094        }
095        if (template instanceof com.commercetools.history.models.label.ProductLabel) {
096            return com.commercetools.history.models.label.ProductLabel
097                    .deepCopy((com.commercetools.history.models.label.ProductLabel) template);
098        }
099        if (template instanceof com.commercetools.history.models.label.QuoteLabel) {
100            return com.commercetools.history.models.label.QuoteLabel
101                    .deepCopy((com.commercetools.history.models.label.QuoteLabel) template);
102        }
103        if (template instanceof com.commercetools.history.models.label.QuoteRequestLabel) {
104            return com.commercetools.history.models.label.QuoteRequestLabel
105                    .deepCopy((com.commercetools.history.models.label.QuoteRequestLabel) template);
106        }
107        if (template instanceof com.commercetools.history.models.label.ReviewLabel) {
108            return com.commercetools.history.models.label.ReviewLabel
109                    .deepCopy((com.commercetools.history.models.label.ReviewLabel) template);
110        }
111        if (template instanceof com.commercetools.history.models.label.StagedQuoteLabel) {
112            return com.commercetools.history.models.label.StagedQuoteLabel
113                    .deepCopy((com.commercetools.history.models.label.StagedQuoteLabel) template);
114        }
115        if (template instanceof com.commercetools.history.models.label.StringLabel) {
116            return com.commercetools.history.models.label.StringLabel
117                    .deepCopy((com.commercetools.history.models.label.StringLabel) template);
118        }
119        LabelImpl instance = new LabelImpl();
120        return instance;
121    }
122
123    /**
124     * builder for associateRoleLabel subtype
125     * @return builder
126     */
127    public static com.commercetools.history.models.label.AssociateRoleLabelBuilder associateRoleLabelBuilder() {
128        return com.commercetools.history.models.label.AssociateRoleLabelBuilder.of();
129    }
130
131    /**
132     * builder for businessUnitLabel subtype
133     * @return builder
134     */
135    public static com.commercetools.history.models.label.BusinessUnitLabelBuilder businessUnitLabelBuilder() {
136        return com.commercetools.history.models.label.BusinessUnitLabelBuilder.of();
137    }
138
139    /**
140     * builder for customObjectLabel subtype
141     * @return builder
142     */
143    public static com.commercetools.history.models.label.CustomObjectLabelBuilder customObjectLabelBuilder() {
144        return com.commercetools.history.models.label.CustomObjectLabelBuilder.of();
145    }
146
147    /**
148     * builder for customerLabel subtype
149     * @return builder
150     */
151    public static com.commercetools.history.models.label.CustomerLabelBuilder customerLabelBuilder() {
152        return com.commercetools.history.models.label.CustomerLabelBuilder.of();
153    }
154
155    /**
156     * builder for localizedLabel subtype
157     * @return builder
158     */
159    public static com.commercetools.history.models.label.LocalizedLabelBuilder localizedLabelBuilder() {
160        return com.commercetools.history.models.label.LocalizedLabelBuilder.of();
161    }
162
163    /**
164     * builder for orderLabel subtype
165     * @return builder
166     */
167    public static com.commercetools.history.models.label.OrderLabelBuilder orderLabelBuilder() {
168        return com.commercetools.history.models.label.OrderLabelBuilder.of();
169    }
170
171    /**
172     * builder for paymentLabel subtype
173     * @return builder
174     */
175    public static com.commercetools.history.models.label.PaymentLabelBuilder paymentLabelBuilder() {
176        return com.commercetools.history.models.label.PaymentLabelBuilder.of();
177    }
178
179    /**
180     * builder for productLabel subtype
181     * @return builder
182     */
183    public static com.commercetools.history.models.label.ProductLabelBuilder productLabelBuilder() {
184        return com.commercetools.history.models.label.ProductLabelBuilder.of();
185    }
186
187    /**
188     * builder for quoteLabel subtype
189     * @return builder
190     */
191    public static com.commercetools.history.models.label.QuoteLabelBuilder quoteLabelBuilder() {
192        return com.commercetools.history.models.label.QuoteLabelBuilder.of();
193    }
194
195    /**
196     * builder for quoteRequestLabel subtype
197     * @return builder
198     */
199    public static com.commercetools.history.models.label.QuoteRequestLabelBuilder quoteRequestLabelBuilder() {
200        return com.commercetools.history.models.label.QuoteRequestLabelBuilder.of();
201    }
202
203    /**
204     * builder for reviewLabel subtype
205     * @return builder
206     */
207    public static com.commercetools.history.models.label.ReviewLabelBuilder reviewLabelBuilder() {
208        return com.commercetools.history.models.label.ReviewLabelBuilder.of();
209    }
210
211    /**
212     * builder for stagedQuoteLabel subtype
213     * @return builder
214     */
215    public static com.commercetools.history.models.label.StagedQuoteLabelBuilder stagedQuoteLabelBuilder() {
216        return com.commercetools.history.models.label.StagedQuoteLabelBuilder.of();
217    }
218
219    /**
220     * builder for stringLabel subtype
221     * @return builder
222     */
223    public static com.commercetools.history.models.label.StringLabelBuilder stringLabelBuilder() {
224        return com.commercetools.history.models.label.StringLabelBuilder.of();
225    }
226
227    /**
228     * accessor map function
229     * @param <T> mapped type
230     * @param helper function to map the object
231     * @return mapped value
232     */
233    default <T> T withLabel(Function<Label, T> helper) {
234        return helper.apply(this);
235    }
236
237    /**
238     * gives a TypeReference for usage with Jackson DataBind
239     * @return TypeReference
240     */
241    public static com.fasterxml.jackson.core.type.TypeReference<Label> typeReference() {
242        return new com.fasterxml.jackson.core.type.TypeReference<Label>() {
243            @Override
244            public String toString() {
245                return "TypeReference<Label>";
246            }
247        };
248    }
249}