CAMEL-10655: Camel catalog - Include html copies of adoc documentation
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/1ce745ba Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/1ce745ba Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/1ce745ba Branch: refs/heads/master Commit: 1ce745ba1c78fb3b0f2e3004c2960f289c6e8ef3 Parents: 482825f Author: Claus Ibsen <davscl...@apache.org> Authored: Tue Dec 27 20:06:45 2016 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Tue Dec 27 20:08:23 2016 +0100 ---------------------------------------------------------------------- parent/pom.xml | 1 + .../org/apache/camel/catalog/CamelCatalog.java | 24 ++++ .../camel/catalog/DefaultCamelCatalog.java | 144 +++++++++++++++++++ .../maven/camel-package-maven-plugin/pom.xml | 7 + .../maven/packaging/PrepareCatalogMojo.java | 25 ++++ 5 files changed, 201 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/1ce745ba/parent/pom.xml ---------------------------------------------------------------------- diff --git a/parent/pom.xml b/parent/pom.xml index 475f535..2e21057 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -56,6 +56,7 @@ <arquillian-container-se-managed-version>1.0.0.Final</arquillian-container-se-managed-version> <arquillian-version>1.1.11.Final</arquillian-version> <arquillian-weld-embedded-version>2.0.0.Beta4</arquillian-weld-embedded-version> + <asciidoctorj-version>1.5.4.1</asciidoctorj-version> <asm-version>5.0.4</asm-version> <aspectj-version>1.8.9</aspectj-version> <asterisk-java-version>1.0.0-final</asterisk-java-version> http://git-wip-us.apache.org/repos/asf/camel/blob/1ce745ba/platforms/catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java index 3c63ac5..fa2cb3e 100644 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java +++ b/platforms/catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java @@ -210,6 +210,14 @@ public interface CamelCatalog { String componentAsciiDoc(String name); /** + * Returns the component documentation as HTML format. + * + * @param name the component name + * @return component documentation in html format. + */ + String componentHtmlDoc(String name); + + /** * Returns the data format documentation as Ascii doc format. * * @param name the data format name @@ -218,6 +226,14 @@ public interface CamelCatalog { String dataFormatAsciiDoc(String name); /** + * Returns the data format documentation as HTML format. + * + * @param name the data format name + * @return data format documentation in HTML format. + */ + String dataFormatHtmlDoc(String name); + + /** * Returns the language documentation as Ascii doc format. * * @param name the language name @@ -226,6 +242,14 @@ public interface CamelCatalog { String languageAsciiDoc(String name); /** + * Returns the language documentation as HTML format. + * + * @param name the language name + * @return language documentation in HTML format. + */ + String languageHtmlDoc(String name); + + /** * Find all the unique label names all the components are using. * * @return a set of all the labels. http://git-wip-us.apache.org/repos/asf/camel/blob/1ce745ba/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java index 0292f2b..7f774fe 100644 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java +++ b/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java @@ -600,6 +600,24 @@ public class DefaultCamelCatalog implements CamelCatalog { return answer; } + @Override + public String componentHtmlDoc(String name) { + String answer = doComponentHtmlDoc(name); + if (answer == null) { + // maybe the name is an alternative scheme name, and then we need to find the component that + // has the name as alternative, and use the first scheme as the name to find the documentation + List<String> names = findComponentNames(); + for (String alternative : names) { + String schemes = getAlternativeComponentName(alternative); + if (schemes != null && schemes.contains(name)) { + String first = schemes.split(",")[0]; + return componentHtmlDoc(first); + } + } + } + return answer; + } + private String getAlternativeComponentName(String componentName) { String json = componentJSonSchema(componentName); if (json != null) { @@ -659,6 +677,52 @@ public class DefaultCamelCatalog implements CamelCatalog { return answer; } + private String doComponentHtmlDoc(String name) { + // special for mail component + if (name.equals("imap") || name.equals("imaps") || name.equals("pop3") || name.equals("pop3s") || name.equals("smtp") || name.equals("smtps")) { + name = "mail"; + } + + String file = DOC_DIR + "/" + name + "-component.html"; + + String answer = null; + if (caching) { + answer = (String) cache.get("component-" + file); + } + + if (answer == null) { + InputStream is = versionManager.getResourceAsStream(file); + if (is != null) { + try { + answer = CatalogHelper.loadText(is); + } catch (IOException e) { + // ignore + } + } else { + // its maybe a third party so try load it + String className = extraComponents.get(name); + if (className != null) { + String packageName = className.substring(0, className.lastIndexOf('.')); + packageName = packageName.replace('.', '/'); + String path = packageName + "/" + name + "-component.html"; + is = versionManager.getResourceAsStream(path); + if (is != null) { + try { + answer = CatalogHelper.loadText(is); + } catch (IOException e) { + // ignore + } + } + } + } + if (caching) { + cache.put("component-" + file, answer); + } + } + + return answer; + } + @Override public String dataFormatAsciiDoc(String name) { // special for some name data formats @@ -709,6 +773,55 @@ public class DefaultCamelCatalog implements CamelCatalog { } @Override + public String dataFormatHtmlDoc(String name) { + // special for some name data formats + if (name.startsWith("bindy")) { + name = "bindy"; + } else if (name.startsWith("univocity")) { + name = "univocity"; + } + + String file = DOC_DIR + "/" + name + "-dataformat.html"; + + String answer = null; + if (caching) { + answer = (String) cache.get("dataformat-" + file); + } + + if (answer == null) { + InputStream is = versionManager.getResourceAsStream(file); + if (is != null) { + try { + answer = CatalogHelper.loadText(is); + } catch (IOException e) { + // ignore + } + } else { + // its maybe a third party so try load it + String className = extraDataFormats.get(name); + if (className != null) { + String packageName = className.substring(0, className.lastIndexOf('.')); + packageName = packageName.replace('.', '/'); + String path = packageName + "/" + name + "-dataformat.html"; + is = versionManager.getResourceAsStream(path); + if (is != null) { + try { + answer = CatalogHelper.loadText(is); + } catch (IOException e) { + // ignore + } + } + } + } + if (caching) { + cache.put("dataformat-" + file, answer); + } + } + + return answer; + } + + @Override public String languageAsciiDoc(String name) { // if we try to look method then its in the bean.adoc file if ("method".equals(name)) { @@ -740,6 +853,37 @@ public class DefaultCamelCatalog implements CamelCatalog { } @Override + public String languageHtmlDoc(String name) { + // if we try to look method then its in the bean.html file + if ("method".equals(name)) { + name = "bean"; + } + + String file = DOC_DIR + "/" + name + "-language.html"; + + String answer = null; + if (caching) { + answer = (String) cache.get("language-" + file); + } + + if (answer == null) { + InputStream is = versionManager.getResourceAsStream(file); + if (is != null) { + try { + answer = CatalogHelper.loadText(is); + } catch (IOException e) { + // ignore + } + } + if (caching) { + cache.put("language-" + file, answer); + } + } + + return answer; + } + + @Override @SuppressWarnings("unchecked") public Set<String> findModelLabels() { SortedSet<String> answer = null; http://git-wip-us.apache.org/repos/asf/camel/blob/1ce745ba/tooling/maven/camel-package-maven-plugin/pom.xml ---------------------------------------------------------------------- diff --git a/tooling/maven/camel-package-maven-plugin/pom.xml b/tooling/maven/camel-package-maven-plugin/pom.xml index 24fc0ff..c702518 100644 --- a/tooling/maven/camel-package-maven-plugin/pom.xml +++ b/tooling/maven/camel-package-maven-plugin/pom.xml @@ -98,6 +98,13 @@ <version>${gson-version}</version> </dependency> + <!-- asciidoc to convert adoc to html files --> + <dependency> + <groupId>org.asciidoctor</groupId> + <artifactId>asciidoctorj</artifactId> + <version>${asciidoctorj-version}</version> + </dependency> + <!-- roaster to create java source for Spring Boot auto configuration support --> <dependency> <groupId>org.jboss.forge.roaster</groupId> http://git-wip-us.apache.org/repos/asf/camel/blob/1ce745ba/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareCatalogMojo.java ---------------------------------------------------------------------- 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 584a2a2..4b610f9 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 @@ -24,6 +24,7 @@ import java.io.IOException; import java.nio.channels.FileChannel; import java.util.ArrayList; import java.util.Collections; +import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; @@ -34,11 +35,15 @@ import java.util.TreeSet; import java.util.regex.Matcher; import java.util.regex.Pattern; +import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap; +import org.apache.commons.io.FileUtils; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.project.MavenProject; import org.apache.maven.project.MavenProjectHelper; +import org.asciidoctor.Asciidoctor; +import org.asciidoctor.OptionsBuilder; import static org.apache.camel.maven.packaging.PackageHelper.loadText; @@ -799,6 +804,11 @@ public class PrepareCatalogMojo extends AbstractMojo { // make sure to create out dir documentsOutDir.mkdirs(); + // use ascii doctor to convert the adoc files to html so we have documentation in this format as well + Asciidoctor asciidoctor = Asciidoctor.Factory.create(); + + int converted = 0; + for (File file : adocFiles) { File to = new File(documentsOutDir, file.getName()); if (to.exists()) { @@ -810,6 +820,21 @@ public class PrepareCatalogMojo extends AbstractMojo { } catch (IOException e) { throw new MojoFailureException("Cannot copy file from " + file + " -> " + to, e); } + + // convert adoc to html as well + if (file.getName().endsWith(".adoc")) { + String newName = file.getName().substring(0, file.getName().length() - 5) + ".html"; + File toHtml = new File(documentsOutDir, newName); + + getLog().debug("Converting ascii document to html -> " + toHtml); + asciidoctor.convertFile(file, OptionsBuilder.options().toFile(toHtml)); + + converted++; + } + } + + if (converted > 0) { + getLog().info("Converted " + converted + " ascii documents to HTML"); } Set<String> docs = new LinkedHashSet<>();