in streams-util/src/main/java/org/apache/streams/util/schema/SchemaStoreImpl.java [268:327]
public ObjectNode resolveItems(Schema schema, ObjectNode fieldNode, String resourceId) {
ObjectNode schemaItems = NODE_FACTORY.objectNode();
ObjectNode parentItems = NODE_FACTORY.objectNode();
if (fieldNode == null) {
ObjectNode schemaContent = (ObjectNode) schema.getContent();
if ( schemaContent.has("items") ) {
schemaItems = (ObjectNode) schemaContent.get("items");
if (schema.getParentContent() != null) {
ObjectNode parentContent = (ObjectNode) schema.getParentContent();
if (parentContent.has("items")) {
parentItems = (ObjectNode) parentContent.get("items");
}
}
}
} else if (fieldNode.size() > 0) {
if (fieldNode.has("items") && fieldNode.get("items").isObject() && fieldNode.get("items").size() > 0) {
schemaItems = (ObjectNode) fieldNode.get("items");
}
URI parentUri = null;
if ( fieldNode.has("$ref") || fieldNode.has("extends") ) {
JsonNode refNode = fieldNode.get("$ref");
JsonNode extendsNode = fieldNode.get("extends");
if (refNode != null && refNode.isValueNode()) {
parentUri = URI.create(refNode.asText());
} else if (extendsNode != null && extendsNode.isObject()) {
parentUri = URI.create(extendsNode.get("$ref").asText());
}
ObjectNode parentContent = null;
URI absoluteUri;
if (parentUri.isAbsolute()) {
absoluteUri = parentUri;
} else {
absoluteUri = schema.getUri().resolve(parentUri);
if (!absoluteUri.isAbsolute() || (absoluteUri.isAbsolute() && !getByUri(absoluteUri).isPresent() )) {
absoluteUri = schema.getParentUri().resolve(parentUri);
}
}
if (absoluteUri.isAbsolute()) {
if (getByUri(absoluteUri).isPresent()) {
parentContent = (ObjectNode) getByUri(absoluteUri).get().getContent();
}
if (parentContent != null && parentContent.isObject() && parentContent.has("items")) {
parentItems = (ObjectNode) parentContent.get("items");
} else if (absoluteUri.getPath().endsWith("#items")) {
absoluteUri = URI.create(absoluteUri.toString().replace("#items", ""));
parentItems = (ObjectNode) getByUri(absoluteUri).get().getContent().get("items");
}
}
}
}
ObjectNode resolvedItems = NODE_FACTORY.objectNode();
if (parentItems != null && parentItems.size() > 0) {
resolvedItems = PropertyUtil.mergeProperties(schemaItems, parentItems);
} else {
resolvedItems = schemaItems.deepCopy();
}
return resolvedItems;
}