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);
}