This is an automated email from the ASF dual-hosted git repository. acosentino 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 73d84f1 Second attempt for making build system find camel-core json descriptors (#2749) 73d84f1 is described below commit 73d84f1739f72aad67c48e8c47667a2de047f7aa Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Tue Feb 5 16:10:55 2019 +0100 Second attempt for making build system find camel-core json descriptors (#2749) * Maybe this works better on CI * This should work better * Fixed CS --- .../maven/packaging/PackageDataFormatMojo.java | 127 +++++++---------- .../camel/maven/packaging/PackageHelper.java | 11 +- .../camel/maven/packaging/PackageLanguageMojo.java | 158 +++++++++------------ 3 files changed, 124 insertions(+), 172 deletions(-) diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageDataFormatMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageDataFormatMojo.java index 45434ce..dd5f62e 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageDataFormatMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageDataFormatMojo.java @@ -21,15 +21,12 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.net.URL; -import java.net.URLClassLoader; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; -import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; @@ -95,7 +92,7 @@ public class PackageDataFormatMojo extends AbstractMojo { } public static int prepareDataFormat(Log log, MavenProject project, MavenProjectHelper projectHelper, File dataFormatOutDir, - File schemaOutDir, BuildContext buildContext) throws MojoExecutionException { + File schemaOutDir, BuildContext buildContext) throws MojoExecutionException { File camelMetaDir = new File(dataFormatOutDir, "META-INF/services/org/apache/camel/"); @@ -139,55 +136,46 @@ public class PackageDataFormatMojo extends AbstractMojo { // and create json schema model file for this data format try { if (apacheCamel && count > 0) { - File core = findCamelCoreJar(project); + File core = findCamelCoreDirectory(project.getBasedir()); if (core != null) { - URL url = new URL("file", null, core.getAbsolutePath()); - try (URLClassLoader loader = new URLClassLoader(new URL[] {url})) { - for (Map.Entry<String, String> entry : javaTypes.entrySet()) { - String name = entry.getKey(); - String javaType = entry.getValue(); - String modelName = asModelName(name); - - InputStream is = loader.getResourceAsStream("org/apache/camel/model/dataformat/" + modelName + ".json"); - if (is == null) { - // use file input stream if we build - // camel-core itself, and thus do not have a - // JAR which can be loaded by URLClassLoader - is = new FileInputStream(new File(core, "org/apache/camel/model/dataformat/" + modelName + ".json")); - } - String json = loadText(is); - - DataFormatModel dataFormatModel = extractDataFormatModel(project, json, modelName, name, javaType); - if (log.isDebugEnabled()) { - log.debug("Model: " + dataFormatModel); - } - - // build json schema for the data format - String properties = after(json, " \"properties\": {"); - - // special prepare for bindy/json properties - properties = prepareBindyProperties(name, properties); - properties = prepareJsonProperties(name, properties); - - String schema = createParameterJsonSchema(dataFormatModel, properties); - if (log.isDebugEnabled()) { - log.debug("JSon schema:\n" + schema); - } - - // write this to the directory - File dir = new File(schemaOutDir, schemaSubDirectory(dataFormatModel.getJavaType())); - dir.mkdirs(); - - File out = new File(dir, name + ".json"); - OutputStream fos = buildContext.newFileOutputStream(out); - fos.write(schema.getBytes()); - fos.close(); - - buildContext.refresh(out); - - if (log.isDebugEnabled()) { - log.debug("Generated " + out + " containing JSon schema for " + name + " data format"); - } + for (Map.Entry<String, String> entry : javaTypes.entrySet()) { + String name = entry.getKey(); + String javaType = entry.getValue(); + String modelName = asModelName(name); + + InputStream is = new FileInputStream(new File(core, "target/classes/org/apache/camel/model/dataformat/" + modelName + ".json")); + String json = loadText(is); + + DataFormatModel dataFormatModel = extractDataFormatModel(project, json, modelName, name, javaType); + if (log.isDebugEnabled()) { + log.debug("Model: " + dataFormatModel); + } + + // build json schema for the data format + String properties = after(json, " \"properties\": {"); + + // special prepare for bindy/json properties + properties = prepareBindyProperties(name, properties); + properties = prepareJsonProperties(name, properties); + + String schema = createParameterJsonSchema(dataFormatModel, properties); + if (log.isDebugEnabled()) { + log.debug("JSon schema:\n" + schema); + } + + // write this to the directory + File dir = new File(schemaOutDir, schemaSubDirectory(dataFormatModel.getJavaType())); + dir.mkdirs(); + + File out = new File(dir, name + ".json"); + OutputStream fos = buildContext.newFileOutputStream(out); + fos.write(schema.getBytes()); + fos.close(); + + buildContext.refresh(out); + + if (log.isDebugEnabled()) { + log.debug("Generated " + out + " containing JSon schema for " + name + " data format"); } } } else { @@ -426,17 +414,6 @@ public class PackageDataFormatMojo extends AbstractMojo { return title; } - private static File findCamelCoreJar(MavenProject project) { - // maybe this project is camel-core itself - Artifact artifact = project.getArtifact(); - if (artifact.getGroupId().equals("org.apache.camel") && artifact.getArtifactId().equals("camel-core")) { - return artifact.getFile(); - } - - // okay we are a custom dataformat so we need to find camel-core by walking down the folders - return findCamelCoreDirectory(project, project.getBasedir()); - } - private static String schemaSubDirectory(String javaType) { int idx = javaType.lastIndexOf('.'); String pckName = javaType.substring(0, idx); @@ -598,18 +575,18 @@ public class PackageDataFormatMojo extends AbstractMojo { @Override public String toString() { return "DataFormatModel[" - + "name='" + name + '\'' - + ", title='" + title + '\'' - + ", modelName='" + modelName + '\'' - + ", description='" + description + '\'' - + ", label='" + label + '\'' - + ", deprecated='" + deprecated + '\'' - + ", javaType='" + javaType + '\'' - + ", modelJavaType='" + modelJavaType + '\'' - + ", groupId='" + groupId + '\'' - + ", artifactId='" + artifactId + '\'' - + ", version='" + version + '\'' - + ']'; + + "name='" + name + '\'' + + ", title='" + title + '\'' + + ", modelName='" + modelName + '\'' + + ", description='" + description + '\'' + + ", label='" + label + '\'' + + ", deprecated='" + deprecated + '\'' + + ", javaType='" + javaType + '\'' + + ", modelJavaType='" + modelJavaType + '\'' + + ", groupId='" + groupId + '\'' + + ", artifactId='" + artifactId + '\'' + + ", version='" + version + '\'' + + ']'; } } diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageHelper.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageHelper.java index fc42d00..6841292 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageHelper.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageHelper.java @@ -24,12 +24,12 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.LineNumberReader; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.util.TreeSet; -import java.nio.file.Files; -import java.nio.file.Path; import org.apache.maven.model.Resource; import org.apache.maven.plugin.logging.Log; @@ -186,17 +186,16 @@ public final class PackageHelper { } } - public static File findCamelCoreDirectory(MavenProject project, File dir) { + public static File findCamelCoreDirectory(File dir) { if (dir == null) { return null; } Path p = dir.toPath().resolve("core/camel-core"); if (Files.isDirectory(p)) { - String version = project.getVersion(); - return p.resolve("target").resolve("camel-core-" + version + ".jar").toFile(); + return p.toFile(); } else { // okay walk up the parent dir - return findCamelCoreDirectory(project, dir.getParentFile()); + return findCamelCoreDirectory(dir.getParentFile()); } } diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java index 4a118dd..c3d7f69 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageLanguageMojo.java @@ -5,9 +5,9 @@ * 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 - * <p> - * http://www.apache.org/licenses/LICENSE-2.0 - * <p> + * + * 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. @@ -21,15 +21,12 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.net.URL; -import java.net.URLClassLoader; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; -import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; @@ -140,89 +137,79 @@ public class PackageLanguageMojo extends AbstractMojo { // and create json schema model file for this language try { if (apacheCamel && count > 0) { - File core = findCamelCoreJar(project); + File core = findCamelCoreDirectory(project.getBasedir()); if (core != null) { - URL url = new URL("file", null, core.getAbsolutePath()); - try (URLClassLoader loader = new URLClassLoader(new URL[] {url})) { - for (Map.Entry<String, String> entry : javaTypes.entrySet()) { - String name = entry.getKey(); - String javaType = entry.getValue(); - String modelName = asModelName(name); - - InputStream is = loader.getResourceAsStream("org/apache/camel/model/language/" + modelName + ".json"); - if (is == null) { - // use file input stream if we build - // camel-core itself, and thus do not have a - // JAR which can be loaded by URLClassLoader - is = new FileInputStream(new File(core, "org/apache/camel/model/language/" + modelName + ".json")); + for (Map.Entry<String, String> entry : javaTypes.entrySet()) { + String name = entry.getKey(); + String javaType = entry.getValue(); + String modelName = asModelName(name); + InputStream is = new FileInputStream(new File(core, "target/classes/org/apache/camel/model/language/" + modelName + ".json")); + String json = loadText(is); + LanguageModel languageModel = new LanguageModel(); + languageModel.setName(name); + languageModel.setTitle(""); + languageModel.setModelName(modelName); + languageModel.setLabel(""); + languageModel.setDescription(""); + languageModel.setJavaType(javaType); + languageModel.setGroupId(project.getGroupId()); + languageModel.setArtifactId(project.getArtifactId()); + languageModel.setVersion(project.getVersion()); + + List<Map<String, String>> rows = JSonSchemaHelper.parseJsonSchema("model", json, false); + for (Map<String, String> row : rows) { + if (row.containsKey("title")) { + // title may be special for some + // languages + String title = asTitle(name, row.get("title")); + languageModel.setTitle(title); } - String json = loadText(is); - LanguageModel languageModel = new LanguageModel(); - languageModel.setName(name); - languageModel.setTitle(""); - languageModel.setModelName(modelName); - languageModel.setLabel(""); - languageModel.setDescription(""); - languageModel.setJavaType(javaType); - languageModel.setGroupId(project.getGroupId()); - languageModel.setArtifactId(project.getArtifactId()); - languageModel.setVersion(project.getVersion()); - - List<Map<String, String>> rows = JSonSchemaHelper.parseJsonSchema("model", json, false); - for (Map<String, String> row : rows) { - if (row.containsKey("title")) { - // title may be special for some - // languages - String title = asTitle(name, row.get("title")); - languageModel.setTitle(title); - } - if (row.containsKey("description")) { - // description may be special for some - // languages - String desc = asDescription(name, row.get("description")); - languageModel.setDescription(desc); - } - if (row.containsKey("label")) { - languageModel.setLabel(row.get("label")); - } - if (row.containsKey("deprecated")) { - languageModel.setDeprecated(row.get("deprecated")); - } - if (row.containsKey("deprecationNote")) { - languageModel.setDeprecationNote(row.get("deprecationNote")); - } - if (row.containsKey("javaType")) { - languageModel.setModelJavaType(row.get("javaType")); - } - if (row.containsKey("firstVersion")) { - languageModel.setFirstVersion(row.get("firstVersion")); - } + if (row.containsKey("description")) { + // description may be special for some + // languages + String desc = asDescription(name, row.get("description")); + languageModel.setDescription(desc); } - if (log.isDebugEnabled()) { - log.debug("Model: " + languageModel); + if (row.containsKey("label")) { + languageModel.setLabel(row.get("label")); } - - // build json schema for the data format - String properties = after(json, " \"properties\": {"); - String schema = createParameterJsonSchema(languageModel, properties); - if (log.isDebugEnabled()) { - log.debug("JSon schema\n" + schema); + if (row.containsKey("deprecated")) { + languageModel.setDeprecated(row.get("deprecated")); + } + if (row.containsKey("deprecationNote")) { + languageModel.setDeprecationNote(row.get("deprecationNote")); + } + if (row.containsKey("javaType")) { + languageModel.setModelJavaType(row.get("javaType")); + } + if (row.containsKey("firstVersion")) { + languageModel.setFirstVersion(row.get("firstVersion")); } + } + if (log.isDebugEnabled()) { + log.debug("Model: " + languageModel); + } - // write this to the directory - File dir = new File(schemaOutDir, schemaSubDirectory(languageModel.getJavaType())); - dir.mkdirs(); + // build json schema for the data format + String properties = after(json, " \"properties\": {"); + String schema = createParameterJsonSchema(languageModel, properties); + if (log.isDebugEnabled()) { + log.debug("JSon schema\n" + schema); + } - File out = new File(dir, name + ".json"); - OutputStream fos = buildContext.newFileOutputStream(out); - fos.write(schema.getBytes()); - fos.close(); + // write this to the directory + File dir = new File(schemaOutDir, schemaSubDirectory(languageModel.getJavaType())); + dir.mkdirs(); - buildContext.refresh(out); + File out = new File(dir, name + ".json"); + OutputStream fos = buildContext.newFileOutputStream(out); + fos.write(schema.getBytes()); + fos.close(); - if (log.isDebugEnabled()) { - log.debug("Generated " + out + " containing JSon schema for " + name + " language"); - } + buildContext.refresh(out); + + if (log.isDebugEnabled()) { + log.debug("Generated " + out + " containing JSon schema for " + name + " language"); } } } else { @@ -344,17 +331,6 @@ public class PackageLanguageMojo extends AbstractMojo { return description; } - private static File findCamelCoreJar(MavenProject project) { - // maybe this project is camel-core itself - Artifact artifact = project.getArtifact(); - if (artifact.getGroupId().equals("org.apache.camel") && artifact.getArtifactId().equals("camel-core")) { - return artifact.getFile(); - } - - // okay we are a custom dataformat so we need to find camel-core by walking down the folders - return findCamelCoreDirectory(project, project.getBasedir()); - } - private static String schemaSubDirectory(String javaType) { int idx = javaType.lastIndexOf('.'); String pckName = javaType.substring(0, idx);