You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2021/01/29 18:43:36 UTC

[camel-kafka-connector] branch camel-master updated: Provide option to delete camel kafka submodule if they are not in camel catalog

This is an automated email from the ASF dual-hosted git repository.

acosentino pushed a commit to branch camel-master
in repository https://gitbox.apache.org/repos/asf/camel-kafka-connector.git


The following commit(s) were added to refs/heads/camel-master by this push:
     new faf6e6b  Provide option to delete camel kafka submodule if they are not in camel catalog
faf6e6b is described below

commit faf6e6b0bea1a3990b25e571ed96d14651f2206b
Author: Claudio Miranda <cl...@claudius.com.br>
AuthorDate: Thu Jan 28 23:55:37 2021 -0300

    Provide option to delete camel kafka submodule if they are not in camel catalog
    
    https://github.com/apache/camel-kafka-connector/issues/149
---
 .../maven/AbstractCamelKafkaConnectorMojo.java     |  8 ++++
 .../maven/CamelKafkaConnectorDeleteMojo.java       | 11 ++---
 .../maven/GenerateCamelKafkaConnectorsMojo.java    | 50 ++++++++++++++++++++--
 3 files changed, 58 insertions(+), 11 deletions(-)

diff --git a/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/AbstractCamelKafkaConnectorMojo.java b/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/AbstractCamelKafkaConnectorMojo.java
index 54dfb6f..18e6afe 100644
--- a/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/AbstractCamelKafkaConnectorMojo.java
+++ b/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/AbstractCamelKafkaConnectorMojo.java
@@ -120,6 +120,14 @@ public abstract class AbstractCamelKafkaConnectorMojo extends AbstractMojo {
     protected String connectorsProjectName;
 
     /**
+     *  If "true" and if there is a <camel-component>-kafka-connector submodule in connectors directory,
+     *  and it is missing from the camel catalog or is in the excludedComponents list, then
+     *  remove the directory and remove the module from connectors/pom.xml.
+     */
+    @Parameter(property = "remove-missing-components", defaultValue = "false")
+    protected boolean removeMissingComponents;
+
+    /**
      * Execute goal.
      *
      * @throws MojoExecutionException execution of the main class or one of the
diff --git a/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/CamelKafkaConnectorDeleteMojo.java b/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/CamelKafkaConnectorDeleteMojo.java
index 96eb146..d377396 100644
--- a/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/CamelKafkaConnectorDeleteMojo.java
+++ b/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/CamelKafkaConnectorDeleteMojo.java
@@ -39,9 +39,6 @@ public class CamelKafkaConnectorDeleteMojo extends AbstractCamelKafkaConnectorMo
     @Parameter(property = "name", required = true)
     protected String name;
 
-    @Parameter(property = "componentJson", required = true)
-    protected String componentJson;
-
     @Override
     protected String getMainDepArtifactId() {
         return "camel-" + name;
@@ -66,11 +63,11 @@ public class CamelKafkaConnectorDeleteMojo extends AbstractCamelKafkaConnectorMo
     }
 
     private void deleteConnector() throws MojoFailureException, IOException {
-        getLog().info("Deleting starter for " + name);
+        getLog().info("Deleting camel kafka connector for " + name);
         String sanitizedName = sanitizeMavenArtifactId(name);
-        File directory = new File(projectDir, "camel-" + sanitizedName + "-starter");
+        File directory = new File(projectDir, "camel-" + sanitizedName + KAFKA_CONNECTORS_SUFFIX);
         if (!directory.exists()) {
-            throw new MojoFailureException("Starter does not exist: " + name);
+            throw new MojoFailureException("Camel kafka connector does not exist: " + name);
         }
         FileUtils.deleteDirectory(directory);
         Path parent = new File(projectDir, "pom.xml").toPath();
@@ -87,7 +84,7 @@ public class CamelKafkaConnectorDeleteMojo extends AbstractCamelKafkaConnectorMo
         }
         lines = concat(lines.subList(0, modulesStart).stream(),
                 lines.subList(modulesStart, modulesEnd).stream()
-                        .filter(s -> !s.contains("<module>camel-" + sanitizedName + "-starter</module>")),
+                        .filter(s -> !s.contains("<module>camel-" + sanitizedName + KAFKA_CONNECTORS_SUFFIX + "</module>")),
                 lines.subList(modulesEnd, lines.size()).stream())
                 .collect(Collectors.toList());
         Files.write(parent, lines);
diff --git a/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/GenerateCamelKafkaConnectorsMojo.java b/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/GenerateCamelKafkaConnectorsMojo.java
index 2535165..f3a6551 100644
--- a/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/GenerateCamelKafkaConnectorsMojo.java
+++ b/tooling/camel-kafka-connector-generator-maven-plugin/src/main/java/org/apache/camel/kafkaconnector/maven/GenerateCamelKafkaConnectorsMojo.java
@@ -16,8 +16,7 @@
  */
 package org.apache.camel.kafkaconnector.maven;
 
-import java.io.FileInputStream;
-import java.io.IOException;
+import java.io.*;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
@@ -25,9 +24,11 @@ import java.util.List;
 import java.util.Properties;
 import java.util.Set;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.catalog.DefaultCamelCatalog;
+import org.apache.camel.kafkaconnector.maven.utils.MavenUtils;
 import org.apache.camel.tooling.model.ComponentModel;
 import org.apache.camel.tooling.model.JsonMapper;
 import org.apache.maven.ProjectDependenciesResolver;
@@ -43,6 +44,7 @@ import org.apache.maven.project.ProjectBuilder;
 import org.codehaus.plexus.resource.loader.FileResourceCreationException;
 import org.codehaus.plexus.resource.loader.ResourceNotFoundException;
 
+import static org.apache.camel.kafkaconnector.maven.utils.MavenUtils.sanitizeMavenArtifactId;
 import static org.twdata.maven.mojoexecutor.MojoExecutor.artifactId;
 import static org.twdata.maven.mojoexecutor.MojoExecutor.configuration;
 import static org.twdata.maven.mojoexecutor.MojoExecutor.element;
@@ -79,7 +81,7 @@ public class GenerateCamelKafkaConnectorsMojo extends AbstractCamelKafkaConnecto
 
     @Component
     private BuildPluginManager pluginManager;
-    
+
     /**
      * The Camel Component Filter to select for which components generate the corresponding camel kafka connector.
      */
@@ -185,6 +187,46 @@ public class GenerateCamelKafkaConnectorsMojo extends AbstractCamelKafkaConnecto
             );
         }
 
