First cut of mvn goal to generate/update component readme.md file
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/973af27e Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/973af27e Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/973af27e Branch: refs/heads/master Commit: 973af27e3d4d366c57f15202f6f5f5199f3babd9 Parents: 1001f1a Author: Claus Ibsen <[email protected]> Authored: Wed Dec 30 09:03:23 2015 +0100 Committer: Claus Ibsen <[email protected]> Committed: Tue Jan 26 19:45:24 2016 +0100 ---------------------------------------------------------------------- .../maven/camel-package-maven-plugin/pom.xml | 6 + .../camel/maven/packaging/JSonSchemaHelper.java | 8 + .../maven/packaging/ReadmeComponentMojo.java | 76 +++++++--- .../maven/packaging/model/ComponentModel.java | 149 +++++++++++++++++++ .../packaging/model/ComponentOptionModel.java | 75 ++++++++++ .../src/main/resources/component-header.ftl | 22 +++ .../src/main/resources/component-options.ftl | 4 + 7 files changed, 318 insertions(+), 22 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/973af27e/tooling/maven/camel-package-maven-plugin/pom.xml ---------------------------------------------------------------------- diff --git a/tooling/maven/camel-package-maven-plugin/pom.xml b/tooling/maven/camel-package-maven-plugin/pom.xml index 1129663..68920e9 100644 --- a/tooling/maven/camel-package-maven-plugin/pom.xml +++ b/tooling/maven/camel-package-maven-plugin/pom.xml @@ -44,6 +44,12 @@ <dependencies> <dependency> + <groupId>org.freemarker</groupId> + <artifactId>freemarker</artifactId> + <version>${freemarker-version}</version> + </dependency> + + <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-core</artifactId> </dependency> http://git-wip-us.apache.org/repos/asf/camel/blob/973af27e/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/JSonSchemaHelper.java ---------------------------------------------------------------------- diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/JSonSchemaHelper.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/JSonSchemaHelper.java index 9b1c1a2..ea17772 100644 --- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/JSonSchemaHelper.java +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/JSonSchemaHelper.java @@ -122,4 +122,12 @@ public final class JSonSchemaHelper { return null; } + public static String getValue(String key, Map<String, String> rows) { + String value = rows.get(key); + if (value != null) { + return value; + } + return null; + } + } http://git-wip-us.apache.org/repos/asf/camel/blob/973af27e/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 e1c2f23..59c5f6d 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 @@ -20,13 +20,17 @@ import java.io.File; import java.io.FileInputStream; import java.io.FilenameFilter; import java.io.IOException; -import java.io.OutputStream; +import java.io.StringWriter; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; +import freemarker.template.Configuration; +import freemarker.template.Template; +import org.apache.camel.maven.packaging.model.ComponentModel; +import org.apache.camel.maven.packaging.model.ComponentOptionModel; import org.apache.maven.model.Resource; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; @@ -85,7 +89,9 @@ public class ReadmeComponentMojo extends AbstractMojo { for (String componentName : componentNames) { String json = loadComponentJson(jsonFiles, componentName); if (json != null) { - updateReadMeFile(readmeFile, componentName, json); + ComponentModel model = generateComponentModel(componentName, json); + String component = templateComponent(model); + getLog().info(component); } } } @@ -108,29 +114,55 @@ public class ReadmeComponentMojo extends AbstractMojo { return null; } - private void updateReadMeFile(File readmeFile, String componentName, String json) throws MojoExecutionException { - // TODO: use some template like velocity or freemarker - + private ComponentModel generateComponentModel(String componentName, String json) { List<Map<String, String>> rows = JSonSchemaHelper.parseJsonSchema("component", json, false); - String scheme = getValue("scheme", rows); - String syntax = getValue("syntax", rows); - String title = getValue("title", rows); - String description = getValue("description", rows); - String label = getValue("label", rows); - String groupId = getValue("groupId", rows); - String artifactId = getValue("artifactId", rows); - String version = getValue("version", rows); + + ComponentModel component = new ComponentModel(); + component.setScheme(getValue("scheme", rows)); + component.setSyntax(getValue("syntax", rows)); + component.setTitle(getValue("title", rows)); + component.setDescription(getValue("description", rows)); + component.setLabel(getValue("label", rows)); + component.setDeprecated(getValue("deprecated", rows)); + component.setConsumerOnly(getValue("consumerOnly", rows)); + component.setProducerOnly(getValue("producerOnly", rows)); + component.setJavaType(getValue("javaType", rows)); + component.setGroupId(getValue("groupId", rows)); + component.setArtifactId(getValue("artifactId", rows)); + component.setVersion(getValue("version", rows)); + + rows = JSonSchemaHelper.parseJsonSchema("componentProperties", json, true); + + List<ComponentOptionModel> options = new ArrayList<ComponentOptionModel>(); + ComponentOptionModel option = new ComponentOptionModel(); + for (Map<String, String> row : rows) { + option.setKey(getValue("key", row)); + option.setKind(getValue("kind", row)); + option.setType(getValue("type", row)); + option.setJavaType(getValue("javaType", row)); + option.setDeprecated(getValue("javaType", row)); + option.setDescription(getValue("description", row)); + options.add(option); + } + + component.setOptions(options); + + return component; + } + + private String templateComponent(ComponentModel model) throws MojoExecutionException { try { - OutputStream os = buildContext.newFileOutputStream(readmeFile); - os.write("##".getBytes()); - os.write(title.getBytes()); - os.write("\n\n".getBytes()); - os.write(description.getBytes()); - os.write("\n\n".getBytes()); - os.close(); - } catch (IOException e) { - throw new MojoExecutionException("Failed to update " + readmeFile + " file. Reason: " + e, e); + String ftl = loadText(ReadmeComponentMojo.class.getClassLoader().getResourceAsStream("component-header.ftl")); + Template template = new Template("header", ftl, new Configuration()); + + StringWriter buffer = new StringWriter(); + template.process(model, buffer); + buffer.flush(); + + return buffer.toString(); + } catch (Exception e) { + throw new MojoExecutionException("Error processing freemarker template. Readon: " + e, e); } } http://git-wip-us.apache.org/repos/asf/camel/blob/973af27e/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 new file mode 100644 index 0000000..7e689dd --- /dev/null +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/model/ComponentModel.java @@ -0,0 +1,149 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * <p/> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p/> + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.maven.packaging.model; + +import java.util.List; + +public class ComponentModel { + + private String kind; + private String scheme; + private String syntax; + private String title; + private String description; + private String label; + private String deprecated; + private String consumerOnly; + private String producerOnly; + private String javaType; + private String groupId; + private String artifactId; + private String version; + private List<ComponentOptionModel> options; + + public String getKind() { + return kind; + } + + public void setKind(String kind) { + this.kind = kind; + } + + public String getScheme() { + return scheme; + } + + public void setScheme(String scheme) { + this.scheme = scheme; + } + + public String getSyntax() { + return syntax; + } + + public void setSyntax(String syntax) { + this.syntax = syntax; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public String getDeprecated() { + return deprecated; + } + + public void setDeprecated(String deprecated) { + this.deprecated = deprecated; + } + + public String getConsumerOnly() { + return consumerOnly; + } + + public void setConsumerOnly(String consumerOnly) { + this.consumerOnly = consumerOnly; + } + + public String getProducerOnly() { + return producerOnly; + } + + public void setProducerOnly(String producerOnly) { + this.producerOnly = producerOnly; + } + + public String getJavaType() { + return javaType; + } + + public void setJavaType(String javaType) { + this.javaType = javaType; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getArtifactId() { + return artifactId; + } + + public void setArtifactId(String artifactId) { + this.artifactId = artifactId; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public List<ComponentOptionModel> getOptions() { + return options; + } + + public void setOptions(List<ComponentOptionModel> options) { + this.options = options; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/973af27e/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/model/ComponentOptionModel.java ---------------------------------------------------------------------- diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/model/ComponentOptionModel.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/model/ComponentOptionModel.java new file mode 100644 index 0000000..31df0dd --- /dev/null +++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/model/ComponentOptionModel.java @@ -0,0 +1,75 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * <p/> + * http://www.apache.org/licenses/LICENSE-2.0 + * <p/> + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.maven.packaging.model; + +public class ComponentOptionModel { + + private String key; + private String kind; + private String type; + private String javaType; + private String deprecated; + private String description; + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getKind() { + return kind; + } + + public void setKind(String kind) { + this.kind = kind; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getJavaType() { + return javaType; + } + + public void setJavaType(String javaType) { + this.javaType = javaType; + } + + public String getDeprecated() { + return deprecated; + } + + public void setDeprecated(String deprecated) { + this.deprecated = deprecated; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/973af27e/tooling/maven/camel-package-maven-plugin/src/main/resources/component-header.ftl ---------------------------------------------------------------------- diff --git a/tooling/maven/camel-package-maven-plugin/src/main/resources/component-header.ftl b/tooling/maven/camel-package-maven-plugin/src/main/resources/component-header.ftl new file mode 100644 index 0000000..4d7d47c --- /dev/null +++ b/tooling/maven/camel-package-maven-plugin/src/main/resources/component-header.ftl @@ -0,0 +1,22 @@ +Welcome to ${title} + +${description} + +The syntax: + + ${syntax} + +Maven users would need to add dependency: + +```xml + <dependency> + <groupId>${groupId}</groupId> + <artifactId>${artifactId}</artifactId> + <version>${version}</version> + </dependency> +``` + +Some more bla bla + +There are ${this.options} options which are listed below + http://git-wip-us.apache.org/repos/asf/camel/blob/973af27e/tooling/maven/camel-package-maven-plugin/src/main/resources/component-options.ftl ---------------------------------------------------------------------- diff --git a/tooling/maven/camel-package-maven-plugin/src/main/resources/component-options.ftl b/tooling/maven/camel-package-maven-plugin/src/main/resources/component-options.ftl new file mode 100644 index 0000000..615c2ad --- /dev/null +++ b/tooling/maven/camel-package-maven-plugin/src/main/resources/component-options.ftl @@ -0,0 +1,4 @@ +Component Options + +Generate a table of options +
