@Nullable
public TCapabilityDefinition buildCapabilityDefinition(Object object, Parameter<TCapabilityDefinition> parameter) {
if (Objects.isNull(object)) return new TCapabilityDefinition();
if (object instanceof String)
return new TCapabilityDefinition.Builder(buildQName(stringValue(object))).build();
if (!validate(TCapabilityDefinition.class, object, parameter)) return null;
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String, Object>) object;
return new TCapabilityDefinition.Builder(buildQName(stringValue(map.get("type"))))
.setDescription(buildDescription(map.get("description")))
.setOccurrences(buildListString(map.get("occurrences"),
new Parameter<List<String>>(parameter.getContext()).addContext("occurrences")
))
.setValidSourceTypes(buildListQName(buildListString(map.get("valid_source_types"),
new Parameter<List<String>>(parameter.getContext()).addContext("valid_source_types")
)))
.setProperties(buildMap(map.get("properties"),
new Parameter<TPropertyDefinition>(parameter.getContext()).addContext("properties")
.setClazz(TPropertyDefinition.class)
.setBuilderOO(this::buildPropertyDefinition)
))
.setAttributes(buildMap(map, "attributes", this::buildAttributeDefinition, parameter))
.build();
}