void writeJson()

in src/main/java/org/apache/sling/capabilities/internal/JSONCapabilitiesWriter.java [39:80]


    void writeJson(ResourceResolver resolver, Writer w, Collection<CapabilitiesSource> sources, RegexFilter namespacePatterns) throws IOException {
        final Set<String> namespaces = new HashSet<>();

        final JSONWriter jw = new JSONWriter(w);
        jw.object();
        jw.key(CAPS_KEY);
        jw.object();
        jw.key(DATA_KEY);
        jw.object();
        
        Map<String, Object> values = null;
        for(CapabilitiesSource s : sources) {
            
            final String namespace = s.getNamespace();
            if(!namespacePatterns.accept(namespace)) {
                continue;
            }
            if(namespaces.contains(namespace)) {
              throw new DuplicateNamespaceException(namespace);
            }
            namespaces.add(namespace);
            
            try {
                values = s.getCapabilities(resolver);
            } catch(Exception e) {
                values = new HashMap<>();
                values.put("_EXCEPTION_", e.getClass().getName() + ":" + e.getMessage());
            }

            jw.key(namespace);
            jw.object();
            for(Map.Entry<String, Object> e : values.entrySet()) {
                jw.key(e.getKey());
                jw.value(e.getValue());
            }
            jw.endObject();
        }
        
        jw.endObject();
        jw.endObject();
        jw.endObject();
    }