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] |===