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