001 002package com.commercetools.ml.models.common; 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 * Reference 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 * Reference reference = Reference.categoryBuilder() 024 * id("{id}") 025 * .build() 026 * </code></pre> 027 * </div> 028 */ 029@JsonSubTypes({ 030 @JsonSubTypes.Type(value = com.commercetools.ml.models.common.CategoryReferenceImpl.class, name = CategoryReference.CATEGORY), 031 @JsonSubTypes.Type(value = com.commercetools.ml.models.common.ProductReferenceImpl.class, name = ProductReference.PRODUCT), 032 @JsonSubTypes.Type(value = com.commercetools.ml.models.common.ProductTypeReferenceImpl.class, name = ProductTypeReference.PRODUCT_TYPE) }) 033@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "typeId", defaultImpl = ReferenceImpl.class, visible = true) 034@JsonDeserialize(as = ReferenceImpl.class) 035@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen") 036public interface Reference { 037 038 /** 039 * 040 * @return typeId 041 */ 042 @NotNull 043 @JsonProperty("typeId") 044 public ReferenceTypeId getTypeId(); 045 046 /** 047 * 048 * @return id 049 */ 050 @NotNull 051 @JsonProperty("id") 052 public String getId(); 053 054 /** 055 * set id 056 * @param id value to be set 057 */ 058 059 public void setId(final String id); 060 061 /** 062 * factory method to create a deep copy of Reference 063 * @param template instance to be copied 064 * @return copy instance 065 */ 066 @Nullable 067 public static Reference deepCopy(@Nullable final Reference template) { 068 if (template == null) { 069 return null; 070 } 071 if (template instanceof com.commercetools.ml.models.common.CategoryReference) { 072 return com.commercetools.ml.models.common.CategoryReference 073 .deepCopy((com.commercetools.ml.models.common.CategoryReference) template); 074 } 075 if (template instanceof com.commercetools.ml.models.common.ProductReference) { 076 return com.commercetools.ml.models.common.ProductReference 077 .deepCopy((com.commercetools.ml.models.common.ProductReference) template); 078 } 079 if (template instanceof com.commercetools.ml.models.common.ProductTypeReference) { 080 return com.commercetools.ml.models.common.ProductTypeReference 081 .deepCopy((com.commercetools.ml.models.common.ProductTypeReference) template); 082 } 083 ReferenceImpl instance = new ReferenceImpl(); 084 instance.setId(template.getId()); 085 return instance; 086 } 087 088 /** 089 * builder for category subtype 090 * @return builder 091 */ 092 public static com.commercetools.ml.models.common.CategoryReferenceBuilder categoryBuilder() { 093 return com.commercetools.ml.models.common.CategoryReferenceBuilder.of(); 094 } 095 096 /** 097 * builder for product subtype 098 * @return builder 099 */ 100 public static com.commercetools.ml.models.common.ProductReferenceBuilder productBuilder() { 101 return com.commercetools.ml.models.common.ProductReferenceBuilder.of(); 102 } 103 104 /** 105 * builder for productType subtype 106 * @return builder 107 */ 108 public static com.commercetools.ml.models.common.ProductTypeReferenceBuilder productTypeBuilder() { 109 return com.commercetools.ml.models.common.ProductTypeReferenceBuilder.of(); 110 } 111 112 /** 113 * accessor map function 114 * @param <T> mapped type 115 * @param helper function to map the object 116 * @return mapped value 117 */ 118 default <T> T withReference(Function<Reference, T> helper) { 119 return helper.apply(this); 120 } 121 122 /** 123 * gives a TypeReference for usage with Jackson DataBind 124 * @return TypeReference 125 */ 126 public static com.fasterxml.jackson.core.type.TypeReference<Reference> typeReference() { 127 return new com.fasterxml.jackson.core.type.TypeReference<Reference>() { 128 @Override 129 public String toString() { 130 return "TypeReference<Reference>"; 131 } 132 }; 133 } 134}