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

ppalaga pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git

commit c658f7eb2da3a679d586e6311151374014ebadcb
Author: Peter Palaga <ppal...@redhat.com>
AuthorDate: Wed May 13 19:03:17 2020 +0200

    Simplify Maven mojos after the upgrade to Camel 3.3.0
---
 .../org/apache/camel/quarkus/maven/CqCatalog.java  | 218 +++------------------
 .../org/apache/camel/quarkus/maven/CqUtils.java    |  12 ++
 .../quarkus/maven/PrepareCatalogQuarkusMojo.java   | 161 +++++++--------
 .../quarkus/maven/UpdateDocExtensionsListMojo.java |  93 ++++++---
 .../extension-list-templates/readme-components.ftl |   4 +-
 .../readme-dataformats.ftl                         |   4 +-
 .../extension-list-templates/readme-languages.ftl  |   4 +-
 .../extension-list-templates/readme-others.ftl     |   4 +-
 8 files changed, 180 insertions(+), 320 deletions(-)

diff --git 
a/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CqCatalog.java
 
b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CqCatalog.java
index 1a971a4..f2d12bd 100644
--- 
a/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CqCatalog.java
+++ 
b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CqCatalog.java
@@ -24,19 +24,16 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
-import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
 import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.catalog.DefaultCamelCatalog;
 import org.apache.camel.catalog.DefaultVersionManager;
+import org.apache.camel.catalog.Kind;
 import org.apache.camel.catalog.RuntimeProvider;
 import org.apache.camel.catalog.impl.CatalogHelper;
 import org.apache.camel.tooling.model.ArtifactModel;
-import org.apache.camel.tooling.model.BaseModel;
 import org.apache.camel.tooling.model.ComponentModel;
 
 public class CqCatalog {
@@ -76,208 +73,39 @@ public class CqCatalog {
         }
     }
 
