001
002package com.commercetools.ml.models.similar_products;
003
004import java.time.*;
005import java.util.*;
006import java.util.function.Function;
007
008import javax.validation.Valid;
009
010import com.commercetools.ml.models.common.ProductReference;
011import com.fasterxml.jackson.annotation.*;
012import com.fasterxml.jackson.databind.annotation.*;
013
014import io.vrap.rmf.base.client.utils.Generated;
015
016/**
017 *  <p>One part of a SimilarProductPair. Refers to a specific ProductVariant.</p>
018 *
019 * <hr>
020 * Example to create an instance using the builder pattern
021 * <div class=code-example>
022 * <pre><code class='java'>
023 *     SimilarProduct similarProduct = SimilarProduct.builder()
024 *             .build()
025 * </code></pre>
026 * </div>
027 */
028@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
029@JsonDeserialize(as = SimilarProductImpl.class)
030public interface SimilarProduct {
031
032    /**
033     *  <p>Reference to Product</p>
034     */
035    @Valid
036    @JsonProperty("product")
037    public ProductReference getProduct();
038
039    /**
040     *  <p>ID of the ProductVariant that was compared.</p>
041     */
042
043    @JsonProperty("variantId")
044    public Long getVariantId();
045
046    /**
047     *  <p>Supplementary information about the data used for similarity estimation. This information helps you understand the estimated confidence score, but it should not be used to identify a product.</p>
048     */
049    @Valid
050    @JsonProperty("meta")
051    public SimilarProductMeta getMeta();
052
053    public void setProduct(final ProductReference product);
054
055    public void setVariantId(final Long variantId);
056
057    public void setMeta(final SimilarProductMeta meta);
058
059    public static SimilarProduct of() {
060        return new SimilarProductImpl();
061    }
062
063    public static SimilarProduct of(final SimilarProduct template) {
064        SimilarProductImpl instance = new SimilarProductImpl();
065        instance.setProduct(template.getProduct());
066        instance.setVariantId(template.getVariantId());
067        instance.setMeta(template.getMeta());
068        return instance;
069    }
070
071    public static SimilarProductBuilder builder() {
072        return SimilarProductBuilder.of();
073    }
074
075    public static SimilarProductBuilder builder(final SimilarProduct template) {
076        return SimilarProductBuilder.of(template);
077    }
078
079    default <T> T withSimilarProduct(Function<SimilarProduct, T> helper) {
080        return helper.apply(this);
081    }
082
083    public static com.fasterxml.jackson.core.type.TypeReference<SimilarProduct> typeReference() {
084        return new com.fasterxml.jackson.core.type.TypeReference<SimilarProduct>() {
085            @Override
086            public String toString() {
087                return "TypeReference<SimilarProduct>";
088            }
089        };
090    }
091}