001
002package com.commercetools.api.models.order_edit;
003
004import java.time.*;
005import java.time.ZonedDateTime;
006import java.util.*;
007import java.util.function.Function;
008import java.util.stream.Collectors;
009
010import javax.annotation.Nullable;
011import javax.validation.Valid;
012import javax.validation.constraints.NotNull;
013
014import com.commercetools.api.models.common.BaseResource;
015import com.commercetools.api.models.common.CreatedBy;
016import com.commercetools.api.models.common.LastModifiedBy;
017import com.commercetools.api.models.order.OrderReference;
018import com.commercetools.api.models.order.StagedOrderUpdateAction;
019import com.commercetools.api.models.type.CustomFields;
020import com.fasterxml.jackson.annotation.*;
021import com.fasterxml.jackson.databind.annotation.*;
022
023import io.vrap.rmf.base.client.utils.Generated;
024
025/**
026 * OrderEdit
027 *
028 * <hr>
029 * Example to create an instance using the builder pattern
030 * <div class=code-example>
031 * <pre><code class='java'>
032 *     OrderEdit orderEdit = OrderEdit.builder()
033 *             .id("{id}")
034 *             .version(0.3)
035 *             .createdAt(ZonedDateTime.parse("2022-01-01T12:00:00.301Z"))
036 *             .lastModifiedAt(ZonedDateTime.parse("2022-01-01T12:00:00.301Z"))
037 *             .resource(resourceBuilder -> resourceBuilder)
038 *             .plusStagedActions(stagedActionsBuilder -> stagedActionsBuilder)
039 *             .result(resultBuilder -> resultBuilder)
040 *             .build()
041 * </code></pre>
042 * </div>
043 */
044@Generated(value = "io.vrap.rmf.codegen.rendering.CoreCodeGenerator", comments = "https://github.com/commercetools/rmf-codegen")
045@JsonDeserialize(as = OrderEditImpl.class)
046public interface OrderEdit extends BaseResource, OrderEditMixin, com.commercetools.api.models.DomainResource<OrderEdit>,
047        com.commercetools.api.models.Referencable<OrderEdit>,
048        com.commercetools.api.models.ResourceIdentifiable<OrderEdit>,
049        com.commercetools.api.models.Customizable<OrderEdit>, com.commercetools.api.models.WithKey {
050
051    /**
052     *  <p>Unique identifier of the Order Edit.</p>
053     * @return id
054     */
055    @NotNull
056    @JsonProperty("id")
057    public String getId();
058
059    /**
060     *  <p>Current version of the Order Edit.</p>
061     * @return version
062     */
063    @NotNull
064    @JsonProperty("version")
065    public Long getVersion();
066
067    /**
068     *  <p>User-defined unique identifier of the Order Edit.</p>
069     * @return key
070     */
071
072    @JsonProperty("key")
073    public String getKey();
074
075    /**
076     *  <p>Reference to the Order updated with this edit.</p>
077     * @return resource
078     */
079    @NotNull
080    @Valid
081    @JsonProperty("resource")
082    public OrderReference getResource();
083
084    /**
085     *  <p>Update actions applied to the Order referenced by <code>resource</code>.</p>
086     * @return stagedActions
087     */
088    @NotNull
089    @Valid
090    @JsonProperty("stagedActions")
091    public List<StagedOrderUpdateAction> getStagedActions();
092
093    /**
094     *  <p>For applied edits, it's a summary of the changes on the Order. For unapplied edits, it's a preview of the changes.</p>
095     * @return result
096     */
097    @NotNull
098    @Valid
099    @JsonProperty("result")
100    public OrderEditResult getResult();
101
102    /**
103     *  <p>User-defined information regarding the Order Edit.</p>
104     * @return comment
105     */
106
107    @JsonProperty("comment")
108    public String getComment();
109
110    /**
111     *  <p>Custom Fields of the Order Edit.</p>
112     * @return custom
113     */
114    @Valid
115    @JsonProperty("custom")
116    public CustomFields getCustom();
117
118    /**
119     *  <p>Date and time (UTC) the Order Edit was initially created.</p>
120     * @return createdAt
121     */
122    @NotNull
123    @JsonProperty("createdAt")
124    public ZonedDateTime getCreatedAt();
125
126    /**
127     *  <p>Date and time (UTC) the Order Edit was last updated.</p>
128     * @return lastModifiedAt
129     */
130    @NotNull
131    @JsonProperty("lastModifiedAt")
132    public ZonedDateTime getLastModifiedAt();
133
134    /**
135     *  <p>Present on resources created after 1 February 2019 except for events not tracked.</p>
136     * @return lastModifiedBy
137     */
138    @Valid
139    @JsonProperty("lastModifiedBy")
140    public LastModifiedBy getLastModifiedBy();
141
142    /**
143     *  <p>Present on resources created after 1 February 2019 except for events not tracked.</p>
144     * @return createdBy
145     */
146    @Valid
147    @JsonProperty("createdBy")
148    public CreatedBy getCreatedBy();
149
150    /**
151     *  <p>Unique identifier of the Order Edit.</p>
152     * @param id value to be set
153     */
154
155    public void setId(final String id);
156
157    /**
158     *  <p>Current version of the Order Edit.</p>
159     * @param version value to be set
160     */
161
162    public void setVersion(final Long version);
163
164    /**
165     *  <p>User-defined unique identifier of the Order Edit.</p>
166     * @param key value to be set
167     */
168
169    public void setKey(final String key);
170
171    /**
172     *  <p>Reference to the Order updated with this edit.</p>
173     * @param resource value to be set
174     */
175
176    public void setResource(final OrderReference resource);
177
178    /**
179     *  <p>Update actions applied to the Order referenced by <code>resource</code>.</p>
180     * @param stagedActions values to be set
181     */
182
183    @JsonIgnore
184    public void setStagedActions(final StagedOrderUpdateAction... stagedActions);
185
186    /**
187     *  <p>Update actions applied to the Order referenced by <code>resource</code>.</p>
188     * @param stagedActions values to be set
189     */
190
191    public void setStagedActions(final List<StagedOrderUpdateAction> stagedActions);
192
193    /**
194     *  <p>For applied edits, it's a summary of the changes on the Order. For unapplied edits, it's a preview of the changes.</p>
195     * @param result value to be set
196     */
197
198    public void setResult(final OrderEditResult result);
199
200    /**
201     *  <p>User-defined information regarding the Order Edit.</p>
202     * @param comment value to be set
203     */
204
205    public void setComment(final String comment);
206
207    /**
208     *  <p>Custom Fields of the Order Edit.</p>
209     * @param custom value to be set
210     */
211
212    public void setCustom(final CustomFields custom);
213
214    /**
215     *  <p>Date and time (UTC) the Order Edit was initially created.</p>
216     * @param createdAt value to be set
217     */
218
219    public void setCreatedAt(final ZonedDateTime createdAt);
220
221    /**
222     *  <p>Date and time (UTC) the Order Edit was last updated.</p>
223     * @param lastModifiedAt value to be set
224     */
225
226    public void setLastModifiedAt(final ZonedDateTime lastModifiedAt);
227
228    /**
229     *  <p>Present on resources created after 1 February 2019 except for events not tracked.</p>
230     * @param lastModifiedBy value to be set
231     */
232
233    public void setLastModifiedBy(final LastModifiedBy lastModifiedBy);
234
235    /**
236     *  <p>Present on resources created after 1 February 2019 except for events not tracked.</p>
237     * @param createdBy value to be set
238     */
239
240    public void setCreatedBy(final CreatedBy createdBy);
241
242    /**
243     * factory method
244     * @return instance of OrderEdit
245     */
246    public static OrderEdit of() {
247        return new OrderEditImpl();
248    }
249
250    /**
251     * factory method to create a shallow copy OrderEdit
252     * @param template instance to be copied
253     * @return copy instance
254     */
255    public static OrderEdit of(final OrderEdit template) {
256        OrderEditImpl instance = new OrderEditImpl();
257        instance.setId(template.getId());
258        instance.setVersion(template.getVersion());
259        instance.setCreatedAt(template.getCreatedAt());
260        instance.setLastModifiedAt(template.getLastModifiedAt());
261        instance.setKey(template.getKey());
262        instance.setResource(template.getResource());
263        instance.setStagedActions(template.getStagedActions());
264        instance.setResult(template.getResult());
265        instance.setComment(template.getComment());
266        instance.setCustom(template.getCustom());
267        instance.setLastModifiedBy(template.getLastModifiedBy());
268        instance.setCreatedBy(template.getCreatedBy());
269        return instance;
270    }
271
272    /**
273     * factory method to create a deep copy of OrderEdit
274     * @param template instance to be copied
275     * @return copy instance
276     */
277    @Nullable
278    public static OrderEdit deepCopy(@Nullable final OrderEdit template) {
279        if (template == null) {
280            return null;
281        }
282        OrderEditImpl instance = new OrderEditImpl();
283        instance.setId(template.getId());
284        instance.setVersion(template.getVersion());
285        instance.setCreatedAt(template.getCreatedAt());
286        instance.setLastModifiedAt(template.getLastModifiedAt());
287        instance.setKey(template.getKey());
288        instance.setResource(com.commercetools.api.models.order.OrderReference.deepCopy(template.getResource()));
289        instance.setStagedActions(Optional.ofNullable(template.getStagedActions())
290                .map(t -> t.stream()
291                        .map(com.commercetools.api.models.order.StagedOrderUpdateAction::deepCopy)
292                        .collect(Collectors.toList()))
293                .orElse(null));
294        instance.setResult(com.commercetools.api.models.order_edit.OrderEditResult.deepCopy(template.getResult()));
295        instance.setComment(template.getComment());
296        instance.setCustom(com.commercetools.api.models.type.CustomFields.deepCopy(template.getCustom()));
297        instance.setLastModifiedBy(
298            com.commercetools.api.models.common.LastModifiedBy.deepCopy(template.getLastModifiedBy()));
299        instance.setCreatedBy(com.commercetools.api.models.common.CreatedBy.deepCopy(template.getCreatedBy()));
300        return instance;
301    }
302
303    /**
304     * builder factory method for OrderEdit
305     * @return builder
306     */
307    public static OrderEditBuilder builder() {
308        return OrderEditBuilder.of();
309    }
310
311    /**
312     * create builder for OrderEdit instance
313     * @param template instance with prefilled values for the builder
314     * @return builder
315     */
316    public static OrderEditBuilder builder(final OrderEdit template) {
317        return OrderEditBuilder.of(template);
318    }
319
320    /**
321     * accessor map function
322     * @param <T> mapped type
323     * @param helper function to map the object
324     * @return mapped value
325     */
326    default <T> T withOrderEdit(Function<OrderEdit, T> helper) {
327        return helper.apply(this);
328    }
329
330    public static com.commercetools.api.models.common.ReferenceTypeId referenceTypeId() {
331        return com.commercetools.api.models.common.ReferenceTypeId.ORDER_EDIT;
332    }
333
334    /**
335     * gives a TypeReference for usage with Jackson DataBind
336     * @return TypeReference
337     */
338    public static com.fasterxml.jackson.core.type.TypeReference<OrderEdit> typeReference() {
339        return new com.fasterxml.jackson.core.type.TypeReference<OrderEdit>() {
340            @Override
341            public String toString() {
342                return "TypeReference<OrderEdit>";
343            }
344        };
345    }
346}