You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/12/21 12:20:55 UTC
(camel) branch main updated: CAMEL-20273: camel-jbang - Stub dataformat and language during export (#12529)
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new a9057ab6d74 CAMEL-20273: camel-jbang - Stub dataformat and language during export (#12529)
a9057ab6d74 is described below
commit a9057ab6d74401fd471eb120cbabe953b5bb1f5b
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Dec 21 13:20:49 2023 +0100
CAMEL-20273: camel-jbang - Stub dataformat and language during export (#12529)
* CAMEL-20273: camel-jbang - Stub dataformat and language during export
* CAMEL-20273: camel-jbang - Stub dataformat and language during export
---
.../camel/dsl/jbang/core/commands/Export.java | 1 +
.../dsl/jbang/core/commands/ExportBaseCommand.java | 5 +++
.../java/org/apache/camel/main/KameletMain.java | 8 ++---
.../DependencyDownloaderComponentResolver.java | 12 ++++---
.../DependencyDownloaderDataFormatResolver.java | 37 +++++++++++++++----
.../DependencyDownloaderLanguageResolver.java | 42 +++++++++++++++++-----
.../org/apache/camel/main/stub/StubDataFormat.java | 41 +++++++++++++++++++++
.../org/apache/camel/main/stub/StubLanguage.java | 40 +++++++++++++++++++++
8 files changed, 163 insertions(+), 23 deletions(-)
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
index 777863106dd..419e9da8a93 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/Export.java
@@ -102,6 +102,7 @@ public class Export extends ExportBaseCommand {
cmd.mavenSettingsSecurity = this.mavenSettingsSecurity;
cmd.exportDir = this.exportDir;
cmd.fresh = this.fresh;
+ cmd.download = this.download;
cmd.javaVersion = this.javaVersion;
cmd.camelVersion = this.camelVersion;
cmd.kameletsVersion = this.kameletsVersion;
diff --git a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
index d538fd4adce..9a5290cb6c2 100644
--- a/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
+++ b/dsl/camel-jbang/camel-jbang-core/src/main/java/org/apache/camel/dsl/jbang/core/commands/ExportBaseCommand.java
@@ -189,6 +189,10 @@ abstract class ExportBaseCommand extends CamelCommand {
@CommandLine.Option(names = { "--fresh" }, description = "Make sure we use fresh (i.e. non-cached) resources")
protected boolean fresh;
+ @CommandLine.Option(names = { "--download" }, defaultValue = "true",
+ description = "Whether to allow automatic downloading JAR dependencies (over the internet)")
+ protected boolean download = true;
+
@CommandLine.Option(names = { "--additional-properties" },
description = "Additional maven properties, ex. --additional-properties=prop1=foo,prop2=bar")
protected String additionalProperties;
@@ -286,6 +290,7 @@ abstract class ExportBaseCommand extends CamelCommand {
run.files = files;
run.exclude = exclude;
run.openapi = openapi;
+ run.download = download;
return run.runSilent(ignoreLoadingError);
}
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
index 10ccaae091f..ac0c743e291 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/KameletMain.java
@@ -554,12 +554,12 @@ public class KameletMain extends MainCommandLineSupport {
answer.getCamelContextExtension().addContextPlugin(ComponentResolver.class,
new DependencyDownloaderComponentResolver(answer, stubPattern, silent));
- answer.getCamelContextExtension().addContextPlugin(UriFactoryResolver.class,
- new DependencyDownloaderUriFactoryResolver(answer));
answer.getCamelContextExtension().addContextPlugin(DataFormatResolver.class,
- new DependencyDownloaderDataFormatResolver(answer));
+ new DependencyDownloaderDataFormatResolver(answer, stubPattern, silent));
answer.getCamelContextExtension().addContextPlugin(LanguageResolver.class,
- new DependencyDownloaderLanguageResolver(answer));
+ new DependencyDownloaderLanguageResolver(answer, stubPattern, silent));
+ answer.getCamelContextExtension().addContextPlugin(UriFactoryResolver.class,
+ new DependencyDownloaderUriFactoryResolver(answer));
answer.getCamelContextExtension().addContextPlugin(ResourceLoader.class,
new DependencyDownloaderResourceLoader(answer));
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java
index 029b6ee9e8b..edd1bd469d5 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderComponentResolver.java
@@ -59,10 +59,8 @@ public final class DependencyDownloaderComponentResolver extends DefaultComponen
@Override
public Component resolveComponent(String name, CamelContext context) {
ComponentModel model = catalog.componentModel(name);
- if (model != null && !downloader.alreadyOnClasspath(model.getGroupId(), model.getArtifactId(),
- model.getVersion())) {
- downloader.downloadDependency(model.getGroupId(), model.getArtifactId(),
- model.getVersion());
+ if (model != null) {
+ downloadLoader(model.getGroupId(), model.getArtifactId(), model.getVersion());
}
Component answer;
@@ -107,6 +105,12 @@ public final class DependencyDownloaderComponentResolver extends DefaultComponen
return answer;
}
+ private void downloadLoader(String groupId, String artifactId, String version) {
+ if (!downloader.alreadyOnClasspath(groupId, artifactId, version)) {
+ downloader.downloadDependency(groupId, artifactId, version);
+ }
+ }
+
private boolean accept(String name) {
// kamelet component must not be stubbed
if (stubPattern == null) {
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderDataFormatResolver.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderDataFormatResolver.java
index 6e599f8e797..c8154e73e88 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderDataFormatResolver.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderDataFormatResolver.java
@@ -22,6 +22,7 @@ import org.apache.camel.CamelContext;
import org.apache.camel.catalog.CamelCatalog;
import org.apache.camel.catalog.DefaultCamelCatalog;
import org.apache.camel.impl.engine.DefaultDataFormatResolver;
+import org.apache.camel.main.stub.StubDataFormat;
import org.apache.camel.main.util.SuggestSimilarHelper;
import org.apache.camel.spi.DataFormat;
import org.apache.camel.tooling.model.DataFormatModel;
@@ -33,20 +34,30 @@ public final class DependencyDownloaderDataFormatResolver extends DefaultDataFor
private final CamelCatalog catalog = new DefaultCamelCatalog();
private final DependencyDownloader downloader;
+ private final String stubPattern;
+ private final boolean silent;
- public DependencyDownloaderDataFormatResolver(CamelContext camelContext) {
+ public DependencyDownloaderDataFormatResolver(CamelContext camelContext, String stubPattern, boolean silent) {
this.downloader = camelContext.hasService(DependencyDownloader.class);
+ this.stubPattern = stubPattern;
+ this.silent = silent;
}
@Override
public DataFormat createDataFormat(String name, CamelContext context) {
DataFormatModel model = catalog.dataFormatModel(name);
- if (model != null && !downloader.alreadyOnClasspath(model.getGroupId(), model.getArtifactId(),
- model.getVersion())) {
- downloader.downloadDependency(model.getGroupId(), model.getArtifactId(),
- model.getVersion());
+ if (model != null) {
+ downloadLoader(model.getGroupId(), model.getArtifactId(), model.getVersion());
}
- DataFormat answer = super.createDataFormat(name, context);
+
+ DataFormat answer;
+ boolean accept = accept(name);
+ if (accept) {
+ answer = super.createDataFormat(name, context);
+ } else {
+ answer = new StubDataFormat();
+ }
+
if (answer == null) {
List<String> suggestion = SuggestSimilarHelper.didYouMean(catalog.findDataFormatNames(), name);
if (suggestion != null && !suggestion.isEmpty()) {
@@ -57,4 +68,18 @@ public final class DependencyDownloaderDataFormatResolver extends DefaultDataFor
return answer;
}
+ private void downloadLoader(String groupId, String artifactId, String version) {
+ if (!downloader.alreadyOnClasspath(groupId, artifactId, version)) {
+ downloader.downloadDependency(groupId, artifactId, version);
+ }
+ }
+
+ private boolean accept(String name) {
+ // kamelet component must not be stubbed
+ if (stubPattern == null) {
+ return true;
+ }
+ return false;
+ }
+
}
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderLanguageResolver.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderLanguageResolver.java
index 19a081b93b0..1d5b8a7758a 100644
--- a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderLanguageResolver.java
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/download/DependencyDownloaderLanguageResolver.java
@@ -22,6 +22,7 @@ import org.apache.camel.CamelContext;
import org.apache.camel.catalog.CamelCatalog;
import org.apache.camel.catalog.DefaultCamelCatalog;
import org.apache.camel.impl.engine.DefaultLanguageResolver;
+import org.apache.camel.main.stub.StubLanguage;
import org.apache.camel.main.util.SuggestSimilarHelper;
import org.apache.camel.spi.Language;
import org.apache.camel.tooling.model.LanguageModel;
@@ -31,24 +32,39 @@ import org.apache.camel.tooling.model.LanguageModel;
*/
public final class DependencyDownloaderLanguageResolver extends DefaultLanguageResolver {
+ private static final String ACCEPTED_STUB_NAMES
+ = "constant,exchangeProperty,header,ref,simple";
+
private final CamelCatalog catalog = new DefaultCamelCatalog();
private final DependencyDownloader downloader;
+ private final String stubPattern;
+ private final boolean silent;
- public DependencyDownloaderLanguageResolver(CamelContext camelContext) {
+ public DependencyDownloaderLanguageResolver(CamelContext camelContext, String stubPattern, boolean silent) {
this.downloader = camelContext.hasService(DependencyDownloader.class);
+ this.stubPattern = stubPattern;
+ this.silent = silent;
}
@Override
public Language resolveLanguage(String name, CamelContext context) {
LanguageModel model = catalog.languageModel(name);
if (model != null) {
- downloadLoader(model.getArtifactId(), model.getVersion());
+ downloadLoader(model.getGroupId(), model.getArtifactId(), model.getVersion());
if ("csimple".equals(name)) {
// need to include joor compiler also
- downloadLoader("camel-csimple-joor", model.getVersion());
+ downloadLoader(model.getGroupId(), "camel-csimple-joor", model.getVersion());
}
}
- Language answer = super.resolveLanguage(name, context);
+
+ Language answer;
+ boolean accept = accept(name);
+ if (accept) {
+ answer = super.resolveLanguage(name, context);
+ } else {
+ answer = new StubLanguage();
+ }
+
if (answer == null) {
List<String> suggestion = SuggestSimilarHelper.didYouMean(catalog.findDataFormatNames(), name);
if (suggestion != null && !suggestion.isEmpty()) {
@@ -59,12 +75,20 @@ public final class DependencyDownloaderLanguageResolver extends DefaultLanguageR
return answer;
}
- private void downloadLoader(String artifactId, String version) {
- if (!downloader.alreadyOnClasspath("org.apache.camel", artifactId,
- version)) {
- downloader.downloadDependency("org.apache.camel", artifactId,
- version);
+ private void downloadLoader(String groupId, String artifactId, String version) {
+ if (!downloader.alreadyOnClasspath(groupId, artifactId, version)) {
+ downloader.downloadDependency(groupId, artifactId, version);
}
}
+ private boolean accept(String name) {
+ // kamelet component must not be stubbed
+ if (stubPattern == null) {
+ return true;
+ }
+
+ // we are stubbing but need to accept the following
+ return ACCEPTED_STUB_NAMES.contains(name);
+ }
+
}
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/stub/StubDataFormat.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/stub/StubDataFormat.java
new file mode 100644
index 00000000000..d4f60f57318
--- /dev/null
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/stub/StubDataFormat.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.main.stub;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.spi.DataFormat;
+import org.apache.camel.support.service.ServiceSupport;
+
+/**
+ * A data format that does nothing
+ */
+public class StubDataFormat extends ServiceSupport implements DataFormat {
+
+ @Override
+ public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception {
+ // noop
+ }
+
+ @Override
+ public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
+ return null;
+ }
+
+}
diff --git a/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/stub/StubLanguage.java b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/stub/StubLanguage.java
new file mode 100644
index 00000000000..3130bee188d
--- /dev/null
+++ b/dsl/camel-kamelet-main/src/main/java/org/apache/camel/main/stub/StubLanguage.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.main.stub;
+
+import org.apache.camel.Expression;
+import org.apache.camel.Predicate;
+import org.apache.camel.builder.ExpressionBuilder;
+import org.apache.camel.builder.PredicateBuilder;
+import org.apache.camel.spi.Language;
+import org.apache.camel.support.service.ServiceSupport;
+
+/**
+ * A language that does nothing
+ */
+public class StubLanguage extends ServiceSupport implements Language {
+
+ @Override
+ public Predicate createPredicate(String expression) {
+ return PredicateBuilder.constant(true);
+ }
+
+ @Override
+ public Expression createExpression(String expression) {
+ return ExpressionBuilder.constantExpression(expression);
+ }
+}