|
1 | 1 | package com.commercetools.sdk; |
2 | 2 |
|
| 3 | +import java.sql.Time; |
3 | 4 | import java.time.LocalDate; |
| 5 | +import java.time.LocalTime; |
4 | 6 | import java.time.ZonedDateTime; |
5 | 7 | import java.util.*; |
6 | 8 | import java.util.stream.Collectors; |
7 | 9 |
|
| 10 | +import com.commercetools.api.models.cart.CartReferenceImpl; |
8 | 11 | import com.commercetools.api.models.category.CategoryReference; |
| 12 | +import com.commercetools.api.models.category.CategoryReferenceImpl; |
9 | 13 | import com.commercetools.api.models.common.CentPrecisionMoney; |
10 | 14 | import com.commercetools.api.models.common.LocalizedString; |
11 | 15 | import com.commercetools.api.models.common.Money; |
| 16 | +import com.commercetools.api.models.common.Price; |
12 | 17 | import com.commercetools.api.models.product.ProductPriceModeEnum; |
13 | 18 | import com.commercetools.api.models.product.ProductProjection; |
| 19 | +import com.commercetools.api.models.product.ProductReferenceImpl; |
14 | 20 | import com.commercetools.api.models.product.ProductVariant; |
15 | 21 | import com.commercetools.api.models.product_type.*; |
16 | 22 | import com.commercetools.api.models.state.State; |
|
23 | 29 | import com.commercetools.importapi.models.productdrafts.ProductVariantDraftImport; |
24 | 30 | import com.commercetools.importapi.models.productvariants.Attribute; |
25 | 31 | import com.commercetools.importapi.models.productvariants.BooleanAttribute; |
| 32 | +import com.commercetools.importapi.models.productvariants.DateTimeAttribute; |
26 | 33 | import com.commercetools.importapi.models.productvariants.NumberAttribute; |
| 34 | +import io.vrap.rmf.base.client.Builder; |
27 | 35 |
|
28 | 36 | public final class ProductUtil { |
29 | 37 | private static KeyResolverService<CategoryReference> catKeyResolverService; |
@@ -126,19 +134,24 @@ private static List<PriceDraftImport> mapPricesToImportApi(ProductVariant varian |
126 | 134 | .stream() |
127 | 135 | .map(p -> PriceDraftImport.builder() |
128 | 136 | .key(p.getKey()) |
129 | | - .value(v -> (p.getValue() instanceof CentPrecisionMoney) |
130 | | - ? v.centPrecisionBuilder() |
131 | | - .centAmount(p.getValue().getCentAmount()) |
132 | | - .currencyCode(p.getValue().getCurrencyCode()) |
133 | | - .fractionDigits(p.getValue().getFractionDigits()) |
134 | | - : v.highPrecisionBuilder() |
135 | | - .centAmount(p.getValue().getCentAmount()) |
136 | | - .currencyCode(p.getValue().getCurrencyCode()) |
137 | | - .fractionDigits(p.getValue().getFractionDigits())) |
| 137 | + .value(v -> importApiTypedMoney(p.getValue(), v)) |
138 | 138 | .build()) |
139 | 139 | .collect(Collectors.toList()); |
140 | 140 | } |
141 | 141 |
|
| 142 | + private static Builder<? extends TypedMoney> importApiTypedMoney( |
| 143 | + com.commercetools.api.models.common.TypedMoney p, TypedMoneyBuilder v) { |
| 144 | + return (p instanceof HighPrecisionMoney) ? |
| 145 | + v.highPrecisionBuilder() |
| 146 | + .centAmount(p.getCentAmount()) |
| 147 | + .currencyCode(p.getCurrencyCode()) |
| 148 | + .preciseAmount(((com.commercetools.api.models.common.HighPrecisionMoney)p).getPreciseAmount()) : |
| 149 | + v.centPrecisionBuilder() |
| 150 | + .centAmount(p.getCentAmount()) |
| 151 | + .currencyCode(p.getCurrencyCode()) |
| 152 | + .fractionDigits(p.getFractionDigits()); |
| 153 | + } |
| 154 | + |
142 | 155 | private static List<com.commercetools.importapi.models.common.Asset> importAssets( |
143 | 156 | List<com.commercetools.api.models.common.Asset> assets) { |
144 | 157 | if (assets == null) { |
@@ -196,35 +209,134 @@ private static Attribute mapAttribute(com.commercetools.api.models.product.Attri |
196 | 209 | .build(); |
197 | 210 | } |
198 | 211 | if (value instanceof Money) { |
199 | | - return Attribute.moneyBuilder().name(attribute.getName()).value((TypedMoney) value).build(); |
| 212 | + return Attribute.moneyBuilder().name(attribute.getName()).value((v -> importApiTypedMoney( |
| 213 | + (com.commercetools.api.models.common.TypedMoney) value, v))).build(); |
200 | 214 | } |
201 | 215 | if (value instanceof LocalDate) { |
202 | 216 | return Attribute.dateBuilder().name(attribute.getName()).value((LocalDate) value).build(); |
203 | 217 | } |
204 | 218 | if (value instanceof ZonedDateTime) { |
205 | 219 | return Attribute.datetimeBuilder().name(attribute.getName()).value((ZonedDateTime) value).build(); |
206 | 220 | } |
207 | | - if (value instanceof AttributeReferenceType) { |
208 | | - return Attribute.referenceBuilder().name(attribute.getName()).value((KeyReference) value).build(); |
209 | | - } |
210 | | - if (value instanceof AttributeReferenceTypeId) { |
211 | | - return Attribute.referenceBuilder().name(attribute.getName()).value((KeyReference) value).build(); |
| 221 | + if (value instanceof LocalTime) { |
| 222 | + return Attribute.timeBuilder().name(attribute.getName()).value((LocalTime) value).build(); |
212 | 223 | } |
213 | 224 | if (value instanceof AttributeConstraintEnum) { |
214 | 225 | return Attribute.enumBuilder() |
215 | 226 | .name(attribute.getName()) |
216 | 227 | .value(String.valueOf((AttributeConstraintEnum) value)) |
217 | 228 | .build(); |
218 | 229 | } |
219 | | - if (value instanceof AttributeSetType) { |
| 230 | + if (value instanceof ArrayList) { |
| 231 | + var list = (ArrayList<?>) value; |
| 232 | + if (list.isEmpty()) { |
| 233 | + return Attribute.referenceSetBuilder().build(); |
| 234 | + } |
| 235 | + if (list.get(0) instanceof LocalDate) { |
| 236 | + return Attribute.dateSetBuilder().name(attribute.getName()).value((ArrayList<LocalDate>) list).build(); |
| 237 | + } |
| 238 | + if (list.get(0) instanceof ZonedDateTime) { |
| 239 | + return Attribute.datetimeSetBuilder().name(attribute.getName()).value((ArrayList<ZonedDateTime>) list).build(); |
| 240 | + } |
| 241 | + if (list.get(0) instanceof LocalTime) { |
| 242 | + return Attribute.timeSetBuilder().name(attribute.getName()).value((ArrayList<LocalTime>) list).build(); |
| 243 | + } |
| 244 | + if (list.get(0) instanceof String) { |
| 245 | + return Attribute.textSetBuilder().name(attribute.getName()).value((ArrayList<String>) list).build(); |
| 246 | + } |
| 247 | + if (list.get(0) instanceof Integer) { |
| 248 | + return Attribute.numberSetBuilder().name(attribute.getName()).value((ArrayList<Double>) list).build(); |
| 249 | + } |
| 250 | + if (list.get(0) instanceof Long) { |
| 251 | + return Attribute.numberSetBuilder().name(attribute.getName()).value((ArrayList<Double>) list).build(); |
| 252 | + } |
| 253 | + if (list.get(0) instanceof Boolean) { |
| 254 | + return Attribute.booleanSetBuilder().name(attribute.getName()).value((ArrayList<Boolean>) list).build(); |
| 255 | + } |
| 256 | + if (list.get(0) instanceof Double) { |
| 257 | + return Attribute.numberSetBuilder().name(attribute.getName()).value((ArrayList<Double>) list).build(); |
| 258 | + } |
| 259 | + if (list.get(0) instanceof LocalizedString) { |
| 260 | + return Attribute.ltextSetBuilder() |
| 261 | + .name(attribute.getName()) |
| 262 | + .value(list.stream().map(v -> getLocalizedStringBuilder(((LocalizedString) v)).build()).collect( |
| 263 | + Collectors.toList())) |
| 264 | + .build(); |
| 265 | + } |
| 266 | + if (list.get(0) instanceof AttributePlainEnumValue) { |
| 267 | + return Attribute.enumSetBuilder() |
| 268 | + .name(attribute.getName()) |
| 269 | + .value(((ArrayList<AttributePlainEnumValue>) list).stream().map(AttributePlainEnumValue::getKey).collect( |
| 270 | + Collectors.toList())) |
| 271 | + .build(); |
| 272 | + } |
| 273 | + if (list.get(0) instanceof AttributeLocalizedEnumValue) { |
| 274 | + return Attribute.enumSetBuilder() |
| 275 | + .name(attribute.getName()) |
| 276 | + .value(((ArrayList<AttributeLocalizedEnumValue>) list).stream().map(AttributeLocalizedEnumValue::getKey).collect( |
| 277 | + Collectors.toList())) |
| 278 | + .build(); |
| 279 | + } |
| 280 | + if (list.get(0) instanceof Money) { |
| 281 | + return Attribute.moneySetBuilder().name(attribute.getName()).value( |
| 282 | + list.stream().map(v -> importApiTypedMoney(( |
| 283 | + com.commercetools.api.models.common.TypedMoney)v, new TypedMoneyBuilder()).build()).collect(Collectors.toList())).build(); |
| 284 | + } |
| 285 | + } |
| 286 | + if (value instanceof ProductReferenceImpl) { |
| 287 | + return Attribute.referenceBuilder().name(attribute.getName()).value(r -> r.productBuilder().key (((ProductReferenceImpl) value).getObj().getKey())).build(); |
| 288 | + } |
| 289 | + if (value instanceof ProductTypeReferenceImpl) { |
| 290 | + return Attribute.referenceBuilder().name(attribute.getName()).value(r -> r.productTypeBuilder().key (((ProductTypeReferenceImpl) value).getObj().getKey())).build(); |
| 291 | + } |
| 292 | + if (value instanceof CartReferenceImpl) { |
| 293 | + return Attribute.referenceBuilder().name(attribute.getName()).value(r -> r.cartBuilder().key (((CartReferenceImpl) value).getObj().getKey())).build(); |
| 294 | + } |
| 295 | + if (value instanceof BusinessUnitKeyReferenceImpl) { |
| 296 | + return Attribute.referenceBuilder().name(attribute.getName()).value(r -> r.businessUnitBuilder().key (((BusinessUnitKeyReferenceImpl) value).getKey())).build(); |
| 297 | + } |
| 298 | + if (value instanceof CategoryReferenceImpl) { |
| 299 | + return Attribute.referenceBuilder().name(attribute.getName()).value(r -> r.categoryBuilder().key (((CategoryReferenceImpl) value).getObj().getKey())).build(); |
| 300 | + } |
| 301 | + if (value instanceof ChannelKeyReferenceImpl) { |
| 302 | + return Attribute.referenceBuilder().name(attribute.getName()).value(r -> r.channelBuilder().key (((ChannelKeyReferenceImpl) value).getKey())).build(); |
| 303 | + } |
| 304 | + if (value instanceof CustomerKeyReferenceImpl) { |
| 305 | + return Attribute.referenceBuilder().name(attribute.getName()).value(r -> r.customerBuilder().key (((CustomerKeyReferenceImpl) value).getKey())).build(); |
| 306 | + } |
| 307 | + if (value instanceof AssociateRoleKeyReferenceImpl) { |
| 308 | + return Attribute.referenceBuilder().name(attribute.getName()).value(r -> r.associateRoleBuilder().key (((AssociateRoleKeyReferenceImpl) value).getKey())).build(); |
| 309 | + } |
| 310 | + if (value instanceof DiscountCodeKeyReferenceImpl) { |
| 311 | + return Attribute.referenceBuilder().name(attribute.getName()).value(r -> r.discountCodeBuilder().key (((DiscountCodeKeyReferenceImpl) value).getKey())).build(); |
| 312 | + } |
| 313 | + if (value instanceof CustomerGroupKeyReferenceImpl) { |
| 314 | + return Attribute.referenceBuilder().name(attribute.getName()).value(r -> r.customerGroupBuilder().key (((CustomerGroupKeyReferenceImpl) value).getKey())).build(); |
| 315 | + } |
| 316 | + if (value instanceof OrderKeyReferenceImpl) { |
| 317 | + return Attribute.referenceBuilder().name(attribute.getName()).value(r -> r.orderBuilder().key (((OrderKeyReferenceImpl) value).getKey())).build(); |
| 318 | + } |
| 319 | + if (value instanceof ShippingMethodKeyReferenceImpl) { |
| 320 | + return Attribute.referenceBuilder().name(attribute.getName()).value(r -> r.shippingMethodBuilder().key (((ShippingMethodKeyReferenceImpl) value).getKey())).build(); |
| 321 | + } |
| 322 | + if (value instanceof StateKeyReferenceImpl) { |
| 323 | + return Attribute.referenceBuilder().name(attribute.getName()).value(r -> r.stateBuilder().key (((StateKeyReferenceImpl) value).getKey())).build(); |
| 324 | + } |
| 325 | + if (value instanceof TaxCategoryKeyReferenceImpl) { |
| 326 | + return Attribute.referenceBuilder().name(attribute.getName()).value(r -> r.taxCategoryBuilder().key (((TaxCategoryKeyReferenceImpl) value).getKey())).build(); |
| 327 | + } |
| 328 | + if (value instanceof CustomObjectKeyReferenceImpl) { |
| 329 | + return Attribute.referenceBuilder().name(attribute.getName()).value(r -> r.keyValueDocumentBuilder().key (((CustomObjectKeyReferenceImpl) value).getKey())).build(); |
| 330 | + } |
| 331 | + /*if (value instanceof AttributeSetType) { |
220 | 332 | var elementType = ((AttributeSetType) value).getElementType(); |
221 | 333 | if (elementType instanceof BooleanAttribute) { |
222 | 334 | return Attribute.booleanSetBuilder().name(attribute.getName()).value((List<Boolean>) value).build(); |
223 | 335 | } |
224 | 336 | if (elementType instanceof NumberAttribute) { |
225 | 337 | return Attribute.numberSetBuilder().name(attribute.getName()).value((List<Double>) value).build(); |
226 | 338 | } |
227 | | - } |
| 339 | + }*/ |
228 | 340 | throw new IllegalArgumentException("Unsupported type: " + value.getClass()); |
229 | 341 | } |
230 | 342 | } |
0 commit comments