001
002package com.commercetools.importapi.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 *  <p>A representation of the resource to import. Import resources are similar to draft types, but they only support key references. In general, import resources are more granular then regular resources. They are optimized for incremental updates and therefore have a slightly different structure.</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 *     ImportResource importResource = ImportResource.builder()
024 *             .key("{key}")
025 *             .build()
026 * </code></pre>
027 * </div>
028 */
029@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
030@JsonDeserialize(as = ImportResourceImpl.class)
031public interface ImportResource {
032
033    /**
034     *  <p>User-defined unique identifier.</p>
035     * @return key
036     */
037    @NotNull
038    @JsonProperty("key")
039    public String getKey();
040
041    /**
042     *  <p>User-defined unique identifier.</p>
043     * @param key value to be set
044     */
045
046    public void setKey(final String key);
047
048    /**
049     * factory method
050     * @return instance of ImportResource
051     */
052    public static ImportResource of() {
053        return new ImportResourceImpl();
054    }
055
056    /**
057     * factory method to create a shallow copy ImportResource
058     * @param template instance to be copied
059     * @return copy instance
060     */
061    public static ImportResource of(final ImportResource template) {
062        ImportResourceImpl instance = new ImportResourceImpl();
063        instance.setKey(template.getKey());
064        return instance;
065    }
066
067    /**
068     * factory method to create a deep copy of ImportResource
069     * @param template instance to be copied
070     * @return copy instance
071     */
072    @Nullable
073    public static ImportResource deepCopy(@Nullable final ImportResource template) {
074        if (template == null) {
075            return null;
076        }
077        if (template instanceof com.commercetools.importapi.models.categories.CategoryImport) {
078            return com.commercetools.importapi.models.categories.CategoryImport
079                    .deepCopy((com.commercetools.importapi.models.categories.CategoryImport) template);
080        }
081        if (template instanceof com.commercetools.importapi.models.customers.CustomerImport) {
082            return com.commercetools.importapi.models.customers.CustomerImport
083                    .deepCopy((com.commercetools.importapi.models.customers.CustomerImport) template);
084        }
085        if (template instanceof com.commercetools.importapi.models.inventories.InventoryImport) {
086            return com.commercetools.importapi.models.inventories.InventoryImport
087                    .deepCopy((com.commercetools.importapi.models.inventories.InventoryImport) template);
088        }
089        if (template instanceof com.commercetools.importapi.models.prices.PriceImport) {
090            return com.commercetools.importapi.models.prices.PriceImport
091                    .deepCopy((com.commercetools.importapi.models.prices.PriceImport) template);
092        }
093        if (template instanceof com.commercetools.importapi.models.productdrafts.ProductDraftImport) {
094            return com.commercetools.importapi.models.productdrafts.ProductDraftImport
095                    .deepCopy((com.commercetools.importapi.models.productdrafts.ProductDraftImport) template);
096        }
097        if (template instanceof com.commercetools.importapi.models.products.ProductImport) {
098            return com.commercetools.importapi.models.products.ProductImport
099                    .deepCopy((com.commercetools.importapi.models.products.ProductImport) template);
100        }
101        if (template instanceof com.commercetools.importapi.models.producttypes.ProductTypeImport) {
102            return com.commercetools.importapi.models.producttypes.ProductTypeImport
103                    .deepCopy((com.commercetools.importapi.models.producttypes.ProductTypeImport) template);
104        }
105        if (template instanceof com.commercetools.importapi.models.productvariants.ProductVariantImport) {
106            return com.commercetools.importapi.models.productvariants.ProductVariantImport
107                    .deepCopy((com.commercetools.importapi.models.productvariants.ProductVariantImport) template);
108        }
109        if (template instanceof com.commercetools.importapi.models.standalone_prices.StandalonePriceImport) {
110            return com.commercetools.importapi.models.standalone_prices.StandalonePriceImport
111                    .deepCopy((com.commercetools.importapi.models.standalone_prices.StandalonePriceImport) template);
112        }
113        if (template instanceof com.commercetools.importapi.models.types.TypeImport) {
114            return com.commercetools.importapi.models.types.TypeImport
115                    .deepCopy((com.commercetools.importapi.models.types.TypeImport) template);
116        }
117        ImportResourceImpl instance = new ImportResourceImpl();
118        instance.setKey(template.getKey());
119        return instance;
120    }
121
122    /**
123     * builder factory method for ImportResource
124     * @return builder
125     */
126    public static ImportResourceBuilder builder() {
127        return ImportResourceBuilder.of();
128    }
129
130    /**
131     * create builder for ImportResource instance
132     * @param template instance with prefilled values for the builder
133     * @return builder
134     */
135    public static ImportResourceBuilder builder(final ImportResource template) {
136        return ImportResourceBuilder.of(template);
137    }
138
139    /**
140     * accessor map function
141     * @param <T> mapped type
142     * @param helper function to map the object
143     * @return mapped value
144     */
145    default <T> T withImportResource(Function<ImportResource, T> helper) {
146        return helper.apply(this);
147    }
148
149    /**
150     * gives a TypeReference for usage with Jackson DataBind
151     * @return TypeReference
152     */
153    public static com.fasterxml.jackson.core.type.TypeReference<ImportResource> typeReference() {
154        return new com.fasterxml.jackson.core.type.TypeReference<ImportResource>() {
155            @Override
156            public String toString() {
157                return "TypeReference<ImportResource>";
158            }
159        };
160    }
161}