Return-Path: X-Original-To: apmail-camel-commits-archive@www.apache.org Delivered-To: apmail-camel-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 7A0B4186C4 for ; Wed, 27 Jan 2016 13:31:28 +0000 (UTC) Received: (qmail 8585 invoked by uid 500); 27 Jan 2016 13:31:06 -0000 Delivered-To: apmail-camel-commits-archive@camel.apache.org Received: (qmail 8533 invoked by uid 500); 27 Jan 2016 13:31:06 -0000 Mailing-List: contact commits-help@camel.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@camel.apache.org Delivered-To: mailing list commits@camel.apache.org Received: (qmail 8524 invoked by uid 99); 27 Jan 2016 13:31:06 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 27 Jan 2016 13:31:06 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 4691FE00D6; Wed, 27 Jan 2016 13:31:06 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: davsclaus@apache.org To: commits@camel.apache.org Date: Wed, 27 Jan 2016 13:31:07 -0000 Message-Id: <3b81f83030114bb180533da14e053a4b@git.apache.org> In-Reply-To: <147218b4fc1f446fbd6233fcabcffb4a@git.apache.org> References: <147218b4fc1f446fbd6233fcabcffb4a@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [2/3] camel git commit: First cut of mvn goal to generate/update component readme.md file. Make the plugin update the existing adoc file to keep the endpoint options up to date. First cut of mvn goal to generate/update component readme.md file. Make the plugin update the existing adoc file to keep the endpoint options up to date. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/2cabc80b Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/2cabc80b Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/2cabc80b Branch: refs/heads/master Commit: 2cabc80ba6ddd12ba104d4811f5674a435dc7338 Parents: 4da48df Author: Claus Ibsen Authored: Wed Jan 27 14:30:14 2016 +0100 Committer: Claus Ibsen Committed: Wed Jan 27 14:30:56 2016 +0100 ---------------------------------------------------------------------- components/camel-ahc/src/main/docs/ahc.adoc | 33 ++++-- .../maven/packaging/ReadmeComponentMojo.java | 105 ++++++++++--------- .../maven/packaging/model/ComponentModel.java | 13 +-- .../src/main/resources/component-options.mvel | 30 +----- 4 files changed, 89 insertions(+), 92 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/2cabc80b/components/camel-ahc/src/main/docs/ahc.adoc ---------------------------------------------------------------------- diff --git a/components/camel-ahc/src/main/docs/ahc.adoc b/components/camel-ahc/src/main/docs/ahc.adoc index 5cc500f..b4b87f8 100644 --- a/components/camel-ahc/src/main/docs/ahc.adoc +++ b/components/camel-ahc/src/main/docs/ahc.adoc @@ -77,19 +77,30 @@ The AHC component supports 12 endpoint options which are listed below: AhcComponent Options ^^^^^^^^^^^^^^^^^^^^ -[width="100%",cols="10%,10%,80%",options="header",] + + + + + +// component options: START +The AHC component supports 6 options which are listed below. + + +[width="100%",cols="2s,1m,8",options="header"] |======================================================================= -|Name |Default Value |Description -|`client` |`null` |To use a custom `com.ning.http.client.AsyncHttpClient`. -|`clientConfig` |`null` |To configure the `AsyncHttpClient` to use a custom -`com.ning.http.client.AsyncHttpClientConfig`. -|`binding` |`null` |To use a custom `org.apache.camel.component.ahc.AhcBinding`. -|`sslContextParameters` |`null` |*Camel 2.9:* To configure custom SSL/TLS configuration options at the -component level.  See  link:ahc.html[Using the JSSE Configuration -Utility] for more details.  Note that configuring this option will -override any SSL/TLS configuration options provided through the -clientConfig option at the endpoint or component level. +| Name | Java Type | Description +| client | AsyncHttpClient | To use a custom AsyncHttpClient +| binding | AhcBinding | To use a custom AhcBinding which allows to control how to bind between AHC and Camel. +| clientConfig | AsyncHttpClientConfig | To configure the AsyncHttpClient to use a custom com.ning.http.client.AsyncHttpClientConfig instance. +| sslContextParameters | SSLContextParameters | Reference to a org.apache.camel.util.jsse.SSLContextParameters in the Registry. Note that configuring this option will override any SSL/TLS configuration options provided through the clientConfig option at the endpoint or component level. +| allowJavaSerializedObject | boolean | Whether to allow java serialization when a request uses context-type=application/x-java-serialized-object This is by default turned off. If you enable this then be aware that Java will deserialize the incoming data from the request to Java and that can be a potential security risk. +| headerFilterStrategy | HeaderFilterStrategy | To use a custom HeaderFilterStrategy to filter header to and from Camel message. |======================================================================= +// component options: END + + + + Notice that setting any of the options on the `AhcComponent` will http://git-wip-us.apache.org/repos/asf/camel/blob/2cabc80b/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 1276cf4..a6ed564 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 @@ -18,7 +18,6 @@ package org.apache.camel.maven.packaging; import java.io.File; import java.io.FileInputStream; -import java.io.FilenameFilter; import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -91,33 +90,69 @@ public class ReadmeComponentMojo extends AbstractMojo { // only if there is components we should update the documentation files if (!componentNames.isEmpty()) { getLog().info("Found " + componentNames.size() + " components"); - for (String componentName : componentNames) { String json = loadComponentJson(jsonFiles, componentName); if (json != null) { - - // file File file = new File(docDir, componentName + ".adoc"); - ComponentModel model = generateComponentModel(componentName, json); - String header = templateComponentHeader(model); - String options = templateComponentOptions(model); - String options2 = templateEndpointOptions(model); -// getLog().info(header); -// getLog().info(options); -// getLog().info(options2); + boolean updated = false; + if (model.getComponentOptions() != null) { + String options = templateComponentOptions(model); + updated |= updateComponentOptions(file, options); + } + if (model.getEndpointOptions() != null) { + String options = templateEndpointOptions(model); + updated |= updateEndpointOptions(file, options); + } - // update the endpoint options - updateEndpointOptions(file, options2); + if (updated) { + getLog().info("Updated file: " + file); + } else { + getLog().info("No changes to file: " + file); + } } } } } - private void updateEndpointOptions(File file, String changed) throws MojoExecutionException { + private boolean updateComponentOptions(File file, String changed) throws MojoExecutionException { if (!file.exists()) { - return; + return false; + } + + try { + String text = loadText(new FileInputStream(file)); + + String existing = StringHelper.between(text, "// component options: START", "// component options: 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, "// component options: START"); + String after = StringHelper.after(text, "// component options: END"); + text = before + "\n// component options: START\n" + changed + "\n// component options: 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// component options: START"); + getLog().warn("\t// component options: END"); + return false; + } + } catch (Exception e) { + throw new MojoExecutionException("Error reading file " + file + " Reason: " + e, e); + } + } + + private boolean updateEndpointOptions(File file, String changed) throws MojoExecutionException { + if (!file.exists()) { + return false; } try { @@ -129,19 +164,20 @@ public class ReadmeComponentMojo extends AbstractMojo { existing = existing.trim(); changed = changed.trim(); if (existing.equals(changed)) { - getLog().info("No changes to file: " + file); + return false; } else { - getLog().info("Updating file: " + file); String before = StringHelper.before(text, "// endpoint options: START"); String after = StringHelper.after(text, "// endpoint options: END"); text = before + "\n// endpoint options: START\n" + changed + "\n// endpoint options: 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// endpoint options: START"); getLog().warn("\t// endpoint options: END"); + return false; } } catch (Exception e) { throw new MojoExecutionException("Error reading file " + file + " Reason: " + e, e); @@ -184,7 +220,6 @@ public class ReadmeComponentMojo extends AbstractMojo { component.setVersion(JSonSchemaHelper.getSafeValue("version", rows)); rows = JSonSchemaHelper.parseJsonSchema("componentProperties", json, true); - List componentOptions = new ArrayList(); for (Map row : rows) { ComponentOptionModel option = new ComponentOptionModel(); option.setName(getSafeValue("name", row)); @@ -193,12 +228,10 @@ public class ReadmeComponentMojo extends AbstractMojo { option.setJavaType(getSafeValue("javaType", row)); option.setDeprecated(getSafeValue("deprecated", row)); option.setDescription(getSafeValue("description", row)); - componentOptions.add(option); + component.addComponentOption(option); } - component.setComponentOptions(componentOptions); rows = JSonSchemaHelper.parseJsonSchema("properties", json, true); - List endpointOptions = new ArrayList(); for (Map row : rows) { EndpointOptionModel option = new EndpointOptionModel(); option.setName(getSafeValue("name", row)); @@ -213,16 +246,13 @@ public class ReadmeComponentMojo extends AbstractMojo { option.setDeprecated(getSafeValue("deprecated", row)); option.setDefaultValue(getSafeValue("defaultValue", row)); option.setDescription(getSafeValue("description", row)); - // lets put required in the description if ("true".equals(option.getRequired())) { String desc = "*Required* " + option.getDescription(); option.setDescription(desc); } - - endpointOptions.add(option); + component.addEndpointOption(option); } - component.setEndpointOptions(endpointOptions); return component; } @@ -285,29 +315,4 @@ public class ReadmeComponentMojo extends AbstractMojo { return componentNames; } - private File initReadMeFile() throws MojoExecutionException { - File readmeDir = new File(buildDir, ".."); - File readmeFile = new File(readmeDir, "readme.md"); - - // see if a file with name readme.md exists in any kind of case - String[] names = readmeDir.list(new FilenameFilter() { - @Override - public boolean accept(File dir, String name) { - return "readme.md".equalsIgnoreCase(name); - } - }); - if (names != null && names.length == 1) { - readmeFile = new File(readmeDir, names[0]); - } - - boolean exists = readmeFile.exists(); - if (exists) { - getLog().info("Using existing " + readmeFile.getName() + " file"); - } else { - getLog().info("Creating new readme.md file"); - } - - return readmeFile; - } - } http://git-wip-us.apache.org/repos/asf/camel/blob/2cabc80b/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 045e227..38c5a8e 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 @@ -16,6 +16,7 @@ */ package org.apache.camel.maven.packaging.model; +import java.util.ArrayList; import java.util.List; public class ComponentModel { @@ -34,8 +35,8 @@ public class ComponentModel { private String groupId; private String artifactId; private String version; - private List componentOptions; - private List endpointOptions; + private final List componentOptions = new ArrayList(); + private final List endpointOptions = new ArrayList(); public String getKind() { return kind; @@ -153,16 +154,16 @@ public class ComponentModel { return componentOptions; } - public void setComponentOptions(List componentOptions) { - this.componentOptions = componentOptions; + public void addComponentOption(ComponentOptionModel option) { + componentOptions.add(option); } public List getEndpointOptions() { return endpointOptions; } - public void setEndpointOptions(List endpointOptions) { - this.endpointOptions = endpointOptions; + public void addEndpointOption(EndpointOptionModel option) { + endpointOptions.add(option); } public String getShortJavaType() { http://git-wip-us.apache.org/repos/asf/camel/blob/2cabc80b/tooling/maven/camel-package-maven-plugin/src/main/resources/component-options.mvel ---------------------------------------------------------------------- diff --git a/tooling/maven/camel-package-maven-plugin/src/main/resources/component-options.mvel b/tooling/maven/camel-package-maven-plugin/src/main/resources/component-options.mvel index 2fef2fa..394e49c 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/resources/component-options.mvel +++ b/tooling/maven/camel-package-maven-plugin/src/main/resources/component-options.mvel @@ -1,31 +1,11 @@ -### Component options - @if{componentOptions.isEmpty()} The @{title} component has no options. @else{} The @{title} component supports @{componentOptions.size()} options which are listed below. - -| Name | Java Type | Description | -| ---- | --------- | ----------- | -@foreach{row : componentOptions}| @{row.name} | `@{row.shortJavaType}` | @{row.description} | @end{} -#### Configuring component options - -The @{title} component can be configured using Java code as shown: - -```java - @{shortJavaType} @{scheme} = camelContext.getComponent("@{scheme}", @{shortJavaType}.class); - @{scheme}.setFoo(...); - @{scheme}.setBar(...); -``` - -And in XML you can configure the @{title} component as a as shown: - -```xml - - - - -``` -@end{} +[width="100%",cols="2s,1m,8",options="header"] +|======================================================================= +| Name | Java Type | Description +@foreach{row : componentOptions}| @{row.name} | @{row.shortJavaType} | @{row.description} +@end{}|=======================================================================