public void addTo()

in src/main/java/com/amazonaws/services/neptune/propertygraph/ExportStats.java [101:211]


    public void addTo(ObjectNode rootNode, GraphSchema graphSchema) {
        ObjectNode statsNode = JsonNodeFactory.instance.objectNode();
        rootNode.set("stats", statsNode);
        statsNode.put("nodes", nodeStats.values().stream().map(LabelStats::count).reduce(0L, Long::sum));
        statsNode.put("edges", edgeStats.values().stream().map(LabelStats::count).reduce(0L, Long::sum));
        statsNode.put("properties", getNumberOfProperties(graphSchema));
        ObjectNode detailsNode = JsonNodeFactory.instance.objectNode();

        statsNode.set("details", detailsNode);

        ArrayNode nodesArrayNode = JsonNodeFactory.instance.arrayNode();
        detailsNode.set("nodes", nodesArrayNode);

        GraphElementSchemas nodeSchemas = graphSchema.graphElementSchemasFor(GraphElementType.nodes);
        for (Map.Entry<Label, LabelStats> entry : nodeStats.entrySet()) {

            Label label = entry.getKey();
            LabelStats labelStats = entry.getValue();
            LabelSchema labelSchema = nodeSchemas.getSchemaFor(label);

            ObjectNode nodeNode = JsonNodeFactory.instance.objectNode();
            nodesArrayNode.add(nodeNode);
            nodeNode.put("description", label.fullyQualifiedLabel());
            nodeNode.set("labels", arrayNodeFromList(label.labels()));
            nodeNode.put("count", labelStats.count());

            ArrayNode propertiesArray = JsonNodeFactory.instance.arrayNode();

            for (PropertySchemaStats stats : labelSchema.propertySchemaStats()) {
                PropertySchema propertySchema = labelSchema.getPropertySchema(stats.property());

                ObjectNode propertyNode = JsonNodeFactory.instance.objectNode();
                propertyNode.put("name", stats.property().toString());
                propertyNode.put("count", stats.observationCount());
                propertyNode.put("numberOfRecords", stats.numberValuesCount());
                propertyNode.put("minCardinality", stats.minCardinality());
                propertyNode.put("maxCardinality", stats.maxCardinality());
                propertyNode.put("isNullable", propertySchema.isNullable());

                ObjectNode dataTypesNode = JsonNodeFactory.instance.objectNode();
                ArrayNode dataTypeCountsNode = JsonNodeFactory.instance.arrayNode();
                for (Map.Entry<DataType, Integer> e : stats.dataTypeCounts().entrySet()) {
                    ObjectNode n = JsonNodeFactory.instance.objectNode();
                    n.put(e.getKey().name(), e.getValue());
                    dataTypeCountsNode.add(n);
                }
                dataTypesNode.put("inferred", propertySchema.dataType().name());
                dataTypesNode.set("counts", dataTypeCountsNode);

                propertyNode.set("dataTypes", dataTypesNode);
                propertiesArray.add(propertyNode);
            }

            nodeNode.set("properties", propertiesArray);
        }

        ArrayNode edgesArrayNode = JsonNodeFactory.instance.arrayNode();
        detailsNode.set("edges", edgesArrayNode);

        GraphElementSchemas edgeSchemas = graphSchema.graphElementSchemasFor(GraphElementType.edges);
        for (Map.Entry<Label, LabelStats> entry : edgeStats.entrySet()) {
            Label label = entry.getKey();
            LabelStats labelStats = entry.getValue();
            LabelSchema labelSchema = edgeSchemas.getSchemaFor(label);

            ObjectNode edgeNode = JsonNodeFactory.instance.objectNode();
            edgesArrayNode.add(edgeNode);
            edgeNode.put("description", label.fullyQualifiedLabel());
            ObjectNode labelsNode = JsonNodeFactory.instance.objectNode();
            if (label.hasFromLabels()) {
                labelsNode.set("from", arrayNodeFromList(label.fromLabels().labels()));
            }
            labelsNode.set("edge", arrayNodeFromList(label.labels()));
            if (label.hasToLabels()) {
                labelsNode.set("to", arrayNodeFromList(label.toLabels().labels()));
            }
            edgeNode.set("labels", labelsNode);

            edgeNode.put("count", labelStats.count());

            ArrayNode propertiesArray = JsonNodeFactory.instance.arrayNode();

            for (PropertySchemaStats stats : labelSchema.propertySchemaStats()) {

                PropertySchema propertySchema = labelSchema.getPropertySchema(stats.property());

                ObjectNode propertyNode = JsonNodeFactory.instance.objectNode();
                propertyNode.put("name", stats.property().toString());
                propertyNode.put("count", stats.observationCount());
                propertyNode.put("numberOfRecords", stats.numberValuesCount());
                propertyNode.put("minCardinality", stats.minCardinality());
                propertyNode.put("maxCardinality", stats.maxCardinality());
                propertyNode.put("isNullable", propertySchema.isNullable());

                ObjectNode dataTypesNode = JsonNodeFactory.instance.objectNode();
                ArrayNode dataTypeCountsNode = JsonNodeFactory.instance.arrayNode();
                for (Map.Entry<DataType, Integer> e : stats.dataTypeCounts().entrySet()) {
                    ObjectNode n = JsonNodeFactory.instance.objectNode();
                    n.put(e.getKey().name(), e.getValue());
                    dataTypeCountsNode.add(n);
                }
                dataTypesNode.put("inferred", propertySchema.dataType().name());
                dataTypesNode.set("counts", dataTypeCountsNode);
                
                propertyNode.set("dataTypes", dataTypesNode);
                propertiesArray.add(propertyNode);
            }

            edgeNode.set("properties", propertiesArray);
        }
    }