Skip to content

Commit 0c197c1

Browse files
committed
DEVX-640: adding tests for different types of sets
1 parent ea7f447 commit 0c197c1

20 files changed

+1330
-18
lines changed

commercetools/commercetools-importapi-utils/src/main/java/com/commercetools/sdk/ProductUtil.java

Lines changed: 129 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
11
package com.commercetools.sdk;
22

3+
import java.sql.Time;
34
import java.time.LocalDate;
5+
import java.time.LocalTime;
46
import java.time.ZonedDateTime;
57
import java.util.*;
68
import java.util.stream.Collectors;
79

10+
import com.commercetools.api.models.cart.CartReferenceImpl;
811
import com.commercetools.api.models.category.CategoryReference;
12+
import com.commercetools.api.models.category.CategoryReferenceImpl;
913
import com.commercetools.api.models.common.CentPrecisionMoney;
1014
import com.commercetools.api.models.common.LocalizedString;
1115
import com.commercetools.api.models.common.Money;
16+
import com.commercetools.api.models.common.Price;
1217
import com.commercetools.api.models.product.ProductPriceModeEnum;
1318
import com.commercetools.api.models.product.ProductProjection;
19+
import com.commercetools.api.models.product.ProductReferenceImpl;
1420
import com.commercetools.api.models.product.ProductVariant;
1521
import com.commercetools.api.models.product_type.*;
1622
import com.commercetools.api.models.state.State;
@@ -23,7 +29,9 @@
2329
import com.commercetools.importapi.models.productdrafts.ProductVariantDraftImport;
2430
import com.commercetools.importapi.models.productvariants.Attribute;
2531
import com.commercetools.importapi.models.productvariants.BooleanAttribute;
32+
import com.commercetools.importapi.models.productvariants.DateTimeAttribute;
2633
import com.commercetools.importapi.models.productvariants.NumberAttribute;
34+
import io.vrap.rmf.base.client.Builder;
2735

2836
public final class ProductUtil {
2937
private static KeyResolverService<CategoryReference> catKeyResolverService;
@@ -126,19 +134,24 @@ private static List<PriceDraftImport> mapPricesToImportApi(ProductVariant varian
126134
.stream()
127135
.map(p -> PriceDraftImport.builder()
128136
.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))
138138
.build())
139139
.collect(Collectors.toList());
140140
}
141141

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+
142155
private static List<com.commercetools.importapi.models.common.Asset> importAssets(
143156
List<com.commercetools.api.models.common.Asset> assets) {
144157
if (assets == null) {
@@ -196,35 +209,134 @@ private static Attribute mapAttribute(com.commercetools.api.models.product.Attri
196209
.build();
197210
}
198211
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();
200214
}
201215
if (value instanceof LocalDate) {
202216
return Attribute.dateBuilder().name(attribute.getName()).value((LocalDate) value).build();
203217
}
204218
if (value instanceof ZonedDateTime) {
205219
return Attribute.datetimeBuilder().name(attribute.getName()).value((ZonedDateTime) value).build();
206220
}
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();
212223
}
213224
if (value instanceof AttributeConstraintEnum) {
214225
return Attribute.enumBuilder()
215226
.name(attribute.getName())
216227
.value(String.valueOf((AttributeConstraintEnum) value))
217228
.build();
218229
}
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) {
220332
var elementType = ((AttributeSetType) value).getElementType();
221333
if (elementType instanceof BooleanAttribute) {
222334
return Attribute.booleanSetBuilder().name(attribute.getName()).value((List<Boolean>) value).build();
223335
}
224336
if (elementType instanceof NumberAttribute) {
225337
return Attribute.numberSetBuilder().name(attribute.getName()).value((List<Double>) value).build();
226338
}
227-
}
339+
}*/
228340
throw new IllegalArgumentException("Unsupported type: " + value.getClass());
229341
}
230342
}

0 commit comments

Comments
 (0)