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 2022/02/13 12:37:54 UTC
[camel] branch main updated: CAMEL-17642: camel-yaml-dsl/camel-jbang - Add support for spec/dependencies to detect and auto download JARs
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 848ebe9 CAMEL-17642: camel-yaml-dsl/camel-jbang - Add support for spec/dependencies to detect and auto download JARs
848ebe9 is described below
commit 848ebe9fa4e6f402411b64c27237c2f37ddbca28
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Feb 13 13:37:10 2022 +0100
CAMEL-17642: camel-yaml-dsl/camel-jbang - Add support for spec/dependencies to detect and auto download JARs
---
.../camel/dsl/yaml/KameletRoutesBuilderLoader.java | 36 +++++++++++
.../dsl/yaml/KameletLoaderDependenciesTest.groovy | 73 ++++++++++++++++++++++
2 files changed, 109 insertions(+)
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java
index 1c53bd1..e9b1ceb 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java
@@ -18,13 +18,18 @@ package org.apache.camel.dsl.yaml;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.List;
import java.util.Set;
+import org.apache.camel.CamelContext;
import org.apache.camel.api.management.ManagedResource;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.dsl.yaml.common.YamlDeserializationContext;
+import org.apache.camel.dsl.yaml.common.YamlDeserializerSupport;
import org.apache.camel.model.RouteTemplateDefinition;
import org.apache.camel.model.RouteTemplateParameterDefinition;
+import org.apache.camel.spi.CamelContextCustomizer;
+import org.apache.camel.spi.DependencyStrategy;
import org.apache.camel.spi.Resource;
import org.apache.camel.spi.annotations.RoutesLoader;
import org.snakeyaml.engine.v2.nodes.Node;
@@ -91,11 +96,42 @@ public class KameletRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport {
}
}
+ // if there are dependencies then we should include them
+ Node deps = nodeAt(root, "/spec/dependencies");
+ CamelContextCustomizer customizer = null;
+ if (deps != null) {
+ customizer = preConfigureDependencies(deps);
+ }
+ final CamelContextCustomizer dependencies = customizer;
+
return new RouteBuilder() {
@Override
public void configure() throws Exception {
+ if (dependencies != null) {
+ dependencies.configure(getCamelContext());
+ }
getRouteTemplateCollection().routeTemplate(rtd);
}
};
}
+
+ private CamelContextCustomizer preConfigureDependencies(Node node) {
+ final List<String> dep = YamlDeserializerSupport.asStringList(node);
+ return new CamelContextCustomizer() {
+ @Override
+ public void configure(CamelContext camelContext) {
+ // notify the listeners about each dependency detected
+ for (DependencyStrategy ds : camelContext.getRegistry().findByType(DependencyStrategy.class)) {
+ for (String d : dep) {
+ try {
+ ds.onDependency(d);
+ } catch (Exception e) {
+ // ignore
+ }
+ }
+ }
+ }
+ };
+ }
+
}
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletLoaderDependenciesTest.groovy b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletLoaderDependenciesTest.groovy
new file mode 100644
index 0000000..e010761
--- /dev/null
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/KameletLoaderDependenciesTest.groovy
@@ -0,0 +1,73 @@
+/*
+ * 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.dsl.yaml
+
+import org.apache.camel.dsl.yaml.support.YamlTestSupport
+import org.apache.camel.spi.DependencyStrategy
+
+class KameletLoaderDependenciesTest extends YamlTestSupport {
+
+ var List<String> deps = new ArrayList<>()
+
+ @Override
+ def doSetup() {
+ context.registry.bind("myDep", new DependencyStrategy() {
+ @Override
+ void onDependency(String dependency) {
+ deps.add(dependency);
+ }
+ })
+
+ context.start()
+ }
+
+ def "kamelet dependencies"() {
+ when:
+ loadKamelets('''
+ apiVersion: camel.apache.org/v1alpha1
+ kind: Kamelet
+ metadata:
+ name: myDependency
+ spec:
+ definition:
+ properties:
+ payload:
+ title: The Payload
+ type: string
+ dependencies:
+ - "camel:jackson"
+ - "camel:kamelet"
+ - "camel:sql"
+ - "mvn:org.apache.commons:commons-dbcp2:2.9.0"
+ template:
+ from:
+ uri: "kamelet:source"
+ steps:
+ - set-body:
+ constant: "{{payload}}"
+ ''')
+ then:
+ context.routeTemplateDefinitions.size() == 1
+
+ deps.size() == 4
+ deps[0] == 'camel:jackson'
+ deps[1] == 'camel:kamelet'
+ deps[2] == 'camel:sql'
+ deps[3] == 'mvn:org.apache.commons:commons-dbcp2:2.9.0'
+ }
+
+}