Search in sources :

Example 1 with PropertyType

use of com.b2international.snowowl.fhir.core.codesystems.PropertyType in project snow-owl by b2ihealthcare.

the class ConceptPropertyDeserializer method deserialize.

@Override
public ConceptProperty<?> deserialize(JsonParser parser, DeserializationContext arg1) throws IOException, JsonProcessingException {
    TreeNode node = parser.readValueAsTree();
    ObjectCodec objectCodec = parser.getCodec();
    Iterator<String> fieldNames = node.fieldNames();
    PropertyType[] propertyTypes = PropertyType.values();
    PropertyType propertyType = null;
    while (fieldNames.hasNext()) {
        String fieldName = (String) fieldNames.next();
        if (fieldName.startsWith(VALUE_PREFIX)) {
            String type = fieldName.replace(VALUE_PREFIX, "");
            propertyType = Sets.newHashSet(propertyTypes).stream().filter(t -> t.getDisplayName().equalsIgnoreCase(type)).findFirst().orElseThrow(() -> new IllegalArgumentException("Unknown property type '" + fieldName + "'."));
            break;
        }
    }
    if (propertyType == null) {
        throw new IllegalArgumentException("Invalid property type with null value.");
    }
    switch(propertyType) {
        case CODING:
            return objectCodec.treeToValue(node, CodingConceptProperty.class);
        case CODE:
            return objectCodec.treeToValue(node, CodeConceptProperty.class);
        case DATETIME:
            return objectCodec.treeToValue(node, DateTimeConceptProperty.class);
        case STRING:
            return objectCodec.treeToValue(node, StringConceptProperty.class);
        case BOOLEAN:
            return objectCodec.treeToValue(node, BooleanConceptProperty.class);
        case DECIMAL:
            return objectCodec.treeToValue(node, DecimalConceptProperty.class);
        case INTEGER:
            return objectCodec.treeToValue(node, IntegerConceptProperty.class);
        default:
            throw new IllegalArgumentException("Unsupported property type '" + propertyType + "'.");
    }
}
Also used : StdDeserializer(com.fasterxml.jackson.databind.deser.std.StdDeserializer) TreeNode(com.fasterxml.jackson.core.TreeNode) DeserializationContext(com.fasterxml.jackson.databind.DeserializationContext) Iterator(java.util.Iterator) JsonParser(com.fasterxml.jackson.core.JsonParser) PropertyType(com.b2international.snowowl.fhir.core.codesystems.PropertyType) IOException(java.io.IOException) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) ObjectCodec(com.fasterxml.jackson.core.ObjectCodec) Sets(com.google.common.collect.Sets) TreeNode(com.fasterxml.jackson.core.TreeNode) ObjectCodec(com.fasterxml.jackson.core.ObjectCodec) PropertyType(com.b2international.snowowl.fhir.core.codesystems.PropertyType)

Aggregations

PropertyType (com.b2international.snowowl.fhir.core.codesystems.PropertyType)1 JsonParser (com.fasterxml.jackson.core.JsonParser)1 JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)1 ObjectCodec (com.fasterxml.jackson.core.ObjectCodec)1 TreeNode (com.fasterxml.jackson.core.TreeNode)1 DeserializationContext (com.fasterxml.jackson.databind.DeserializationContext)1 StdDeserializer (com.fasterxml.jackson.databind.deser.std.StdDeserializer)1 Sets (com.google.common.collect.Sets)1 IOException (java.io.IOException)1 Iterator (java.util.Iterator)1