-        //TODO: optionally delete submodules not in catalog
+        if (removeMissingComponents) {
+            if (projectDir != null && projectDir.isDirectory()) {
+                // sanitize names, as there are some camel components with + signal which are sanitized when creating the kafka connector
+                List<String> sanitizedComponentNames = components.stream().map(MavenUtils::sanitizeMavenArtifactId).collect(Collectors.toList());
+                // retrieve the list of camel kafka connectors
+                String[] connectorNames = projectDir.list((dir, filename) -> filename.endsWith(KAFKA_CONNECTORS_SUFFIX));
+                if (connectorNames != null) {
+                    List<String> connectorsToRemove = Stream.of(connectorNames).sorted().filter(filename -> {
+                        String componentName = extractComponentName(filename);
+                        // set to remove connectors that are not in camel catalog or are explicitly excluded
+                        return !sanitizedComponentNames.contains(componentName) || excludedComponents.contains(componentName);
+
+                    }).collect(Collectors.toList());
+
+                    for (String component: connectorsToRemove) {
+
+                        executeMojo(
+                                plugin(
+                                        groupId(properties.getProperty("groupId")),
+                                        artifactId(properties.getProperty("artifactId")),
+                                        version(properties.getProperty("version"))
+                                ),
+                                goal("camel-kafka-connector-delete"),
+                                configuration(
+                                        element(name("name"), component)
+                                ),
+                                executionEnvironment(
+                                        project,
+                                        session,
+                                        pluginManager
+                                )
+                        );
+                    }
+                }
+            }
+        }
+    }
+
+    private String extractComponentName(String connectorName) {
+        String name = connectorName.substring("camel-".length());
+        return name.substring(0, name.length() - KAFKA_CONNECTORS_SUFFIX.length());
     }
 }