private void createCamelDefinitions()

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