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}