in library/kamelets-maven-plugin/src/main/java/org/apache/camel/kamelets/maven/plugin/ValidateKameletsMojo.java [66:135]
public void execute() throws MojoExecutionException, MojoFailureException {
String[] bannedDeps = {"mvn:", "camel:gson", "camel:core", "camel:kamelet"};
List<String> bannedDepsList = Arrays.asList(bannedDeps);
KameletsCatalog catalog = new KameletsCatalog();
DefaultCamelCatalog cc = new DefaultCamelCatalog();
List<String> names = catalog.getKameletsName();
ObjectMapper om = new ObjectMapper();
for (String name: names) {
Map<Object, Object> templateJson;
Template kd = catalog.getKameletTemplate(name);
templateJson = om.convertValue(kd, new TypeReference<Map<Object, Object>>(){});
Map<String,Object> f = (Map) templateJson.get("from");
Map<String,Object> p = (Map) f.get("parameters");
List<String> deps = catalog.getKameletDependencies(name).stream()
.filter(Predicate.not(bannedDepsList::contains))
.collect(Collectors.toList());
String cleanName;
if (!deps.isEmpty()) {
if (deps.get(0).equals("camel:jackson") && deps.size() > 1) {
cleanName = deps.get(1).replace("camel:", "");
} else {
cleanName = deps.get(0).replace("camel:", "");
}
if (cleanName.equalsIgnoreCase("cassandraql")) {
cleanName = "cql";
}
if (cleanName.equalsIgnoreCase("aws2-ddb") && name.equals("aws-ddb-streams-source")) {
cleanName = "aws2-ddb-streams";
}
if (cleanName.equalsIgnoreCase("google-sheets") && name.equals("google-sheets-source")) {
cleanName = "google-sheets-stream";
}
if (cleanName.equalsIgnoreCase("google-mail") && name.equals("google-mail-source")) {
cleanName = "google-mail-stream";
}
if (cleanName.equalsIgnoreCase("google-calendar") && name.equals("google-calendar-source")) {
cleanName = "google-calendar-stream";
}
if (p != null && !p.isEmpty()) {
ComponentModel componentModel = cc.componentModel(cleanName);
if (componentModel != null) {
List<ComponentModel.EndpointOptionModel> ce = componentModel.getEndpointOptions();
List<String> ceInternal =
ce.stream()
.map(ComponentModel.EndpointOptionModel::getName)
.sorted()
.collect(Collectors.toList());
StringBuilder availableParams = new StringBuilder();
ceInternal.forEach(_param -> availableParams.append(_param).append(" "));
for (Map.Entry<String, Object> entry : p.entrySet()) {
if (!entry.getKey().equals("period") && (!name.equals("set-kafka-key-action") && !name.equals("sftp-source") && !name.equals("kafka-ssl-source") && !name.equals("timer-source") && !name.equals("cron-source") && !name.equals("fhir-source") && !name.equals("beer-source") && !name.equals("cassandra-source") && !name.equals("cassandra-sink"))) {
if (!ceInternal.contains(entry.getKey())) {
getLog().error("Kamelet Name: " + name);
getLog().error("Scheme Name: " + cleanName);
getLog().error("Parameter: " + entry.getKey());
getLog().error("The parameter " + entry.getKey() + " doesn't exist in the endpoint options of " + cleanName + " component");
getLog().error("Available endpoint options: " + availableParams);
if (failOnError) {
throw new MojoExecutionException("The Kamelets Validation failed. See logs for more information." + "\n");
}
break;
}
}
}
}
}
}
}
getLog().info("Validation passed");
}