This is an automated email from the ASF dual-hosted git repository. ppalaga pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 284efe444556f548831b7f1740c5da24f687b7b6 Author: Peter Palaga <[email protected]> AuthorDate: Thu Mar 18 14:42:29 2021 +0100 Let check-extension-pages sync extensions in nav.adoc --- .../quarkus/maven/CheckExtensionPagesMojo.java | 63 ++++++++++++++++++++-- 1 file changed, 60 insertions(+), 3 deletions(-) diff --git a/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CheckExtensionPagesMojo.java b/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CheckExtensionPagesMojo.java index dd75fa7..b8fe771 100644 --- a/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CheckExtensionPagesMojo.java +++ b/tooling/maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CheckExtensionPagesMojo.java @@ -24,8 +24,12 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.Collections; +import java.util.Comparator; +import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.TreeSet; +import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -45,6 +49,7 @@ import org.apache.maven.plugins.annotations.Parameter; * <li>Creates dummy partials for Camel bits that Camel Quarkus does not support, so that there are no warnings when * they are included from the Camel component pages * <li>Deletes Camel bit partials that do not exist anymore. + * <li>Synchronizes nav.adoc with the reality * <ul> */ @Mojo(name = "check-extension-pages", threadSafe = true) @@ -84,6 +89,12 @@ public class CheckExtensionPagesMojo extends AbstractDocGeneratorMojo { @Parameter(property = "camel.version") String camelVersion; + /** + * The path to the navigation document. + */ + @Parameter(defaultValue = "${maven.multiModuleProjectDirectory}/docs/modules/ROOT/nav.adoc") + File navFile; + @Parameter(defaultValue = "${settings.localRepository}", readonly = true) String localRepository; @@ -103,6 +114,7 @@ public class CheckExtensionPagesMojo extends AbstractDocGeneratorMojo { camelBits(docsBasePath); extensions(docsBasePath); + } void camelBits(Path docsBasePath) { @@ -171,10 +183,26 @@ public class CheckExtensionPagesMojo extends AbstractDocGeneratorMojo { } void extensions(Path docsBasePath) { - final Set<String> artifactIdBases = extensionDirectories.stream() + + final Set<String> artifactIdBases = new HashSet<>(); + final Set<CamelQuarkusExtension> extensions = new TreeSet<>(Comparator.comparing(e -> e.getName().get())); + extensionDirectories.stream() .map(File::toPath) - .flatMap(CqUtils::findExtensionArtifactIdBases) - .collect(Collectors.toSet()); + .forEach(extDir -> { + CqUtils.findExtensionArtifactIdBases(extDir) + .filter(artifactIdBase -> !skipArtifactIdBases.contains(artifactIdBase)) + .forEach(artifactIdBase -> { + artifactIdBases.add(artifactIdBase); + final Path runtimePomXmlPath = extDir.resolve(artifactIdBase).resolve("runtime/pom.xml") + .toAbsolutePath().normalize(); + extensions.add(CamelQuarkusExtension.read(runtimePomXmlPath)); + }); + }); + + final String extLinks = extensions.stream() + .map(m -> "*** xref:reference/extensions/" + m.getRuntimeArtifactIdBase() + ".adoc[" + m.getName().get() + "]") + .collect(Collectors.joining("\n")); + replace(navFile.toPath(), "extensions", extLinks); final Path docsExtensionsDir = docsBasePath.resolve("modules/ROOT/pages/reference/extensions"); try (Stream<Path> docPages = Files.list(docsExtensionsDir)) { @@ -193,4 +221,33 @@ public class CheckExtensionPagesMojo extends AbstractDocGeneratorMojo { } } + void replace(Path path, String replacementKey, String value) { + try { + String document = new String(Files.readAllBytes(path), encoding); + document = replace(document, path, replacementKey, value); + try { + Files.write(path, document.getBytes(encoding)); + } catch (IOException e) { + throw new RuntimeException("Could not write to " + path, e); + } + } catch (IOException e) { + throw new RuntimeException("Could not read from " + path, e); + } + } + + static String replace(String document, Path documentPath, String replacementKey, String value) { + final Pattern pat = Pattern.compile("(" + Pattern.quote("// " + replacementKey + ": START\n") + ")(.*)(" + + Pattern.quote("// " + replacementKey + ": END\n") + ")", Pattern.DOTALL); + + final Matcher m = pat.matcher(document); + + final StringBuffer sb = new StringBuffer(document.length()); + if (m.find()) { + m.appendReplacement(sb, "$1" + Matcher.quoteReplacement(value) + "$3"); + } else { + throw new IllegalStateException("Could not find " + pat.pattern() + " in " + documentPath + ":\n\n" + document); + } + m.appendTail(sb); + return sb.toString(); + } }
