001
002package com.commercetools.importapi.models.productvariants;
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>This type represents the value of an attribute of a product variant. The name and type property must match the name and type property of an attribute definition of the product type.</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 *     Attribute attribute = Attribute.booleanBuilder()
024 *             value(true)
025 *             .build()
026 * </code></pre>
027 * </div>
028 */
029@JsonSubTypes({
030        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.BooleanAttributeImpl.class, name = BooleanAttribute.BOOLEAN),
031        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.BooleanSetAttributeImpl.class, name = BooleanSetAttribute.BOOLEAN_SET),
032        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.DateAttributeImpl.class, name = DateAttribute.DATE),
033        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.DateSetAttributeImpl.class, name = DateSetAttribute.DATE_SET),
034        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.DateTimeAttributeImpl.class, name = DateTimeAttribute.DATETIME),
035        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.DateTimeSetAttributeImpl.class, name = DateTimeSetAttribute.DATETIME_SET),
036        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.EnumAttributeImpl.class, name = EnumAttribute.ENUM),
037        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.EnumSetAttributeImpl.class, name = EnumSetAttribute.ENUM_SET),
038        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.LocalizableEnumAttributeImpl.class, name = LocalizableEnumAttribute.LENUM),
039        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.LocalizableEnumSetAttributeImpl.class, name = LocalizableEnumSetAttribute.LENUM_SET),
040        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.LocalizableTextAttributeImpl.class, name = LocalizableTextAttribute.LTEXT),
041        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.LocalizableTextSetAttributeImpl.class, name = LocalizableTextSetAttribute.LTEXT_SET),
042        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.MoneyAttributeImpl.class, name = MoneyAttribute.MONEY),
043        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.MoneySetAttributeImpl.class, name = MoneySetAttribute.MONEY_SET),
044        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.NumberAttributeImpl.class, name = NumberAttribute.NUMBER),
045        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.NumberSetAttributeImpl.class, name = NumberSetAttribute.NUMBER_SET),
046        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.ReferenceAttributeImpl.class, name = ReferenceAttribute.REFERENCE),
047        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.ReferenceSetAttributeImpl.class, name = ReferenceSetAttribute.REFERENCE_SET),
048        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.TextAttributeImpl.class, name = TextAttribute.TEXT),
049        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.TextSetAttributeImpl.class, name = TextSetAttribute.TEXT_SET),
050        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.TimeAttributeImpl.class, name = TimeAttribute.TIME),
051        @JsonSubTypes.Type(value = com.commercetools.importapi.models.productvariants.TimeSetAttributeImpl.class, name = TimeSetAttribute.TIME_SET) })
052@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "type", defaultImpl = AttributeImpl.class, visible = true)
053@JsonDeserialize(as = AttributeImpl.class)
054@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
055public interface Attribute {
056
057    /**
058     *  <p>The name of this attribute must match a name of the product types attribute definitions. The name is required if this type is used in a product variant and must not be set when used in a product variant patch.</p>
059     * @return name
060     */
061
062    @JsonProperty("name")
063    public String getName();
064
065    /**
066     *
067     * @return type
068     */
069    @NotNull
070    @JsonProperty("type")
071    public String getType();
072
073    /**
074     *  <p>The name of this attribute must match a name of the product types attribute definitions. The name is required if this type is used in a product variant and must not be set when used in a product variant patch.</p>
075     * @param name value to be set
076     */
077
078    public void setName(final String name);
079
080    /**
081     * factory method to create a deep copy of Attribute
082     * @param template instance to be copied
083     * @return copy instance
084     */
085    @Nullable
086    public static Attribute deepCopy(@Nullable final Attribute template) {
087        if (template == null) {
088            return null;
089        }
090        if (template instanceof com.commercetools.importapi.models.productvariants.BooleanAttribute) {
091            return com.commercetools.importapi.models.productvariants.BooleanAttribute
092                    .deepCopy((com.commercetools.importapi.models.productvariants.BooleanAttribute) template);
093        }
094        if (template instanceof com.commercetools.importapi.models.productvariants.BooleanSetAttribute) {
095            return com.commercetools.importapi.models.productvariants.BooleanSetAttribute
096                    .deepCopy((com.commercetools.importapi.models.productvariants.BooleanSetAttribute) template);
097        }
098        if (template instanceof com.commercetools.importapi.models.productvariants.DateAttribute) {
099            return com.commercetools.importapi.models.productvariants.DateAttribute
100                    .deepCopy((com.commercetools.importapi.models.productvariants.DateAttribute) template);
101        }
102        if (template instanceof com.commercetools.importapi.models.productvariants.DateSetAttribute) {
103            return com.commercetools.importapi.models.productvariants.DateSetAttribute
104                    .deepCopy((com.commercetools.importapi.models.productvariants.DateSetAttribute) template);
105        }
106        if (template instanceof com.commercetools.importapi.models.productvariants.DateTimeAttribute) {
107            return com.commercetools.importapi.models.productvariants.DateTimeAttribute
108                    .deepCopy((com.commercetools.importapi.models.productvariants.DateTimeAttribute) template);
109        }
110        if (template instanceof com.commercetools.importapi.models.productvariants.DateTimeSetAttribute) {
111            return com.commercetools.importapi.models.productvariants.DateTimeSetAttribute
112                    .deepCopy((com.commercetools.importapi.models.productvariants.DateTimeSetAttribute) template);
113        }
114        if (template instanceof com.commercetools.importapi.models.productvariants.EnumAttribute) {
115            return com.commercetools.importapi.models.productvariants.EnumAttribute
116                    .deepCopy((com.commercetools.importapi.models.productvariants.EnumAttribute) template);
117        }
118        if (template instanceof com.commercetools.importapi.models.productvariants.EnumSetAttribute) {
119            return com.commercetools.importapi.models.productvariants.EnumSetAttribute
120                    .deepCopy((com.commercetools.importapi.models.productvariants.EnumSetAttribute) template);
121        }
122        if (template instanceof com.commercetools.importapi.models.productvariants.LocalizableEnumAttribute) {
123            return com.commercetools.importapi.models.productvariants.LocalizableEnumAttribute
124                    .deepCopy((com.commercetools.importapi.models.productvariants.LocalizableEnumAttribute) template);
125        }
126        if (template instanceof com.commercetools.importapi.models.productvariants.LocalizableEnumSetAttribute) {
127            return com.commercetools.importapi.models.productvariants.LocalizableEnumSetAttribute.deepCopy(
128                (com.commercetools.importapi.models.productvariants.LocalizableEnumSetAttribute) template);
129        }
130        if (template instanceof com.commercetools.importapi.models.productvariants.LocalizableTextAttribute) {
131            return com.commercetools.importapi.models.productvariants.LocalizableTextAttribute
132                    .deepCopy((com.commercetools.importapi.models.productvariants.LocalizableTextAttribute) template);
133        }
134        if (template instanceof com.commercetools.importapi.models.productvariants.LocalizableTextSetAttribute) {
135            return com.commercetools.importapi.models.productvariants.LocalizableTextSetAttribute.deepCopy(
136                (com.commercetools.importapi.models.productvariants.LocalizableTextSetAttribute) template);
137        }
138        if (template instanceof com.commercetools.importapi.models.productvariants.MoneyAttribute) {
139            return com.commercetools.importapi.models.productvariants.MoneyAttribute
140                    .deepCopy((com.commercetools.importapi.models.productvariants.MoneyAttribute) template);
141        }
142        if (template instanceof com.commercetools.importapi.models.productvariants.MoneySetAttribute) {
143            return com.commercetools.importapi.models.productvariants.MoneySetAttribute
144                    .deepCopy((com.commercetools.importapi.models.productvariants.MoneySetAttribute) template);
145        }
146        if (template instanceof com.commercetools.importapi.models.productvariants.NumberAttribute) {
147            return com.commercetools.importapi.models.productvariants.NumberAttribute
148                    .deepCopy((com.commercetools.importapi.models.productvariants.NumberAttribute) template);
149        }
150        if (template instanceof com.commercetools.importapi.models.productvariants.NumberSetAttribute) {
151            return com.commercetools.importapi.models.productvariants.NumberSetAttribute
152                    .deepCopy((com.commercetools.importapi.models.productvariants.NumberSetAttribute) template);
153        }
154        if (template instanceof com.commercetools.importapi.models.productvariants.ReferenceAttribute) {
155            return com.commercetools.importapi.models.productvariants.ReferenceAttribute
156                    .deepCopy((com.commercetools.importapi.models.productvariants.ReferenceAttribute) template);
157        }
158        if (template instanceof com.commercetools.importapi.models.productvariants.ReferenceSetAttribute) {
159            return com.commercetools.importapi.models.productvariants.ReferenceSetAttribute
160                    .deepCopy((com.commercetools.importapi.models.productvariants.ReferenceSetAttribute) template);
161        }
162        if (template instanceof com.commercetools.importapi.models.productvariants.TextAttribute) {
163            return com.commercetools.importapi.models.productvariants.TextAttribute
164                    .deepCopy((com.commercetools.importapi.models.productvariants.TextAttribute) template);
165        }
166        if (template instanceof com.commercetools.importapi.models.productvariants.TextSetAttribute) {
167            return com.commercetools.importapi.models.productvariants.TextSetAttribute
168                    .deepCopy((com.commercetools.importapi.models.productvariants.TextSetAttribute) template);
169        }
170        if (template instanceof com.commercetools.importapi.models.productvariants.TimeAttribute) {
171            return com.commercetools.importapi.models.productvariants.TimeAttribute
172                    .deepCopy((com.commercetools.importapi.models.productvariants.TimeAttribute) template);
173        }
174        if (template instanceof com.commercetools.importapi.models.productvariants.TimeSetAttribute) {
175            return com.commercetools.importapi.models.productvariants.TimeSetAttribute
176                    .deepCopy((com.commercetools.importapi.models.productvariants.TimeSetAttribute) template);
177        }
178        AttributeImpl instance = new AttributeImpl();
179        instance.setName(template.getName());
180        return instance;
181    }
182
183    /**
184     * builder for boolean subtype
185     * @return builder
186     */
187    public static com.commercetools.importapi.models.productvariants.BooleanAttributeBuilder booleanBuilder() {
188        return com.commercetools.importapi.models.productvariants.BooleanAttributeBuilder.of();
189    }
190
191    /**
192     * builder for booleanSet subtype
193     * @return builder
194     */
195    public static com.commercetools.importapi.models.productvariants.BooleanSetAttributeBuilder booleanSetBuilder() {
196        return com.commercetools.importapi.models.productvariants.BooleanSetAttributeBuilder.of();
197    }
198
199    /**
200     * builder for date subtype
201     * @return builder
202     */
203    public static com.commercetools.importapi.models.productvariants.DateAttributeBuilder dateBuilder() {
204        return com.commercetools.importapi.models.productvariants.DateAttributeBuilder.of();
205    }
206
207    /**
208     * builder for dateSet subtype
209     * @return builder
210     */
211    public static com.commercetools.importapi.models.productvariants.DateSetAttributeBuilder dateSetBuilder() {
212        return com.commercetools.importapi.models.productvariants.DateSetAttributeBuilder.of();
213    }
214
215    /**
216     * builder for datetime subtype
217     * @return builder
218     */
219    public static com.commercetools.importapi.models.productvariants.DateTimeAttributeBuilder datetimeBuilder() {
220        return com.commercetools.importapi.models.productvariants.DateTimeAttributeBuilder.of();
221    }
222
223    /**
224     * builder for datetimeSet subtype
225     * @return builder
226     */
227    public static com.commercetools.importapi.models.productvariants.DateTimeSetAttributeBuilder datetimeSetBuilder() {
228        return com.commercetools.importapi.models.productvariants.DateTimeSetAttributeBuilder.of();
229    }
230
231    /**
232     * builder for enum subtype
233     * @return builder
234     */
235    public static com.commercetools.importapi.models.productvariants.EnumAttributeBuilder enumBuilder() {
236        return com.commercetools.importapi.models.productvariants.EnumAttributeBuilder.of();
237    }
238
239    /**
240     * builder for enumSet subtype
241     * @return builder
242     */
243    public static com.commercetools.importapi.models.productvariants.EnumSetAttributeBuilder enumSetBuilder() {
244        return com.commercetools.importapi.models.productvariants.EnumSetAttributeBuilder.of();
245    }
246
247    /**
248     * builder for lenum subtype
249     * @return builder
250     */
251    public static com.commercetools.importapi.models.productvariants.LocalizableEnumAttributeBuilder lenumBuilder() {
252        return com.commercetools.importapi.models.productvariants.LocalizableEnumAttributeBuilder.of();
253    }
254
255    /**
256     * builder for lenumSet subtype
257     * @return builder
258     */
259    public static com.commercetools.importapi.models.productvariants.LocalizableEnumSetAttributeBuilder lenumSetBuilder() {
260        return com.commercetools.importapi.models.productvariants.LocalizableEnumSetAttributeBuilder.of();
261    }
262
263    /**
264     * builder for ltext subtype
265     * @return builder
266     */
267    public static com.commercetools.importapi.models.productvariants.LocalizableTextAttributeBuilder ltextBuilder() {
268        return com.commercetools.importapi.models.productvariants.LocalizableTextAttributeBuilder.of();
269    }
270
271    /**
272     * builder for ltextSet subtype
273     * @return builder
274     */
275    public static com.commercetools.importapi.models.productvariants.LocalizableTextSetAttributeBuilder ltextSetBuilder() {
276        return com.commercetools.importapi.models.productvariants.LocalizableTextSetAttributeBuilder.of();
277    }
278
279    /**
280     * builder for money subtype
281     * @return builder
282     */
283    public static com.commercetools.importapi.models.productvariants.MoneyAttributeBuilder moneyBuilder() {
284        return com.commercetools.importapi.models.productvariants.MoneyAttributeBuilder.of();
285    }
286
287    /**
288     * builder for moneySet subtype
289     * @return builder
290     */
291    public static com.commercetools.importapi.models.productvariants.MoneySetAttributeBuilder moneySetBuilder() {
292        return com.commercetools.importapi.models.productvariants.MoneySetAttributeBuilder.of();
293    }
294
295    /**
296     * builder for number subtype
297     * @return builder
298     */
299    public static com.commercetools.importapi.models.productvariants.NumberAttributeBuilder numberBuilder() {
300        return com.commercetools.importapi.models.productvariants.NumberAttributeBuilder.of();
301    }
302
303    /**
304     * builder for numberSet subtype
305     * @return builder
306     */
307    public static com.commercetools.importapi.models.productvariants.NumberSetAttributeBuilder numberSetBuilder() {
308        return com.commercetools.importapi.models.productvariants.NumberSetAttributeBuilder.of();
309    }
310
311    /**
312     * builder for reference subtype
313     * @return builder
314     */
315    public static com.commercetools.importapi.models.productvariants.ReferenceAttributeBuilder referenceBuilder() {
316        return com.commercetools.importapi.models.productvariants.ReferenceAttributeBuilder.of();
317    }
318
319    /**
320     * builder for referenceSet subtype
321     * @return builder
322     */
323    public static com.commercetools.importapi.models.productvariants.ReferenceSetAttributeBuilder referenceSetBuilder() {
324        return com.commercetools.importapi.models.productvariants.ReferenceSetAttributeBuilder.of();
325    }
326
327    /**
328     * builder for text subtype
329     * @return builder
330     */
331    public static com.commercetools.importapi.models.productvariants.TextAttributeBuilder textBuilder() {
332        return com.commercetools.importapi.models.productvariants.TextAttributeBuilder.of();
333    }
334
335    /**
336     * builder for textSet subtype
337     * @return builder
338     */
339    public static com.commercetools.importapi.models.productvariants.TextSetAttributeBuilder textSetBuilder() {
340        return com.commercetools.importapi.models.productvariants.TextSetAttributeBuilder.of();
341    }
342
343    /**
344     * builder for time subtype
345     * @return builder
346     */
347    public static com.commercetools.importapi.models.productvariants.TimeAttributeBuilder timeBuilder() {
348        return com.commercetools.importapi.models.productvariants.TimeAttributeBuilder.of();
349    }
350
351    /**
352     * builder for timeSet subtype
353     * @return builder
354     */
355    public static com.commercetools.importapi.models.productvariants.TimeSetAttributeBuilder timeSetBuilder() {
356        return com.commercetools.importapi.models.productvariants.TimeSetAttributeBuilder.of();
357    }
358
359    /**
360     * accessor map function
361     * @param <T> mapped type
362     * @param helper function to map the object
363     * @return mapped value
364     */
365    default <T> T withAttribute(Function<Attribute, T> helper) {
366        return helper.apply(this);
367    }
368
369    /**
370     * gives a TypeReference for usage with Jackson DataBind
371     * @return TypeReference
372     */
373    public static com.fasterxml.jackson.core.type.TypeReference<Attribute> typeReference() {
374        return new com.fasterxml.jackson.core.type.TypeReference<Attribute>() {
375            @Override
376            public String toString() {
377                return "TypeReference<Attribute>";
378            }
379        };
380    }
381}