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