You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by fm...@apache.org on 2023/03/07 15:01:08 UTC
[camel] 02/08: Backport catalog
This is an automated email from the ASF dual-hosted git repository.
fmariani pushed a commit to branch camel-3.20.x
in repository https://gitbox.apache.org/repos/asf/camel.git
commit 20de31317a525e9c0892fa94bf5257ba73ac9333
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Feb 12 11:24:22 2023 +0100
Backport catalog
---
.../dsl/jbang/core/commands/ExportQuarkus.java | 89 +-----------------
.../dsl/jbang/core/commands/ExportSpringBoot.java | 100 +--------------------
2 files changed, 5 insertions(+), 184 deletions(-)
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
index 4c1010eaafe..fd4bafaf3c3 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportQuarkus.java
@@ -28,21 +28,9 @@ import java.util.Set;
import java.util.StringJoiner;
import java.util.stream.Collectors;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
import org.apache.camel.catalog.CamelCatalog;
-import org.apache.camel.catalog.DefaultCamelCatalog;
-import org.apache.camel.catalog.RuntimeProvider;
+import org.apache.camel.dsl.jbang.core.common.CatalogLoader;
import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
-import org.apache.camel.dsl.jbang.core.common.XmlHelper;
-import org.apache.camel.main.KameletMain;
-import org.apache.camel.main.download.MavenArtifact;
-import org.apache.camel.main.download.MavenDependencyDownloader;
import org.apache.camel.main.download.MavenGav;
import org.apache.camel.tooling.model.ArtifactModel;
import org.apache.camel.util.CamelCaseOrderedProperties;
@@ -53,11 +41,7 @@ import org.apache.commons.io.FileUtils;
class ExportQuarkus extends Export {
- private static final String DEFAULT_CAMEL_CATALOG = "org.apache.camel.catalog.DefaultCamelCatalog";
- private static final String QUARKUS_CATALOG_PROVIDER = "org.apache.camel.catalog.quarkus.QuarkusRuntimeProvider";
-
private String camelVersion;
- private String camelQuarkusVersion;
public ExportQuarkus(CamelJBangMain main) {
super(main);
@@ -243,11 +227,12 @@ class ExportQuarkus extends Export {
// quarkus controls the camel version
String repos = getMavenRepos(prop, quarkusVersion);
- CamelCatalog catalog = loadQuarkusCatalog(repos);
+ CamelCatalog catalog = CatalogLoader.loadQuarkusCatalog(repos, quarkusVersion);
if (camelVersion == null) {
camelVersion = catalog.getCatalogVersion();
}
String camelVersion = catalog.getCatalogVersion();
+ String camelQuarkusVersion = catalog.otherModel("camel-core-engine").getVersion();
context = context.replaceFirst("\\{\\{ \\.GroupId }}", ids[0]);
context = context.replaceFirst("\\{\\{ \\.ArtifactId }}", ids[1]);
@@ -351,7 +336,7 @@ class ExportQuarkus extends Export {
// quarkus controls the camel version
String repos = getMavenRepos(prop, quarkusVersion);
- CamelCatalog catalog = loadQuarkusCatalog(repos);
+ CamelCatalog catalog = CatalogLoader.loadQuarkusCatalog(repos, quarkusVersion);
if (camelVersion == null) {
camelVersion = catalog.getCatalogVersion();
}
@@ -455,70 +440,4 @@ class ExportQuarkus extends Export {
return answer;
}
- private CamelCatalog loadQuarkusCatalog(String repos) {
- CamelCatalog answer = new DefaultCamelCatalog(true);
-
- // use kamelet-main to dynamic download dependency via maven
- KameletMain main = new KameletMain();
- try {
- main.setRepos(repos);
- main.start();
-
- // shrinkwrap does not return POM file as result (they are hardcoded to be filtered out)
- // so after this we download a JAR and then use its File location to compute the file for the downloaded POM
- MavenDependencyDownloader downloader = main.getCamelContext().hasService(MavenDependencyDownloader.class);
- MavenArtifact ma = downloader.downloadArtifact("io.quarkus.platform", "quarkus-camel-bom:pom", quarkusVersion);
- if (ma != null && ma.getFile() != null) {
- String name = ma.getFile().getAbsolutePath();
- File file = new File(name);
- if (file.exists()) {
- DocumentBuilderFactory dbf = XmlHelper.createDocumentBuilderFactory();
- DocumentBuilder db = dbf.newDocumentBuilder();
- Document dom = db.parse(file);
-
- // grab what exact camelVersion and camelQuarkusVersion we are using
- NodeList nl = dom.getElementsByTagName("dependency");
- for (int i = 0; i < nl.getLength(); i++) {
- Element node = (Element) nl.item(i);
- String g = node.getElementsByTagName("groupId").item(0).getTextContent();
- String a = node.getElementsByTagName("artifactId").item(0).getTextContent();
- if ("org.apache.camel".equals(g) && "camel-core-engine".equals(a)) {
- camelVersion = node.getElementsByTagName("version").item(0).getTextContent();
- } else if ("org.apache.camel.quarkus".equals(g) && "camel-quarkus-catalog".equals(a)) {
- camelQuarkusVersion = node.getElementsByTagName("version").item(0).getTextContent();
- }
- }
- }
- }
-
- if (camelQuarkusVersion != null) {
- // download camel-quarkus-catalog we use to know if we have an extension or not
- downloader.downloadDependency("org.apache.camel.quarkus", "camel-quarkus-catalog", camelQuarkusVersion);
-
- Class<RuntimeProvider> clazz = main.getCamelContext().getClassResolver().resolveClass(QUARKUS_CATALOG_PROVIDER,
- RuntimeProvider.class);
- if (clazz != null) {
- RuntimeProvider provider = main.getCamelContext().getInjector().newInstance(clazz);
- if (provider != null) {
- // re-create answer with the classloader that loaded quarkus to be able to load resources in this catalog
- Class<CamelCatalog> clazz2
- = main.getCamelContext().getClassResolver().resolveClass(DEFAULT_CAMEL_CATALOG,
- CamelCatalog.class);
- answer = main.getCamelContext().getInjector().newInstance(clazz2);
- answer.setRuntimeProvider(provider);
- // use classloader that loaded quarkus provider to ensure we can load its resources
- answer.getVersionManager().setClassLoader(main.getCamelContext().getApplicationContextClassLoader());
- answer.enableCache();
- }
- }
- }
- } catch (Exception e) {
- // ignore
- } finally {
- main.stop();
- }
-
- return answer;
- }
-
}
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
index b839674fd34..76519f658a2 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportSpringBoot.java
@@ -31,15 +31,8 @@ import java.util.regex.Pattern;
import java.util.stream.Collectors;
import org.apache.camel.catalog.CamelCatalog;
-import org.apache.camel.catalog.DefaultCamelCatalog;
-import org.apache.camel.catalog.RuntimeProvider;
-import org.apache.camel.catalog.VersionManager;
import org.apache.camel.dsl.jbang.core.common.CatalogLoader;
import org.apache.camel.dsl.jbang.core.common.RuntimeUtil;
-import org.apache.camel.main.KameletMain;
-import org.apache.camel.main.download.DependencyDownloaderClassLoader;
-import org.apache.camel.main.download.MavenArtifact;
-import org.apache.camel.main.download.MavenDependencyDownloader;
import org.apache.camel.main.download.MavenGav;
import org.apache.camel.tooling.model.ArtifactModel;
import org.apache.camel.util.CamelCaseOrderedProperties;
@@ -50,7 +43,6 @@ import org.apache.commons.io.FileUtils;
class ExportSpringBoot extends Export {
private static final String DEFAULT_CAMEL_CATALOG = "org.apache.camel.catalog.DefaultCamelCatalog";
- private static final String SPRING_BOOT_CATALOG_PROVIDER = "org.apache.camel.springboot.catalog.SpringBootRuntimeProvider";
public ExportSpringBoot(CamelJBangMain main) {
super(main);
@@ -293,7 +285,7 @@ class ExportSpringBoot extends Export {
RuntimeUtil.loadProperties(prop, settings);
String repos = getMavenRepos(prop, camelSpringBootVersion);
- CamelCatalog catalog = loadSpringBootCatalog(repos, camelSpringBootVersion);
+ CamelCatalog catalog = CatalogLoader.loadSpringBootCatalog(repos, camelSpringBootVersion);
String camelVersion = catalog.getLoadedVersion();
context = context.replaceFirst("\\{\\{ \\.GroupId }}", ids[0]);
@@ -405,55 +397,6 @@ class ExportSpringBoot extends Export {
return super.applicationPropertyLine(key, value);
}
- private CamelCatalog loadSpringBootCatalog(String repos, String version) throws Exception {
- CamelCatalog answer = new DefaultCamelCatalog();
- if (version == null) {
- version = answer.getCatalogVersion();
- }
-
- // use kamelet-main to dynamic download dependency via maven
- KameletMain main = new KameletMain();
- try {
- main.setRepos(repos);
- main.start();
-
- // wrap downloaded catalog files in an isolated classloader
- DependencyDownloaderClassLoader cl
- = new DependencyDownloaderClassLoader(main.getCamelContext().getApplicationContextClassLoader());
-
- // download camel-catalog for that specific version
- MavenDependencyDownloader downloader = main.getCamelContext().hasService(MavenDependencyDownloader.class);
- MavenArtifact ma = downloader.downloadArtifact("org.apache.camel", "camel-catalog", version);
- if (ma != null) {
- cl.addFile(ma.getFile());
- } else {
- throw new IOException("Cannot download org.apache.camel:camel-catalog:" + version);
- }
- ma = downloader.downloadArtifact("org.apache.camel.springboot", "camel-catalog-provider-springboot", version);
- if (ma != null) {
- cl.addFile(ma.getFile());
- } else {
- throw new IOException(
- "Cannot download org.apache.camel.springboot:camel-catalog-provider-springboot:" + version);
- }
-
- answer.setVersionManager(new SpringBootCatalogVersionManager(version, cl));
- Class<RuntimeProvider> clazz = (Class<RuntimeProvider>) cl.loadClass(SPRING_BOOT_CATALOG_PROVIDER);
- if (clazz != null) {
- RuntimeProvider provider = main.getCamelContext().getInjector().newInstance(clazz);
- if (provider != null) {
- answer.setRuntimeProvider(provider);
- }
- }
- answer.enableCache();
-
- } finally {
- main.stop();
- }
-
- return answer;
- }
-
private String readResourceTemplate(String name) throws IOException {
InputStream is = ExportSpringBoot.class.getClassLoader().getResourceAsStream(name);
String text = IOHelper.loadText(is);
@@ -461,45 +404,4 @@ class ExportSpringBoot extends Export {
return text;
}
- private final class SpringBootCatalogVersionManager implements VersionManager {
-
- private ClassLoader classLoader;
- private final String version;
-
- public SpringBootCatalogVersionManager(String version, ClassLoader classLoader) {
- this.version = version;
- this.classLoader = classLoader;
- }
-
- @Override
- public void setClassLoader(ClassLoader classLoader) {
- this.classLoader = classLoader;
- }
-
- @Override
- public String getLoadedVersion() {
- return version;
- }
-
- @Override
- public boolean loadVersion(String version) {
- return this.version.equals(version);
- }
-
- @Override
- public String getRuntimeProviderLoadedVersion() {
- return version;
- }
-
- @Override
- public boolean loadRuntimeProviderVersion(String groupId, String artifactId, String version) {
- return true;
- }
-
- @Override
- public InputStream getResourceAsStream(String name) {
- return classLoader.getResourceAsStream(name);
- }
- }
-
}