CAMEL-9541: Component docs. Output if an endpoint has alternative schemes. 
Readme file for components should not report missing if its alternative scheme 
as its documented in the main readme file.


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

Branch: refs/heads/master
Commit: 814b6f713ea95812e19e12bd240c1df7ca8f77f7
Parents: 99b08a0
Author: Claus Ibsen <davscl...@apache.org>
Authored: Wed Aug 17 11:56:45 2016 +0200
Committer: Claus Ibsen <davscl...@apache.org>
Committed: Wed Aug 17 11:56:45 2016 +0200

----------------------------------------------------------------------
 .../tools/apt/EndpointAnnotationProcessor.java  | 29 +++++++++++++++----
 .../maven/packaging/PrepareCatalogMojo.java     | 30 ++++++++++++++++++--
 .../maven/packaging/ReadmeComponentMojo.java    | 10 +++++++
 .../maven/packaging/model/ComponentModel.java   |  9 ++++++
 4 files changed, 69 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/814b6f71/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
----------------------------------------------------------------------
diff --git 
a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
 
b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
index ffeb73b..990c2aa 100644
--- 
a/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
+++ 
b/tooling/apt/src/main/java/org/apache/camel/tools/apt/EndpointAnnotationProcessor.java
@@ -45,6 +45,7 @@ import org.apache.camel.spi.UriEndpoint;
 import org.apache.camel.spi.UriParam;
 import org.apache.camel.spi.UriParams;
 import org.apache.camel.spi.UriPath;
+import org.apache.camel.tools.apt.helper.CollectionStringBuffer;
 import org.apache.camel.tools.apt.helper.EndpointHelper;
 import org.apache.camel.tools.apt.helper.JsonSchemaHelper;
 import org.apache.camel.tools.apt.helper.Strings;
@@ -119,7 +120,7 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
                     Func1<PrintWriter, Void> handler = new Func1<PrintWriter, 
Void>() {
                         @Override
                         public Void call(PrintWriter writer) {
-                            writeHtmlDocumentation(writer, roundEnv, 
classElement, uriEndpoint, aliasTitle, alias, extendsAlias, label);
+                            writeHtmlDocumentation(writer, roundEnv, 
classElement, uriEndpoint, aliasTitle, alias, extendsAlias, label, schemes);
                             return null;
                         }
                     };
@@ -130,7 +131,7 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
                     handler = new Func1<PrintWriter, Void>() {
                         @Override
                         public Void call(PrintWriter writer) {
-                            writeJSonSchemeDocumentation(writer, roundEnv, 
classElement, uriEndpoint, aliasTitle, alias, extendsAlias, label);
+                            writeJSonSchemeDocumentation(writer, roundEnv, 
classElement, uriEndpoint, aliasTitle, alias, extendsAlias, label, schemes);
                             return null;
                         }
                     };
