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

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

commit a1cd4d4378310ed1e5b9c80b0e675cabe69ec9c4
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Dec 1 17:09:04 2025 +0100

    CAMEL-22732: camel-jbang - Add DTO classes to represent json output
---
 .../dsl/jbang/core/commands/DependencyRuntime.java |  44 +----
 .../core/commands/catalog/CatalogBaseCommand.java  |  12 +-
 .../core/commands/infra/InfraBaseCommand.java      |   9 +-
 .../jbang/core/commands/process/ListProcess.java   |  16 +-
 .../dsl/jbang/core/commands/update/UpdateList.java |  28 +--
 .../jbang/core/commands/version/VersionList.java   |  22 +--
 .../camel/dsl/jbang/core/model/CatalogBaseDTO.java | 140 +++++++++++++++
 .../dsl/jbang/core/model/DependencyRuntimeDTO.java | 191 +++++++++++++++++++++
 .../camel/dsl/jbang/core/model/InfraBaseDTO.java   |  86 ++++++++++
 .../camel/dsl/jbang/core/model/ListProcessDTO.java | 125 ++++++++++++++
 .../camel/dsl/jbang/core/model/UpdateListDTO.java  |  84 +++++++++
 .../camel/dsl/jbang/core/model/VersionListDTO.java | 125 ++++++++++++++
 .../jbang/core/commands/update/UpdateListTest.java |   2 +-
 13 files changed, 798 insertions(+), 86 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyRuntime.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyRuntime.java
index 4f3473ecb307..97aa6ef1d796 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyRuntime.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/DependencyRuntime.java
@@ -18,14 +18,13 @@ package org.apache.camel.dsl.jbang.core.commands;
 
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.StringJoiner;
 
 import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.dsl.jbang.core.common.CatalogLoader;
 import org.apache.camel.dsl.jbang.core.common.RuntimeType;
+import org.apache.camel.dsl.jbang.core.model.DependencyRuntimeDTO;
 import org.apache.camel.tooling.maven.MavenGav;
 import org.apache.camel.util.json.Jsoner;
 import org.apache.maven.model.Model;