-    public List<WrappedModel> filterModels(String artifactIdBase) {
+    public List<ArtifactModel<?>> filterModels(String artifactIdBase) {
         List<String> camelArtifactIds = toCamelArtifactIdBase(artifactIdBase);
-        return Stream.of(Kind.values())
-                .flatMap(kind -> kind.all(this))
-                .filter(wrappedModel -> 
camelArtifactIds.contains(wrappedModel.delegate.getArtifactId()))
+        return models()
+                .filter(model -> 
camelArtifactIds.contains(model.getArtifactId()))
                 .collect(Collectors.toList());
     }
 
-    enum Kind {
-        component() {
-            @Override
-            public Optional<WrappedModel> load(CqCatalog catalog, String name) 
{
-                final ArtifactModel<?> delegate = 
catalog.catalog.componentModel(name);
-                return Optional.ofNullable(delegate == null ? null : new 
WrappedModel(catalog, this, delegate));
-            }
-
-            @Override
-            protected Stream<WrappedModel> all(CqCatalog catalog) {
-                return catalog.catalog.findComponentNames().stream()
-                        .map(name -> new WrappedModel(catalog, this, 
catalog.catalog.componentModel(name)));
-            }
-
-            @Override
-            protected String getJson(CqCatalog catalog, BaseModel<?> delegate) 
{
-                return catalog.catalog.componentJSonSchema(delegate.getName());
-            }
-        },
-        language() {
-            @Override
-            public Optional<WrappedModel> load(CqCatalog catalog, String name) 
{
-                final ArtifactModel<?> delegate = 
catalog.catalog.languageModel(name);
-                return Optional.ofNullable(delegate == null ? null : new 
WrappedModel(catalog, this, delegate));
-            }
-
-            @Override
-            protected Stream<WrappedModel> all(CqCatalog catalog) {
-                return catalog.catalog.findLanguageNames().stream()
-                        .map(name -> new WrappedModel(catalog, this, 
catalog.catalog.languageModel(name)));
-            }
-
-            @Override
-            protected String getJson(CqCatalog catalog, BaseModel<?> delegate) 
{
-                return catalog.catalog.languageJSonSchema(delegate.getName());
-            }
-        },
-        dataformat() {
-            @Override
-            public Optional<WrappedModel> load(CqCatalog catalog, String name) 
{
-                final ArtifactModel<?> delegate = 
catalog.catalog.dataFormatModel(name);
-                return Optional.ofNullable(delegate == null ? null : new 
WrappedModel(catalog, this, delegate));
-            }
-
-            @Override
-            protected Stream<WrappedModel> all(CqCatalog catalog) {
-                return catalog.catalog.findDataFormatNames().stream()
-                        .map(name -> new WrappedModel(catalog, this, 
catalog.catalog.dataFormatModel(name)));
-            }
-
-            @Override
-            protected String getJson(CqCatalog catalog, BaseModel<?> delegate) 
{
-                return 
catalog.catalog.dataFormatJSonSchema(delegate.getName());
-            }
-        },
-        other() {
-            @Override
-            public Optional<WrappedModel> load(CqCatalog catalog, String name) 
{
-                final ArtifactModel<?> delegate = 
catalog.catalog.otherModel(name);
-                return Optional.ofNullable(delegate == null ? null : new 
WrappedModel(catalog, this, delegate));
-            }
-
-            @Override
-            protected Stream<WrappedModel> all(CqCatalog catalog) {
-                return catalog.catalog.findOtherNames().stream()
-                        .map(name -> new WrappedModel(catalog, this, 
catalog.catalog.otherModel(name)));
-            }
-
-            @Override
-            protected String getJson(CqCatalog catalog, BaseModel<?> delegate) 
{
-                return catalog.catalog.otherJSonSchema(delegate.getName());
-            }
-        };
-
-        public abstract Optional<WrappedModel> load(CqCatalog catalog, String 
name);
-
-        protected abstract Stream<WrappedModel> all(CqCatalog catalog);
-
-        protected abstract String getJson(CqCatalog catalog, BaseModel<?> 
delegate);
-
-        public String getPluralName() {
-            return name() + "s";
-        }
+    public Stream<ArtifactModel<?>> models() {
+        return kinds()
+                .flatMap(kind -> models(kind));
     }
 
-    public static class WrappedModel implements Comparable<WrappedModel> {
-        final ArtifactModel<?> delegate;
-        final Kind kind;
-        final CqCatalog catalog;
-        final String supportLevel;
-        final String target;
-
-        public WrappedModel(CqCatalog catalog, Kind kind, ArtifactModel<?> 
delegate) {
-            super();
-            this.catalog = catalog;
-            this.kind = kind;
-            this.delegate = delegate;
-            final JsonObject json = getJson().getAsJsonObject(kind.name());
-            String sl = null;
-            try {
-                sl = json.get("supportLevel").getAsString();
-            } catch (Exception ignored) {
-            }
-            this.supportLevel = sl;
-            String t = null;
-            try {
-                t = json.get("compilationTarget").getAsString();
-            } catch (Exception ignored) {
-            }
-            this.target = t;
-        }
-
-        public String getArtifactId() {
-            return delegate.getArtifactId();
-        }
-
-        public String getArtifactIdBase() {
-            final String artifactId = delegate.getArtifactId();
-            if (artifactId.startsWith("camel-quarkus-")) {
-                return artifactId.substring("camel-quarkus-".length());
-            } else if (artifactId.startsWith("camel-")) {
-                return artifactId.substring("camel-".length());
-            }
-            throw new IllegalStateException(
-                    "Unexpected artifactId " + artifactId + "; expected one 
starting with camel-quarkus- or camel-");
-        }
+    public Stream<ArtifactModel<?>> models(org.apache.camel.catalog.Kind kind) 
{
+        return catalog.findNames(kind).stream().map(name -> (ArtifactModel<?>) 
catalog.model(kind, name));
+    }
 
-        public String getKind() {
-            return kind.name();
-        }
+    public static Stream<Kind> kinds() {
+        return Stream.of(Kind.values())
+                .filter(kind -> kind != org.apache.camel.catalog.Kind.eip);
+    }
 
-        public boolean isFirstScheme() {
-            switch (kind) {
-            case component:
-                final String altSchemes = ((ComponentModel) 
delegate).getAlternativeSchemes();
-                if (altSchemes == null || altSchemes.isEmpty()) {
-                    return true;
-                } else {
-                    final String scheme = delegate.getName();
-                    return altSchemes.equals(scheme) || 
altSchemes.startsWith(scheme + ",");
-                }
-            default:
+    public static boolean isFirstScheme(ArtifactModel<?> model) {
+        if (model.getKind().equals("component")) {
+            final String altSchemes = ((ComponentModel) 
model).getAlternativeSchemes();
+            if (altSchemes == null || altSchemes.isEmpty()) {
                 return true;
+            } else {
+                final String scheme = model.getName();
+                return altSchemes.equals(scheme) || 
altSchemes.startsWith(scheme + ",");
             }
+        } else {
+            return true;
         }
-
-        public String getSyntax() {
-            switch (kind) {
-            case component:
-                return ((ComponentModel) delegate).getSyntax();
-            default:
-                throw new UnsupportedOperationException(kind.getPluralName() + 
" do not have syntax");
-            }
-        }
-
-        public String getFirstVersion() {
-            return delegate.getFirstVersion();
-        }
-
-        public String getTitle() {
-            return delegate.getTitle();
-        }
-
-        public String getDescription() {
-            return delegate.getDescription();
-        }
-
-        public boolean isDeprecated() {
-            return delegate.isDeprecated();
-        }
-
-        public JsonObject getJson() {
-            final JsonParser jsonParser = new JsonParser();
-            return (JsonObject) jsonParser.parse(kind.getJson(catalog, 
delegate));
-        }
-
-        @Override
-        public String toString() {
-            return "WrappedModel [scheme=" + delegate.getName() + ", kind=" + 
getKind() + "]";
-        }
-
-        @Override
-        public int compareTo(WrappedModel other) {
-            return this.getTitle().compareToIgnoreCase(other.getTitle());
-        }
-
-        public String getSupportLevel() {
-            return supportLevel;
-        }
-
-        public String getTarget() {
-            return target;
-        }
-
     }
 
     static class CqVersionManager extends DefaultVersionManager {
diff --git 
a/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CqUtils.java
 
b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CqUtils.java
index c8cb31f..2122603 100644
--- 
a/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CqUtils.java
+++ 
b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/CqUtils.java
@@ -27,6 +27,7 @@ import freemarker.cache.MultiTemplateLoader;
 import freemarker.cache.TemplateLoader;
 import freemarker.template.Configuration;
 import freemarker.template.TemplateExceptionHandler;
+import org.apache.camel.tooling.model.ArtifactModel;
 import org.apache.maven.model.Model;
 
 public class CqUtils {
@@ -94,4 +95,15 @@ public class CqUtils {
                         : null;
     }
 
+    public static String getArtifactIdBase(ArtifactModel<?> model) {
+        final String artifactId = model.getArtifactId();
+        if (artifactId.startsWith("camel-quarkus-")) {
+            return artifactId.substring("camel-quarkus-".length());
+        } else if (artifactId.startsWith("camel-")) {
+            return artifactId.substring("camel-".length());
+        }
+        throw new IllegalStateException(
+                "Unexpected artifactId " + artifactId + "; expected one 
starting with camel-quarkus- or camel-");
+    }
+
 }
diff --git 
a/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/PrepareCatalogQuarkusMojo.java
 
b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/PrepareCatalogQuarkusMojo.java
index 5693571..0445271 100644
--- 
a/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/PrepareCatalogQuarkusMojo.java
+++ 
b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/PrepareCatalogQuarkusMojo.java
@@ -19,12 +19,11 @@ package org.apache.camel.quarkus.maven;
 import java.io.File;
 import java.io.IOException;
 import java.io.Reader;
-import java.io.Writer;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.Collections;
-import java.util.EnumMap;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
@@ -33,11 +32,14 @@ import java.util.Set;
 import java.util.TreeSet;
 import java.util.stream.Collectors;
 
-import com.google.gson.Gson;
-import com.google.gson.GsonBuilder;
-import com.google.gson.JsonObject;
-import org.apache.camel.quarkus.maven.CqCatalog.Kind;
-import org.apache.camel.quarkus.maven.CqCatalog.WrappedModel;
+import org.apache.camel.catalog.Kind;
+import org.apache.camel.tooling.model.ArtifactModel;
+import org.apache.camel.tooling.model.ComponentModel;
+import org.apache.camel.tooling.model.DataFormatModel;
+import org.apache.camel.tooling.model.JsonMapper;
+import org.apache.camel.tooling.model.LanguageModel;
+import org.apache.camel.tooling.model.OtherModel;
+import org.apache.camel.tooling.model.SupportLevel;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
@@ -82,12 +84,9 @@ public class PrepareCatalogQuarkusMojo extends AbstractMojo {
             skipArtifactIdBases = Collections.emptySet();
         }
 
-        final Map<Kind, Set<String>> schemesByKind = new EnumMap<>(Kind.class);
-        for (Kind kind : Kind.values()) {
-            schemesByKind.put(kind, new TreeSet<>());
-        }
+        final Map<String, Set<String>> schemesByKind = new LinkedHashMap<>();
+        CqCatalog.kinds().forEach(kind -> schemesByKind.put(kind.name(), new 
TreeSet<>()));
 
-        final Gson gson = new 
GsonBuilder().enableComplexMapKeySerialization().setPrettyPrinting().create();
         final CqCatalog catalog = new CqCatalog();
         extensionDirectories.stream()
                 .map(File::toPath)
@@ -95,107 +94,99 @@ public class PrepareCatalogQuarkusMojo extends 
AbstractMojo {
                     CqUtils.findExtensionArtifactIdBases(extDir)
                             .filter(artifactIdBase -> 
!skipArtifactIdBases.contains(artifactIdBase))
                             .forEach(artifactIdBase -> {
-                                final List<WrappedModel> models = 
catalog.filterModels(artifactIdBase);
+                                final List<ArtifactModel<?>> models = 
catalog.filterModels(artifactIdBase);
                                 final CamelQuarkusExtension ext = 
CamelQuarkusExtension
                                         
.read(extDir.resolve(artifactIdBase).resolve("pom.xml"), catalog);
                                 final boolean nativeSupported = 
!extDir.getFileName().toString().endsWith("-jvm");
                                 if (models.isEmpty()) {
-                                    appendOther(ext, nativeSupported, 
schemesByKind, gson, catalogPath);
+                                    final OtherModel model = new OtherModel();
+                                    final String name = 
ext.getRuntimeArtifactId().replace("camel-quarkus-", "");
+                                    model.setName(name);
+                                    final String title = 
ext.getName().orElseThrow(() -> new RuntimeException(
+                                            "name is missing in " + 
ext.getRuntimePomXmlPath()));
+                                    model.setTitle(title);
+                                    
model.setDescription(ext.getDescription().orElseThrow(() -> new 
RuntimeException(
+                                            "description is missing in " + 
ext.getRuntimePomXmlPath())));
+                                    
model.setDeprecated(title.contains("(deprecated)"));
+                                    
model.setLabel(ext.getLabel().orElse("quarkus"));
+                                    update(model, ext, nativeSupported);
+                                    serialize(catalogPath, model);
+                                    
schemesByKind.get(model.getKind()).add(model.getName());
                                 } else {
-                                    for (WrappedModel model : models) {
-                                        final JsonObject newCatalogEntry = 
model.getJson();
-                                        final JsonObject kindObject = 
newCatalogEntry.get(model.kind.name()).getAsJsonObject();
-                                        final String firstVersion = 
ext.getFirstVersion()
-                                                .orElseThrow(() -> new 
RuntimeException(
-                                                        "firstVersion property 
is missing in " + ext.getRuntimePomXmlPath()));
-                                        // lets use the camel-quarkus version 
as first version instead of Apache Camel
-                                        // version
-                                        kindObject.addProperty("firstVersion", 
firstVersion);
-
-                                        // update json metadata to adapt to 
camel-quarkus-catalog
-                                        kindObject.addProperty("groupId", 
"org.apache.camel.quarkus");
-                                        kindObject.addProperty("artifactId", 
ext.getRuntimeArtifactId());
-                                        kindObject.addProperty("version", 
ext.getVersion());
-                                        
kindObject.addProperty("compilationTarget", nativeSupported ? "Native" : "JVM");
-                                        kindObject.addProperty("supportLevel", 
nativeSupported ? "Stable" : "Preview");
-
-                                        final Path out = 
catalogPath.resolve(model.kind.getPluralName())
-                                                
.resolve(model.delegate.getName() + ".json");
-                                        try {
-                                            
Files.createDirectories(out.getParent());
-                                        } catch (IOException e) {
-                                            throw new RuntimeException("Could 
not create " + out.getParent(), e);
-                                        }
-                                        try (Writer w = 
Files.newBufferedWriter(out, StandardCharsets.UTF_8)) {
-                                            gson.toJson(newCatalogEntry, w);
-                                        } catch (IOException e) {
-                                            throw new RuntimeException("Could 
not write to " + out);
-                                        }
-
-                                        
schemesByKind.get(model.kind).add(model.delegate.getName());
-
+                                    for (ArtifactModel<?> model : models) {
+                                        update(model, ext, nativeSupported);
+                                        serialize(catalogPath, model);
+                                        
schemesByKind.get(model.getKind()).add(model.getName());
                                     }
                                 }
                             });
                 });
 
-        for (Kind kind : Kind.values()) {
-            final Path newCatalog = catalogPath.resolve(kind.getPluralName() + 
".properties");
+        CqCatalog.kinds().forEach(kind -> {
+            final Path newCatalog = catalogPath.resolve(kind.name() + 
"s.properties");
             try {
                 Files.createDirectories(newCatalog.getParent());
                 Files.write(newCatalog,
-                        
schemesByKind.get(kind).stream().collect(Collectors.joining("\n")).getBytes(StandardCharsets.UTF_8));
+                        
schemesByKind.get(kind.name()).stream().collect(Collectors.joining("\n"))
+                                .getBytes(StandardCharsets.UTF_8));
             } catch (IOException e) {
-                throw new MojoExecutionException("Could not write to " + 
newCatalog);
+                throw new RuntimeException("Could not write to " + newCatalog);
             }
-        }
+        });
 
     }
 
-    void appendOther(CamelQuarkusExtension ext, boolean nativeSupported, 
Map<Kind, Set<String>> schemesByKind, Gson gson,
-            Path catalogPath) {
-        final JsonObject other = new JsonObject();
-        String firstVersion = ext.getFirstVersion().orElseThrow(() -> new 
RuntimeException(
-                "firstVersion property is missing in " + 
ext.getRuntimePomXmlPath()));
-        other.addProperty("firstVersion", firstVersion);
-        final Kind kind = Kind.other;
-        final String name = 
ext.getRuntimeArtifactId().replace("camel-quarkus-", "");
-        schemesByKind.get(kind).add(name);
-        other.addProperty("name", name);
-        final String title = ext.getName().orElseThrow(() -> new 
RuntimeException(
-                "name is missing in " + ext.getRuntimePomXmlPath()));
-        other.addProperty("title", title);
-        other.addProperty("description", ext.getDescription().orElseThrow(() 
-> new RuntimeException(
-                "description is missing in " + ext.getRuntimePomXmlPath())));
-        if (title.contains("(deprecated)")) {
-            other.addProperty("deprecated", "true");
-        } else {
-            other.addProperty("deprecated", "false");
-        }
-        other.addProperty("label", ext.getLabel().orElse("quarkus"));
-        other.addProperty("groupId", "org.apache.camel.quarkus");
-        other.addProperty("artifactId", ext.getRuntimeArtifactId());
-        other.addProperty("version", ext.getVersion());
-        other.addProperty("compilationTarget", nativeSupported ? "Native" : 
"JVM");
-        other.addProperty("supportLevel", nativeSupported ? "Stable" : 
"Preview");
-
-        final JsonObject json = new JsonObject();
-        json.add("other", other);
-
-        // write new json file
-        final Path out = 
catalogPath.resolve(kind.getPluralName()).resolve(name + ".json");
+    private void serialize(final Path catalogPath, ArtifactModel<?> model) {
+        final Path out = catalogPath.resolve(model.getKind() + "s")
+                .resolve(model.getName() + ".json");
         try {
             Files.createDirectories(out.getParent());
         } catch (IOException e) {
             throw new RuntimeException("Could not create " + out.getParent(), 
e);
         }
-        try (Writer w = Files.newBufferedWriter(out, StandardCharsets.UTF_8)) {
-            gson.toJson(json, w);
+        String rawJson;
+        switch (Kind.valueOf(model.getKind())) {
+        case component:
+            rawJson = JsonMapper.createParameterJsonSchema((ComponentModel) 
model);
+            break;
+        case language:
+            rawJson = JsonMapper.createParameterJsonSchema((LanguageModel) 
model);
+            break;
+        case dataformat:
+            rawJson = JsonMapper.createParameterJsonSchema((DataFormatModel) 
model);
+            break;
+        case other:
+            rawJson = JsonMapper.createJsonSchema((OtherModel) model);
+            break;
+        default:
+            throw new IllegalStateException("Cannot serialize kind " + 
model.getKind());
+        }
+
+        try {
+            Files.write(out, rawJson.getBytes(StandardCharsets.UTF_8));
         } catch (IOException e) {
             throw new RuntimeException("Could not write to " + out);
         }
     }
 
+    private static void update(ArtifactModel<?> model, CamelQuarkusExtension 
ext, boolean nativeSupported) {
+        final String firstVersion = ext.getFirstVersion()
+                .orElseThrow(() -> new RuntimeException(
+                        "firstVersion property is missing in " + 
ext.getRuntimePomXmlPath()));
+        // lets use the camel-quarkus version as first version instead of 
Apache Camel
+        // version
+
+        model.setFirstVersion(firstVersion);
+
+        // update json metadata to adapt to camel-quarkus-catalog
+        model.setGroupId("org.apache.camel.quarkus");
+        model.setArtifactId(ext.getRuntimeArtifactId());
+        model.setVersion(ext.getVersion());
+        model.setNativeSupported(nativeSupported);
+        model.setSupportLevel(nativeSupported ? SupportLevel.Stable : 
SupportLevel.Preview);
+
+    }
+
     static class CamelQuarkusExtension {
 
         public static CamelQuarkusExtension read(Path parentPomXmlPath, 
CqCatalog catalog) {
diff --git 
a/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateDocExtensionsListMojo.java
 
b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateDocExtensionsListMojo.java
index 9e17590..e61bdc5 100644
--- 
a/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateDocExtensionsListMojo.java
+++ 
b/tooling/package-maven-plugin/src/main/java/org/apache/camel/quarkus/maven/UpdateDocExtensionsListMojo.java
@@ -25,6 +25,7 @@ import java.nio.file.Path;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
@@ -36,10 +37,12 @@ import freemarker.template.TemplateException;
 import freemarker.template.TemplateMethodModelEx;
 import freemarker.template.TemplateModelException;
 import freemarker.template.utility.DeepUnwrap;
-import org.apache.camel.quarkus.maven.CqCatalog.Kind;
-import org.apache.camel.quarkus.maven.CqCatalog.WrappedModel;
+import org.apache.camel.catalog.Kind;
+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.SupportLevel;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
@@ -102,67 +105,93 @@ public class UpdateDocExtensionsListMojo extends 
AbstractMojo {
 
         final Configuration cfg = CqUtils.getTemplateConfig(basePath, 
DEFAULT_TEMPLATES_URI_BASE, templatesUriBase, encoding);
 
-        String document;
+        AtomicReference<String> document;
         try {
-            document = new String(Files.readAllBytes(extensionListPath), 
encoding);
+            document = new AtomicReference<>(new 
String(Files.readAllBytes(extensionListPath), encoding));
         } catch (IOException e) {
             throw new RuntimeException("Could not read " + extensionListPath, 
e);
         }
         final GetDocLink getDocLink = new 
GetDocLink(extensionListPath.getParent().resolve("extensions"));
+        final TemplateMethodModelEx getSupportLevel = new 
TemplateMethodModelEx() {
+            @Override
+            public Object exec(List arguments) throws TemplateModelException {
+                if (arguments.size() != 1) {
+                    throw new TemplateModelException("Wrong argument count in 
getSupportLevel()");
+                }
+                ArtifactModel<?> model = (ArtifactModel<?>) 
DeepUnwrap.unwrap((StringModel) arguments.get(0));
+                return model.getSupportLevel() == SupportLevel.Stable ? 
SupportLevel.Stable.name()
+                        : SupportLevel.Preview.name();
+            }
+        };
+        final TemplateMethodModelEx getTarget = new TemplateMethodModelEx() {
+            @Override
+            public Object exec(List arguments) throws TemplateModelException {
+                if (arguments.size() != 1) {
+                    throw new TemplateModelException("Wrong argument count in 
getTarget()");
+                }
+                ArtifactModel<?> model = (ArtifactModel<?>) 
DeepUnwrap.unwrap((StringModel) arguments.get(0));
+                return model.isNativeSupported() ? "Native" : "JVM";
+            }
+        };
         final CqCatalog catalog = new CqCatalog(catalogBasePath);
-        for (Kind kind : Kind.values()) {
 
-            final Map<String, Object> model = new HashMap<>(3);
-            final List<WrappedModel> models = kind.all(catalog)
-                    .filter(WrappedModel::isFirstScheme)
+        final Map<String, Object> model = new 
HashMap<>(org.apache.camel.catalog.Kind.values().length);
+
+        CqCatalog.kinds().forEach(kind -> {
+            final List<ArtifactModel<?>> models = catalog.models(kind)
+                    .filter(CqCatalog::isFirstScheme)
                     .peek(m -> {
                         // special for camel-mail where we want to refer its 
imap scheme to mail so its mail.adoc in the
                         // doc link
-                        if ("imap".equals(m.delegate.getName())) {
-                            final ComponentModel delegate = (ComponentModel) 
m.delegate;
+                        if ("imap".equals(m.getName())) {
+                            final ComponentModel delegate = (ComponentModel) m;
                             delegate.setName("mail");
                             delegate.setTitle("Mail");
                         }
-                        if (m.delegate.getName().startsWith("bindy")) {
-                            final DataFormatModel delegate = (DataFormatModel) 
m.delegate;
+                        if (m.getName().startsWith("bindy")) {
+                            final DataFormatModel delegate = (DataFormatModel) 
m;
                             delegate.setName("bindy");
                         }
                         // TODO: Fix typo in ES REST metadata. Remove for 
Camel 3.3.0.
-                        if (m.delegate.getName().equals("elasticsearch-rest")) 
{
-                            final ComponentModel delegate = (ComponentModel) 
m.delegate;
+                        if (m.getName().equals("elasticsearch-rest")) {
+                            final ComponentModel delegate = (ComponentModel) m;
                             delegate.setTitle("Elasticsearch Rest");
                         }
                     })
-                    .sorted()
+                    .sorted(BaseModel.compareTitle())
                     .collect(Collectors.toList());
             model.put("components", models);
             final int artifactIdCount = models.stream()
-                    .map(WrappedModel::getArtifactId)
+                    .map(ArtifactModel::getArtifactId)
                     .collect(toSet()).size();
             model.put("numberOfArtifacts", artifactIdCount);
             final long deprecatedCount = models.stream()
-                    .filter(m -> m.delegate.isDeprecated())
+                    .filter(m -> m.isDeprecated())
                     .count();
             model.put("numberOfDeprecated", deprecatedCount);
             model.put("getDocLink", getDocLink);
+            model.put("getSupportLevel", getSupportLevel);
+            model.put("getTarget", getTarget);
 
-            final String extList = evalTemplate(cfg, "readme-" + 
kind.getPluralName() + ".ftl", model);
-            document = replace(document, extensionListPath, extList, kind);
-        }
+            final String extList = evalTemplate(cfg, "readme-" + kind.name() + 
"s.ftl", model);
+            replace(document, extensionListPath, extList, kind);
+        });
 
         try {
-            Files.write(extensionListPath, document.getBytes(encoding));
+            Files.write(extensionListPath, document.get().getBytes(encoding));
         } catch (IOException e) {
             throw new RuntimeException("Could not write to " + 
extensionListPath, e);
         }
 
     }
 
-    static String replace(String document, Path documentPath, String list, 
Kind kind) {
-        final Pattern pat = Pattern.compile("(" + Pattern.quote("// " + 
kind.getPluralName() + ": START\n") + ")(.*)("
-                + Pattern.quote("// " + kind.getPluralName() + ": END\n") + 
")", Pattern.DOTALL);
+    static void replace(AtomicReference<String> ref, Path documentPath, String 
list, org.apache.camel.catalog.Kind kind) {
+        final Pattern pat = Pattern.compile("(" + Pattern.quote("// " + 
kind.name() + "s: START\n") + ")(.*)("
+                + Pattern.quote("// " + kind.name() + "s: END\n") + ")", 
Pattern.DOTALL);
 
+        final String document = ref.get();
         final Matcher m = pat.matcher(document);
+
         final StringBuffer sb = new StringBuffer(document.length());
         if (m.find()) {
             m.appendReplacement(sb, "$1" + Matcher.quoteReplacement(list) + 
"$3");
@@ -170,7 +199,7 @@ public class UpdateDocExtensionsListMojo extends 
AbstractMojo {
             throw new IllegalStateException("Could not find " + pat.pattern() 
+ " in " + documentPath + ":\n\n" + document);
         }
         m.appendTail(sb);
-        return sb.toString();
+        ref.set(sb.toString());
     }
 
     static String evalTemplate(Configuration cfg, String templateUri, 
Map<String, Object> model) {
@@ -202,29 +231,29 @@ public class UpdateDocExtensionsListMojo extends 
AbstractMojo {
             if (arguments.size() != 1) {
                 throw new TemplateModelException("Wrong argument count in 
toCamelCase()");
             }
-            WrappedModel model = (WrappedModel) 
DeepUnwrap.unwrap((StringModel) arguments.get(0));
+            ArtifactModel<?> model = (ArtifactModel<?>) 
DeepUnwrap.unwrap((StringModel) arguments.get(0));
             if (localDocExists(model)) {
                 return getLocalDocLink(model);
-            } else if (model.kind == Kind.other) {
+            } else if (Kind.other.name().equals(model.getKind())) {
                 return null;
             } else {
                 return 
String.format("link:https://camel.apache.org/components/latest/%s-%s.html";,
-                        model.delegate.getName(),
+                        model.getName(),
                         model.getKind());
             }
         }
 
-        private boolean localDocExists(WrappedModel model) {
+        private boolean localDocExists(ArtifactModel<?> model) {
             final Path path = 
extensionsDocPath.resolve(getExtensionDocName(model));
             return path.toFile().exists();
         }
 
-        private String getLocalDocLink(WrappedModel model) {
+        private String getLocalDocLink(ArtifactModel<?> model) {
             return "xref:extensions/" + getExtensionDocName(model);
         }
 
-        private String getExtensionDocName(WrappedModel model) {
-            return model.getArtifactIdBase() + ".adoc";
+        private String getExtensionDocName(ArtifactModel<?> model) {
+            return CqUtils.getArtifactIdBase(model) + ".adoc";
         }
 
     }
diff --git 
a/tooling/package-maven-plugin/src/main/resources/extension-list-templates/readme-components.ftl
 
b/tooling/package-maven-plugin/src/main/resources/extension-list-templates/readme-components.ftl
index b0cb97e..89579a7 100644
--- 
a/tooling/package-maven-plugin/src/main/resources/extension-list-templates/readme-components.ftl
+++ 
b/tooling/package-maven-plugin/src/main/resources/extension-list-templates/readme-components.ftl
@@ -7,8 +7,8 @@ Level | Since | Description
 [#list components as row]
 
 | [=getDocLink(row)][[=row.title]] ([=row.artifactId]) +
-`[=row.syntax]` | [=row.target] +
- [=row.supportLevel] | [=row.firstVersion] | [#if row.deprecated]*deprecated* 
[/#if][=row.description]
+`[=row.syntax]` | [=getTarget(row)] +
+ [=getSupportLevel(row)] | [=row.firstVersion] | [#if 
row.deprecated]*deprecated* [/#if][=row.description]
 [/#list]
 
 |===
diff --git 
a/tooling/package-maven-plugin/src/main/resources/extension-list-templates/readme-dataformats.ftl
 
b/tooling/package-maven-plugin/src/main/resources/extension-list-templates/readme-dataformats.ftl
index bb74b82..792e1db 100644
--- 
a/tooling/package-maven-plugin/src/main/resources/extension-list-templates/readme-dataformats.ftl
+++ 
b/tooling/package-maven-plugin/src/main/resources/extension-list-templates/readme-dataformats.ftl
@@ -6,7 +6,7 @@ Number of Camel data formats: [=components?size] in 
[=numberOfArtifacts] JAR art
 Level | Since | Description
 [#list components as row]
 
-| [=getDocLink(row)][[=row.title]] ([=row.artifactId]) | [=row.target] +
- [=row.supportLevel] | [=row.firstVersion] | [#if row.deprecated]*deprecated* 
[/#if][=row.description]
+| [=getDocLink(row)][[=row.title]] ([=row.artifactId]) | [=getTarget(row)] +
+ [=getSupportLevel(row)] | [=row.firstVersion] | [#if 
row.deprecated]*deprecated* [/#if][=row.description]
 [/#list]
 |===
diff --git 
a/tooling/package-maven-plugin/src/main/resources/extension-list-templates/readme-languages.ftl
 
b/tooling/package-maven-plugin/src/main/resources/extension-list-templates/readme-languages.ftl
index 3defb57..ced46ba 100644
--- 
a/tooling/package-maven-plugin/src/main/resources/extension-list-templates/readme-languages.ftl
+++ 
b/tooling/package-maven-plugin/src/main/resources/extension-list-templates/readme-languages.ftl
@@ -6,7 +6,7 @@ Number of Camel languages: [=components?size] in 
[=numberOfArtifacts] JAR artifa
 Level | Since | Description
 [#list components as row]
 
-| [=getDocLink(row)][[=row.title]] ([=row.artifactId]) | [=row.target] +
- [=row.supportLevel] | [=row.firstVersion] | [#if row.deprecated]*deprecated* 
[/#if][=row.description]
+| [=getDocLink(row)][[=row.title]] ([=row.artifactId]) | [=getTarget(row)] +
+ [=getSupportLevel(row)] | [=row.firstVersion] | [#if 
row.deprecated]*deprecated* [/#if][=row.description]
 [/#list]
 |===
diff --git 
a/tooling/package-maven-plugin/src/main/resources/extension-list-templates/readme-others.ftl
 
b/tooling/package-maven-plugin/src/main/resources/extension-list-templates/readme-others.ftl
index 90b4669..25a54dd 100644
--- 
a/tooling/package-maven-plugin/src/main/resources/extension-list-templates/readme-others.ftl
+++ 
b/tooling/package-maven-plugin/src/main/resources/extension-list-templates/readme-others.ftl
@@ -5,7 +5,7 @@ Number of miscellaneous extensions: [=components?size] in 
[=numberOfArtifacts] J
 | Extension | Target Level | Since | Description
 [#list components as row]
 
-|[#if getDocLink(row)??] [=getDocLink(row)][[=row.artifactId]] [#else] 
([=row.artifactId])[/#if] | [=row.target] +
- [=row.supportLevel] | [=row.firstVersion] | [#if row.deprecated]*deprecated* 
[/#if][=row.description]
+|[#if getDocLink(row)??] [=getDocLink(row)][[=row.artifactId]] [#else] 
([=row.artifactId])[/#if] | [=getTarget(row)] +
+ [=getSupportLevel(row)] | [=row.firstVersion] | [#if 
row.deprecated]*deprecated* [/#if][=row.description]
 [/#list]
 |===

Reply via email to