Skip to content

Commit 68640fd

Browse files
committed
SUPPORT-28804 refactoring
1 parent 712be23 commit 68640fd

File tree

1 file changed

+120
-119
lines changed

1 file changed

+120
-119
lines changed

commercetools/commercetools-sdk-java-importapi/src/main/java/com/commercetools/importapi/json/ErrorAttributeDeserializer.java

Lines changed: 120 additions & 119 deletions
Original file line numberDiff line numberDiff line change
@@ -36,59 +36,7 @@ public Attribute deserialize(JsonParser p, DeserializationContext ctxt) throws I
3636
case STRING:
3737
return TextAttributeBuilder.of().name(node.get("name").asText()).value(valueNode.asText()).build();
3838
case OBJECT:
39-
if (valueNode.has("key") && valueNode.has("label")) {
40-
JsonNode label = valueNode.get("label");
41-
if (label.getNodeType() == OBJECT) {
42-
return LocalizableEnumAttributeBuilder.of()
43-
.name(node.get("name").asText())
44-
.value(valueNode.get("key").textValue())
45-
.build();
46-
}
47-
return EnumAttributeBuilder.of()
48-
.name(node.get("name").asText())
49-
.value(valueNode.get("key").textValue())
50-
.build();
51-
}
52-
if (valueNode.has("currencyCode")) {
53-
return MoneyAttributeBuilder.of()
54-
.name(node.get("name").asText())
55-
.value(typedMoneyBuilder -> typedMoneyBuilder.centPrecisionBuilder()
56-
.currencyCode(valueNode.get("currencyCode").asText())
57-
.centAmount(valueNode.get("centAmount").asLong())
58-
.fractionDigits(valueNode.get("fractionDigits").asInt()))
59-
.build();
60-
}
61-
if (valueNode.has("typeId")) {
62-
return ReferenceAttributeBuilder.of()
63-
.name(node.get("name").asText())
64-
// this is not working because reference contains ID and KeyReference requires ID
65-
// .value((KeyReference) p.getCodec().treeAsTokens(valueNode).readValueAs(getTypeRef(valueNode.get("typeId").asText())))
66-
.value(new KeyReference() {
67-
@Override
68-
public String getKey() {
69-
return valueNode.get("id").asText();
70-
}
71-
72-
@Override
73-
public ReferenceType getTypeId() {
74-
return getReferenceType(valueNode.get("typeId").asText());
75-
}
76-
77-
@Override
78-
public void setKey(String key) {
79-
}
80-
})
81-
.build();
82-
}
83-
return LocalizableTextAttributeBuilder.of()
84-
.name(node.get("name").asText())
85-
.value(localizedStringBuilder -> {
86-
valueNode.fields()
87-
.forEachRemaining(nodeEntry -> localizedStringBuilder.addValue(nodeEntry.getKey(),
88-
nodeEntry.getValue().asText()));
89-
return localizedStringBuilder;
90-
})
91-
.build();
39+
return createAttributeFromObject(node);
9240
case ARRAY:
9341
JsonNode firstElement = valueNode.get(0);
9442
JsonNodeType firstElementNodeType = firstElement.getNodeType();
@@ -112,72 +60,7 @@ public void setKey(String key) {
11260
.value(booleanValues)
11361
.build();
11462
case OBJECT:
115-
if (firstElement.has("key") && firstElement.has("label")) {
116-
List<String> keys = new ArrayList<>();
117-
valueNode.iterator()
118-
.forEachRemaining(jsonNode -> jsonNode.fields().forEachRemaining(nodeEntry -> {
119-
String key = nodeEntry.getKey();
120-
if (key.equals("key")) {
121-
keys.add(nodeEntry.getValue().asText());
122-
}
123-
}));
124-
JsonNode label = firstElement.get("label");
125-
if (label.getNodeType() == OBJECT) {
126-
return LocalizableEnumSetAttributeBuilder.of()
127-
.name(node.get("name").asText())
128-
.value(keys)
129-
.build();
130-
}
131-
return EnumSetAttributeBuilder.of().name(node.get("name").asText()).value(keys).build();
132-
}
133-
if (firstElement.has("typeId")) {
134-
List<KeyReference> keyReferences = new ArrayList<>();
135-
valueNode.iterator().forEachRemaining(nodeEntry -> {
136-
keyReferences.add(new KeyReference() {
137-
@Override
138-
public String getKey() {
139-
return nodeEntry.get("id").asText();
140-
}
141-
142-
@Override
143-
public ReferenceType getTypeId() {
144-
return getReferenceType(nodeEntry.get("typeId").asText());
145-
}
146-
147-
@Override
148-
public void setKey(String key) {
149-
}
150-
});
151-
});
152-
return ReferenceSetAttributeBuilder.of()
153-
.name(node.get("name").asText())
154-
.value(keyReferences)
155-
.build();
156-
}
157-
if (firstElement.has("currencyCode")) {
158-
List<TypedMoney> values = new ArrayList<>();
159-
valueNode.iterator().forEachRemaining(nodeEntry -> {
160-
values.add(MoneyBuilder.of()
161-
.currencyCode(nodeEntry.get("currencyCode").asText())
162-
.centAmount(nodeEntry.get("centAmount").asLong())
163-
.fractionDigits(nodeEntry.get("fractionDigits").asInt())
164-
.build());
165-
});
166-
return MoneySetAttributeBuilder.of().name(node.get("name").asText()).value(values).build();
167-
}
168-
169-
List<LocalizedString> values = new ArrayList<>();
170-
valueNode.iterator().forEachRemaining(jsonNode -> {
171-
LocalizedStringBuilder localizedStringBuilder = LocalizedStringBuilder.of();
172-
jsonNode.fields()
173-
.forEachRemaining(nodeEntry -> localizedStringBuilder.addValue(nodeEntry.getKey(),
174-
nodeEntry.getValue().asText()));
175-
values.add(localizedStringBuilder.build());
176-
});
177-
return LocalizableTextSetAttributeBuilder.of()
178-
.name(node.get("name").asText())
179-
.value(values)
180-
.build();
63+
return createSetAttributeFromObject(node);
18164
}
18265
default:
18366
AttributeImpl attribute = new AttributeImpl();
@@ -192,4 +75,122 @@ private ReferenceType getReferenceType(String typeId) {
19275
.findFirst()
19376
.orElse(null);
19477
}
78+
79+
private Attribute createAttributeFromObject(JsonNode node) {
80+
JsonNode valueNode = node.get("value");
81+
if (valueNode.has("key") && valueNode.has("label")) {
82+
JsonNode label = valueNode.get("label");
83+
if (label.getNodeType() == OBJECT) {
84+
return LocalizableEnumAttributeBuilder.of()
85+
.name(node.get("name").asText())
86+
.value(valueNode.get("key").textValue())
87+
.build();
88+
}
89+
return EnumAttributeBuilder.of()
90+
.name(node.get("name").asText())
91+
.value(valueNode.get("key").textValue())
92+
.build();
93+
}
94+
if (valueNode.has("currencyCode")) {
95+
return MoneyAttributeBuilder.of()
96+
.name(node.get("name").asText())
97+
.value(typedMoneyBuilder -> typedMoneyBuilder.centPrecisionBuilder()
98+
.currencyCode(valueNode.get("currencyCode").asText())
99+
.centAmount(valueNode.get("centAmount").asLong())
100+
.fractionDigits(valueNode.get("fractionDigits").asInt()))
101+
.build();
102+
}
103+
if (valueNode.has("typeId")) {
104+
return ReferenceAttributeBuilder.of()
105+
.name(node.get("name").asText())
106+
// this is not working because reference contains ID and KeyReference requires ID
107+
// .value((KeyReference) p.getCodec().treeAsTokens(valueNode).readValueAs(getTypeRef(valueNode.get("typeId").asText())))
108+
.value(createKeyReference(valueNode))
109+
.build();
110+
}
111+
return LocalizableTextAttributeBuilder.of()
112+
.name(node.get("name").asText())
113+
.value(localizedStringBuilder -> {
114+
valueNode.fields()
115+
.forEachRemaining(nodeEntry -> localizedStringBuilder.addValue(nodeEntry.getKey(),
116+
nodeEntry.getValue().asText()));
117+
return localizedStringBuilder;
118+
})
119+
.build();
120+
}
121+
122+
private Attribute createSetAttributeFromObject(JsonNode node) {
123+
JsonNode valueNode = node.get("value");
124+
JsonNode firstElement = valueNode.get(0);
125+
if (firstElement.has("key") && firstElement.has("label")) {
126+
List<String> keys = new ArrayList<>();
127+
valueNode.iterator()
128+
.forEachRemaining(jsonNode -> jsonNode.fields().forEachRemaining(nodeEntry -> {
129+
String key = nodeEntry.getKey();
130+
if (key.equals("key")) {
131+
keys.add(nodeEntry.getValue().asText());
132+
}
133+
}));
134+
JsonNode label = firstElement.get("label");
135+
if (label.getNodeType() == OBJECT) {
136+
return LocalizableEnumSetAttributeBuilder.of()
137+
.name(node.get("name").asText())
138+
.value(keys)
139+
.build();
140+
}
141+
return EnumSetAttributeBuilder.of().name(node.get("name").asText()).value(keys).build();
142+
}
143+
if (firstElement.has("typeId")) {
144+
List<KeyReference> keyReferences = new ArrayList<>();
145+
valueNode.iterator().forEachRemaining(nodeEntry -> {
146+
keyReferences.add(createKeyReference(nodeEntry));
147+
});
148+
return ReferenceSetAttributeBuilder.of()
149+
.name(node.get("name").asText())
150+
.value(keyReferences)
151+
.build();
152+
}
153+
if (firstElement.has("currencyCode")) {
154+
List<TypedMoney> values = new ArrayList<>();
155+
valueNode.iterator().forEachRemaining(nodeEntry -> {
156+
values.add(MoneyBuilder.of()
157+
.currencyCode(nodeEntry.get("currencyCode").asText())
158+
.centAmount(nodeEntry.get("centAmount").asLong())
159+
.fractionDigits(nodeEntry.get("fractionDigits").asInt())
160+
.build());
161+
});
162+
return MoneySetAttributeBuilder.of().name(node.get("name").asText()).value(values).build();
163+
}
164+
165+
List<LocalizedString> values = new ArrayList<>();
166+
valueNode.iterator().forEachRemaining(jsonNode -> {
167+
LocalizedStringBuilder localizedStringBuilder = LocalizedStringBuilder.of();
168+
jsonNode.fields()
169+
.forEachRemaining(nodeEntry -> localizedStringBuilder.addValue(nodeEntry.getKey(),
170+
nodeEntry.getValue().asText()));
171+
values.add(localizedStringBuilder.build());
172+
});
173+
return LocalizableTextSetAttributeBuilder.of()
174+
.name(node.get("name").asText())
175+
.value(values)
176+
.build();
177+
}
178+
179+
private KeyReference createKeyReference(JsonNode node) {
180+
return new KeyReference() {
181+
@Override
182+
public String getKey() {
183+
return node.get("id").asText();
184+
}
185+
186+
@Override
187+
public ReferenceType getTypeId() {
188+
return getReferenceType(node.get("typeId").asText());
189+
}
190+
191+
@Override
192+
public void setKey(String key) {
193+
}
194+
};
195+
}
195196
}

0 commit comments

Comments
 (0)