in karavan-generator/src/main/java/org/apache/camel/karavan/generator/CamelMetadataGenerator.java [40:151]
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 = getProcessorStepNameMap();
Map<String, JsonObject> classProps = new LinkedHashMap<>();
// 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");
if (!name.equalsIgnoreCase("joor")) { // exception for deprecated
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") && !s.endsWith("ExpressionDefinition")) {
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 LinkedHashMap<>();
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);
if (!getDeprecatedClasses().contains(name)) {
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") || s.endsWith("Config"))) {
String name = classSimple(s);
String stepName = getStepNameForClass(name);
JsonObject obj = getDefinition(definitions, s);
// JsonObject props = obj.containsKey("oneOf") ? obj.getJsonArray("oneOf").getJsonObject(1).getJsonObject("properties") : obj.getJsonObject("properties");
Map<String, JsonObject> properties = getClassProperties(stepName, obj);
classProps.put(name, JsonObject.mapFrom(properties));
}
});
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());
}