You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/12/22 08:36:26 UTC

[camel] 02/04: CAMEL-17194: endpointdsl - Prepare for generate only once during project build.

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

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit b7c6ec183eb7fe9a1d0989db769eda34988b36ff
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Dec 22 09:07:11 2021 +0100

    CAMEL-17194: endpointdsl - Prepare for generate only once during project build.
---
 .../camel/maven/packaging/EndpointDslMojo.java     | 97 ++++------------------
 1 file changed, 18 insertions(+), 79 deletions(-)

diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointDslMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointDslMojo.java
index 1534970..4f6da63 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointDslMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/EndpointDslMojo.java
@@ -27,11 +27,6 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
 import javax.annotation.Generated;
@@ -41,7 +36,6 @@ import org.apache.camel.tooling.model.ComponentModel;
 import org.apache.camel.tooling.model.ComponentModel.EndpointOptionModel;
 import org.apache.camel.tooling.model.JsonMapper;
 import org.apache.camel.tooling.util.JavadocHelper;
-import org.apache.camel.tooling.util.PackageHelper;
 import org.apache.camel.tooling.util.Strings;
 import org.apache.camel.tooling.util.srcgen.GenericType;
 import org.apache.camel.tooling.util.srcgen.JavaClass;
@@ -62,7 +56,6 @@ import org.jboss.forge.roaster.model.source.MethodSource;
 import org.jboss.forge.roaster.model.source.ParameterSource;
 import org.sonatype.plexus.build.incremental.BuildContext;
 
-import static org.apache.camel.maven.packaging.MojoHelper.getComponentPath;
 import static org.apache.camel.tooling.util.PackageHelper.findCamelDirectory;
 import static org.apache.camel.tooling.util.PackageHelper.loadText;
 
@@ -73,8 +66,6 @@ import static org.apache.camel.tooling.util.PackageHelper.loadText;
       defaultPhase = LifecyclePhase.PROCESS_CLASSES)
 public class EndpointDslMojo extends AbstractGeneratorMojo {
 
-    private static final Map<Path, Lock> LOCKS = new ConcurrentHashMap<>();
-
     /**
      * The project build directory
      */
@@ -118,10 +109,12 @@ public class EndpointDslMojo extends AbstractGeneratorMojo {
     protected File outputResourcesDir;
 
     /**
-     * The components directory where all the Apache Camel components are
+     * The catalog directory where the component json files are
      */
-    @Parameter(defaultValue = "${project.build.directory}/../../../components")
-    protected File componentsDir;
+    @Parameter(defaultValue = "${project.build.directory}/../../../catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components")
+    protected File jsonDir;
+
+    private transient String licenseHeader;
 
     @Override
     public void execute(MavenProject project, MavenProjectHelper projectHelper, BuildContext buildContext)
@@ -153,35 +146,14 @@ public class EndpointDslMojo extends AbstractGeneratorMojo {
 
         List<ComponentModel> models = new ArrayList<>();
 
-        for (File dir : componentsDir.listFiles()) {
-            List<Path> subs = getComponentPath(dir.toPath());
-            for (Path sub : subs) {
-                sub = sub.resolve("src/generated/resources/");
-                PackageHelper.walk(sub).forEach(p -> {
-                    String f = p.getFileName().toString();
-                    if (f.endsWith(PackageHelper.JSON_SUFIX)) {
-                        try {
-                            BaseModel<?> model = JsonMapper.generateModel(p);
-                            if (model instanceof ComponentModel) {
-                                models.add((ComponentModel) model);
-                            }
-                        } catch (Exception e) {
-                            // ignore as its not a camel model
-                        }
-                    }
-                });
-            }
+        for (File file : jsonDir.listFiles()) {
+            BaseModel<?> model = JsonMapper.generateModel(file.toPath());
+            models.add((ComponentModel) model);
         }
         models.sort((o1, o2) -> o1.getScheme().compareToIgnoreCase(o2.getScheme()));
 
         // generate component endpoint DSL files and write them
-        Lock lock = LOCKS.computeIfAbsent(root, d -> new ReentrantLock());
-        lock.lock();
-        try {
-            executeComponent(models);
-        } finally {
-            lock.unlock();
-        }
+        executeComponent(models);
     }
 
     private void executeComponent(List<ComponentModel> allModels) throws MojoFailureException {
@@ -191,6 +163,14 @@ public class EndpointDslMojo extends AbstractGeneratorMojo {
             // Group the models by implementing classes
             Map<String, List<ComponentModel>> grModels
                     = allModels.stream().collect(Collectors.groupingBy(ComponentModel::getJavaType));
+
+            // load license header
+            try (InputStream is = getClass().getClassLoader().getResourceAsStream("license-header-java.txt")) {
+                this.licenseHeader = loadText(is);
+            } catch (Exception e) {
+                throw new MojoFailureException("Error loading license-header-java.txt file", e);
+            }
+
             for (List<ComponentModel> compModels : grModels.values()) {
                 ComponentModel model = compModels.get(0); // They should be equivalent
                 List<String> aliases = compModels.stream().map(ComponentModel::getScheme).sorted().collect(Collectors.toList());
@@ -941,43 +921,6 @@ public class EndpointDslMojo extends AbstractGeneratorMojo {
         return getProjectClassLoader().generateDummyClass(clazzName);
     }
 
-    private static String loadComponentJson(Map<File, Supplier<String>> jsonFiles, String componentName) {
-        return loadJsonOfType(jsonFiles, componentName, "component");
-    }
-
-    private static String loadJsonOfType(Map<File, Supplier<String>> jsonFiles, String modelName, String type) {
-        for (Map.Entry<File, Supplier<String>> entry : jsonFiles.entrySet()) {
-            if (entry.getKey().getName().equals(modelName + PackageHelper.JSON_SUFIX)) {
-                String json = entry.getValue().get();
-                if (type.equals(PackageHelper.getSchemaKind(json))) {
-                    return json;
-                }
-            }
-        }
-        return null;
-    }
-
-    private void findComponentNames(File dir, Set<String> componentNames) {
-        File f = new File(dir, "classes/META-INF/services/org/apache/camel/component");
-
-        if (f.exists() && f.isDirectory()) {
-            File[] files = f.listFiles();
-            if (files != null) {
-                for (File file : files) {
-                    // skip directories as there may be a sub .resolver
-                    // directory
-                    if (file.isDirectory()) {
-                        continue;
-                    }
-                    String name = file.getName();
-                    if (name.charAt(0) != '.') {
-                        componentNames.add(name);
-                    }
-                }
-            }
-        }
-    }
-
     private boolean writeSourceIfChanged(JavaClass source, String filePath, String fileName, boolean innerClassesLast)
             throws MojoFailureException {
         return writeSourceIfChanged(source.printClass(innerClassesLast), filePath, fileName);
@@ -985,11 +928,7 @@ public class EndpointDslMojo extends AbstractGeneratorMojo {
 
     private boolean writeSourceIfChanged(String source, String filePath, String fileName) throws MojoFailureException {
         try {
-            String header;
-            try (InputStream is = getClass().getClassLoader().getResourceAsStream("license-header-java.txt")) {
-                header = loadText(is);
-            }
-            String code = header + source;
+            String code = licenseHeader + source;
             getLog().debug("Source code generated:\n" + code);
 
             return updateResource(sourcesOutputDir.toPath(), filePath + "/" + fileName, code);