@@ -141,7 +142,7 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
     }
 
     protected void writeHtmlDocumentation(PrintWriter writer, RoundEnvironment 
roundEnv, TypeElement classElement, UriEndpoint uriEndpoint,
-                                          String title, String scheme, String 
extendsScheme, String label) {
+                                          String title, String scheme, String 
extendsScheme, String label, String[] schemes) {
         // gather component information
         ComponentModel componentModel = findComponentProperties(roundEnv, 
uriEndpoint, classElement, title, scheme, extendsScheme, label);
 
@@ -160,6 +161,14 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
         if (alternativeSyntax != null) {
             writer.println("<b>Alternative Syntax:</b> " + alternativeSyntax + 
"<br/>");
         }
+        // the first scheme is the regular so only output if there is 
alternatives
+        if (schemes != null && schemes.length > 1) {
+            CollectionStringBuffer csb = new CollectionStringBuffer(",");
+            for (String altScheme : schemes) {
+                csb.append(altScheme);
+            }
+            writer.println("<b>Alternative Schemes:</b> " + csb.toString() + 
"<br/>");
+        }
         writer.println("<b>Description:</b> " + description + "<br/>");
         writer.println("<b>Deprecated:</b>" + componentModel.isDeprecated() + 
"<br/>");
         if (componentModel.isConsumerOnly()) {
@@ -201,7 +210,7 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
     }
 
     protected void writeJSonSchemeDocumentation(PrintWriter writer, 
RoundEnvironment roundEnv, TypeElement classElement, UriEndpoint uriEndpoint,
-                                                String title, String scheme, 
String extendsScheme, String label) {
+                                                String title, String scheme, 
String extendsScheme, String label, String[] schemes) {
         // gather component information
         ComponentModel componentModel = findComponentProperties(roundEnv, 
uriEndpoint, classElement, title, scheme, extendsScheme, label);
 
@@ -217,12 +226,12 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
 
         findClassProperties(writer, roundEnv, componentModel, endpointPaths, 
endpointOptions, classElement, "", uriEndpoint.excludeProperties());
 
-        String json = createParameterJsonSchema(componentModel, 
componentOptions, endpointPaths, endpointOptions);
+        String json = createParameterJsonSchema(componentModel, 
componentOptions, endpointPaths, endpointOptions, schemes);
         writer.println(json);
     }
 
     public String createParameterJsonSchema(ComponentModel componentModel, 
Set<ComponentOption> componentOptions,
-                                            Set<EndpointPath> endpointPaths, 
Set<EndpointOption> endpointOptions) {
+                                            Set<EndpointPath> endpointPaths, 
Set<EndpointOption> endpointOptions, String[] schemes) {
         StringBuilder buffer = new StringBuilder("{");
         // component model
         buffer.append("\n \"component\": {");
@@ -231,6 +240,14 @@ public class EndpointAnnotationProcessor extends 
AbstractProcessor {
         if (!Strings.isNullOrEmpty(componentModel.getExtendsScheme())) {
             buffer.append("\n    \"extendsScheme\": 
\"").append(componentModel.getExtendsScheme()).append("\",");
         }
+        // the first scheme is the regular so only output if there is 
alternatives
+        if (schemes != null && schemes.length > 1) {
+            CollectionStringBuffer csb = new CollectionStringBuffer(",");
+            for (String altScheme : schemes) {
+                csb.append(altScheme);
+            }
+            buffer.append("\n    \"alternativeSchemes\": 
\"").append(csb.toString()).append("\",");
+        }
         buffer.append("\n    \"syntax\": 
\"").append(componentModel.getSyntax()).append("\",");
         if (componentModel.getAlternativeSyntax() != null) {
             buffer.append("\n    \"alternativeSyntax\": 
\"").append(componentModel.getAlternativeSyntax()).append("\",");

http://git-wip-us.apache.org/repos/asf/camel/blob/814b6f71/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 4e357df..9dcea24 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.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
@@ -376,6 +377,8 @@ public class PrepareCatalogMojo extends AbstractMojo {
         // make sure to create out dir
         componentsOutDir.mkdirs();
 
+        Set<String> alternativeSchemes = new HashSet<>();
+
         for (File file : jsonFiles) {
             File to = new File(componentsOutDir, file.getName());
             if (to.exists()) {
@@ -425,7 +428,6 @@ public class PrepareCatalogMojo extends AbstractMojo {
                 rows = JSonSchemaHelper.parseJsonSchema("properties", text, 
true);
                 for (Map<String, String> row : rows) {
                     String label = row.get("label");
-
                     if (label != null && !label.isEmpty()) {
                         String[] parts = label.split(",");
                         for (String part : parts) {
@@ -440,12 +442,26 @@ public class PrepareCatalogMojo extends AbstractMojo {
                     unlabeledOptions.add(name);
                 }
 
+                // remember alternative schemes
+                rows = JSonSchemaHelper.parseJsonSchema("component", text, 
false);
+                for (Map<String, String> row : rows) {
+                    String alternativeScheme = row.get("alternativeSchemes");
+                    if (alternativeScheme != null && 
!alternativeScheme.isEmpty()) {
+                        String[] parts = alternativeScheme.split(",");
+                        for (int i = 1; i < parts.length; i++) {
+                            // skip first as that is the regular scheme
+                            String part = parts[i];
+                            alternativeSchemes.add(part);
+                        }
+                    }
+                }
+
             } catch (IOException e) {
                 // ignore
             }
         }
 
-        Set<String> answer = new LinkedHashSet<>();
+        Set<String> componentNames = new LinkedHashSet<>();
 
         File all = new File(componentsOutDir, "../components.properties");
         try {
@@ -468,7 +484,7 @@ public class PrepareCatalogMojo extends AbstractMojo {
                 fos.write("\n".getBytes());
 
                 // remember component name
-                answer.add(name);
+                componentNames.add(name);
             }
 
             fos.close();
@@ -479,6 +495,14 @@ public class PrepareCatalogMojo extends AbstractMojo {
 
         printComponentsReport(jsonFiles, duplicateJsonFiles, 
missingComponents, usedComponentLabels, usedOptionLabels, unlabeledOptions);
 
+        // filter out duplicate component names that are alternative scheme 
names
+        Set<String> answer = new LinkedHashSet<>();
+        for (String componentName : componentNames) {
+            if (!alternativeSchemes.contains(componentName)) {
+                answer.add(componentName);
+            }
+        }
+
         return answer;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/814b6f71/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 73f1d82..b94ba77 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
@@ -43,6 +43,7 @@ import org.sonatype.plexus.build.incremental.BuildContext;
 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;
+import static org.apache.camel.maven.packaging.StringHelper.isEmpty;
 
 /**
  * Generate or updates the component/dataformat/language readme.md file in the 
project root directory.
@@ -106,6 +107,14 @@ public class ReadmeComponentMojo extends AbstractMojo {
                     File file = new File(docDir, componentName + 
"-component.adoc");
                     ComponentModel model = 
generateComponentModel(componentName, json);
 
+                    // we only want the first scheme as the alternatives do 
not have their own readme file
+                    if (!isEmpty(model.getAlternativeSchemes())) {
+                        String first = 
model.getAlternativeSchemes().split(",")[0];
+                        if (!model.getScheme().equals(first)) {
+                            continue;
+                        }
+                    }
+
                     boolean exists = file.exists();
                     boolean updated = false;
                     if (model.getComponentOptions() != null) {
@@ -395,6 +404,7 @@ public class ReadmeComponentMojo extends AbstractMojo {
         component.setScheme(JSonSchemaHelper.getSafeValue("scheme", rows));
         component.setSyntax(JSonSchemaHelper.getSafeValue("syntax", rows));
         
component.setAlternativeSyntax(JSonSchemaHelper.getSafeValue("alternativeSyntax",
 rows));
+        
component.setAlternativeSchemes(JSonSchemaHelper.getSafeValue("alternativeSchemes",
 rows));
         component.setTitle(JSonSchemaHelper.getSafeValue("title", rows));
         component.setDescription(JSonSchemaHelper.getSafeValue("description", 
rows));
         component.setLabel(JSonSchemaHelper.getSafeValue("label", rows));

http://git-wip-us.apache.org/repos/asf/camel/blob/814b6f71/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/model/ComponentModel.java
----------------------------------------------------------------------
diff --git 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/model/ComponentModel.java
 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/model/ComponentModel.java
index 38c5a8e..9e50801 100644
--- 
a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/model/ComponentModel.java
+++ 
b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/model/ComponentModel.java
@@ -25,6 +25,7 @@ public class ComponentModel {
     private String scheme;
     private String syntax;
     private String alternativeSyntax;
+    private String alternativeSchemes;
     private String title;
     private String description;
     private String label;
@@ -70,6 +71,14 @@ public class ComponentModel {
         this.alternativeSyntax = alternativeSyntax;
     }
 
+    public String getAlternativeSchemes() {
+        return alternativeSchemes;
+    }
+
+    public void setAlternativeSchemes(String alternativeSchemes) {
+        this.alternativeSchemes = alternativeSchemes;
+    }
+
     public String getTitle() {
         return title;
     }

Reply via email to