This is an automated email from the ASF dual-hosted git repository. gnodet pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
commit ff10246b663d8a1d329f6abcd52751c0720dd453 Author: Guillaume Nodet <[email protected]> AuthorDate: Mon Jan 20 15:00:31 2020 +0100 [CAMEL-14437] Refactor a bit PackageHelper.findJsonFiles # Conflicts: # tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/EipDocumentationEnricherMojo.java --- .../apache/camel/tooling/util/PackageHelper.java | 87 +++++++--------------- .../camel/tooling/util/PackageHelperTest.java | 9 ++- .../apache/camel/maven/DocumentationEnricher.java | 6 +- .../camel/maven/EipDocumentationEnricherMojo.java | 17 ++--- .../maven/packaging/PackageComponentMojo.java | 2 +- .../camel/maven/packaging/PackageModelMojo.java | 22 ++---- .../camel/maven/packaging/PrepareCatalogMojo.java | 6 +- .../camel/maven/packaging/UpdateReadmeMojo.java | 8 +- .../maven/packaging/ValidateComponentMojo.java | 40 ++-------- .../camel/maven/packaging/ValidateHelper.java | 12 --- 10 files changed, 68 insertions(+), 141 deletions(-) diff --git a/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/PackageHelper.java b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/PackageHelper.java index bea2c77..2443b62 100644 --- a/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/PackageHelper.java +++ b/tooling/camel-tooling-util/src/main/java/org/apache/camel/tooling/util/PackageHelper.java @@ -18,22 +18,18 @@ package org.apache.camel.tooling.util; import java.io.BufferedReader; import java.io.File; -import java.io.FileFilter; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.LineNumberReader; -import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; -import java.util.TreeSet; -import java.util.stream.Collectors; +import java.util.stream.Stream; /** * Utility class to find, read json files. @@ -78,6 +74,10 @@ public final class PackageHelper { return loadText(new FileInputStream(file)); } + public static String loadText(Path file) throws IOException { + return loadText(Files.newInputStream(file)); + } + public static void writeText(File file, String text) throws IOException { FileUtil.updateFile(file.toPath(), text); } @@ -112,71 +112,38 @@ public final class PackageHelper { return answer; } - public static String fileToString(File file) throws IOException { - byte[] encoded = Files.readAllBytes(Paths.get(file.toURI())); - return new String(encoded, Charset.defaultCharset()); - } - - public static Map<String, File> findJsonFiles(File rootDir) { - return findJsonFiles(rootDir, new CamelComponentsModelFilter()); + public static Set<File> findJsonFiles(File rootDir) { + return findJsonFiles(rootDir, new HashSet<>()); } - public static void findJsonFiles(File rootDir, Set<File> files, FileFilter filter) { - findJsonFiles0(rootDir, files, filter); - } - - public static Map<String, File> findJsonFiles(File rootDir, FileFilter filter) { - Set<File> results = new HashSet<>(); - findJsonFiles0(rootDir, results, filter); - Map<String, File> files = new HashMap<>(); - results.forEach(file -> files.put(file.getName().replace(JSON_SUFIX, ""), file)); + public static Set<File> findJsonFiles(File rootDir, Set<File> files) { + findJsonFiles(rootDir.toPath()).forEach(p -> files.add(p.toFile())); return files; } - private static void findJsonFiles0(File dir, Set<File> result, FileFilter filter) { - File[] files = dir.listFiles(filter); - if (files != null) { - for (File file : files) { - // skip files in root dirs as Camel does not store information there but others may do - boolean jsonFile = file.isFile() && file.getName().endsWith(JSON_SUFIX); - if (jsonFile) { - result.add(file); - } else if (file.isDirectory()) { - findJsonFiles0(file, result, filter); - } + public static Stream<Path> findJsonFiles(Path rootDir) { + try { + if (Files.isDirectory(rootDir)) { + return Files.walk(rootDir) + .filter(p -> p.getFileName().toString().endsWith(JSON_SUFIX)); + } else { + return Stream.empty(); } + } catch (IOException e) { + throw new RuntimeException(e); } } - public static class CamelComponentsModelFilter implements FileFilter { - @Override - public boolean accept(File pathname) { - return pathname.isDirectory() || pathname.getName().endsWith(JSON_SUFIX); - } - } - - public static class CamelOthersModelFilter implements FileFilter { - - @Override - public boolean accept(File pathname) { - String name = pathname.getName(); - boolean special = "camel-core-osgi".equals(name) - || "camel-core-xml".equals(name) - || "camel-http-base".equals(name) - || "camel-http-common".equals(name) - || "camel-jetty-common".equals(name); - boolean special2 = "camel-as2".equals(name) - || "camel-box".equals(name) - || "camel-olingo2".equals(name) - || "camel-olingo4".equals(name) - || "camel-salesforce".equals(name) - || "camel-debezium-common".equals(name); - if (special || special2) { - return false; - } - - return pathname.isDirectory() || name.endsWith(".json"); + /** + * Returns the name of the component, data format or language from the given + * json file + */ + public static String asName(Path file) { + String name = file.getFileName().toString(); + if (name.endsWith(JSON_SUFIX)) { + return name.substring(0, name.length() - 5); } + return name; } public static File findCamelCoreDirectory(File dir) { diff --git a/tooling/camel-tooling-util/src/test/java/org/apache/camel/tooling/util/PackageHelperTest.java b/tooling/camel-tooling-util/src/test/java/org/apache/camel/tooling/util/PackageHelperTest.java index 068bac8..2fff48d 100644 --- a/tooling/camel-tooling-util/src/test/java/org/apache/camel/tooling/util/PackageHelperTest.java +++ b/tooling/camel-tooling-util/src/test/java/org/apache/camel/tooling/util/PackageHelperTest.java @@ -18,9 +18,12 @@ package org.apache.camel.tooling.util; import java.io.File; import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; import org.junit.Test; +import static org.apache.camel.tooling.util.PackageHelper.JSON_SUFIX; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -29,12 +32,14 @@ public class PackageHelperTest { @Test public void testFileToString() throws Exception { - assertEquals("dk19i21)@+#(OR", PackageHelper.fileToString(ResourceUtils.getResourceAsFile("filecontent/a.txt"))); + assertEquals("dk19i21)@+#(OR\n", PackageHelper.loadText(ResourceUtils.getResourceAsFile("filecontent/a.txt"))); } @Test public void testFindJsonFiles() throws Exception { - Map<String, File> jsonFiles = PackageHelper.findJsonFiles(ResourceUtils.getResourceAsFile("json")); + Set<File> jsons = PackageHelper.findJsonFiles(ResourceUtils.getResourceAsFile("json")); + Map<String, File> jsonFiles = jsons.stream().collect(Collectors.toMap( + file -> file.getName().replace(JSON_SUFIX, ""), file -> file)); assertTrue("Files a.json must be found", jsonFiles.containsKey("a")); assertTrue("Files b.json must be found", jsonFiles.containsKey("b")); diff --git a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/DocumentationEnricher.java b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/DocumentationEnricher.java index e6cfd0a..38c67d5e 100644 --- a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/DocumentationEnricher.java +++ b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/DocumentationEnricher.java @@ -63,7 +63,8 @@ public class DocumentationEnricher { } private void addElementDocumentation(Element item, File jsonFile) throws IOException { - List<Map<String, String>> rows = JSonSchemaHelper.parseJsonSchema(Constants.MODEL_ATTRIBUTE_NAME, PackageHelper.fileToString(jsonFile), false); + List<Map<String, String>> rows = JSonSchemaHelper.parseJsonSchema(Constants.MODEL_ATTRIBUTE_NAME, + PackageHelper.loadText(jsonFile), false); for (Map<String, String> row : rows) { if (row.containsKey(Constants.DESCRIPTION_ATTRIBUTE_NAME)) { String descriptionText = row.get(Constants.DESCRIPTION_ATTRIBUTE_NAME); @@ -84,7 +85,8 @@ public class DocumentationEnricher { String defaultValueText = null; String deprecatedText = null; - List<Map<String, String>> rows = JSonSchemaHelper.parseJsonSchema(Constants.PROPERTIES_ATTRIBUTE_NAME, PackageHelper.fileToString(jsonFile), true); + List<Map<String, String>> rows = JSonSchemaHelper.parseJsonSchema(Constants.PROPERTIES_ATTRIBUTE_NAME, + PackageHelper.loadText(jsonFile), true); for (Map<String, String> row : rows) { if (name.equals(row.get(Constants.NAME_ATTRIBUTE_NAME))) { descriptionText = row.get(Constants.DESCRIPTION_ATTRIBUTE_NAME); diff --git a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/EipDocumentationEnricherMojo.java b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/EipDocumentationEnricherMojo.java index fd05d4a..f402d50 100644 --- a/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/EipDocumentationEnricherMojo.java +++ b/tooling/maven/camel-eip-documentation-enricher-maven-plugin/src/main/java/org/apache/camel/maven/EipDocumentationEnricherMojo.java @@ -20,6 +20,8 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; @@ -145,15 +147,12 @@ public class EipDocumentationEnricherMojo extends AbstractMojo { DocumentationEnricher documentationEnricher = new DocumentationEnricher(document); // include schema files from camel-core, camel-core-xml and from camel-spring - File rootDir = new File(camelCoreDir, pathToModelDir); - Map<String, File> jsonFiles = PackageHelper.findJsonFiles(rootDir); - File rootDir2 = new File(camelCoreXmlDir, pathToCoreXmlModelDir); - Map<String, File> jsonFiles2 = PackageHelper.findJsonFiles(rootDir2); - File rootDir3 = new File(camelSpringDir, pathToSpringModelDir); - Map<String, File> jsonFiles3 = PackageHelper.findJsonFiles(rootDir3); - // merge the json files together - jsonFiles.putAll(jsonFiles2); - jsonFiles.putAll(jsonFiles3); + Set<File> files = new HashSet<>(); + PackageHelper.findJsonFiles(new File(camelCoreDir, pathToModelDir), files); + PackageHelper.findJsonFiles(new File(camelCoreXmlDir, pathToCoreXmlModelDir), files); + PackageHelper.findJsonFiles(new File(camelSpringDir, pathToSpringModelDir), files); + Map<String, File> jsonFiles = new HashMap<>(); + files.forEach(f -> jsonFiles.put(PackageHelper.asName(f.toPath()), f)); NodeList elementsAndTypes = domFinder.findElementsAndTypes(); documentationEnricher.enrichTopLevelElementsDocumentation(elementsAndTypes, jsonFiles); 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 07fdbb3..2e1c626 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 @@ -132,7 +132,7 @@ public class PackageComponentMojo extends AbstractGeneratorMojo { private static void enrichComponentJsonFiles(Log log, MavenProject project, File buildDir, Set<String> components) throws MojoExecutionException { Set<File> files = new HashSet<>(); - PackageHelper.findJsonFiles(buildDir, files, p -> p.isDirectory() || p.getName().endsWith(".json")); + PackageHelper.findJsonFiles(buildDir, files); for (File file : files) { // clip the .json suffix diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageModelMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageModelMojo.java index e6c3bf1..23ad95e 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageModelMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PackageModelMojo.java @@ -23,6 +23,7 @@ import java.util.Collections; import java.util.List; import java.util.Set; import java.util.TreeSet; +import java.util.stream.Collectors; import org.apache.camel.tooling.util.PackageHelper; import org.apache.maven.plugin.MojoExecutionException; @@ -65,22 +66,13 @@ public class PackageModelMojo extends AbstractGeneratorMojo { Set<File> jsonFiles = new TreeSet<>(); // find all json files in camel-core - if (buildDir != null && buildDir.isDirectory()) { - File target = new File(buildDir, "classes/org/apache/camel/model"); - PackageHelper.findJsonFiles(target, jsonFiles, new PackageHelper.CamelComponentsModelFilter()); - } - - List<String> models = new ArrayList<>(); - // sort the names - for (File file : jsonFiles) { - String name = file.getName(); - if (name.endsWith(".json")) { + List<String> models = PackageHelper.findJsonFiles(buildDir.toPath().resolve("classes/org/apache/camel/model")) + .map(p -> p.getFileName().toString()) // strip out .json from the name - String modelName = name.substring(0, name.length() - 5); - models.add(modelName); - } - } - Collections.sort(models); + .map(s -> s.substring(0, s.length() - PackageHelper.JSON_SUFIX.length())) + // sort + .sorted() + .collect(Collectors.toList()); StringBuilder sb = new StringBuilder(); sb.append("# " + GENERATED_MSG + NL); diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java index bff777c..295ec22 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java @@ -222,15 +222,15 @@ public class PrepareCatalogMojo extends AbstractMojo { // find all json files in camel-core if (coreDir != null && coreDir.isDirectory()) { File target = new File(coreDir, "target/classes/org/apache/camel/model"); - PackageHelper.findJsonFiles(target, jsonFiles, new PackageHelper.CamelComponentsModelFilter()); + PackageHelper.findJsonFiles(target, jsonFiles); } // find all json files in camel-spring if (springDir != null && springDir.isDirectory()) { File target = new File(springDir, "target/classes/org/apache/camel/spring"); - PackageHelper.findJsonFiles(target, jsonFiles, new PackageHelper.CamelComponentsModelFilter()); + PackageHelper.findJsonFiles(target, jsonFiles); File target2 = new File(springDir, "target/classes/org/apache/camel/core/xml"); - PackageHelper.findJsonFiles(target2, jsonFiles, new PackageHelper.CamelComponentsModelFilter()); + PackageHelper.findJsonFiles(target2, jsonFiles); } getLog().info("Found " + jsonFiles.size() + " model json files"); diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/UpdateReadmeMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/UpdateReadmeMojo.java index b3f0fde..77af9af 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/UpdateReadmeMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/UpdateReadmeMojo.java @@ -112,7 +112,7 @@ public class UpdateReadmeMojo extends AbstractMojo { List<String> componentNames = listDescriptorNamesOfType("component"); final Set<File> jsonFiles = new TreeSet<>(); - PackageHelper.findJsonFiles(buildDir, jsonFiles, new PackageHelper.CamelComponentsModelFilter()); + PackageHelper.findJsonFiles(buildDir, jsonFiles); // only if there is components we should update the documentation files if (!componentNames.isEmpty()) { @@ -184,7 +184,7 @@ public class UpdateReadmeMojo extends AbstractMojo { List<String> dataFormatNames = listDescriptorNamesOfType("dataformat"); final Set<File> jsonFiles = new TreeSet<>(); - PackageHelper.findJsonFiles(buildDir, jsonFiles, new PackageHelper.CamelComponentsModelFilter()); + PackageHelper.findJsonFiles(buildDir, jsonFiles); // only if there is dataformat we should update the documentation files if (!dataFormatNames.isEmpty()) { @@ -245,7 +245,7 @@ public class UpdateReadmeMojo extends AbstractMojo { List<String> languageNames = listDescriptorNamesOfType("language"); final Set<File> jsonFiles = new TreeSet<>(); - PackageHelper.findJsonFiles(buildDir, jsonFiles, new PackageHelper.CamelComponentsModelFilter()); + PackageHelper.findJsonFiles(buildDir, jsonFiles); // only if there is language we should update the documentation files if (!languageNames.isEmpty()) { @@ -300,7 +300,7 @@ public class UpdateReadmeMojo extends AbstractMojo { File coreDir = new File("."); if (coreDir.isDirectory()) { File target = new File(coreDir, "target/classes/org/apache/camel/model"); - PackageHelper.findJsonFiles(target, jsonFiles, new PackageHelper.CamelComponentsModelFilter()); + PackageHelper.findJsonFiles(target, jsonFiles); } // only if there is dataformat we should update the documentation files diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ValidateComponentMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ValidateComponentMojo.java index d19011f..888ca85 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ValidateComponentMojo.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ValidateComponentMojo.java @@ -17,10 +17,9 @@ package org.apache.camel.maven.packaging; import java.io.File; -import java.io.FileFilter; -import java.io.IOException; -import java.util.Set; -import java.util.TreeSet; +import java.nio.file.Path; +import java.util.List; +import java.util.stream.Collectors; import org.apache.camel.tooling.util.PackageHelper; import org.apache.maven.plugin.AbstractMojo; @@ -33,9 +32,8 @@ import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectHelper; import org.sonatype.plexus.build.incremental.BuildContext; -import static org.apache.camel.tooling.util.PackageHelper.loadText; import static org.apache.camel.tooling.util.Strings.indentCollection; -import static org.apache.camel.maven.packaging.ValidateHelper.asName; +import static org.apache.camel.tooling.util.PackageHelper.asName; import static org.apache.camel.maven.packaging.ValidateHelper.validate; /** @@ -96,16 +94,15 @@ public class ValidateComponentMojo extends AbstractMojo { if (!validate) { getLog().info("Validation disabled"); } else { - final Set<File> jsonFiles = new TreeSet<>(); - PackageHelper.findJsonFiles(outDir, jsonFiles, new CamelComponentsFileFilter()); + List<Path> jsonFiles = PackageHelper.findJsonFiles(outDir.toPath()).collect(Collectors.toList()); boolean failed = false; - for (File file : jsonFiles) { + for (Path file : jsonFiles) { final String name = asName(file); final ErrorDetail detail = new ErrorDetail(); getLog().debug("Validating file " + file); - validate(file, detail); + validate(file.toFile(), detail); if (detail.hasErrors()) { failed = true; @@ -139,27 +136,4 @@ public class ValidateComponentMojo extends AbstractMojo { } } - private class CamelComponentsFileFilter implements FileFilter { - - @Override - public boolean accept(File pathname) { - if (pathname.isDirectory() && pathname.getName().equals("model")) { - // do not check the camel-core model packages as there is no - // components there - return false; - } - - if (pathname.isFile() && pathname.getName().endsWith(".json")) { - // must be a components json file - try { - String json = loadText(pathname); - return json.contains("\"kind\": \"component\""); - } catch (IOException e) { - // ignore - } - } - return pathname.isDirectory() || (pathname.isFile() && pathname.getName().equals("component.properties")); - } - } - } diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ValidateHelper.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ValidateHelper.java index 7e2e605..7398f3c 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ValidateHelper.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ValidateHelper.java @@ -128,16 +128,4 @@ public final class ValidateHelper { } } - /** - * Returns the name of the component, data format or language from the given - * json file - */ - public static String asName(File file) { - String name = file.getName(); - if (name.endsWith(".json")) { - return name.substring(0, name.length() - 5); - } - return name; - } - }