@@ -143,42 +142,11 @@ public class DependencyRuntime extends CamelCommand {
         }
 
         if (jsonOutput) {
-            Map<String, String> map = new LinkedHashMap<>();
-            map.put("runtime", runtime);
-            if (camelVersion != null) {
-                map.put("camelVersion", camelVersion);
-            }
-            if (camelSpringBootVersion != null) {
-                map.put("camelSpringBootVersion", camelSpringBootVersion);
-            }
-            if (camelQuarkusVersion != null) {
-                map.put("camelQuarkusVersion", camelQuarkusVersion);
-            }
-            if (springBootVersion != null) {
-                map.put("springBootVersion", springBootVersion);
-            }
-            if (quarkusVersion != null) {
-                map.put("quarkusVersion", quarkusVersion);
-            }
-            if (camelSpringBootBomGroupId != null) {
-                map.put("camelSpringBootBomGroupId", 
camelSpringBootBomGroupId);
-            }
-            if (camelSpringBootBomArtifactId != null) {
-                map.put("camelSpringBootBomArtifactId", 
camelSpringBootBomArtifactId);
-            }
-            if (quarkusBomGroupId != null) {
-                map.put("quarkusBomGroupId", quarkusBomGroupId);
-            }
-            if (quarkusBomArtifactId != null) {
-                map.put("quarkusBomArtifactId", quarkusBomArtifactId);
-            }
-            if (camelQuarkusBomGroupId != null) {
-                map.put("camelQuarkusBomGroupId", camelQuarkusBomGroupId);
-            }
-            if (camelQuarkusBomArtifactId != null) {
-                map.put("camelQuarkusBomArtifactId", 
camelQuarkusBomArtifactId);
-            }
-            printer().println(Jsoner.serialize(map));
+            DependencyRuntimeDTO dto = new DependencyRuntimeDTO(
+                    runtime, camelVersion, camelSpringBootVersion, 
camelQuarkusVersion, springBootVersion, quarkusVersion,
+                    camelSpringBootBomGroupId, camelSpringBootBomArtifactId, 
quarkusBomGroupId, quarkusBomArtifactId,
+                    camelQuarkusBomGroupId, camelQuarkusBomArtifactId);
+            printer().println(Jsoner.serialize(dto.toMap()));
         } else {
             printer().println("Runtime: " + runtime);
             if (camelVersion != null) {
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
index eda2a7b39311..c45719e55828 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/catalog/CatalogBaseCommand.java
@@ -20,7 +20,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
-import java.util.Map;
 import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
@@ -35,6 +34,7 @@ import 
org.apache.camel.dsl.jbang.core.common.RuntimeCompletionCandidates;
 import org.apache.camel.dsl.jbang.core.common.RuntimeType;
 import org.apache.camel.dsl.jbang.core.common.RuntimeTypeConverter;
 import org.apache.camel.dsl.jbang.core.common.VersionHelper;
+import org.apache.camel.dsl.jbang.core.model.CatalogBaseDTO;
 import org.apache.camel.tooling.maven.MavenGav;
 import org.apache.camel.tooling.model.ArtifactModel;
 import org.apache.camel.util.json.Jsoner;
@@ -149,10 +149,12 @@ public abstract class CatalogBaseCommand extends 
CamelCommand {
             if (jsonOutput) {
                 printer().println(
                         Jsoner.serialize(
-                                rows.stream().map(row -> Map.of(
-                                        "name", row.name,
-                                        "level", row.level,
-                                        "native", 
row.nativeSupported)).collect(Collectors.toList())));
+                                rows.stream()
+                                        .map(row -> new CatalogBaseDTO(
+                                                row.name, row.title, 
row.level, row.since, row.nativeSupported, row.description,
+                                                row.label, row.gav, 
row.deprecated))
+                                        .map(CatalogBaseDTO::toMap)
+                                        .collect(Collectors.toList())));
             } else {
                 printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, 
rows, Arrays.asList(
                         new 
Column().header("NAME").visible(!displayGav).dataAlign(HorizontalAlign.LEFT).maxWidth(nameWidth())
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraBaseCommand.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraBaseCommand.java
index ee92d66eb8c3..e23f41cf8a74 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraBaseCommand.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/infra/InfraBaseCommand.java
@@ -48,6 +48,7 @@ import org.apache.camel.catalog.DefaultCamelCatalog;
 import org.apache.camel.dsl.jbang.core.commands.CamelCommand;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
 import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
+import org.apache.camel.dsl.jbang.core.model.InfraBaseDTO;
 import org.apache.camel.support.PatternHelper;
 import org.apache.camel.util.FileUtil;
 import org.apache.camel.util.json.DeserializationException;
@@ -172,13 +173,9 @@ public abstract class InfraBaseCommand extends 
CamelCommand {
                                 } catch (DeserializationException e) {
                                     // ignore
                                 }
-
-                                return Map.of(
-                                        "alias", row.alias(),
-                                        "aliasImplementation", 
row.aliasImplementation(),
-                                        "description", row.description() == 
null ? "" : row.description(),
-                                        "serviceData", serviceDataObj);
+                                return new InfraBaseDTO(row.alias, 
row.aliasImplementation, row.description, serviceDataObj);
                             })
+                                    .map(InfraBaseDTO::toMap)
                                     .collect(Collectors.toList())));
         } else {
             printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProcess.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProcess.java
index 70a93ddb164c..4881e6d98d70 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProcess.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/process/ListProcess.java
@@ -29,6 +29,7 @@ import com.github.freva.asciitable.OverflowBehaviour;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
 import org.apache.camel.dsl.jbang.core.common.PidNameAgeCompletionCandidates;
 import org.apache.camel.dsl.jbang.core.common.ProcessHelper;
+import org.apache.camel.dsl.jbang.core.model.ListProcessDTO;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonObject;
 import org.apache.camel.util.json.Jsoner;
@@ -136,15 +137,12 @@ public class ListProcess extends ProcessWatchCommand {
                 if (jsonOutput) {
                     printer().println(
                             Jsoner.serialize(
-                                    rows.stream().map(row -> Map.of(
-                                            "pid", row.pid,
-                                            "name", row.name,
-                                            "ready", row.ready,
-                                            "status", getStatus(row),
-                                            "age", row.ago,
-                                            "total", getTotal(row),
-                                            "fail", getFailed(row),
-                                            "inflight", 
getInflight(row))).collect(Collectors.toList())));
+                                    rows.stream()
+                                            .map(row -> new ListProcessDTO(
+                                                    row.pid, row.name, 
row.ready, getStatus(row), row.ago, row.total,
+                                                    row.failed, row.inflight))
+                                            .map(ListProcessDTO::toMap)
+                                            .collect(Collectors.toList())));
                 } else {
                     
printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
                             new 
Column().header("PID").headerAlign(HorizontalAlign.CENTER).with(r -> r.pid),
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateList.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateList.java
index 2c06295bf959..5f6226442b58 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateList.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateList.java
@@ -25,7 +25,6 @@ import java.util.Comparator;
 import java.util.Enumeration;
 import java.util.LinkedHashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutionException;
@@ -38,6 +37,8 @@ import com.github.freva.asciitable.Column;
 import com.github.freva.asciitable.HorizontalAlign;
 import org.apache.camel.dsl.jbang.core.commands.CamelCommand;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
+import org.apache.camel.dsl.jbang.core.common.RuntimeType;
+import org.apache.camel.dsl.jbang.core.model.UpdateListDTO;
 import org.apache.camel.main.download.MavenDependencyDownloader;
 import org.apache.camel.tooling.maven.MavenArtifact;
 import org.apache.camel.util.json.Jsoner;
@@ -81,7 +82,7 @@ import picocli.CommandLine;
  * @see org.apache.camel.dsl.jbang.core.commands.CamelJBangMain
  */
 @CommandLine.Command(name = "list",
-                     description = "List available update versions for Apache 
Camel and its runtime variants")
+                     description = "List available update versions for Camel 
and its runtime variants")
 public class UpdateList extends CamelCommand {
 
     @CommandLine.Option(names = { "--repo", "--repos" },
@@ -121,8 +122,8 @@ public class UpdateList extends CamelCommand {
             recipesVersions.plainCamelRecipesVersion()
                     .forEach(l -> rows
                             .add(new Row(
-                                    l[0], "Camel", "",
-                                    "Migrates Apache Camel 4 application to 
Apache Camel " + l[0])));
+                                    l[0], RuntimeType.main.runtime(), "",
+                                    "Migrates Camel 4 application to Camel " + 
l[0])));
             recipesVersions.camelSpringBootRecipesVersion().forEach(l -> {
 
                 String[] runtimeVersion
@@ -145,8 +146,8 @@ public class UpdateList extends CamelCommand {
                 }
 
                 rows.add(new Row(
-                        l[0], "Camel Spring Boot", runtimeVersion[1],
-                        "Migrates Apache Camel Spring Boot 4 application to 
Apache Camel Spring Boot " + l[0]));
+                        l[0], RuntimeType.springBoot.runtime(), 
runtimeVersion[1],
+                        "Migrates Camel Spring Boot 4 application to Camel 
Spring Boot " + l[0]));
             });
             // Translate quarkus versions to Camel
             recipesVersions.camelQuarkusRecipesVersions();
@@ -160,7 +161,7 @@ public class UpdateList extends CamelCommand {
                     String quarkusVersion = runtimeVersion[1];
                     quarkusVersion = quarkusVersion.substring(0, 
quarkusVersion.lastIndexOf('.')) + ".x";
 
-                    rows.add(new Row(runtimeVersion[0], "Camel Quarkus", 
quarkusVersion, l.description()));
+                    rows.add(new Row(runtimeVersion[0], 
RuntimeType.quarkus.runtime(), quarkusVersion, l.description()));
                 }
             });
         }
@@ -171,15 +172,14 @@ public class UpdateList extends CamelCommand {
         if (jsonOutput) {
             printer().println(
                     Jsoner.serialize(
-                            rows.stream().map(row -> Map.of(
-                                    "version", row.version(),
-                                    "runtime", row.runtime(),
-                                    "runtimeVersion", row.runtimeVersion(),
-                                    "description", row.description()))
+                            rows.stream()
+                                    .map(row -> new UpdateListDTO(
+                                            row.version.toString(), 
row.runtime, row.runtimeVersion, row.description))
+                                    .map(UpdateListDTO::toMap)
                                     .collect(Collectors.toList())));
         } else {
             printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
-                    new 
Column().header("VERSION").minWidth(30).dataAlign(HorizontalAlign.LEFT)
+                    new 
Column().header("VERSION").minWidth(10).dataAlign(HorizontalAlign.LEFT)
                             .with(r -> r.version().toString()),
                     new Column().header("RUNTIME")
                             .dataAlign(HorizontalAlign.LEFT).with(r -> 
r.runtime()),
@@ -317,6 +317,8 @@ public class UpdateList extends CamelCommand {
                             .filter(l -> l.startsWith("description"))
                             .map(l -> l.substring(l.indexOf(":") + 1).trim())
                             .findFirst().orElse("");
+                    // cleanup ugly ` in description
+                    description = description.replace("`", "");
 
                     quarkusUpdateRecipes.add(new QuarkusUpdates(
                             name.substring(name.lastIndexOf("/") + 1, 
name.indexOf(".yaml")),
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java
index 7b5665637aba..45322a1620ad 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/version/VersionList.java
@@ -30,10 +30,8 @@ import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
-import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Locale;
-import java.util.Map;
 import java.util.stream.Collectors;
 
 import com.github.freva.asciitable.AsciiTable;
@@ -47,6 +45,7 @@ import 
org.apache.camel.dsl.jbang.core.common.RuntimeCompletionCandidates;
 import org.apache.camel.dsl.jbang.core.common.RuntimeType;
 import org.apache.camel.dsl.jbang.core.common.RuntimeTypeConverter;
 import org.apache.camel.dsl.jbang.core.common.VersionHelper;
+import org.apache.camel.dsl.jbang.core.model.VersionListDTO;
 import org.apache.camel.main.KameletMain;
 import org.apache.camel.main.download.MavenDependencyDownloader;
 import org.apache.camel.tooling.maven.RepositoryResolver;
@@ -207,7 +206,13 @@ public class VersionList extends CamelCommand {
         if (jsonOutput) {
             printer().println(
                     Jsoner.serialize(
-                            
rows.stream().map(VersionList::mapOf).collect(Collectors.toList())));
+                            rows.stream()
+                                    .map(row -> new VersionListDTO(
+                                            row.coreVersion, 
runtime.runtime(), row.runtimeVersion, row.jdks, row.kind,
+                                            row.releaseDate,
+                                            row.eolDate))
+                                    .map(VersionListDTO::toMap)
+                                    .collect(Collectors.toList())));
         } else {
             printer().println(AsciiTable.getTable(AsciiTable.NO_BORDERS, rows, 
Arrays.asList(
                     new Column().header("CAMEL VERSION")
@@ -379,17 +384,6 @@ public class VersionList extends CamelCommand {
         return true;
     }
 
-    private static Map<String, Object> mapOf(Row r) {
-        Map<String, Object> map = new LinkedHashMap<>();
-        map.put("camelVersion", r.coreVersion);
-        map.put("runtimeVersion", r.runtimeVersion);
-        map.put("jdkVersion", r.jdks);
-        map.put("kind", r.kind);
-        map.put("releaseDate", r.releaseDate);
-        map.put("eolDate", r.eolDate);
-        return map;
-    }
-
     protected int sortRow(Row o1, Row o2) {
         String s = sort;
         int negate = 1;
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/CatalogBaseDTO.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/CatalogBaseDTO.java
new file mode 100644
index 000000000000..0fa2bf438215
--- /dev/null
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/CatalogBaseDTO.java
@@ -0,0 +1,140 @@
+/*
+ * 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.model;
+
+import java.util.Map;
+
+import org.apache.camel.util.json.JsonObject;
+
+public class CatalogBaseDTO {
+
+    private String name;
+    private String title;
+    private String level;
+    private String since;
+    private boolean nativeSupported;
+    private String description;
+    private String label;
+    private String gav;
+    private boolean deprecated;
+
+    public CatalogBaseDTO() {
+    }
+
+    public CatalogBaseDTO(String name, String title, String level, String 
since, boolean nativeSupported, String description,
+                          String label, String gav, boolean deprecated) {
+        this.name = name;
+        this.title = title;
+        this.level = level;
+        this.since = since;
+        this.nativeSupported = nativeSupported;
+        this.description = description;
+        this.label = label;
+        this.gav = gav;
+        this.deprecated = deprecated;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getLevel() {
+        return level;
+    }
+
+    public void setLevel(String level) {
+        this.level = level;
+    }
+
+    public String getSince() {
+        return since;
+    }
+
+    public void setSince(String since) {
+        this.since = since;
+    }
+
+    public boolean isNativeSupported() {
+        return nativeSupported;
+    }
+
+    public void setNativeSupported(boolean nativeSupported) {
+        this.nativeSupported = nativeSupported;
+    }
+
+    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 getGav() {
+        return gav;
+    }
+
+    public void setGav(String gav) {
+        this.gav = gav;
+    }
+
+    public boolean isDeprecated() {
+        return deprecated;
+    }
+
+    public void setDeprecated(boolean deprecated) {
+        this.deprecated = deprecated;
+    }
+
+    public Map<String, Object> toMap() {
+        JsonObject jo = new JsonObject();
+        jo.put("name", name);
+        jo.put("title", title);
+        jo.put("level", level);
+        jo.put("since", since);
+        jo.put("nativeSupported", nativeSupported);
+        if (description != null) {
+            jo.put("description", description);
+        }
+        if (label != null) {
+            jo.put("label", label);
+        }
+        jo.put("gav", gav);
+        jo.put("deprecated", deprecated);
+        return jo;
+    }
+}
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/DependencyRuntimeDTO.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/DependencyRuntimeDTO.java
new file mode 100644
index 000000000000..7f50bb205485
--- /dev/null
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/DependencyRuntimeDTO.java
@@ -0,0 +1,191 @@
+/*
+ * 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.model;
+
+import java.util.Map;
+
+import org.apache.camel.util.json.JsonObject;
+
+public class DependencyRuntimeDTO {
+
+    private String runtime;
+    private String camelVersion;
+    private String camelSpringBootVersion;
+    private String camelQuarkusVersion;
+    private String springBootVersion;
+    private String quarkusVersion;
+    private String camelSpringBootBomGroupId;
+    private String camelSpringBootBomArtifactId;
+    private String quarkusBomGroupId;
+    private String quarkusBomArtifactId;
+    private String camelQuarkusBomGroupId;
+    private String camelQuarkusBomArtifactId;
+
+    public DependencyRuntimeDTO() {
+    }
+
+    public DependencyRuntimeDTO(String runtime, String camelVersion, String 
camelSpringBootVersion, String camelQuarkusVersion,
+                                String springBootVersion, String 
quarkusVersion, String camelSpringBootBomGroupId,
+                                String camelSpringBootBomArtifactId, String 
quarkusBomGroupId, String quarkusBomArtifactId,
+                                String camelQuarkusBomGroupId, String 
camelQuarkusBomArtifactId) {
+        this.runtime = runtime;
+        this.camelVersion = camelVersion;
+        this.camelSpringBootVersion = camelSpringBootVersion;
+        this.camelQuarkusVersion = camelQuarkusVersion;
+        this.springBootVersion = springBootVersion;
+        this.quarkusVersion = quarkusVersion;
+        this.camelSpringBootBomGroupId = camelSpringBootBomGroupId;
+        this.camelSpringBootBomArtifactId = camelSpringBootBomArtifactId;
+        this.quarkusBomGroupId = quarkusBomGroupId;
+        this.quarkusBomArtifactId = quarkusBomArtifactId;
+        this.camelQuarkusBomGroupId = camelQuarkusBomGroupId;
+        this.camelQuarkusBomArtifactId = camelQuarkusBomArtifactId;
+    }
+
+    public String getRuntime() {
+        return runtime;
+    }
+
+    public void setRuntime(String runtime) {
+        this.runtime = runtime;
+    }
+
+    public String getCamelVersion() {
+        return camelVersion;
+    }
+
+    public void setCamelVersion(String camelVersion) {
+        this.camelVersion = camelVersion;
+    }
+
+    public String getCamelSpringBootVersion() {
+        return camelSpringBootVersion;
+    }
+
+    public void setCamelSpringBootVersion(String camelSpringBootVersion) {
+        this.camelSpringBootVersion = camelSpringBootVersion;
+    }
+
+    public String getCamelQuarkusVersion() {
+        return camelQuarkusVersion;
+    }
+
+    public void setCamelQuarkusVersion(String camelQuarkusVersion) {
+        this.camelQuarkusVersion = camelQuarkusVersion;
+    }
+
+    public String getSpringBootVersion() {
+        return springBootVersion;
+    }
+
+    public void setSpringBootVersion(String springBootVersion) {
+        this.springBootVersion = springBootVersion;
+    }
+
+    public String getQuarkusVersion() {
+        return quarkusVersion;
+    }
+
+    public void setQuarkusVersion(String quarkusVersion) {
+        this.quarkusVersion = quarkusVersion;
+    }
+
+    public String getCamelSpringBootBomGroupId() {
+        return camelSpringBootBomGroupId;
+    }
+
+    public void setCamelSpringBootBomGroupId(String camelSpringBootBomGroupId) 
{
+        this.camelSpringBootBomGroupId = camelSpringBootBomGroupId;
+    }
+
+    public String getCamelSpringBootBomArtifactId() {
+        return camelSpringBootBomArtifactId;
+    }
+
+    public void setCamelSpringBootBomArtifactId(String 
camelSpringBootBomArtifactId) {
+        this.camelSpringBootBomArtifactId = camelSpringBootBomArtifactId;
+    }
+
+    public String getQuarkusBomGroupId() {
+        return quarkusBomGroupId;
+    }
+
+    public void setQuarkusBomGroupId(String quarkusBomGroupId) {
+        this.quarkusBomGroupId = quarkusBomGroupId;
+    }
+
+    public String getQuarkusBomArtifactId() {
+        return quarkusBomArtifactId;
+    }
+
+    public void setQuarkusBomArtifactId(String quarkusBomArtifactId) {
+        this.quarkusBomArtifactId = quarkusBomArtifactId;
+    }
+
+    public String getCamelQuarkusBomGroupId() {
+        return camelQuarkusBomGroupId;
+    }
+
+    public void setCamelQuarkusBomGroupId(String camelQuarkusBomGroupId) {
+        this.camelQuarkusBomGroupId = camelQuarkusBomGroupId;
+    }
+
+    public String getCamelQuarkusBomArtifactId() {
+        return camelQuarkusBomArtifactId;
+    }
+
+    public void setCamelQuarkusBomArtifactId(String camelQuarkusBomArtifactId) 
{
+        this.camelQuarkusBomArtifactId = camelQuarkusBomArtifactId;
+    }
+
+    public Map<String, Object> toMap() {
+        JsonObject jo = new JsonObject();
+        jo.put("runtime", runtime);
+        jo.put("camelVersion", camelVersion);
+        if (camelSpringBootVersion != null) {
+            jo.put("camelSpringBootVersion", camelSpringBootVersion);
+        }
+        if (camelQuarkusVersion != null) {
+            jo.put("camelQuarkusVersion", camelQuarkusVersion);
+        }
+        if (springBootVersion != null) {
+            jo.put("springBootVersion", springBootVersion);
+        }
+        if (quarkusVersion != null) {
+            jo.put("quarkusVersion", quarkusVersion);
+        }
+        if (camelSpringBootBomGroupId != null) {
+            jo.put("camelSpringBootBomGroupId", camelSpringBootBomGroupId);
+        }
+        if (camelSpringBootBomArtifactId != null) {
+            jo.put("camelSpringBootBomArtifactId", 
camelSpringBootBomArtifactId);
+        }
+        if (quarkusBomGroupId != null) {
+            jo.put("quarkusBomGroupId", quarkusBomGroupId);
+        }
+        if (quarkusBomArtifactId != null) {
+            jo.put("quarkusBomArtifactId", quarkusBomArtifactId);
+        }
+        if (camelQuarkusBomGroupId != null) {
+            jo.put("camelQuarkusBomGroupId", camelQuarkusBomGroupId);
+        }
+        if (camelQuarkusBomArtifactId != null) {
+            jo.put("camelQuarkusBomArtifactId", camelQuarkusBomArtifactId);
+        }
+        return jo;
+    }
+}
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/InfraBaseDTO.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/InfraBaseDTO.java
new file mode 100644
index 000000000000..8f69b30c8f2d
--- /dev/null
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/InfraBaseDTO.java
@@ -0,0 +1,86 @@
+/*
+ * 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.model;
+
+import java.util.Map;
+
+import org.apache.camel.util.json.JsonObject;
+
+public class InfraBaseDTO {
+
+    private String alias;
+    private String aliasImplementation;
+    private String description;
+    private Object serviceData;
+
+    public InfraBaseDTO() {
+    }
+
+    public InfraBaseDTO(String alias, String aliasImplementation, String 
description, Object serviceData) {
+        this.alias = alias;
+        this.aliasImplementation = aliasImplementation;
+        this.description = description;
+        this.serviceData = serviceData;
+    }
+
+    public String getAlias() {
+        return alias;
+    }
+
+    public void setAlias(String alias) {
+        this.alias = alias;
+    }
+
+    public String getAliasImplementation() {
+        return aliasImplementation;
+    }
+
+    public void setAliasImplementation(String aliasImplementation) {
+        this.aliasImplementation = aliasImplementation;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public Object getServiceData() {
+        return serviceData;
+    }
+
+    public void setServiceData(Object serviceData) {
+        this.serviceData = serviceData;
+    }
+
+    public Map<String, Object> toMap() {
+        JsonObject jo = new JsonObject();
+        jo.put("alias", alias);
+        if (aliasImplementation != null) {
+            jo.put("aliasImplementation", aliasImplementation);
+        }
+        if (description != null) {
+            jo.put("description", description);
+        }
+        if (serviceData != null) {
+            jo.put("serviceData", serviceData);
+        }
+        return jo;
+    }
+}
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/ListProcessDTO.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/ListProcessDTO.java
new file mode 100644
index 000000000000..46992e93ad0f
--- /dev/null
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/ListProcessDTO.java
@@ -0,0 +1,125 @@
+/*
+ * 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.model;
+
+import java.util.Map;
+
+import org.apache.camel.util.json.JsonObject;
+
+public class ListProcessDTO {
+
+    private int pid;
+    private String name;
+    private String ready;
+    private String status;
+    private String age;
+    private long total;
+    private long fail;
+    private int inflight;
+
+    public ListProcessDTO() {
+    }
+
+    public ListProcessDTO(String pid, String name, String ready, String 
status, String age, String total, String fail,
+                          String inflight) {
+        this.pid = Integer.parseInt(pid);
+        this.name = name;
+        this.ready = ready;
+        this.status = status;
+        this.age = age;
+        this.total = Long.parseLong(total);
+        this.fail = Long.parseLong(fail);
+        this.inflight = Integer.parseInt(inflight);
+    }
+
+    public int getPid() {
+        return pid;
+    }
+
+    public void setPid(int pid) {
+        this.pid = pid;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getReady() {
+        return ready;
+    }
+
+    public void setReady(String ready) {
+        this.ready = ready;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getAge() {
+        return age;
+    }
+
+    public void setAge(String age) {
+        this.age = age;
+    }
+
+    public long getTotal() {
+        return total;
+    }
+
+    public void setTotal(long total) {
+        this.total = total;
+    }
+
+    public long getFail() {
+        return fail;
+    }
+
+    public void setFail(long fail) {
+        this.fail = fail;
+    }
+
+    public int getInflight() {
+        return inflight;
+    }
+
+    public void setInflight(int inflight) {
+        this.inflight = inflight;
+    }
+
+    public Map<String, Object> toMap() {
+        JsonObject jo = new JsonObject();
+        jo.put("pid", pid);
+        jo.put("name", name);
+        jo.put("ready", ready);
+        jo.put("status", status);
+        jo.put("age", age);
+        jo.put("total", total);
+        jo.put("fail", fail);
+        jo.put("inflight", inflight);
+        return jo;
+    }
+}
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/UpdateListDTO.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/UpdateListDTO.java
new file mode 100644
index 000000000000..6c6c5343a338
--- /dev/null
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/UpdateListDTO.java
@@ -0,0 +1,84 @@
+/*
+ * 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.model;
+
+import java.util.Map;
+
+import org.apache.camel.util.json.JsonObject;
+
+public class UpdateListDTO {
+
+    private String version;
+    private String runtime;
+    private String runtimeVersion;
+    private String description;
+
+    public UpdateListDTO() {
+    }
+
+    public UpdateListDTO(String version, String runtime, String 
runtimeVersion, String description) {
+        this.version = version;
+        this.runtime = runtime;
+        this.runtimeVersion = runtimeVersion;
+        this.description = description;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public String getRuntime() {
+        return runtime;
+    }
+
+    public void setRuntime(String runtime) {
+        this.runtime = runtime;
+    }
+
+    public String getRuntimeVersion() {
+        return runtimeVersion;
+    }
+
+    public void setRuntimeVersion(String runtimeVersion) {
+        this.runtimeVersion = runtimeVersion;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public Map<String, Object> toMap() {
+        JsonObject jo = new JsonObject();
+        jo.put("camelVersion", version);
+        jo.put("runtime", runtime);
+        if (runtimeVersion != null) {
+            jo.put("runtimeVersion", runtimeVersion);
+        }
+        if (description != null) {
+            jo.put("description", description);
+        }
+        return jo;
+    }
+}
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/VersionListDTO.java
 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/VersionListDTO.java
new file mode 100644
index 000000000000..1cc805181e4a
--- /dev/null
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/model/VersionListDTO.java
@@ -0,0 +1,125 @@
+/*
+ * 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.model;
+
+import java.util.Map;
+
+import org.apache.camel.util.json.JsonObject;
+
+public class VersionListDTO {
+
+    private String camelVersion;
+    private String runtime;
+    private String runtimeVersion;
+    private String jdkVersion;
+    private String kind;
+    private String releaseDate;
+    private String eolDate;
+
+    public VersionListDTO() {
+    }
+
+    public VersionListDTO(String camelVersion, String runtime, String 
runtimeVersion, String jdkVersion, String kind,
+                          String releaseDate,
+                          String eolDate) {
+        this.camelVersion = camelVersion;
+        this.runtime = runtime;
+        this.runtimeVersion = runtimeVersion;
+        this.jdkVersion = jdkVersion;
+        this.kind = kind;
+        this.releaseDate = releaseDate;
+        this.eolDate = eolDate;
+    }
+
+    public String getCamelVersion() {
+        return camelVersion;
+    }
+
+    public void setCamelVersion(String camelVersion) {
+        this.camelVersion = camelVersion;
+    }
+
+    public String getRuntime() {
+        return runtime;
+    }
+
+    public void setRuntime(String runtime) {
+        this.runtime = runtime;
+    }
+
+    public String getRuntimeVersion() {
+        return runtimeVersion;
+    }
+
+    public void setRuntimeVersion(String runtimeVersion) {
+        this.runtimeVersion = runtimeVersion;
+    }
+
+    public String getJdkVersion() {
+        return jdkVersion;
+    }
+
+    public void setJdkVersion(String jdkVersion) {
+        this.jdkVersion = jdkVersion;
+    }
+
+    public String getKind() {
+        return kind;
+    }
+
+    public void setKind(String kind) {
+        this.kind = kind;
+    }
+
+    public String getReleaseDate() {
+        return releaseDate;
+    }
+
+    public void setReleaseDate(String releaseDate) {
+        this.releaseDate = releaseDate;
+    }
+
+    public String getEolDate() {
+        return eolDate;
+    }
+
+    public void setEolDate(String eolDate) {
+        this.eolDate = eolDate;
+    }
+
+    public Map<String, Object> toMap() {
+        JsonObject jo = new JsonObject();
+        jo.put("camelVersion", camelVersion);
+        jo.put("runtime", runtime);
+        if (runtimeVersion != null) {
+            jo.put("runtimeVersion", runtimeVersion);
+        }
+        if (jdkVersion != null) {
+            jo.put("jdkVersion", jdkVersion);
+        }
+        if (kind != null) {
+            jo.put("kind", kind);
+        }
+        if (releaseDate != null) {
+            jo.put("releaseDate", releaseDate);
+        }
+        if (eolDate != null) {
+            jo.put("eolDate", eolDate);
+        }
+        return jo;
+    }
+}
diff --git 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateListTest.java
 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateListTest.java
index f5d6569ce3a3..abda8e2d8ffe 100644
--- 
a/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateListTest.java
+++ 
b/dsl/camel-jbang/camel-jbang-core/src/test/java/org/apache/camel/dsl/jbang/core/commands/update/UpdateListTest.java
@@ -34,6 +34,6 @@ public class UpdateListTest extends CamelCommandBaseTest {
 
         List<String> lines = printer.getLines();
         Assertions.assertThat(lines.stream().collect(Collectors.joining("\n")))
-                .contains("Migrates Apache Camel 4 application to Apache Camel 
4.9.0");
+                .contains("Migrates Camel 4 application to Camel 4.9.0");
     }
 }


Reply via email to