This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit b071f6bd74e1e7f1e12c3007a0d06c1d0f94a519 Author: Claus Ibsen <[email protected]> AuthorDate: Sat Sep 17 16:53:00 2022 +0200 camel-jbang - Add doc command --- .../jbang/core/commands/catalog/CatalogDoc.java | 127 ++++++++++++++++++++- .../camel/tooling/model/BaseOptionModel.java | 2 +- 2 files changed, 123 insertions(+), 6 deletions(-) diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java index 09b1926dd38..a1d33c8b8a7 100644 --- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java +++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDoc.java @@ -28,6 +28,10 @@ import org.apache.camel.dsl.jbang.core.commands.CamelCommand; import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain; import org.apache.camel.tooling.model.BaseOptionModel; import org.apache.camel.tooling.model.ComponentModel; +import org.apache.camel.tooling.model.DataFormatModel; +import org.apache.camel.tooling.model.LanguageModel; +import org.apache.camel.tooling.model.OtherModel; +import org.apache.camel.util.StringHelper; import picocli.CommandLine; @CommandLine.Command(name = "doc", @@ -46,13 +50,45 @@ public class CatalogDoc extends CamelCommand { @Override public Integer call() throws Exception { - ComponentModel cm = catalog.componentModel(name); - if (cm != null) { - docComponent(cm); - return 0; + String prefix = StringHelper.before(name, ":"); + if (prefix != null) { + name = StringHelper.after(name, ":"); } - System.out.println("Camel resource: " + name + " not found"); + if (prefix == null || "component".equals(prefix)) { + ComponentModel cm = catalog.componentModel(name); + if (cm != null) { + docComponent(cm); + return 0; + } + } + if (prefix == null || "dataformat".equals(prefix)) { + DataFormatModel dm = catalog.dataFormatModel(name); + if (dm != null) { + docDataFormat(dm); + return 0; + } + } + if (prefix == null || "language".equals(prefix)) { + LanguageModel lm = catalog.languageModel(name); + if (lm != null) { + docLanguage(lm); + return 0; + } + } + if (prefix == null || "other".equals(prefix)) { + OtherModel om = catalog.otherModel(name); + if (om != null) { + docOther(om); + return 0; + } + } + + if (prefix == null) { + System.out.println("Camel resource: " + name + " not found"); + } else { + System.out.println("Camel " + prefix + ": " + name + " not found"); + } return 1; } @@ -75,6 +111,12 @@ public class CatalogDoc extends CamelCommand { System.out.println(""); System.out.printf("%s%n", cm.getDescription()); System.out.println(""); + System.out.println(" <dependency>"); + System.out.println(" <groupId>" + cm.getGroupId() + "</groupId>"); + System.out.println(" <artifactId>" + cm.getArtifactId() + "</artifactId>"); + System.out.println(" <version>" + cm.getVersion() + "</version>"); + System.out.println(" </dependency>"); + System.out.println(""); System.out.printf("The %s endpoint is configured using URI syntax:%n", cm.getName()); System.out.println(""); System.out.printf(" %s%n", cm.getSyntax()); @@ -98,6 +140,81 @@ public class CatalogDoc extends CamelCommand { new Column().header("DEFAULT").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.NEWLINE) .with(r -> r.getShortDefaultValue(40)), new Column().header("TYPE").dataAlign(HorizontalAlign.LEFT).with(BaseOptionModel::getShortJavaType)))); + System.out.println(""); + } + + private void docDataFormat(DataFormatModel dm) { + if (dm.isDeprecated()) { + System.out.printf("Dataformat Name: %s (deprecated)%n", dm.getName()); + } else { + System.out.printf("Dataformat Name: %s%n", dm.getName()); + } + System.out.printf("Since: %s%n", dm.getFirstVersionShort()); + System.out.println(""); + System.out.printf("%s%n", dm.getDescription()); + System.out.println(""); + System.out.println(" <dependency>"); + System.out.println(" <groupId>" + dm.getGroupId() + "</groupId>"); + System.out.println(" <artifactId>" + dm.getArtifactId() + "</artifactId>"); + System.out.println(" <version>" + dm.getVersion() + "</version>"); + System.out.println(" </dependency>"); + System.out.println(""); + System.out.printf("The %s dataformat supports %s options, which are listed below.%n%n", dm.getName(), + dm.getOptions().size()); + System.out.println(AsciiTable.getTable(AsciiTable.FANCY_ASCII, dm.getOptions(), Arrays.asList( + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).minWidth(20).maxWidth(30, OverflowBehaviour.NEWLINE) + .with(this::getName), + new Column().header("DESCRIPTION").dataAlign(HorizontalAlign.LEFT).with(this::getDescription), + new Column().header("DEFAULT").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.NEWLINE) + .with(r -> r.getShortDefaultValue(40)), + new Column().header("TYPE").dataAlign(HorizontalAlign.LEFT).with(BaseOptionModel::getShortJavaType)))); + System.out.println(""); + } + + private void docLanguage(LanguageModel lm) { + if (lm.isDeprecated()) { + System.out.printf("Language Name: %s (deprecated)%n", lm.getName()); + } else { + System.out.printf("Language Name: %s%n", lm.getName()); + } + System.out.printf("Since: %s%n", lm.getFirstVersionShort()); + System.out.println(""); + System.out.printf("%s%n", lm.getDescription()); + System.out.println(""); + System.out.println(" <dependency>"); + System.out.println(" <groupId>" + lm.getGroupId() + "</groupId>"); + System.out.println(" <artifactId>" + lm.getArtifactId() + "</artifactId>"); + System.out.println(" <version>" + lm.getVersion() + "</version>"); + System.out.println(" </dependency>"); + System.out.println(""); + System.out.printf("The %s language supports %s options, which are listed below.%n%n", lm.getName(), + lm.getOptions().size()); + System.out.println(AsciiTable.getTable(AsciiTable.FANCY_ASCII, lm.getOptions(), Arrays.asList( + new Column().header("NAME").dataAlign(HorizontalAlign.LEFT).minWidth(20).maxWidth(30, OverflowBehaviour.NEWLINE) + .with(this::getName), + new Column().header("DESCRIPTION").dataAlign(HorizontalAlign.LEFT).with(this::getDescription), + new Column().header("DEFAULT").dataAlign(HorizontalAlign.LEFT).maxWidth(30, OverflowBehaviour.NEWLINE) + .with(r -> r.getShortDefaultValue(40)), + new Column().header("TYPE").dataAlign(HorizontalAlign.LEFT).with(BaseOptionModel::getShortJavaType)))); + System.out.println(""); + } + + private void docOther(OtherModel om) { + if (om.isDeprecated()) { + System.out.printf("Miscellaneous Name: %s (deprecated)%n", om.getName()); + } else { + System.out.printf("Miscellaneous Name: %s%n", om.getName()); + } + System.out.printf("Since: %s%n", om.getFirstVersionShort()); + System.out.println(""); + System.out.printf("%s%n", om.getDescription()); + System.out.println(""); + System.out.println(" <dependency>"); + System.out.println(" <groupId>" + om.getGroupId() + "</groupId>"); + System.out.println(" <artifactId>" + om.getArtifactId() + "</artifactId>"); + System.out.println(" <version>" + om.getVersion() + "</version>"); + System.out.println(" </dependency>"); + System.out.println(""); } String getName(BaseOptionModel o) { diff --git a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseOptionModel.java b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseOptionModel.java index 583cf54a04f..b7856e4f1ed 100644 --- a/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseOptionModel.java +++ b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/BaseOptionModel.java @@ -269,7 +269,7 @@ public abstract class BaseOptionModel { } public String getShortGroup() { - if (group.endsWith(" (advanced)")) { + if (group != null && group.endsWith(" (advanced)")) { return group.substring(0, group.length() - 11); } return group;
