You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2016/08/18 09:28:06 UTC

[2/2] camel git commit: CAMEL-9541: Keep user guide TOC up to date with components from the Camel Catalog.

CAMEL-9541: Keep user guide TOC up to date with components from the Camel Catalog.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/38941053
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/38941053
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/38941053

Branch: refs/heads/master
Commit: 38941053b7fdbbc0f84d6dbe35c95c70b7fcaeb6
Parents: 3791e12
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Aug 18 11:27:31 2016 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Aug 18 11:27:31 2016 +0200

----------------------------------------------------------------------
 docs/user-manual/en/SUMMARY.md                  | 108 +++++---
 .../maven/packaging/PrepareUserGuideMojo.java   | 252 ++++++++++++++++++-
 .../maven/packaging/ReadmeComponentMojo.java    |   2 +
 3 files changed, 329 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/38941053/docs/user-manual/en/SUMMARY.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/SUMMARY.md b/docs/user-manual/en/SUMMARY.md
index f595706..749cfc9 100644
--- a/docs/user-manual/en/SUMMARY.md
+++ b/docs/user-manual/en/SUMMARY.md
@@ -303,37 +303,87 @@
 
 
 
+<!-- dataformats: START -->
+* Data Formats
+	* [Avro](avro-dataformat.adoc)
+	* [Barcode](barcode-dataformat.adoc)
+	* [Base64](base64-dataformat.adoc)
+	* [BeanIO](beanio-dataformat.adoc)
+	* [Bindy CSV](bindy-csv-dataformat.adoc)
+	* [Bindy Fixed Length](bindy-fixed-dataformat.adoc)
+	* [Bindy Key Value Pair](bindy-kvp-dataformat.adoc)
+	* [Boon](boon-dataformat.adoc)
+	* [CSV](csv-dataformat.adoc)
+	* [Castor](castor-dataformat.adoc)
+	* [Crypto (Java Cryptographic Extension)](crypto-dataformat.adoc)
+	* [Flatpack](flatpack-dataformat.adoc)
+	* [GZip](gzip-dataformat.adoc)
+	* [HL7](hl7-dataformat.adoc)
+	* [Hessian](hessian-dataformat.adoc)
+	* [JAXB](jaxb-dataformat.adoc)
+	* [JSon GSon](json-gson-dataformat.adoc)
+	* [JSon Jackson](json-jackson-dataformat.adoc)
+	* [JSon Johnzon](json-johnzon-dataformat.adoc)
+	* [JSon XStream](json-xstream-dataformat.adoc)
+	* [JacksonXML](jacksonxml-dataformat.adoc)
+	* [Java Object Serialization](serialization-dataformat.adoc)
+	* [JiBX](jibx-dataformat.adoc)
+	* [LZF Deflate Compression](lzf-dataformat.adoc)
+	* [MIME Multipart](mime-multipart-dataformat.adoc)
+	* [PGP](pgp-dataformat.adoc)
+	* [Protobuf](protobuf-dataformat.adoc)
+	* [RSS](rss-dataformat.adoc)
+	* [SOAP](soapjaxb-dataformat.adoc)
+	* [String Encoding](string-dataformat.adoc)
+	* [Syslog](syslog-dataformat.adoc)
+	* [Tar File](tarfile-dataformat.adoc)
+	* [TidyMarkup](tidyMarkup-dataformat.adoc)
+	* [XML Beans](xmlBeans-dataformat.adoc)
+	* [XML JSon](xmljson-dataformat.adoc)
+	* [XML RPC](xmlrpc-dataformat.adoc)
+	* [XML Security](secureXML-dataformat.adoc)
+	* [XStream](xstream-dataformat.adoc)
+	* [YAML SnakeYAML](yaml-snakeyaml-dataformat.adoc)
+	* [Zip Deflate Compression](zip-dataformat.adoc)
+	* [Zip File](zipfile-dataformat.adoc)
+	* [iCal](ical-dataformat.adoc)
+	* [uniVocity CSV](univocity-csv-dataformat.adoc)
+	* [uniVocity Fixed Length](univocity-fixed-dataformat.adoc)
+	* [uniVocity TSV](univocity-tsv-dataformat.adoc)
+<!-- dataformats: END -->
+
+
+
+
+<!-- languages: START -->
+* Expression Languages
+	* [Bean method](bean-language.adoc)
+	* [Constant](constant-language.adoc)
+	* [EL](el-language.adoc)
+	* [ExchangeProperty](exchangeProperty-language.adoc)
+	* [File](file-language.adoc)
+	* [Groovy](groovy-language.adoc)
+	* [HL7 Terser](terser-language.adoc)
+	* [Header](header-language.adoc)
+	* [JSonPath](jsonpath-language.adoc)
+	* [JXPath](jxpath-language.adoc)
+	* [JavaScript](javaScript-language.adoc)
+	* [MVEL](mvel-language.adoc)
+	* [OGNL](ognl-language.adoc)
+	* [PHP](php-language.adoc)
+	* [Python](python-language.adoc)
+	* [Ref](ref-language.adoc)
+	* [Ruby](ruby-language.adoc)
+	* [SQL](sql-language.adoc)
+	* [Simple](simple-language.adoc)
+	* [SpEL](spel-language.adoc)
+	* [Tokenize](tokenize-language.adoc)
+	* [XML Tokenize](xtokenize-language.adoc)
+	* [XPath](xpath-language.adoc)
+	* [XQuery](xquery-language.adoc)
+<!-- languages: END -->
 
