CAMEL-10774: Update summary automatic

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

Branch: refs/heads/master
Commit: 5f566e09663eda5471fd488cb2c5ea20b20a151f
Parents: 705f02d
Author: Claus Ibsen <davscl...@apache.org>
Authored: Fri Feb 3 20:51:10 2017 +0100
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Fri Feb 3 20:51:10 2017 +0100

----------------------------------------------------------------------
 docs/user-manual/en/SUMMARY.md                  |  53 ++++++---
 .../maven/packaging/PrepareUserGuideMojo.java   | 117 +++++++++++++++++++
 2 files changed, 152 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/5f566e09/docs/user-manual/en/SUMMARY.md
----------------------------------------------------------------------
diff --git a/docs/user-manual/en/SUMMARY.md b/docs/user-manual/en/SUMMARY.md
index 1aca332..0637b36 100644
--- a/docs/user-manual/en/SUMMARY.md
+++ b/docs/user-manual/en/SUMMARY.md
@@ -321,25 +321,42 @@
 
 
 
-
+<!-- others: START -->
 * Other Components
-  * [BAM (Business Activity Monitoring)](bam.adoc)
-  * [CDI](cdi.adoc)
-  * [Eclipse](eclipse.adoc)
-  * [Grape](grape.adoc)
-  * [Guice](guice.adoc)
-  * [HawtDB](hawtdb.adoc)
-  * [Hystrix](hystrix.adoc)
-  * [LevelDB](leveldb.adoc)
-  * [Jasypt](jasypt.adoc)
-  * [Kura](kura.adoc)
-  * [Ribbon](ribbon.adoc)
-  * [RX](rx.adoc)
-  * [SCR](scr.adoc)
-  * [Shiro](shiro.adoc)
-  * [Swagger Java](swagger-java.adoc)
-  * [Zipkin](zipkin.adoc)
-
+       * [Bam](bam.adoc)
+       * [Blueprint](blueprint.adoc)
+       * [Cdi](cdi.adoc)
+       * [Cxf Transport](cxf-transport.adoc)
+       * [Eclipse](eclipse.adoc)
+       * [Guice](guice.adoc)
+       * [Hawtdb](hawtdb.adoc)
+       * [Hystrix](hystrix.adoc)
+       * [Jasypt](jasypt.adoc)
+       * [Kura](kura.adoc)
+       * [Leveldb](leveldb.adoc)
+       * [Ribbon](ribbon.adoc)
+       * [Ruby](ruby.adoc)
+       * [Rx](rx.adoc)
+       * [Scala](scala.adoc)
+       * [Scr](scr.adoc)
+       * [Servletlistener](servletlistener.adoc)
+       * [Shiro](shiro.adoc)
+       * [Spring Boot](spring-boot.adoc)
+       * [Spring Cloud](spring-cloud.adoc)
+       * [Spring Dm](spring-dm.adoc)
+       * [Spring Javaconfig](spring-javaconfig.adoc)
+       * [Spring Security](spring-security.adoc)
+       * [Swagger](swagger.adoc)
+       * [Swagger Java](swagger-java.adoc)
+       * [Test](test.adoc)
+       * [Test Blueprint](test-blueprint.adoc)
+       * [Test Cdi](test-cdi.adoc)
+       * [Test Karaf](test-karaf.adoc)
+       * [Test Spring](test-spring.adoc)
+       * [Testng](testng.adoc)
+       * [Urlrewrite](urlrewrite.adoc)
+       * [Zipkin](zipkin.adoc)
+<!-- others: END -->
 
 
 <!-- dataformats: START -->

http://git-wip-us.apache.org/repos/asf/camel/blob/5f566e09/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 a7f9d96..1dc1f68 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
@@ -31,6 +31,7 @@ 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.LanguageModel;
+import org.apache.camel.maven.packaging.model.OtherModel;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -78,6 +79,13 @@ public class PrepareUserGuideMojo extends AbstractMojo {
     protected File languagesDir;
 
     /**
+     * The directory for others catalog
+     *
+     * @parameter 
default-value="${project.build.directory}/classes/org/apache/camel/catalog/others"
+     */
+    protected File othersDir;
+
+    /**
      * The directory for the user guide
      *
      * @parameter 
default-value="${project.directory}/../../../docs/user-manual/en"
@@ -101,6 +109,7 @@ public class PrepareUserGuideMojo extends AbstractMojo {
      */
     public void execute() throws MojoExecutionException, MojoFailureException {
         executeComponents();
+        executeOthers();
         executeDataFormats();
         executeLanguages();
     }
@@ -173,6 +182,50 @@ public class PrepareUserGuideMojo extends AbstractMojo {
         }
     }
 
