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 e17206379d6597982ddcbac074aa687eed06cccf Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Wed Dec 22 09:02:28 2021 +0100 CAMEL-17194: componentdsl - Prepare for generate only once during project build. --- .../camel/maven/packaging/ComponentDslMojo.java | 60 +++++++--------------- 1 file changed, 19 insertions(+), 41 deletions(-) diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ComponentDslMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ComponentDslMojo.java index 08a9c8a..33e9ce8 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ComponentDslMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ComponentDslMojo.java @@ -25,9 +25,6 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; import java.util.stream.Collectors; import org.apache.camel.maven.packaging.dsl.component.ComponentDslBuilderFactoryGenerator; @@ -36,7 +33,6 @@ import org.apache.camel.maven.packaging.dsl.component.ComponentsDslMetadataRegis import org.apache.camel.tooling.model.BaseModel; import org.apache.camel.tooling.model.ComponentModel; import org.apache.camel.tooling.model.JsonMapper; -import org.apache.camel.tooling.util.PackageHelper; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.LifecyclePhase; @@ -47,7 +43,6 @@ import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectHelper; 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; @@ -58,8 +53,6 @@ import static org.apache.camel.tooling.util.PackageHelper.loadText; defaultPhase = LifecyclePhase.PROCESS_CLASSES) public class ComponentDslMojo extends AbstractGeneratorMojo { - private static final Map<Path, Lock> LOCKS = new ConcurrentHashMap<>(); - /** * The project build directory */ @@ -103,10 +96,12 @@ public class ComponentDslMojo extends AbstractGeneratorMojo { protected String componentsDslFactoriesPackageName; /** - * 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) @@ -138,34 +133,13 @@ public class ComponentDslMojo 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())); - 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 MojoExecutionException, MojoFailureException { @@ -175,6 +149,14 @@ public class ComponentDslMojo 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()) { for (ComponentModel model : compModels) { // if more than one, we have a component class with multiple components aliases @@ -184,7 +166,7 @@ public class ComponentDslMojo extends AbstractGeneratorMojo { } } - private void createComponentDsl(final ComponentModel model) throws MojoExecutionException, MojoFailureException { + private void createComponentDsl(final ComponentModel model) throws MojoFailureException { // Create components DSL factories final ComponentDslBuilderFactoryGenerator componentDslBuilderFactoryGenerator = syncAndGenerateSpecificComponentsBuilderFactories(model); @@ -249,11 +231,7 @@ public class ComponentDslMojo extends AbstractGeneratorMojo { Path target = outputDir.toPath().resolve(filePath).resolve(fileName); 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(buildContext, target, code);