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 * Parcel
020 *
021 * <hr>
022 * Example to create an instance using the builder pattern
023 * <div class=code-example>
024 * <pre><code class='java'>
025 *     Parcel parcel = Parcel.builder()
026 *             .id("{id}")
027 *             .createdAt("{createdAt}")
028 *             .measurements(measurementsBuilder -> measurementsBuilder)
029 *             .trackingData(trackingDataBuilder -> trackingDataBuilder)
030 *             .plusItems(itemsBuilder -> itemsBuilder)
031 *             .build()
032 * </code></pre>
033 * </div>
034 */
035@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
036@JsonDeserialize(as = ParcelImpl.class)
037public interface Parcel {
038
039    /**
040     *
041     * @return id
042     */
043    @NotNull
044    @JsonProperty("id")
045    public String getId();
046
047    /**
048     *
049     * @return createdAt
050     */
051    @NotNull
052    @JsonProperty("createdAt")
053    public String getCreatedAt();
054
055    /**
056     *
057     * @return measurements
058     */
059    @NotNull
060    @Valid
061    @JsonProperty("measurements")
062    public ParcelMeasurements getMeasurements();
063
064    /**
065     *
066     * @return trackingData
067     */
068    @NotNull
069    @Valid
070    @JsonProperty("trackingData")
071    public TrackingData getTrackingData();
072
073    /**
074     *
075     * @return items
076     */
077    @NotNull
078    @Valid
079    @JsonProperty("items")
080    public List<DeliveryItem> getItems();
081
082    /**
083     * set id
084     * @param id value to be set
085     */
086
087    public void setId(final String id);
088
089    /**
090     * set createdAt
091     * @param createdAt value to be set
092     */
093
094    public void setCreatedAt(final String createdAt);
095
096    /**
097     * set measurements
098     * @param measurements value to be set
099     */
100
101    public void setMeasurements(final ParcelMeasurements measurements);
102
103    /**
104     * set trackingData
105     * @param trackingData value to be set
106     */
107
108    public void setTrackingData(final TrackingData trackingData);
109
110    /**
111     * set items
112     * @param items values to be set
113     */
114
115    @JsonIgnore
116    public void setItems(final DeliveryItem... items);
117
118    /**
119     * set items
120     * @param items values to be set
121     */
122
123    public void setItems(final List<DeliveryItem> items);
124
125    /**
126     * factory method
127     * @return instance of Parcel
128     */
129    public static Parcel of() {
130        return new ParcelImpl();
131    }
132
133    /**
134     * factory method to create a shallow copy Parcel
135     * @param template instance to be copied
136     * @return copy instance
137     */
138    public static Parcel of(final Parcel template) {
139        ParcelImpl instance = new ParcelImpl();
140        instance.setId(template.getId());
141        instance.setCreatedAt(template.getCreatedAt());
142        instance.setMeasurements(template.getMeasurements());
143        instance.setTrackingData(template.getTrackingData());
144        instance.setItems(template.getItems());
145        return instance;
146    }
147
148    /**
149     * factory method to create a deep copy of Parcel
150     * @param template instance to be copied
151     * @return copy instance
152     */
153    @Nullable
154    public static Parcel deepCopy(@Nullable final Parcel template) {
155        if (template == null) {
156            return null;
157        }
158        ParcelImpl instance = new ParcelImpl();
159        instance.setId(template.getId());
160        instance.setCreatedAt(template.getCreatedAt());
161        instance.setMeasurements(
162            com.commercetools.history.models.common.ParcelMeasurements.deepCopy(template.getMeasurements()));
163        instance.setTrackingData(
164            com.commercetools.history.models.common.TrackingData.deepCopy(template.getTrackingData()));
165        instance.setItems(Optional.ofNullable(template.getItems())
166                .map(t -> t.stream()
167                        .map(com.commercetools.history.models.common.DeliveryItem::deepCopy)
168                        .collect(Collectors.toList()))
169                .orElse(null));
170        return instance;
171    }
172
173    /**
174     * builder factory method for Parcel
175     * @return builder
176     */
177    public static ParcelBuilder builder() {
178        return ParcelBuilder.of();
179    }
180
181    /**
182     * create builder for Parcel instance
183     * @param template instance with prefilled values for the builder
184     * @return builder
185     */
186    public static ParcelBuilder builder(final Parcel template) {
187        return ParcelBuilder.of(template);
188    }
189
190    /**
191     * accessor map function
192     * @param <T> mapped type
193     * @param helper function to map the object
194     * @return mapped value
195     */
196    default <T> T withParcel(Function<Parcel, T> helper) {
197        return helper.apply(this);
198    }
199
200    /**
201     * gives a TypeReference for usage with Jackson DataBind
202     * @return TypeReference
203     */
204    public static com.fasterxml.jackson.core.type.TypeReference<Parcel> typeReference() {
205        return new com.fasterxml.jackson.core.type.TypeReference<Parcel>() {
206            @Override
207            public String toString() {
208                return "TypeReference<Parcel>";
209            }
210        };
211    }
212}