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}