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 2024/03/09 12:04:27 UTC

(camel) 03/04: CAMEL-20531: Include dev-consoles into camel-catalog

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch dc
in repository https://gitbox.apache.org/repos/asf/camel.git

commit a81bf5f72f9af941e01c1a7b3854bb859811b12f
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sat Mar 9 13:00:18 2024 +0100

    CAMEL-20531: Include dev-consoles into camel-catalog
---
 .../org/apache/camel/catalog/CamelCatalog.java     |  9 ++++
 .../apache/camel/catalog/DefaultCamelCatalog.java  | 12 +++++
 .../main/java/org/apache/camel/catalog/Kind.java   |  1 +
 .../dsl/jbang/core/commands/CamelJBangMain.java    |  2 +
 .../core/commands/catalog/CatalogDevConsole.java   | 57 ++++++++++++++++++++++
 .../maven/packaging/GenerateDevConsoleMojo.java    | 26 +++++-----
 6 files changed, 94 insertions(+), 13 deletions(-)

diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
index 398f5d0f629..9ac41f70363 100644
--- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
+++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java
@@ -26,6 +26,7 @@ import org.apache.camel.tooling.model.ArtifactModel;
 import org.apache.camel.tooling.model.BaseModel;
 import org.apache.camel.tooling.model.ComponentModel;
 import org.apache.camel.tooling.model.DataFormatModel;
+import org.apache.camel.tooling.model.DevConsoleModel;
 import org.apache.camel.tooling.model.EipModel;
 import org.apache.camel.tooling.model.LanguageModel;
 import org.apache.camel.tooling.model.MainModel;
