public ObjectNode resolveItems()

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;
  }