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 2020/02/06 11:46:13 UTC

[camel] branch master updated: CAMEL-14503: Added generate-component for 3rd party Camel component developers

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

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


The following commit(s) were added to refs/heads/master by this push:
     new fb410bb  CAMEL-14503: Added generate-component for 3rd party Camel component developers
fb410bb is described below

commit fb410bb27247d6a0a5c1b650fd9d86bbaad70458
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Feb 6 12:45:23 2020 +0100

    CAMEL-14503: Added generate-component for 3rd party Camel component developers
---
 ...GenerateMojo.java => AbstractGenerateMojo.java} |  45 +-----
 .../maven/packaging/GenerateComponentMojo.java     |  47 ++++++
 .../apache/camel/maven/packaging/GenerateMojo.java | 160 +--------------------
 3 files changed, 53 insertions(+), 199 deletions(-)

diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateMojo.java
similarity index 80%
copy from tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java
copy to tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateMojo.java
index b47d7e7..5e8c48d 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/AbstractGenerateMojo.java
@@ -35,20 +35,12 @@ import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 import org.apache.maven.plugins.annotations.Component;
-import org.apache.maven.plugins.annotations.LifecyclePhase;
-import org.apache.maven.plugins.annotations.Mojo;
 import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.plugins.annotations.ResolutionScope;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.project.MavenProjectHelper;
 import org.sonatype.plexus.build.incremental.BuildContext;
 
