in streams-plugins/streams-plugin-cassandra/src/main/java/org/apache/streams/plugins/cassandra/StreamsCassandraResourceGenerator.java [201:255]
protected StringBuilder appendArrayItems(StringBuilder builder, Schema schema, String fieldId, ObjectNode itemsNode, Character seperator) {
// not safe to append nothing
Objects.requireNonNull(builder);
if ( itemsNode == null ) {
return builder;
}
if ( itemsNode.has("type")) {
try {
FieldType itemType = FieldUtil.determineFieldType(itemsNode);
switch ( itemType ) {
case OBJECT:
Schema objectSchema = null;
URI parentUri = null;
if ( itemsNode.has("$ref") || itemsNode.has("extends") ) {
JsonNode refNode = itemsNode.get("$ref");
JsonNode extendsNode = itemsNode.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());
}
URI absoluteUri;
if (parentUri.isAbsolute()) {
absoluteUri = parentUri;
} else {
absoluteUri = schema.getUri().resolve(parentUri);
if (!absoluteUri.isAbsolute() || (absoluteUri.isAbsolute() && !schemaStore.getByUri(absoluteUri).isPresent() )) {
absoluteUri = schema.getParentUri().resolve(parentUri);
}
}
if (absoluteUri != null && absoluteUri.isAbsolute()) {
Optional<Schema> schemaLookup = schemaStore.getByUri(absoluteUri);
if (schemaLookup.isPresent()) {
objectSchema = schemaLookup.get();
}
}
}
// have to resolve schema here
builder = appendArrayObject(builder, objectSchema, fieldId, seperator);
break;
case ARRAY:
ObjectNode subArrayItems = (ObjectNode) itemsNode.get("items");
builder = appendArrayItems(builder, schema, fieldId, subArrayItems, seperator);
break;
default:
builder = appendArrayField(builder, schema, fieldId, itemType, seperator);
}
} catch (Exception ex) {
LOGGER.warn("No item type resolvable for {}", fieldId);
}
}
Objects.requireNonNull(builder);
return builder;
}