in karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelDefinitionApiGenerator.java [44:130]
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").stream()
.filter(s -> !getDeprecatedClasses().contains(classSimple(s))).collect(toList()); // filter deprecated
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\n");
camelModel.append("export class CamelDefinitionApi { \n\n");
// generate create functions for Definitions
modelList.forEach(classFullName -> {
String model = generateModelApi(classFullName, definitions.getJsonObject(classFullName));
camelModel.append(model).append(System.lineSeparator());
});
// generate createStep function
Map<String, String> stepNames = getProcessorStepNameMap();
StringBuilder cs = new StringBuilder(
" static createStep = (name: string, body: any, clone: boolean = false): CamelElement => {\n" +
" const newBody = CamelUtil.camelizeBody(name, body, clone);\n" +
" switch (name) { \n"
);
modelList.forEach(className -> {
String code = String.format(" case '%1$s': return CamelDefinitionApi.create%1$s(newBody);\n", classSimple(className));
cs.append(code);
});
cs.append(
" default: return new CamelElement('');\n" +
" }\n" +
" }\n\n");
camelModel.append(cs);
// generate createExpression function
StringBuilder ce = new StringBuilder(
" static createExpression = (name: string, body: any): CamelElement => {\n" +
" const newBody = CamelUtil.camelizeBody(name, body, false);\n" +
" delete newBody.expressionName;\n" +
" delete newBody.dslName;\n" +
" switch (name) { \n"
);
stepNames.entrySet().stream().filter(e-> e.getKey().endsWith("Expression")).forEach(e -> {
String className = e.getKey();
String stepName = e.getValue();
String code = String.format(" case '%1$s': return CamelDefinitionApi.create%1$s(newBody);\n", className);
ce.append(code);
});
ce.append(
" default: return new GroovyExpression(newBody);\n" +
" }\n" +
" }\n\n");
camelModel.append(ce);
// generate createDataFormat function
StringBuilder df = new StringBuilder(
" static createDataFormat = (name: string, body: any): CamelElement => {\n" +
" const newBody = CamelUtil.camelizeBody(name, body, false);\n" +
" delete newBody.dataFormatName;\n" +
" delete newBody.dslName;\n" +
" switch (name) { \n"
);
stepNames.entrySet().stream().filter(e-> e.getKey().endsWith("DataFormat")).forEach(e -> {
String className = e.getKey();
String stepName = e.getValue();
String code = String.format(" case '%1$s': return CamelDefinitionApi.create%1$s(newBody);\n", className);
df.append(code);
});
df.append(
" default: return new JsonDataFormat(newBody);\n" +
" }\n" +
" }\n");
camelModel.append(df);
camelModel.append(readFileText(modelFooter));
camelModel.append("}\n");
writeFileText(targetModel, camelModel.toString());
}