in streams-plugins/streams-plugin-cassandra/src/main/java/org/apache/streams/plugins/cassandra/StreamsCassandraResourceGenerator.java [301:370]
private StringBuilder appendPropertiesNode(StringBuilder builder, Schema schema, ObjectNode propertiesNode, Character seperator) {
Objects.requireNonNull(builder);
Objects.requireNonNull(propertiesNode);
Iterator<Map.Entry<String, JsonNode>> fields = propertiesNode.fields();
List<String> fieldStrings = new ArrayList<>();
for ( ; fields.hasNext(); ) {
Map.Entry<String, JsonNode> field = fields.next();
String fieldId = field.getKey();
if ( !config.getExclusions().contains(fieldId) && field.getValue().isObject()) {
ObjectNode fieldNode = (ObjectNode) field.getValue();
FieldType fieldType = FieldUtil.determineFieldType(fieldNode);
if (fieldType != null ) {
switch (fieldType) {
case ARRAY:
ObjectNode itemsNode = (ObjectNode) fieldNode.get("items");
if ( currentDepth <= config.getMaxDepth()) {
StringBuilder arrayItemsBuilder = appendArrayItems(new StringBuilder(), schema, fieldId, itemsNode, seperator);
if (StringUtils.isNotBlank(arrayItemsBuilder.toString())) {
fieldStrings.add(arrayItemsBuilder.toString());
}
}
break;
case OBJECT:
Schema objectSchema = null;
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());
}
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();
}
}
}
//ObjectNode childProperties = schemaStore.resolveProperties(schema, fieldNode, fieldId);
if ( currentDepth < config.getMaxDepth()) {
StringBuilder structFieldBuilder = appendSchemaField(new StringBuilder(), objectSchema, fieldId, seperator);
if (StringUtils.isNotBlank(structFieldBuilder.toString())) {
fieldStrings.add(structFieldBuilder.toString());
}
}
break;
default:
StringBuilder valueFieldBuilder = appendValueField(new StringBuilder(), schema, fieldId, fieldType, seperator);
if (StringUtils.isNotBlank(valueFieldBuilder.toString())) {
fieldStrings.add(valueFieldBuilder.toString());
}
}
}
}
}
builder.append(String.join("," + LS, fieldStrings)).append(LS);
Objects.requireNonNull(builder);
return builder;
}