-* [Expression Languages](languages.adoc)
-    * [Bean Language](bean-language.adoc)
-    * [Constant](constant.adoc)
-    * [EL](juel.adoc)
-    * [Jsonpath](jsonpath.adoc)
-    * [JXPath](jxpath.adoc)
-    * [Ognl](ognl.adoc)
-    * [Ruby](ruby.adoc)
-    * [SQL](josql.adoc)
-    * [Scripting languages](scripting-languages.adoc)
 
-* Data Formats
-    * [BeanIO](beanio-dataformat.adoc)
-    * [Flatpack](flatpack-dataformat-dataformat.adoc)
-    * [Ical](ical-dataformat.adoc)
-    * [Jackson XML](jackson-xml-dataformat.adoc)
-    * [Jaxb](jaxb-dataformat.adoc)
-    * [Jibx](jibx-dataformat.adoc)
-    * [Johnzon](johnzon-dataformat.adoc)
-    * [Lzf](lzf-dataformat.adoc)
-    * [Syslog](syslog-dataformat.adoc)
-    * [SOAP](soap-dataformat.adoc)
-    * [Tagsoup](tagsoup-dataformat.adoc)
-    * [Univocity Parsers](univocity-parsers-dataformat.adoc)
-    * [XML Beans](xmlbeans-dataformat.adoc)
-    * [XML JSON](xmljson-dataformat.adoc)
-    * [XML Rpc](xmlrpc-dataformat.adoc)
-    * [XStream](xstream-dataformat.adoc)
-    * [YAML](yaml-dataformat.adoc)
-    * [Zipfile](zipfile-dataformat.adoc)
 
 * Example
     * [BAM Example](bam-example.adoc)

http://git-wip-us.apache.org/repos/asf/camel/blob/38941053/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareUserGuideMojo.java
----------------------------------------------------------------------
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareUserGuideMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareUserGuideMojo.java
index 1b27084..98dd7be 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareUserGuideMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/PrepareUserGuideMojo.java
@@ -27,14 +27,21 @@ import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
 
+import javax.xml.crypto.Data;
+
 import edu.emory.mathcs.backport.java.util.Collections;
 import org.apache.camel.maven.packaging.model.ComponentModel;
+import org.apache.camel.maven.packaging.model.DataFormatModel;
+import org.apache.camel.maven.packaging.model.DataFormatOptionModel;
+import org.apache.camel.maven.packaging.model.LanguageModel;
+import org.apache.camel.maven.packaging.model.LanguageOptionModel;
 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 static org.apache.camel.maven.packaging.JSonSchemaHelper.getSafeValue;
 import static org.apache.camel.maven.packaging.PackageHelper.loadText;
 import static org.apache.camel.maven.packaging.PackageHelper.writeText;
 
