private void generate()

in src/main/java/aws/cfn/codegen/json/Codegen.java [224:287]


    private void generate(CfnSpecification specification,
                          Map<String, File> groupSchemas,
                          Map<String, ObjectNode> groupSpecDefinitions)
        throws Exception {

        final Map<String, ResourceType> resources = specification.getResourceTypes();
        final Map<String, ResourceType> properties = specification.getPropertyTypes();
        final Set<String> propertyNames = properties.keySet();
        final List<String> resDefns = new ArrayList<>(resources.size());
        List<String> sorted= new ArrayList<>(resources.keySet());
        Collections.sort(sorted);

        Map<List<String>, ObjectNode> definitions = new LinkedHashMap<>(sorted.size());
        for (final String name: sorted) {
            ResourceType type = null;
            try {
                type = resources.get(name);
                String defnName = name.replace("::", "_");
                resDefns.add(defnName);
                ObjectNode typeDefn = mapper.createObjectNode();
                handleType(typeDefn, defnName, name, type, true, propertyNames);
                definitions.put(Arrays.asList(name, defnName), typeDefn);
                logger.debug("Processed type {}", name);
            }
            catch (Exception e)
            {
                // ignore and emit warning for malformed types in the spec
                if (type != null) {
                    logger.error("An error occurred processing type {}", name);
                }
                else {
                    throw e;
                }
            }
        }
        addToPerGroupRoots(definitions, groupSpecDefinitions);

        sorted = new ArrayList<>(properties.keySet());
        Collections.sort(sorted);
        definitions = new LinkedHashMap<>(sorted.size());
        for (final String name: sorted) {
            ResourceType type = properties.get(name);
            String[] parts = name.split("\\.");
            if (parts.length > 1) {
                String defnName = parts[0].replace("::", "_");
                String propName = parts[1];
                ObjectNode typeDefn = mapper.createObjectNode();
                handleType(typeDefn, defnName, propName, type, false, propertyNames);
                List<String> key = Arrays.asList(name, defnName + "_" + propName);
                definitions.put(key, typeDefn);
            }
            else {
                // equals 1, no namespacing case
                String defnName = name.replace("::", "_");
                ObjectNode typeDefn = mapper.createObjectNode();
                handleType(typeDefn, defnName, defnName, type, false, propertyNames);
                List<String> key = Arrays.asList(name, defnName);
                definitions.put(key, typeDefn);
            }

        }
        addToPerGroupRoots(definitions, groupSpecDefinitions);
        generatePerGroup(resDefns, groupSchemas, groupSpecDefinitions, specification);
    }