-
Notifications
You must be signed in to change notification settings - Fork 2
/
PropertiesInstanceContext.java
43 lines (37 loc) · 1.73 KB
/
PropertiesInstanceContext.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package cz.cvut.kbss.jsonld.deserialization;
import cz.cvut.kbss.jsonld.common.BeanClassProcessor;
import cz.cvut.kbss.jsonld.deserialization.util.DataTypeTransformer;
import java.lang.reflect.Field;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
public class PropertiesInstanceContext extends InstanceContext<Map> {
private final Field propertiesField;
private final String property;
PropertiesInstanceContext(Map<?, ?> instance, String property, Field propertiesField) {
super(instance, Collections.emptyMap());
this.property = property;
this.propertiesField = propertiesField;
}
@Override
void addItem(Object item) {
final Class<?> keyType = BeanClassProcessor.getMapKeyType(propertiesField);
final Object typedProperty = DataTypeTransformer.transformValue(property, keyType);
final Class<?> valueType = BeanClassProcessor.getMapValueType(propertiesField);
if (Collection.class.isAssignableFrom(valueType)) {
Collection values;
if (instance.containsKey(typedProperty)) {
values = (Collection) instance.get(typedProperty);
} else {
values = BeanClassProcessor.createCollection(valueType);
instance.put(typedProperty, values);
}
final Class<?> itemType = BeanClassProcessor.getMapGenericValueType(propertiesField);
final Object itemValue = itemType != null ? DataTypeTransformer.transformValue(item, itemType) : item;
values.add(itemValue);
} else {
final Object typedValue = DataTypeTransformer.transformValue(item, valueType);
instance.put(typedProperty, typedValue);
}
}
}