@@ -62,6 +69,20 @@ public class PrepareUserGuideMojo extends AbstractMojo {
     protected File componentsDir;
 
     /**
+     * The directory for data formats catalog
+     *
+     * @parameter default-value="${project.build.directory}/classes/org/apache/camel/catalog/dataformats"
+     */
+    protected File dataFormatsDir;
+
+    /**
+     * The directory for languages catalog
+     *
+     * @parameter default-value="${project.build.directory}/classes/org/apache/camel/catalog/languages"
+     */
+    protected File languagesDir;
+
+    /**
      * The directory for the user guide
      *
      * @parameter default-value="${project.directory}/../../../docs/user-manual/en"
@@ -85,10 +106,12 @@ public class PrepareUserGuideMojo extends AbstractMojo {
      */
     public void execute() throws MojoExecutionException, MojoFailureException {
         executeComponents();
+        executeDataFormats();
+        executeLanguages();
     }
 
     protected void executeComponents() throws MojoExecutionException, MojoFailureException {
-        Set<File> componentFiles = new TreeSet<File>();
+        Set<File> componentFiles = new TreeSet<>();
 
         if (componentsDir != null && componentsDir.isDirectory()) {
             File[] files = componentsDir.listFiles();
@@ -99,8 +122,8 @@ public class PrepareUserGuideMojo extends AbstractMojo {
 
         try {
             List<ComponentModel> models = new ArrayList<>();
-            for (File core : componentFiles) {
-                String json = loadText(new FileInputStream(core));
+            for (File file : componentFiles) {
+                String json = loadText(new FileInputStream(file));
                 ComponentModel model = generateComponentModel(json);
 
                 // filter out alternative schemas which reuses documentation
@@ -155,6 +178,96 @@ public class PrepareUserGuideMojo extends AbstractMojo {
         }
     }
 
+    protected void executeDataFormats() throws MojoExecutionException, MojoFailureException {
+        Set<File> dataFormatFiles = new TreeSet<>();
+
+        if (dataFormatsDir != null && dataFormatsDir.isDirectory()) {
+            File[] files = dataFormatsDir.listFiles();
+            if (files != null) {
+                dataFormatFiles.addAll(Arrays.asList(files));
+            }
+        }
+
+        try {
+            List<DataFormatModel> models = new ArrayList<>();
+            for (File file : dataFormatFiles) {
+                String json = loadText(new FileInputStream(file));
+                DataFormatModel model = generateDataFormatModel(json);
+                models.add(model);
+            }
+
+            // sor the models
+            Collections.sort(models, new DataFormatComparator());
+
+            // the summary file has the TOC
+            File file = new File(userGuideDir, "SUMMARY.md");
+
+            // TODO: some dataformats reuse docs, such as bindy etc.
+
+            // update data formats
+            StringBuilder dataFormats = new StringBuilder();
+            dataFormats.append("* Data Formats\n");
+            for (DataFormatModel model : models) {
+                String line = "\t* " + link(model) + "\n";
+                dataFormats.append(line);
+            }
+            boolean updated = updateDataFormats(file, dataFormats.toString());
+
+            if (updated) {
+                getLog().info("Updated user guide file: " + file);
+            } else {
+                getLog().debug("No changes to user guide file: " + file);
+            }
+
+        } catch (IOException e) {
+            throw new MojoFailureException("Error due " + e.getMessage(), e);
+        }
+    }
+
+    protected void executeLanguages() throws MojoExecutionException, MojoFailureException {
+        Set<File> languageFiles = new TreeSet<>();
+
+        if (languagesDir != null && languagesDir.isDirectory()) {
+            File[] files = languagesDir.listFiles();
+            if (files != null) {
+                languageFiles.addAll(Arrays.asList(files));
+            }
+        }
+
+        try {
+            List<LanguageModel> models = new ArrayList<>();
+            for (File file : languageFiles) {
+                String json = loadText(new FileInputStream(file));
+                LanguageModel model = generateLanguageModel(json);
+                models.add(model);
+            }
+
+            // sor the models
+            Collections.sort(models, new LanguageComparator());
+
+            // the summary file has the TOC
+            File file = new File(userGuideDir, "SUMMARY.md");
+
+            // update languages
+            StringBuilder languages = new StringBuilder();
+            languages.append("* Expression Languages\n");
+            for (LanguageModel model : models) {
+                String line = "\t* " + link(model) + "\n";
+                languages.append(line);
+            }
+            boolean updated = updateLanguages(file, languages.toString());
+
+            if (updated) {
+                getLog().info("Updated user guide file: " + file);
+            } else {
+                getLog().debug("No changes to user guide file: " + file);
+            }
+
+        } catch (IOException e) {
+            throw new MojoFailureException("Error due " + e.getMessage(), e);
+        }
+    }
+
     private boolean updateCoreComponents(File file, String changed) throws MojoExecutionException {
         if (!file.exists()) {
             return false;
@@ -223,15 +336,109 @@ public class PrepareUserGuideMojo extends AbstractMojo {
         }
     }
 
+    private boolean updateDataFormats(File file, String changed) throws MojoExecutionException {
+        if (!file.exists()) {
+            return false;
+        }
+
+        try {
+            String text = loadText(new FileInputStream(file));
+
+            String existing = StringHelper.between(text, "<!-- dataformats: START -->" , "<!-- dataformats: END -->");
+            if (existing != null) {
+                // remove leading line breaks etc
+                existing = existing.trim();
+                changed = changed.trim();
+                if (existing.equals(changed)) {
+                    return false;
+                } else {
+                    String before = StringHelper.before(text, "<!-- dataformats: START -->");
+                    String after = StringHelper.after(text, "<!-- dataformats: END -->");
+                    text = before + "\n<!-- dataformats: START -->\n" + changed + "\n<!-- dataformats: END -->\n" + after;
+                    writeText(file, text);
+                    return true;
+                }
+            } else {
+                getLog().warn("Cannot find markers in file " + file);
+                getLog().warn("Add the following markers");
+                getLog().warn("\t<!-- dataformats: START -->");
+                getLog().warn("\t<!-- dataformats: END -->");
+                return false;
+            }
+        } catch (Exception e) {
+            throw new MojoExecutionException("Error reading file " + file + " Reason: " + e, e);
+        }
+    }
+
+    private boolean updateLanguages(File file, String changed) throws MojoExecutionException {
+        if (!file.exists()) {
+            return false;
+        }
+
+        try {
+            String text = loadText(new FileInputStream(file));
+
+            String existing = StringHelper.between(text, "<!-- languages: START -->" , "<!-- languages: END -->");
+            if (existing != null) {
+                // remove leading line breaks etc
+                existing = existing.trim();
+                changed = changed.trim();
+                if (existing.equals(changed)) {
+                    return false;
+                } else {
+                    String before = StringHelper.before(text, "<!-- languages: START -->");
+                    String after = StringHelper.after(text, "<!-- languages: END -->");
+                    text = before + "\n<!-- languages: START -->\n" + changed + "\n<!-- languages: END -->\n" + after;
+                    writeText(file, text);
+                    return true;
+                }
+            } else {
+                getLog().warn("Cannot find markers in file " + file);
+                getLog().warn("Add the following markers");
+                getLog().warn("\t<!-- languages: START -->");
+                getLog().warn("\t<!-- languages: END -->");
+                return false;
+            }
+        } catch (Exception e) {
+            throw new MojoExecutionException("Error reading file " + file + " Reason: " + e, e);
+        }
+    }
+
     private static String link(ComponentModel model) {
         return "[" + model.getTitle() + "](" + model.getScheme() + "-component.adoc)";
     }
 
+    private static String link(DataFormatModel model) {
+        return "[" + model.getTitle() + "](" + model.getName() + "-dataformat.adoc)";
+    }
+
+    private static String link(LanguageModel model) {
+        return "[" + model.getTitle() + "](" + model.getName() + "-language.adoc)";
+    }
+
     private static class ComponentComparator implements Comparator<ComponentModel> {
 
         @Override
         public int compare(ComponentModel o1, ComponentModel o2) {
-            // lets sory by title
+            // lets sort by title
+            return o1.getTitle().compareTo(o2.getTitle());
+        }
+    }
+
+    private static class DataFormatComparator implements Comparator<DataFormatModel> {
+
+        @Override
+        public int compare(DataFormatModel o1, DataFormatModel o2) {
+            // lets sort by title
+            return o1.getTitle().compareTo(o2.getTitle());
+        }
+    }
+
+    private static class LanguageComparator implements Comparator<LanguageModel> {
+
+        @Override
+        public int compare(LanguageModel o1, LanguageModel o2) {
+            // lets sort by title
             return o1.getTitle().compareTo(o2.getTitle());
         }
     }
@@ -258,4 +465,41 @@ public class PrepareUserGuideMojo extends AbstractMojo {
         return component;
     }
 
+    private DataFormatModel generateDataFormatModel(String json) {
+        List<Map<String, String>> rows = JSonSchemaHelper.parseJsonSchema("dataformat", json, false);
+
+        DataFormatModel dataFormat = new DataFormatModel();
+        dataFormat.setName(JSonSchemaHelper.getSafeValue("name", rows));
+        dataFormat.setTitle(JSonSchemaHelper.getSafeValue("title", rows));
+        dataFormat.setModelName(JSonSchemaHelper.getSafeValue("modelName", rows));
+        dataFormat.setDescription(JSonSchemaHelper.getSafeValue("description", rows));
+        dataFormat.setLabel(JSonSchemaHelper.getSafeValue("label", rows));
+        dataFormat.setDeprecated(JSonSchemaHelper.getSafeValue("deprecated", rows));
+        dataFormat.setJavaType(JSonSchemaHelper.getSafeValue("javaType", rows));
+        dataFormat.setGroupId(JSonSchemaHelper.getSafeValue("groupId", rows));
+        dataFormat.setArtifactId(JSonSchemaHelper.getSafeValue("artifactId", rows));
+        dataFormat.setVersion(JSonSchemaHelper.getSafeValue("version", rows));
+
+        return dataFormat;
+    }
+
+    private LanguageModel generateLanguageModel(String json) {
+        List<Map<String, String>> rows = JSonSchemaHelper.parseJsonSchema("language", json, false);
+
+        LanguageModel language = new LanguageModel();
+        language.setTitle(JSonSchemaHelper.getSafeValue("title", rows));
+        language.setName(JSonSchemaHelper.getSafeValue("name", rows));
+        language.setModelName(JSonSchemaHelper.getSafeValue("modelName", rows));
+        language.setDescription(JSonSchemaHelper.getSafeValue("description", rows));
+        language.setLabel(JSonSchemaHelper.getSafeValue("label", rows));
+        language.setDeprecated(JSonSchemaHelper.getSafeValue("deprecated", rows));
+        language.setJavaType(JSonSchemaHelper.getSafeValue("javaType", rows));
+        language.setGroupId(JSonSchemaHelper.getSafeValue("groupId", rows));
+        language.setArtifactId(JSonSchemaHelper.getSafeValue("artifactId", rows));
+        language.setVersion(JSonSchemaHelper.getSafeValue("version", rows));
+
+        return language;
+    }
+
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/38941053/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ReadmeComponentMojo.java
----------------------------------------------------------------------
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ReadmeComponentMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ReadmeComponentMojo.java
index b94ba77..5881522 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ReadmeComponentMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ReadmeComponentMojo.java
@@ -460,6 +460,7 @@ public class ReadmeComponentMojo extends AbstractMojo {
         DataFormatModel dataFormat = new DataFormatModel();
         dataFormat.setTitle(JSonSchemaHelper.getSafeValue("title", rows));
         dataFormat.setModelName(JSonSchemaHelper.getSafeValue("modelName", rows));
+        dataFormat.setName(JSonSchemaHelper.getSafeValue("name", rows));
         dataFormat.setDescription(JSonSchemaHelper.getSafeValue("description", rows));
         dataFormat.setLabel(JSonSchemaHelper.getSafeValue("label", rows));
         dataFormat.setDeprecated(JSonSchemaHelper.getSafeValue("deprecated", rows));
@@ -497,6 +498,7 @@ public class ReadmeComponentMojo extends AbstractMojo {
         LanguageModel language = new LanguageModel();
         language.setTitle(JSonSchemaHelper.getSafeValue("title", rows));
         language.setModelName(JSonSchemaHelper.getSafeValue("modelName", rows));
+        language.setName(JSonSchemaHelper.getSafeValue("name", rows));
         language.setDescription(JSonSchemaHelper.getSafeValue("description", rows));
         language.setLabel(JSonSchemaHelper.getSafeValue("label", rows));
         language.setDeprecated(JSonSchemaHelper.getSafeValue("deprecated", rows));