-/**
- * 
- */
-@Mojo(name = "generate", threadSafe = true, requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME, 
-        defaultPhase = LifecyclePhase.PROCESS_CLASSES)
-public class GenerateMojo extends AbstractMojo {
+public abstract class AbstractGenerateMojo extends AbstractMojo {
 
     @Parameter(property = "project", required = true, readonly = true)
     protected MavenProject project;
@@ -73,40 +65,9 @@ public class GenerateMojo extends AbstractMojo {
         }
     }
 
-    protected void doExecute() throws MojoFailureException, MojoExecutionException {
-        // jandex
-        invoke(PackageJandexMojo.class);
-        // generate-schema
-        invoke(SchemaGeneratorMojo.class);
-        // generate-type-converter-loader
-        invoke(TypeConverterLoaderGeneratorMojo.class);
-        // generate-spi
-        invoke(SpiGeneratorMojo.class);
-        // generate-jaxb-list
-        invoke(PackageJaxbMojo.class);
-        // generate-eips-list
-        invoke(PackageModelMojo.class);
-        // generate-endpoint-schema
-        invoke(EndpointSchemaGeneratorMojo.class);
-        // prepare-components
-        invoke(PrepareComponentMojo.class);
-        // prepare-main
-        invoke(PrepareCamelMainMojo.class);
-        // generate-xml-parser
-        invoke(ModelXmlParserGeneratorMojo.class);
-        // generate-legal
-        invoke(PackageLegalMojo.class);
-        // validate-components
-        invoke(ValidateComponentMojo.class);
-        // generate-endpoint-dsl
-        invoke(EndpointDslMojo.class);
-        // generate-component-dsl
-        invoke(ComponentDslMojo.class);
-        // update-readme
-        invoke(UpdateReadmeMojo.class);
-    }
+    protected abstract void doExecute() throws MojoFailureException, MojoExecutionException;
 
-    private void invoke(Class<? extends AbstractMojo> mojoClass) throws MojoExecutionException, MojoFailureException {
+    protected void invoke(Class<? extends AbstractMojo> mojoClass) throws MojoExecutionException, MojoFailureException {
         try {
             AbstractMojo mojo = mojoClass.newInstance();
             mojo.setLog(getLog());
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateComponentMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateComponentMojo.java
new file mode 100644
index 0000000..fc9ffc8
--- /dev/null
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateComponentMojo.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.maven.packaging;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.ResolutionScope;
+
+/**
+ * To be used by 3rd party Camel component developers to generate metadata.
+ */
+@Mojo(name = "generate-component", threadSafe = true, requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME,
+        defaultPhase = LifecyclePhase.PROCESS_CLASSES)
+public class GenerateComponentMojo extends AbstractGenerateMojo {
+
+    protected void doExecute() throws MojoFailureException, MojoExecutionException {
+        // jandex
+        invoke(PackageJandexMojo.class);
+        // generate-type-converter-loader
+        invoke(TypeConverterLoaderGeneratorMojo.class);
+        // generate-spi
+        invoke(SpiGeneratorMojo.class);
+        // generate-endpoint-schema
+        invoke(EndpointSchemaGeneratorMojo.class);
+        // prepare-components
+        invoke(PrepareComponentMojo.class);
+        // validate-components
+        invoke(ValidateComponentMojo.class);
+    }
+
+}
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java
index b47d7e7..dba8ac7 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateMojo.java
@@ -16,62 +16,18 @@
  */
 package org.apache.camel.maven.packaging;
 
-import java.io.File;
-import java.io.IOError;
-import java.io.IOException;
-import java.io.Writer;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-import java.util.zip.ZipFile;
-
-import org.apache.maven.artifact.Artifact;
-import org.apache.maven.execution.MavenSession;
-import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
-import org.apache.maven.plugins.annotations.Component;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
 import org.apache.maven.plugins.annotations.Mojo;
-import org.apache.maven.plugins.annotations.Parameter;
 import org.apache.maven.plugins.annotations.ResolutionScope;
-import org.apache.maven.project.MavenProject;
-import org.apache.maven.project.MavenProjectHelper;
-import org.sonatype.plexus.build.incremental.BuildContext;
 
 /**
- * 
+ * Used by Apache Camel project itself - do NOT use as end user.
  */
-@Mojo(name = "generate", threadSafe = true, requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME, 
+@Mojo(name = "generate", threadSafe = true, requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME,
         defaultPhase = LifecyclePhase.PROCESS_CLASSES)
-public class GenerateMojo extends AbstractMojo {
-
-    @Parameter(property = "project", required = true, readonly = true)
-    protected MavenProject project;
-    @Component
-    protected MavenProjectHelper projectHelper;
-    @Component
-    protected BuildContext buildContext;
-    @Component
-    private MavenSession session;
-    @Parameter(defaultValue = "${showStaleFiles}")
-    private boolean showStaleFiles;
-
-    @Override
-    public void execute() throws MojoExecutionException, MojoFailureException {
-        try {
-            if (!isUpToDate(project)) {
-                doExecute();
-                writeIncrementalInfo(project);
-            }
-        } catch (Exception e) {
-            throw new MojoFailureException("Error generating data " + e.toString(), e);
-        }
-    }
+public class GenerateMojo extends AbstractGenerateMojo {
 
     protected void doExecute() throws MojoFailureException, MojoExecutionException {
         // jandex
@@ -106,114 +62,4 @@ public class GenerateMojo extends AbstractMojo {
         invoke(UpdateReadmeMojo.class);
     }
 
-    private void invoke(Class<? extends AbstractMojo> mojoClass) throws MojoExecutionException, MojoFailureException {
-        try {
-            AbstractMojo mojo = mojoClass.newInstance();
-            mojo.setLog(getLog());
-            mojo.setPluginContext(getPluginContext());
-            ((AbstractGeneratorMojo) mojo).execute(project, projectHelper, buildContext);
-
-        } catch (MojoExecutionException|MojoFailureException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new MojoFailureException("Unable to create mojo", e);
-        }
-    }
-
-    private void writeIncrementalInfo(MavenProject project) throws MojoExecutionException {
-        try {
-            Path cacheData = getIncrementalDataPath(project);
-            String curdata = getIncrementalData();
-            Files.createDirectories(cacheData.getParent());
-            try (Writer w = Files.newBufferedWriter(cacheData)) {
-                w.append(curdata);
-            }
-        } catch (IOException e) {
-            throw new MojoExecutionException("Error checking manifest uptodate status", e);
-        }
-    }
-
-    private boolean isUpToDate(MavenProject project) throws MojoExecutionException {
-        try {
-            Path cacheData = getIncrementalDataPath(project);
-            String prvdata;
-            if (Files.isRegularFile(cacheData)) {
-                prvdata = new String(Files.readAllBytes(cacheData), StandardCharsets.UTF_8);
-            } else {
-                prvdata = null;
-            }
-            String curdata = getIncrementalData();
-            if (curdata.equals(prvdata)) {
-                long lastmod = Files.getLastModifiedTime(cacheData).toMillis();
-                Set<String> stale = Stream.concat(Stream.concat(
-                            project.getCompileSourceRoots().stream().map(File::new),
-                            Stream.of(new File(project.getBuild().getOutputDirectory()))),
-                            project.getArtifacts().stream().map(Artifact::getFile))
-                        .flatMap(f -> newer(lastmod, f)).collect(Collectors.toSet());
-                if (!stale.isEmpty()) {
-                    getLog().info("Stale files detected, re-generating.");
-                    if (showStaleFiles) {
-                        getLog().info("Stale files: " + stale.stream().collect(Collectors.joining(", ")));
-                    } else if (getLog().isDebugEnabled()) {
-                        getLog().debug("Stale files: " + stale.stream().collect(Collectors.joining(", ")));
-                    }
-                } else {
-                    // everything is in order, skip
-                    getLog().info("Skipping generation, everything is up to date.");
-                    return true;
-                }
-            } else {
-                if (prvdata == null) {
-                    getLog().info("No previous run data found, generating files.");
-                } else {
-                    getLog().info("Configuration changed, re-generating files.");
-                }
-            }
-        } catch (IOException e) {
-            throw new MojoExecutionException("Error checking uptodate status", e);
-        }
-        return false;
-    }
-
-    private String getIncrementalData() {
-        return "";
-    }
-
-    private Path getIncrementalDataPath(MavenProject project) {
-        return Paths.get(project.getBuild().getDirectory(), "camel-package-maven-plugin", "org.apache.camel_camel-package-maven-plugin_info_xx");
-    }
-
-    private long lastmod(Path p) {
-        try {
-            return Files.getLastModifiedTime(p).toMillis();
-        } catch (IOException e) {
-            return 0;
-        }
-    }
-
-    private Stream<String> newer(long lastmod, File file) {
-        try {
-            if (file.isDirectory()) {
-                return Files.walk(file.toPath()).filter(Files::isRegularFile).filter(p -> lastmod(p) > lastmod).map(Path::toString);
-            } else if (file.isFile()) {
-                if (lastmod(file.toPath()) > lastmod) {
-                    if (file.getName().endsWith(".jar")) {
-                        try (ZipFile zf = new ZipFile(file)) {
-                            return zf.stream().filter(ze -> !ze.isDirectory()).filter(ze -> ze.getLastModifiedTime().toMillis() > lastmod)
-                                    .map(ze -> file.toString() + "!" + ze.getName()).collect(Collectors.toList()).stream();
-                        }
-                    } else {
-                        return Stream.of(file.toString());
-                    }
-                } else {
-                    return Stream.empty();
-                }
-            } else {
-                return Stream.empty();
-            }
-        } catch (IOException e) {
-            throw new IOError(e);
-        }
-    }
-
 }