in karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionYamlStepGenerator.java [44:92]
private void createCamelDefinitions() throws Exception {
StringBuilder camelModel = new StringBuilder();
camelModel.append(readFileText(modelHeader));
String camelYamlDSL = getCamelYamlDSL();
JsonObject definitions = new JsonObject(camelYamlDSL).getJsonObject("items").getJsonObject("definitions");
List<String> modelList = getClasses(definitions, "org.apache.camel");
modelList.forEach(classFullName -> {
String className = classSimple(classFullName);
camelModel.append(" ").append(className).append(",\n");
});
camelModel.append("} from '../model/CamelDefinition';\n");
camelModel.append("import {CamelUtil} from './CamelUtil';\n");
camelModel.append("import {CamelMetadataApi} from '../model/CamelMetadata';\n");
camelModel.append("import {ComponentApi} from './ComponentApi';\n\n");
camelModel.append("export class CamelDefinitionYamlStep { \n\n");
// generate create functions for Definitions
modelList.forEach(classFullName -> {
String model = generateModelApi(classFullName, definitions.getJsonObject(classFullName));
camelModel.append(model).append(System.lineSeparator());
});
// generate readStep function
Map<String, String> stepNames = getProcessorStepName(definitions.getJsonObject("org.apache.camel.model.ProcessorDefinition").getJsonObject("properties"));
StringBuilder cs = new StringBuilder(
" static readStep = (body: any, clone: boolean = false): CamelElement => {\n" +
" const name = Object.getOwnPropertyNames(body)[0];\n" +
" const newBody = CamelUtil.camelizeBody(name, body[name], clone);\n" +
" switch (name) { \n"
);
stepNames.forEach((className, stepName) -> {
String code = String.format(" case '%1$s': return CamelDefinitionYamlStep.read%2$s(newBody);\n",stepName, className);
cs.append(code);
});
cs.append(" case 'toD': return CamelDefinitionYamlStep.readToDynamicDefinition(newBody);\n"); //exception for ToDynamicDefinition
cs.append(
" default: return new CamelElement('');\n" +
" }\n" +
" }\n");
camelModel.append(cs);
camelModel.append(readFileText(modelFooter));
camelModel.append("}\n");
writeFileText(targetModel, camelModel.toString());
}