in src/main/java/org/apache/sling/resource/inventory/impl/JsonObjectCreator.java [47:111]
public static JsonObjectBuilder create(final Resource resource) {
final ValueMap valueMap = resource.adaptTo(ValueMap.class);
@SuppressWarnings("unchecked")
final Map propertyMap = (valueMap != null)
? valueMap
: resource.adaptTo(Map.class);
final JsonObjectBuilder obj = Json.createObjectBuilder();
if (propertyMap == null) {
// no map available, try string
final String value = resource.adaptTo(String.class);
if (value != null) {
// single value property or just plain String resource or...
obj.add(resource.getName(), value);
} else {
// Try multi-value "property"
final String[] values = resource.adaptTo(String[].class);
if (values != null) {
JsonArrayBuilder array = Json.createArrayBuilder();
for (String v : values) {
array.add(v);
}
obj.add(resource.getName(), array);
}
}
if ( resource.getResourceType() != null ) {
obj.add("sling:resourceType", resource.getResourceType());
}
if ( resource.getResourceSuperType() != null ) {
obj.add("sling:resourceSuperType", resource.getResourceSuperType());
}
} else {
@SuppressWarnings("unchecked")
final Iterator<Map.Entry> props = propertyMap.entrySet().iterator();
// the node's actual properties
while (props.hasNext()) {
@SuppressWarnings("unchecked")
final Map.Entry prop = props.next();
if ( prop.getValue() != null ) {
createProperty(obj, valueMap, prop.getKey().toString(),
prop.getValue());
}
}
}
// the child nodes
final Iterator<Resource> children = resource.listChildren();
while (children.hasNext()) {
final Resource n = children.next();
createSingleResource(n, obj);
}
return obj;
}