in src/main/java/org/apache/sling/distribution/component/impl/SettingsUtils.java [114:150]
private static Map<String, Object> collapseMap(Map<String, Object> valueMap) {
Map<String, Object> result = new HashMap<String, Object>();
for (Map.Entry<String, Object> entry : valueMap.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
int beginDelim = key.indexOf(COMPONENT_MAP_BEGIN);
int endDelim = key.indexOf(COMPONENT_MAP_END);
if (beginDelim >= 0 && endDelim > beginDelim) {
String newKey = key.substring(0, beginDelim);
String partialKey = key.substring(beginDelim + 1, endDelim);
boolean isNumber = isNumber(partialKey);
if (!result.containsKey(newKey)) {
result.put(newKey, isNumber ? new ArrayList<Object>() : new HashMap<String, Object>());
}
Object existingObject = result.get(newKey);
if (existingObject instanceof Map) {
((Map) existingObject).put(partialKey, value);
} else if (existingObject instanceof List) {
((List) existingObject).add(value);
} else {
// skip if there is already something else in there
}
} else {
result.put(key, value);
}
}
return result;
}