private void createCamelDefinitions()

in karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java [40:145]


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

        // Generate DataFormats
        JsonObject dataformats = getProperties(definitions, "org.apache.camel.model.dataformat.DataFormatsDefinition");
        camelModel.append("\nexport const DataFormats: [string, string, string][] = [\n");
        dataformats.getMap().forEach((name, val) -> {
            String json = getMetaDataFormat(name);
            JsonObject model = new JsonObject(json).getJsonObject("model");
            String title = model.getString("title");
            String description = model.getString("description");
            camelModel.append(String.format("    ['%s','%s',\"%s\"],\n", name, title, description));
        });
        camelModel.append("]\n\n");

        // Prepare stepNames map
        Map<String, String> stepNames = getStepNames();

        Map<String, JsonObject> classProps = new HashMap<>();
        // Generate DataFormatMetadata
        definitions.getMap().forEach((s, o) -> {
            if (s.startsWith("org.apache.camel.model.dataformat")) {
                String name = classSimple(s);
                JsonObject obj = getDefinition(definitions, s);
                JsonObject props = obj.containsKey("oneOf") ? obj.getJsonArray("oneOf").getJsonObject(1).getJsonObject("properties") : obj.getJsonObject("properties");
                classProps.put(name, props);
            }
        });

        camelModel.append(getMetadataCode("CamelDataFormatMetadata", classProps, stepNames, "dataformat"));


        // Generate Languages
        JsonObject expression = getProperties(definitions, "org.apache.camel.model.language.ExpressionDefinition");
        camelModel.append("export const Languages: [string, string, string][] = [\n");
        expression.getMap().forEach((name, val) -> {
            String json = getMetaModel(name);
            JsonObject model = new JsonObject(json).getJsonObject("model");
            String title = model.getString("title");
            String description = model.getString("description");
            camelModel.append(String.format("    ['%s','%s',\"%s\"],\n", name, title, description));
        });
        camelModel.append("]\n\n");

        // Generate LanguageMetadata
        classProps.clear();
        definitions.getMap().forEach((s, o) -> {
            if (s.startsWith("org.apache.camel.model.language")) {
                String name = classSimple(s);
                JsonObject obj = getDefinition(definitions, s);
                JsonObject props = obj.containsKey("oneOf") ? obj.getJsonArray("oneOf").getJsonObject(1).getJsonObject("properties") : obj.getJsonObject("properties");
                classProps.put(name, props);
            }
        });

        camelModel.append(getMetadataCode("CamelLanguageMetadata", classProps, stepNames, "language"));

        // Generate DSL Metadata
        Map<String, Object> defsMap = new HashMap<>();
        defsMap.putAll(definitions.getJsonObject("org.apache.camel.model.ProcessorDefinition").getJsonObject("properties").getMap());
        defsMap.putAll(new JsonObject(camelYamlDSL).getJsonObject("items").getJsonObject("properties").getMap());

        classProps.clear();
        defsMap.forEach((s, o) -> {
            String ref = ((Map<?, ?>) o).get("$ref").toString();
            String name = classSimple(ref);
            JsonObject obj = getDefinition(definitions, ref);
            JsonObject props = obj.containsKey("oneOf") ? obj.getJsonArray("oneOf").getJsonObject(1).getJsonObject("properties") : obj.getJsonObject("properties");
            classProps.put(name, props);
        });


        // add additional classes
        getClasses(definitions, "org.apache.camel.model").forEach(s -> {
            String className = classSimple(s);
            if (!stepNames.containsKey(className)) {
                String stepName = deCapitalize(className.replace("Definition", ""));
                stepNames.put(className, stepName);
            }
        });

        definitions.getMap().forEach((s, o) -> {
            if (s.startsWith("org.apache.camel.model.") && s.endsWith("Definition")) {
                String name = classSimple(s);
                JsonObject obj = getDefinition(definitions, s);
                JsonObject props = obj.containsKey("oneOf") ? obj.getJsonArray("oneOf").getJsonObject(1).getJsonObject("properties") : obj.getJsonObject("properties");
                classProps.put(name, props);
            }
        });

        camelModel.append(getMetadataCode("CamelModelMetadata", classProps, stepNames, "model"));

        // add Sensitive keys
        List<String> sk = new ArrayList(SensitiveUtils.getSensitiveKeys());
        camelModel.append("export const SensitiveKeys: string[] = [\n");
        for (int i = 0; i < sk.size(); i++) {
            camelModel.append("    \"").append(sk.get(i)).append("\"").append(i < sk.size() - 1 ? "," : "").append("\n");
        }
        camelModel.append("]");

        writeFileText(targetModel, camelModel.toString());
    }