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
commit fe7b90dc2182f7b6a9033dc1b3ede50eecdb2c39 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon Jan 14 16:34:36 2019 +0100 CAMEL-13051: The component json metafiles need to be enriched later with more details after the compilation process. --- .../tools/apt/EndpointAnnotationProcessor.java | 10 ++-- .../maven/packaging/PackageComponentMojo.java | 60 ++++++++++++++++++++-- .../maven/packaging/PrepareComponentMojo.java | 9 +++- 3 files changed, 70 insertions(+), 9 deletions(-) diff --git a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java index 7bb2c9c..5d41446 100644 --- a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java +++ b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java @@ -362,11 +362,11 @@ public class EndpointAnnotationProcessor extends AbstractCamelAnnotationProcesso model.setDeprecationNote(deprecationNote); // these information is not available at compile time and we enrich these later during the camel-package-maven-plugin - model.setJavaType("REPLACE-ME"); - model.setDescription("REPLACE-ME"); - model.setGroupId("REPLACE-ME"); - model.setArtifactId("REPLACE-ME"); - model.setVersionId("REPLACE-ME"); + model.setJavaType("@@@JAVATYPE@@@"); + model.setDescription("@@@DESCRIPTION@@@"); + model.setGroupId("@@@GROUPID@@@"); + model.setArtifactId("@@@ARTIFACTID@@@"); + model.setVersionId("@@@VERSIONID@@@"); // favor to use endpoint class javadoc as description Elements elementUtils = processingEnv.getElementUtils(); diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageComponentMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageComponentMojo.java index cfa6e39..23f43b4 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageComponentMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageComponentMojo.java @@ -22,9 +22,11 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.Properties; +import java.util.Set; -import org.apache.maven.model.Resource; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; @@ -36,6 +38,9 @@ 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.PackageHelper.loadText; +import static org.apache.camel.maven.packaging.PackageHelper.writeText; + /** * Analyses the Camel plugins in a project and generates extra descriptor information for easier auto-discovery in Camel. */ @@ -55,6 +60,13 @@ public class PackageComponentMojo extends AbstractMojo { protected File componentOutDir; /** + * The project build directory + * + */ + @Parameter(defaultValue="${project.build.directory}") + protected File buildDir; + + /** * Maven ProjectHelper. */ @Component @@ -75,10 +87,10 @@ public class PackageComponentMojo extends AbstractMojo { * @throws MojoFailureException something bad happened... */ public void execute() throws MojoExecutionException, MojoFailureException { - prepareComponent(getLog(), project, projectHelper, componentOutDir, buildContext); + prepareComponent(getLog(), project, projectHelper, buildDir, componentOutDir, buildContext); } - public static void prepareComponent(Log log, MavenProject project, MavenProjectHelper projectHelper, File componentOutDir, BuildContext buildContext) throws MojoExecutionException { + public static void prepareComponent(Log log, MavenProject project, MavenProjectHelper projectHelper, File buildDir, File componentOutDir, BuildContext buildContext) throws MojoExecutionException { File camelMetaDir = new File(componentOutDir, "META-INF/services/org/apache/camel/"); @@ -95,6 +107,8 @@ public class PackageComponentMojo extends AbstractMojo { StringBuilder buffer = new StringBuilder(); int count = 0; + Map<String, String> components = new LinkedHashMap<>(); + File f = new File(project.getBasedir(), "target/classes"); f = new File(f, "META-INF/services/org/apache/camel/component"); if (f.exists() && f.isDirectory()) { @@ -113,10 +127,27 @@ public class PackageComponentMojo extends AbstractMojo { } buffer.append(name); } + + // grab the java class name for the discovered component + try { + Properties prop = new Properties(); + prop.load(new FileInputStream(file)); + + String javaType = prop.getProperty("class"); + + components.put(name, javaType); + log.debug("Discovered component: " + name + " with class: " + javaType); + + } catch (IOException e) { + throw new MojoExecutionException("Failed to load file " + file + ". Reason: " + e, e); + } } } } + // we need to enrich the component json files with data we know have from this plugin + enrichComponentJsonFiles(log, project, buildDir, components); + if (count > 0) { Properties properties = new Properties(); String names = buffer.toString(); @@ -167,4 +198,27 @@ public class PackageComponentMojo extends AbstractMojo { } } + private static void enrichComponentJsonFiles(Log log, MavenProject project, File buildDir, Map<String, String> components) throws MojoExecutionException { + final Set<File> files = PackageHelper.findJsonFiles(buildDir, p -> p.isDirectory() || p.getName().endsWith(".json")); + + for (File file : files) { + // name without .json + String shortName = file.getName().substring(0, file.getName().length() - 5); + String javaType = components.getOrDefault(shortName, ""); + log.debug("Enriching file: " + file); + + try { + String text = loadText(new FileInputStream(file)); + text = text.replace("@@@JAVATYPE@@@", javaType); + text = text.replace("@@@DESCRIPTION@@@", project.getDescription()); + text = text.replace("@@@GROUPID@@@", project.getGroupId()); + text = text.replace("@@@ARTIFACTID@@@", project.getArtifactId()); + text = text.replace("@@@VERSIONID@@@", project.getVersion()); + writeText(file, text); + } catch (IOException e) { + throw new MojoExecutionException("Failed to update file " + file + ". Reason: " + e, e); + } + } + } + } diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareComponentMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareComponentMojo.java index c0454ef..e0642f3 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareComponentMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareComponentMojo.java @@ -88,6 +88,13 @@ public class PrepareComponentMojo extends AbstractMojo { protected File schemaOutDir; /** + * The project build directory + * + */ + @Parameter(defaultValue="${project.build.directory}") + protected File buildDir; + + /** * Maven ProjectHelper. */ @Component @@ -108,7 +115,7 @@ public class PrepareComponentMojo extends AbstractMojo { * @throws org.apache.maven.plugin.MojoFailureException something bad happened... */ public void execute() throws MojoExecutionException, MojoFailureException { - prepareComponent(getLog(), project, projectHelper, componentOutDir, buildContext); + prepareComponent(getLog(), project, projectHelper, buildDir, componentOutDir, buildContext); prepareDataFormat(getLog(), project, projectHelper, dataFormatOutDir, schemaOutDir, buildContext); prepareLanguage(getLog(), project, projectHelper, languageOutDir, schemaOutDir, buildContext); prepareOthers(getLog(), project, projectHelper, otherOutDir, schemaOutDir, buildContext);