You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by pp...@apache.org on 2020/05/15 07:18:37 UTC
[camel-quarkus] 06/06: Simplify Maven mojos after the upgrade to
Camel 3.3.0
This is an automated email from the ASF dual-hosted git repository.
ppalaga pushed a commit to branch camel-master
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit 1f5432fb18162d4af10809081f9606a8a0dd459d
Author: Peter Palaga <pp...@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]
|===