private Map convertObject()

in src/main/java/org/apache/sling/jmx/provider/impl/AttributeResource.java [250:293]


    private Map<String, Object> convertObject(final CompositeData cd) {
        final CompositeType type = cd.getCompositeType();
        final Map<String, Object> result = new HashMap<String, Object>();
        result.put(Constants.PROP_RESOURCE_SUPER_TYPE, Constants.TYPE_ATTRIBUTES);
        result.put(Constants.PROP_RESOURCE_TYPE, type.getTypeName());

        final Map<String, Object> attrMap = new TreeMap<String, Object>();
        attrMap.put(Constants.PROP_RESOURCE_TYPE, Constants.TYPE_ATTRIBUTES);
        result.put(Constants.RSRC_ATTRIBUTES, attrMap);

        final Set<String> names = type.keySet();
        for(final String name : names) {
            final Map<String, Object> dataMap = new HashMap<String, Object>();
            attrMap.put(name, dataMap);
            dataMap.put(ResourceResolver.PROPERTY_RESOURCE_TYPE, type.getType(name));
            dataMap.put(Constants.PROP_RESOURCE_SUPER_TYPE, Constants.TYPE_ATTRIBUTE);

            if ( type.getDescription() != null ) {
                dataMap.put(Constants.PROP_DESCRIPTION, type.getDescription());
            }
            dataMap.put(Constants.PROP_TYPE, type.getType(name).getTypeName());

            final Object value = cd.get(name);
            if ( value != null ) {
                if ( value.getClass().isArray() ) {
                    final int length = Array.getLength(value);
                    final Object[] values = new Object[length];
                    for (int i = 0; i < length; i ++) {
                        final Object o = Array.get(value, i);
                        values[i] = convert(o);
                    }
                    dataMap.put(Constants.PROP_VALUE, values);
                } else if (value instanceof TabularData) {
                    dataMap.put(Constants.RSRC_VALUE, convertObject((TabularData)value));
                } else if (value instanceof CompositeData) {
                    dataMap.put(Constants.RSRC_VALUE, convertObject((CompositeData)value));
                } else {
                    dataMap.put(Constants.PROP_VALUE, convert(value));
                }
            }
        }

        return result;
    }