public void execute()

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