private static Map collapseMap()

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;

    }