You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2020/01/27 15:47:22 UTC
[camel] 01/10: [CAMEL-14437] Refactor a bit
PackageHelper.findJsonFiles
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 <gn...@gmail.com>
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;
- }
-
}