This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch multi-route-loader in repository https://gitbox.apache.org/repos/asf/camel.git
commit 5a2e115babb518b08ed30c52bb9951b74e028cfd Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu Feb 15 17:11:27 2024 +0100 CAMEL-20245: camel-yaml-dsl - Add support for multi extension --- .../org/apache/camel/spi/RoutesBuilderLoader.java | 7 ++++ .../camel/impl/engine/DefaultRoutesLoader.java | 11 +++++++ .../org/apache/camel/routes-loader/camel-yaml | 2 -- .../org/apache/camel/routes-loader/camel.yaml | 2 -- .../org/apache/camel/routes-loader/camelk-yaml | 2 -- .../org/apache/camel/routes-loader/camelk.yaml | 2 -- .../dsl/yaml/CamelKYamlRoutesBuilderLoader.java | 37 ---------------------- .../dsl/yaml/CamelYamlRoutesBuilderLoader.java | 31 ------------------ .../camel/dsl/yaml/YamlRoutesBuilderLoader.java | 13 ++++++++ .../apache/camel/dsl/yaml/PipeLoaderTest.groovy | 4 +-- .../camel/dsl/yaml/support/YamlTestSupport.groovy | 10 ++++++ 11 files changed, 43 insertions(+), 78 deletions(-) diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/RoutesBuilderLoader.java b/core/camel-api/src/main/java/org/apache/camel/spi/RoutesBuilderLoader.java index 6bb3bb7e201..6878e0df645 100644 --- a/core/camel-api/src/main/java/org/apache/camel/spi/RoutesBuilderLoader.java +++ b/core/camel-api/src/main/java/org/apache/camel/spi/RoutesBuilderLoader.java @@ -37,6 +37,13 @@ public interface RoutesBuilderLoader extends StaticService, CamelContextAware { */ String getSupportedExtension(); + /** + * Whether the file extension is supported + */ + default boolean isSupportedExtension(String extension) { + return getSupportedExtension().equals(extension); + } + /** * Loads {@link RoutesBuilder} from {@link Resource}. * diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java index 560e0db7346..4e732eb9b2f 100644 --- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java +++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoutesLoader.java @@ -42,6 +42,7 @@ import org.apache.camel.support.service.ServiceHelper; import org.apache.camel.support.service.ServiceSupport; import org.apache.camel.util.FileUtil; import org.apache.camel.util.ObjectHelper; +import org.apache.camel.util.StringHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -250,6 +251,16 @@ public class DefaultRoutesLoader extends ServiceSupport implements RoutesLoader, RoutesBuilderLoader answer = ResolverHelper.resolveService(getCamelContext(), finder, extension, RoutesBuilderLoader.class).orElse(null); + // if it's a multi-extension then fallback to parent + if (answer == null && extension.contains(".")) { + String single = FileUtil.onlyExt(extension, true); + answer = ResolverHelper.resolveService(getCamelContext(), finder, single, RoutesBuilderLoader.class).orElse(null); + if (answer != null && !answer.isSupportedExtension(extension)) { + // okay we cannot support this extension as fallback + answer = null; + } + } + if (answer != null) { CamelContextAware.trySetCamelContext(answer, getCamelContext()); // allows for custom initialization diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/camel-yaml b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/camel-yaml deleted file mode 100644 index 99b1490d923..00000000000 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/camel-yaml +++ /dev/null @@ -1,2 +0,0 @@ -# Generated by camel build tools - do NOT edit this file! -class=org.apache.camel.dsl.yaml.CamelYamlRoutesBuilderLoader diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/camel.yaml b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/camel.yaml deleted file mode 100644 index 99b1490d923..00000000000 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/camel.yaml +++ /dev/null @@ -1,2 +0,0 @@ -# Generated by camel build tools - do NOT edit this file! -class=org.apache.camel.dsl.yaml.CamelYamlRoutesBuilderLoader diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/camelk-yaml b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/camelk-yaml deleted file mode 100644 index aa182116b9f..00000000000 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/camelk-yaml +++ /dev/null @@ -1,2 +0,0 @@ -# Generated by camel build tools - do NOT edit this file! -class=org.apache.camel.dsl.yaml.CamelKYamlRoutesBuilderLoader diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/camelk.yaml b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/camelk.yaml deleted file mode 100644 index aa182116b9f..00000000000 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/META-INF/services/org/apache/camel/routes-loader/camelk.yaml +++ /dev/null @@ -1,2 +0,0 @@ -# Generated by camel build tools - do NOT edit this file! -class=org.apache.camel.dsl.yaml.CamelKYamlRoutesBuilderLoader diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/CamelKYamlRoutesBuilderLoader.java b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/CamelKYamlRoutesBuilderLoader.java deleted file mode 100644 index be64986add9..00000000000 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/CamelKYamlRoutesBuilderLoader.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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.api.management.ManagedResource; -import org.apache.camel.spi.annotations.RoutesLoader; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -@ManagedResource(description = "Managed CamelK YAML RoutesBuilderLoader") -@RoutesLoader(CamelKYamlRoutesBuilderLoader.EXTENSION) -@Deprecated -public class CamelKYamlRoutesBuilderLoader extends YamlRoutesBuilderLoader { - - private static final Logger LOG = LoggerFactory.getLogger(CamelKYamlRoutesBuilderLoader.class); - - public static final String EXTENSION = "camelk.yaml"; - - public CamelKYamlRoutesBuilderLoader() { - super(EXTENSION); - LOG.warn("Camel routes in files with extension .camelk.yaml is deprecated. Use .camel.yaml instead."); - } -} diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/CamelYamlRoutesBuilderLoader.java b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/CamelYamlRoutesBuilderLoader.java deleted file mode 100644 index fd6d754926e..00000000000 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/CamelYamlRoutesBuilderLoader.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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.api.management.ManagedResource; -import org.apache.camel.spi.annotations.RoutesLoader; - -@ManagedResource(description = "Managed Camel YAML RoutesBuilderLoader") -@RoutesLoader(CamelYamlRoutesBuilderLoader.EXTENSION) -public class CamelYamlRoutesBuilderLoader extends YamlRoutesBuilderLoader { - - public static final String EXTENSION = "camel.yaml"; - - public CamelYamlRoutesBuilderLoader() { - super(EXTENSION); - } -} diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java index 0e3b68f4308..4643fcd5ae5 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java @@ -19,6 +19,7 @@ package org.apache.camel.dsl.yaml; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -96,6 +97,8 @@ import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.setDeseri public class YamlRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport { public static final String EXTENSION = "yaml"; + public static final String[] SUPPORTED_EXTENSION = { EXTENSION, "camel.yaml", "pipe.yaml" }; + private static final String DEPRECATED_EXTENSION = "camelk.yaml"; private static final Logger LOG = LoggerFactory.getLogger(YamlRoutesBuilderLoader.class); @@ -120,6 +123,16 @@ public class YamlRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport { super(extension); } + @Override + public boolean isSupportedExtension(String extension) { + // this builder can support multiple extensions + if (DEPRECATED_EXTENSION.equals(extension)) { + LOG.warn("File extension camelk.yaml is deprecated. Use camel.yaml instead."); + return true; + } + return Arrays.asList(SUPPORTED_EXTENSION).contains(extension); + } + protected RouteBuilder builder(final YamlDeserializationContext ctx, final Node root) { // we need to keep track of already configured items as the yaml-dsl returns a diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/PipeLoaderTest.groovy b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/PipeLoaderTest.groovy index e917ed7c719..858b8df4f72 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/PipeLoaderTest.groovy +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/PipeLoaderTest.groovy @@ -33,9 +33,9 @@ class PipeLoaderTest extends YamlTestSupport { context.start() } - def "Pipe from kamelet to kamelet"() { + def "Pipe from kamelet to kamelet with pipe.yaml extension"() { when: - loadBindings(''' + loadBindingsExt("pipe.yaml", ''' apiVersion: camel.apache.org/v1 kind: Pipe metadata: diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/support/YamlTestSupport.groovy b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/support/YamlTestSupport.groovy index 0114841fe4d..ba4f063e44b 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/support/YamlTestSupport.groovy +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/support/YamlTestSupport.groovy @@ -147,6 +147,16 @@ class YamlTestSupport extends Specification implements HasCamelContext { ) } + def loadBindingsExt(String ext, String... resources) { + int index = 0 + + PluginHelper.getRoutesLoader(context).loadRoutes( + resources.collect { + it -> ResourceHelper.fromString("binding-${index++}." + ext, it.stripIndent()) + } + ) + } + def withMock( String uri, @DelegatesTo(MockEndpoint) Closure<?> closure) {