in src/main/java/org/apache/commons/configuration2/plist/XMLPropertyListConfiguration.java [292:353]
private void printValue(final PrintWriter out, final int indentLevel, final Object value) {
final String padding = StringUtils.repeat(" ", indentLevel * INDENT_SIZE);
if (value instanceof Date) {
synchronized (PListNodeBuilder.FORMAT) {
out.println(padding + "<date>" + PListNodeBuilder.FORMAT.format((Date) value) + "</date>");
}
} else if (value instanceof Calendar) {
printValue(out, indentLevel, ((Calendar) value).getTime());
} else if (value instanceof Number) {
if (value instanceof Double || value instanceof Float || value instanceof BigDecimal) {
out.println(padding + "<real>" + value.toString() + "</real>");
} else {
out.println(padding + "<integer>" + value.toString() + "</integer>");
}
} else if (value instanceof Boolean) {
if (((Boolean) value).booleanValue()) {
out.println(padding + "<true/>");
} else {
out.println(padding + "<false/>");
}
} else if (value instanceof List) {
out.println(padding + "<array>");
((List<?>) value).forEach(o -> printValue(out, indentLevel + 1, o));
out.println(padding + "</array>");
} else if (value instanceof HierarchicalConfiguration) {
// This is safe because we have created this configuration
@SuppressWarnings("unchecked")
final HierarchicalConfiguration<ImmutableNode> config = (HierarchicalConfiguration<ImmutableNode>) value;
printNode(out, indentLevel, config.getNodeModel().getNodeHandler().getRootNode());
} else if (value instanceof ImmutableConfiguration) {
// display a flat Configuration as a dictionary
out.println(padding + "<dict>");
final ImmutableConfiguration config = (ImmutableConfiguration) value;
final Iterator<String> it = config.getKeys();
while (it.hasNext()) {
// create a node for each property
final String key = it.next();
final ImmutableNode node = new ImmutableNode.Builder().name(key).value(config.getProperty(key)).create();
// print the node
printNode(out, indentLevel + 1, node);
if (it.hasNext()) {
out.println();
}
}
out.println(padding + "</dict>");
} else if (value instanceof Map) {
// display a Map as a dictionary
final Map<String, Object> map = transformMap((Map<?, ?>) value);
printValue(out, indentLevel, new MapConfiguration(map));
} else if (value instanceof byte[]) {
final String base64 = new String(Base64.encodeBase64((byte[]) value), DATA_ENCODING);
out.println(padding + "<data>" + StringEscapeUtils.escapeXml10(base64) + "</data>");
} else if (value != null) {
out.println(padding + "<string>" + StringEscapeUtils.escapeXml10(String.valueOf(value)) + "</string>");
} else {
out.println(padding + "<string/>");
}
}