001
002package com.commercetools.history.models.common;
003
004import java.time.*;
005import java.util.*;
006import java.util.function.Function;
007import java.util.stream.Collectors;
008
009import javax.annotation.Nullable;
010import javax.validation.Valid;
011import javax.validation.constraints.NotNull;
012
013import com.fasterxml.jackson.annotation.*;
014import com.fasterxml.jackson.databind.annotation.*;
015
016import io.vrap.rmf.base.client.utils.Generated;
017
018/**
019 * Delivery
020 *
021 * <hr>
022 * Example to create an instance using the builder pattern
023 * <div class=code-example>
024 * <pre><code class='java'>
025 *     Delivery delivery = Delivery.builder()
026 *             .id("{id}")
027 *             .createdAt("{createdAt}")
028 *             .plusItems(itemsBuilder -> itemsBuilder)
029 *             .plusParcels(parcelsBuilder -> parcelsBuilder)
030 *             .build()
031 * </code></pre>
032 * </div>
033 */
034@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
035@JsonDeserialize(as = DeliveryImpl.class)
036public interface Delivery {
037
038    /**
039     *
040     * @return id
041     */
042    @NotNull
043    @JsonProperty("id")
044    public String getId();
045
046    /**
047     *
048     * @return createdAt
049     */
050    @NotNull
051    @JsonProperty("createdAt")
052    public String getCreatedAt();
053
054    /**
055     *
056     * @return items
057     */
058    @NotNull
059    @Valid
060    @JsonProperty("items")
061    public List<DeliveryItem> getItems();
062
063    /**
064     *
065     * @return parcels
066     */
067    @NotNull
068    @Valid
069    @JsonProperty("parcels")
070    public List<Parcel> getParcels();
071
072    /**
073     *
074     * @return address
075     */
076    @Valid
077    @JsonProperty("address")
078    public Address getAddress();
079
080    /**
081     *  <p>Custom Fields for the Transaction.</p>
082     * @return custom
083     */
084    @Valid
085    @JsonProperty("custom")
086    public CustomFields getCustom();
087
088    /**
089     * set id
090     * @param id value to be set
091     */
092
093    public void setId(final String id);
094
095    /**
096     * set createdAt
097     * @param createdAt value to be set
098     */
099
100    public void setCreatedAt(final String createdAt);
101
102    /**
103     * set items
104     * @param items values to be set
105     */
106
107    @JsonIgnore
108    public void setItems(final DeliveryItem... items);
109
110    /**
111     * set items
112     * @param items values to be set
113     */
114
115    public void setItems(final List<DeliveryItem> items);
116
117    /**
118     * set parcels
119     * @param parcels values to be set
120     */
121
122    @JsonIgnore
123    public void setParcels(final Parcel... parcels);
124
125    /**
126     * set parcels
127     * @param parcels values to be set
128     */
129
130    public void setParcels(final List<Parcel> parcels);
131
132    /**
133     * set address
134     * @param address value to be set
135     */
136
137    public void setAddress(final Address address);
138
139    /**
140     *  <p>Custom Fields for the Transaction.</p>
141     * @param custom value to be set
142     */
143
144    public void setCustom(final CustomFields custom);
145
146    /**
147     * factory method
148     * @return instance of Delivery
149     */
150    public static Delivery of() {
151        return new DeliveryImpl();
152    }
153
154    /**
155     * factory method to create a shallow copy Delivery
156     * @param template instance to be copied
157     * @return copy instance
158     */
159    public static Delivery of(final Delivery template) {
160        DeliveryImpl instance = new DeliveryImpl();
161        instance.setId(template.getId());
162        instance.setCreatedAt(template.getCreatedAt());
163        instance.setItems(template.getItems());
164        instance.setParcels(template.getParcels());
165        instance.setAddress(template.getAddress());
166        instance.setCustom(template.getCustom());
167        return instance;
168    }
169
170    /**
171     * factory method to create a deep copy of Delivery
172     * @param template instance to be copied
173     * @return copy instance
174     */
175    @Nullable
176    public static Delivery deepCopy(@Nullable final Delivery template) {
177        if (template == null) {
178            return null;
179        }
180        DeliveryImpl instance = new DeliveryImpl();
181        instance.setId(template.getId());
182        instance.setCreatedAt(template.getCreatedAt());
183        instance.setItems(Optional.ofNullable(template.getItems())
184                .map(t -> t.stream()
185                        .map(com.commercetools.history.models.common.DeliveryItem::deepCopy)
186                        .collect(Collectors.toList()))
187                .orElse(null));
188        instance.setParcels(Optional.ofNullable(template.getParcels())
189                .map(t -> t.stream()
190                        .map(com.commercetools.history.models.common.Parcel::deepCopy)
191                        .collect(Collectors.toList()))
192                .orElse(null));
193        instance.setAddress(com.commercetools.history.models.common.Address.deepCopy(template.getAddress()));
194        instance.setCustom(com.commercetools.history.models.common.CustomFields.deepCopy(template.getCustom()));
195        return instance;
196    }
197
198    /**
199     * builder factory method for Delivery
200     * @return builder
201     */
202    public static DeliveryBuilder builder() {
203        return DeliveryBuilder.of();
204    }
205
206    /**
207     * create builder for Delivery instance
208     * @param template instance with prefilled values for the builder
209     * @return builder
210     */
211    public static DeliveryBuilder builder(final Delivery template) {
212        return DeliveryBuilder.of(template);
213    }
214
215    /**
216     * accessor map function
217     * @param <T> mapped type
218     * @param helper function to map the object
219     * @return mapped value
220     */
221    default <T> T withDelivery(Function<Delivery, T> helper) {
222        return helper.apply(this);
223    }
224
225    /**
226     * gives a TypeReference for usage with Jackson DataBind
227     * @return TypeReference
228     */
229    public static com.fasterxml.jackson.core.type.TypeReference<Delivery> typeReference() {
230        return new com.fasterxml.jackson.core.type.TypeReference<Delivery>() {
231            @Override
232            public String toString() {
233                return "TypeReference<Delivery>";
234            }
235        };
236    }
237}