private String getMetadataCode()

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


    private String getMetadataCode(String className, Map<String, JsonObject> classProps, Map<String, String> stepNames, String folder) {
        StringBuilder code = new StringBuilder();
        code.append(String.format("export const %s: ElementMeta[] = [\n", className));
        classProps.entrySet().stream().filter(entry -> {
            if (getDeprecatedClasses().contains(entry.getKey())) {
                return false;
            } else if (entry.getValue() == null) {
                return false;
            } else {
                return true;
            }
        }).forEach(entry -> {
            String name = entry.getKey();
            JsonObject properties = entry.getValue();
            String stepName = getStepNameForClass(name);
//            String json = folder.equals("model") ? getMetaModel(stepName) : (folder.equals("language") ? getMetaLanguage(stepName) : getMetaDataFormat(stepName));
            String json = null;
            if (Objects.equals(name, "BeanFactoryDefinition")) {
                json = getMetaModelApp("bean");
            } else if (folder.equals("model")) {
                json = getMetaModel(stepName);
            } else {
                if (folder.equals("language")) {
                    json = getMetaLanguage(stepName);
                } else {
                    json = getMetaDataFormat(stepName);
                }
            }

            if (json != null) {
                JsonObject model = new JsonObject(json).getJsonObject("model");
                JsonObject props = new JsonObject(json).getJsonObject("properties");
                List<String> propsLowerCase = props.getMap().keySet().stream().map(String::toLowerCase).collect(Collectors.toList());

                Comparator<String> comparator = Comparator.comparing(e -> {
                    if (propsLowerCase.contains(e.toLowerCase())) return propsLowerCase.indexOf(e.toLowerCase());
                    else return propsLowerCase.size() + 1;
                });

                String title = model.getString("title");
                String description = model.getString("description");
                String label = model.getString("label");
                code.append(String.format("    new ElementMeta('%s', '%s', '%s', \"%s\", '%s', [\n", stepName, name, title, description, label));
                properties.getMap().keySet().stream().sorted(comparator).forEach((pname) -> {
                    Object v = properties.getMap().get(pname);
                    JsonObject p = props.getJsonObject(pname);
                    if ("inheritErrorHandler".equals(pname) && p == null) {
                    } else {
                        String typeInCatalog = getPropertyTypeInCatalog(stepName, pname);
                        PropertyMeta pm = getAttributeType(pname, new JsonObject((Map) v));
                        String displayName = p != null && p.containsKey("displayName") ? p.getString("displayName") : pname;
                        String desc = p != null && p.containsKey("description") ? p.getString("description") : pname;
                        String en = p != null && p.containsKey("enum") ? p.getString("enum").replace("[", "").replace("]", "") : "";
                        Boolean required = p != null && p.containsKey("required") ? p.getBoolean("required") : false;
                        Boolean secret = p != null && p.containsKey("secret") ? p.getBoolean("secret") : false;
                        String defaultValue = p != null && p.containsKey("defaultValue") ? p.getString("defaultValue") : "";
                        defaultValue = defaultValue.length() == 1 && defaultValue.toCharArray()[0] == '\\' ? "\\\\" : defaultValue;
                        String labels = p != null && p.containsKey("label") ? p.getString("label") : "";
                        String javaType = getJavaType(name, p);
                        if (name.equals("ProcessDefinition") && pname.equals("ref")) { // exception for processor
                            javaType = "org.apache.camel.Processor";
                        } else if ((name.equals("ParamDefinition") || name.equals("ResponseHeaderDefinition")) && pname.equals("allowableValues")) { // exception for ParamDefinition
                            pm.type = "string";
                        }
                        if (!getDeprecatedClasses().contains(pm.type)) {
                            var propertyName = "constructor".equals(pname) ? "_constructor" : pname;
                            code.append(String.format(
                                    "        new PropertyMeta('%s', '%s', \"%s\", '%s', '%s', '%s', %b, %b, %b, %b, '%s', '%s'),\n",
                                    propertyName, displayName, desc, pm.type, en, defaultValue, required, secret, pm.isArray, (pm.isArray ? pm.type : pm.isObject), labels, javaType));
                        }
                    }
                });
                code.append("    ], [\n");
//                exchangeProperties
                JsonObject exchangeProperties = new JsonObject(json).getJsonObject("exchangeProperties");
                if (exchangeProperties != null) {
                    exchangeProperties.getMap().forEach((ep, eps) -> {
                        Map<String, String> vals = (HashMap<String, String>) eps;
                        code.append(String.format("        new ExchangePropertyMeta('%s', '%s', '%s', '%s', '%s'),\n",
                                ep, vals.get("displayName"), vals.get("label"), vals.get("javaType"), vals.get("description")));
                    });
                }

                code.append("    ]),\n");
            } else {
//                System.out.println("Empty JSON for class: " + name + " as a stepName " + stepName);
            }
        });
        code.append("]\n\n");
        return code.toString();
    }