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<>();

Reply via email to