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/01/27 14:31:07 UTC
[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 <da...@apache.org>
Authored: Wed Jan 27 14:30:14 2016 +0100
Committer: Claus Ibsen <da...@apache.org>
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<ComponentOptionModel> componentOptions = new ArrayList<ComponentOptionModel>();
for (Map<String, String> 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<EndpointOptionModel> endpointOptions = new ArrayList<EndpointOptionModel>();
for (Map<String, String> 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<ComponentOptionModel> componentOptions;
- private List<EndpointOptionModel> endpointOptions;
+ private final List<ComponentOptionModel> componentOptions = new ArrayList<ComponentOptionModel>();
+ private final List<EndpointOptionModel> endpointOptions = new ArrayList<EndpointOptionModel>();
public String getKind() {
return kind;
@@ -153,16 +154,16 @@ public class ComponentModel {
return componentOptions;
}
- public void setComponentOptions(List<ComponentOptionModel> componentOptions) {
- this.componentOptions = componentOptions;
+ public void addComponentOption(ComponentOptionModel option) {
+ componentOptions.add(option);
}
public List<EndpointOptionModel> getEndpointOptions() {
return endpointOptions;
}
- public void setEndpointOptions(List<EndpointOptionModel> 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 <bean> as shown:
-
-```xml
- <bean id="@{scheme}" class="@{javaType}">
- <property name="foo" value="..."/>
- <property name="bar" value="..."/>
- </bean>
-```
-@end{}
+[width="100%",cols="2s,1m,8",options="header"]
+|=======================================================================
+| Name | Java Type | Description
+@foreach{row : componentOptions}| @{row.name} | @{row.shortJavaType} | @{row.description}
+@end{}|=======================================================================