+    protected void executeOthers() throws MojoExecutionException, 
MojoFailureException {
+        Set<File> otherFiles = new TreeSet<>();
+
+        if (othersDir != null && othersDir.isDirectory()) {
+            File[] files = othersDir.listFiles();
+            if (files != null) {
+                otherFiles.addAll(Arrays.asList(files));
+            }
+        }
+
+        try {
+            List<OtherModel> models = new ArrayList<>();
+            for (File file : otherFiles) {
+                String json = loadText(new FileInputStream(file));
+                OtherModel model = generateOtherModel(json);
+                models.add(model);
+            }
+
+            // sor the models
+            Collections.sort(models, new OtherComparator());
+
+            // the summary file has the TOC
+            File file = new File(userGuideDir, "SUMMARY.md");
+
+            // update core components
+            StringBuilder other = new StringBuilder();
+            other.append("* Other Components\n");
+            for (OtherModel model : models) {
+                String line = "\t* " + link(model) + "\n";
+                other.append(line);
+            }
+            boolean updated = updateOthers(file, other.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 executeDataFormats() throws MojoExecutionException, 
MojoFailureException {
         Set<File> dataFormatFiles = new TreeSet<>();
 
@@ -329,6 +382,40 @@ public class PrepareUserGuideMojo extends AbstractMojo {
         }
     }
 
+    private boolean updateOthers(File file, String changed) throws 
MojoExecutionException {
+        if (!file.exists()) {
+            return false;
+        }
+
+        try {
+            String text = loadText(new FileInputStream(file));
+
+            String existing = StringHelper.between(text, "<!-- others: START 
-->", "<!-- others: 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, "<!-- others: 
START -->");
+                    String after = StringHelper.after(text, "<!-- others: END 
-->");
+                    text = before + "<!-- others: START -->\n" + changed + 
"\n<!-- others: END -->" + after;
+                    writeText(file, text);
+                    return true;
+                }
+            } else {
+                getLog().warn("Cannot find markers in file " + file);
+                getLog().warn("Add the following markers");
+                getLog().warn("\t<!-- others: START -->");
+                getLog().warn("\t<!-- others: END -->");
+                return false;
+            }
+        } catch (Exception e) {
+            throw new MojoExecutionException("Error reading file " + file + " 
Reason: " + e, e);
+        }
+    }
+
     private boolean updateDataFormats(File file, String changed) throws 
MojoExecutionException {
         if (!file.exists()) {
             return false;
@@ -401,6 +488,10 @@ public class PrepareUserGuideMojo extends AbstractMojo {
         return "[" + model.getTitle() + "](" + model.getScheme() + 
"-component.adoc)";
     }
 
+    private static String link(OtherModel model) {
+        return "[" + model.getTitle() + "](" + model.getName() + ".adoc)";
+    }
+
     private static String link(DataFormatModel model) {
         // special for some data formats
         String name = asDataFormatName(model.getName());
@@ -429,6 +520,15 @@ public class PrepareUserGuideMojo extends AbstractMojo {
         }
     }
 
+    private static class OtherComparator implements Comparator<OtherModel> {
+
+        @Override
+        public int compare(OtherModel o1, OtherModel o2) {
+            // lets sort by title
+            return o1.getTitle().compareToIgnoreCase(o2.getTitle());
+        }
+    }
+
     private static class DataFormatComparator implements 
Comparator<DataFormatModel> {
 
         @Override
@@ -470,6 +570,23 @@ public class PrepareUserGuideMojo extends AbstractMojo {
         return component;
     }
 
+    private OtherModel generateOtherModel(String json) {
+        List<Map<String, String>> rows = 
JSonSchemaHelper.parseJsonSchema("other", json, false);
+
+        OtherModel other = new OtherModel();
+        other.setName(JSonSchemaHelper.getSafeValue("name", rows));
+        other.setTitle(JSonSchemaHelper.getSafeValue("title", rows));
+        other.setDescription(JSonSchemaHelper.getSafeValue("description", 
rows));
+        other.setFirstVersion(JSonSchemaHelper.getSafeValue("firstVersion", 
rows));
+        other.setLabel(JSonSchemaHelper.getSafeValue("label", rows));
+        other.setDeprecated(JSonSchemaHelper.getSafeValue("deprecated", rows));
+        other.setGroupId(JSonSchemaHelper.getSafeValue("groupId", rows));
+        other.setArtifactId(JSonSchemaHelper.getSafeValue("artifactId", rows));
+        other.setVersion(JSonSchemaHelper.getSafeValue("version", rows));
+
+        return other;
+    }
+
     private DataFormatModel generateDataFormatModel(String json) {
         List<Map<String, String>> rows = 
JSonSchemaHelper.parseJsonSchema("dataformat", json, false);
 

Reply via email to