@@ -557,6 +558,12 @@ public interface CamelCatalog {
      */
     TransformerModel transformerModel(String name);
 
+    /**
+     * @param  name the dev-console name to look up
+     * @return      the requested dev-console or {@code null} in case it is not available in this {@link CamelCatalog}
+     */
+    DevConsoleModel devConsoleModel(String name);
+
     /**
      * @param  name the other name to look up
      * @return      the requested other or {@code null} in case it is not available in this {@link CamelCatalog}
@@ -591,6 +598,8 @@ public interface CamelCatalog {
                 return languageModel(name);
             case transformer:
                 return transformerModel(name);
+            case console:
+                return devConsoleModel(name);
             case other:
                 return otherModel(name);
             case eip:
diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
index 17289879a74..adc5e84aa8e 100644
--- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
+++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java
@@ -38,6 +38,7 @@ import org.apache.camel.tooling.model.ArtifactModel;
 import org.apache.camel.tooling.model.BaseModel;
 import org.apache.camel.tooling.model.ComponentModel;
 import org.apache.camel.tooling.model.DataFormatModel;
+import org.apache.camel.tooling.model.DevConsoleModel;
 import org.apache.camel.tooling.model.EipModel;
 import org.apache.camel.tooling.model.JsonMapper;
 import org.apache.camel.tooling.model.LanguageModel;
@@ -363,6 +364,11 @@ public class DefaultCamelCatalog extends AbstractCamelCatalog implements CamelCa
         return cache("transformer-model-" + name, name, super::transformerModel);
     }
 
+    @Override
+    public DevConsoleModel devConsoleModel(String name) {
+        return cache("dev-console-model-" + name, name, super::devConsoleModel);
+    }
+
     @Override
     public String otherJSonSchema(String name) {
         return cache("other-" + name, name, super::otherJSonSchema);
@@ -541,6 +547,12 @@ public class DefaultCamelCatalog extends AbstractCamelCatalog implements CamelCa
                 return am;
             }
         }
+        for (String name : findDevConsoleNames()) {
+            ArtifactModel<?> am = devConsoleModel(name);
+            if (matchArtifact(am, groupId, artifactId, version)) {
+                return am;
+            }
+        }
         return null;
     }
 
diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/Kind.java b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/Kind.java
index 6ca4c43b5ad..c1f589d02ea 100644
--- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/Kind.java
+++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/Kind.java
@@ -24,6 +24,7 @@ public enum Kind {
     dataformat,
     language,
     transformer,
+    console,
     other,
     eip
 }
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
index da0b6af9cca..89ef4cdd0fe 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/CamelJBangMain.java
@@ -24,6 +24,7 @@ import org.apache.camel.dsl.jbang.core.commands.action.*;
 import org.apache.camel.dsl.jbang.core.commands.catalog.CatalogCommand;
 import org.apache.camel.dsl.jbang.core.commands.catalog.CatalogComponent;
 import org.apache.camel.dsl.jbang.core.commands.catalog.CatalogDataFormat;
+import org.apache.camel.dsl.jbang.core.commands.catalog.CatalogDevConsole;
 import org.apache.camel.dsl.jbang.core.commands.catalog.CatalogDoc;
 import org.apache.camel.dsl.jbang.core.commands.catalog.CatalogKamelet;
 import org.apache.camel.dsl.jbang.core.commands.catalog.CatalogLanguage;
@@ -127,6 +128,7 @@ public class CamelJBangMain implements Callable<Integer> {
                         .addSubcommand("dataformat", new CommandLine(new CatalogDataFormat(main)))
                         .addSubcommand("language", new CommandLine(new CatalogLanguage(main)))
                         .addSubcommand("transformer", new CommandLine(new CatalogTransformer(main)))
+                        .addSubcommand("dev-console", new CommandLine(new CatalogDevConsole(main)))
                         .addSubcommand("other", new CommandLine(new CatalogOther(main)))
                         .addSubcommand("kamelet", new CommandLine(new CatalogKamelet(main))))
                 .addSubcommand("doc", new CommandLine(new CatalogDoc(main)))
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDevConsole.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDevConsole.java
new file mode 100644
index 00000000000..5c4439700b3
--- /dev/null
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogDevConsole.java
@@ -0,0 +1,57 @@
+/*
+ * 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
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.dsl.jbang.core.commands.catalog;
+
+import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.apache.camel.tooling.model.DevConsoleModel;
+import org.apache.camel.tooling.model.LanguageModel;
+import picocli.CommandLine;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@CommandLine.Command(name = "dev-console",
+                     description = "List dev-consoles from the Camel Catalog", sortOptions = false)
+public class CatalogDevConsole extends CatalogBaseCommand {
+
+    public CatalogDevConsole(CamelJBangMain main) {
+        super(main);
+    }
+
+    @Override
+    List<Row> collectRows() {
+        List<Row> rows = new ArrayList<>();
+        for (String name : catalog.findDevConsoleNames()) {
+            DevConsoleModel model = catalog.devConsoleModel(name);
+            if (model != null) {
+                Row row = new Row();
+                row.name = model.getName();
+                row.title = model.getTitle();
+                row.level = model.getSupportLevel().name();
+                row.since = fixQuarkusSince(model.getFirstVersionShort());
+                row.description = model.getDescription();
+                row.label = model.getLabel() != null ? model.getLabel() : "";
+                row.deprecated = model.isDeprecated();
+                row.nativeSupported = model.isNativeSupported();
+                row.gav = getGAV(model);
+                rows.add(row);
+            }
+        }
+        return rows;
+    }
+
+}
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateDevConsoleMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateDevConsoleMojo.java
index 212ec1f07e7..97a063fe5b2 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateDevConsoleMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/GenerateDevConsoleMojo.java
@@ -64,7 +64,7 @@ public class GenerateDevConsoleMojo extends AbstractGeneratorMojo {
     private static class DevConsoleModel {
         private String className;
         private String group;
-        private String id;
+        private String name;
         private String displayName;
         private String description;
         private boolean deprecated;
@@ -85,12 +85,12 @@ public class GenerateDevConsoleMojo extends AbstractGeneratorMojo {
             this.group = group;
         }
 
-        public String getId() {
-            return id;
+        public String getName() {
+            return name;
         }
 
-        public void setId(String id) {
-            this.id = id;
+        public void setName(String name) {
+            this.name = name;
         }
 
         public String getDisplayName() {
@@ -149,16 +149,16 @@ public class GenerateDevConsoleMojo extends AbstractGeneratorMojo {
             model.setClassName(currentClass);
             model.setDeprecated(deprecated);
             model.setGroup(annotationValue(a, "group"));
-            model.setId(annotationValue(a, "name"));
+            model.setName(annotationValue(a, "name"));
             model.setDisplayName(annotationValue(a, "displayName"));
             model.setDescription(annotationValue(a, "description"));
             // skip default registry
-            boolean skip = "default-registry".equals(model.getId());
+            boolean skip = "default-registry".equals(model.getName());
             if (!skip) {
                 models.add(model);
             }
         });
-        models.sort(Comparator.comparing(DevConsoleModel::getId));
+        models.sort(Comparator.comparing(DevConsoleModel::getName));
 
         // remove default-registry as it's special
 
@@ -166,17 +166,17 @@ public class GenerateDevConsoleMojo extends AbstractGeneratorMojo {
             try {
                 StringJoiner ids = new StringJoiner(" ");
                 for (var model : models) {
-                    ids.add(model.getId());
+                    ids.add(model.getName());
 
                     JsonObject jo = asJsonObject(model);
                     String json = jo.toJson();
                     json = Jsoner.prettyPrint(json, 2);
-                    String fn = sanitizeFileName(model.getId()) + PackageHelper.JSON_SUFIX;
+                    String fn = sanitizeFileName(model.getName()) + PackageHelper.JSON_SUFIX;
                     boolean updated = updateResource(resourcesOutputDir.toPath(),
                             "META-INF/org/apache/camel/dev-console/" + fn,
                             json + NL);
                     if (updated) {
-                        getLog().info("Updated dev-console json: " + model.getId());
+                        getLog().info("Updated dev-console json: " + model.getName());
                     }
                 }
 
@@ -202,11 +202,11 @@ public class GenerateDevConsoleMojo extends AbstractGeneratorMojo {
         } else {
             jo.put("group", "camel");
         }
-        jo.put("id", model.getId());
+        jo.put("name", model.getName());
         if (model.getDisplayName() != null) {
             jo.put("title", asTitle(model.getDisplayName()));
         } else {
-            jo.put("title", asTitle(model.getId()));
+            jo.put("title", asTitle(model.getName()));
         }
         jo.put("description", model.getDescription());
         jo.put("deprecated", model.isDeprecated());