This is an automated email from the ASF dual-hosted git repository. lburgazzoli 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 e924867d1a1 CAMEL-20548: include a capability section to advertise which artifact provides a specific feature e924867d1a1 is described below commit e924867d1a153e3d1bf6af7b01cf1f950cf91ff3 Author: Luca Burgazzoli <lburgazz...@gmail.com> AuthorDate: Thu Mar 14 10:37:25 2024 +0100 CAMEL-20548: include a capability section to advertise which artifact provides a specific feature --- .../org/apache/camel/catalog/CamelCatalog.java | 12 +++++++++++ .../apache/camel/catalog/DefaultCamelCatalog.java | 25 ++++++++++++++++++++++ .../camel/catalog/DefaultRuntimeProvider.java | 22 +++++++++++++++++++ .../org/apache/camel/catalog/RuntimeProvider.java | 6 ++++++ .../apache/camel/catalog/capabilities.properties | 17 +++++++++++++++ .../org/apache/camel/catalog/CamelCatalogTest.java | 16 ++++++++++++++ .../org/apache/camel/tooling/model/EntityRef.java | 13 +++-------- .../java/org/apache/camel/tooling/model}/Kind.java | 2 +- 8 files changed, 102 insertions(+), 11 deletions(-) diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java index 4d2744e171b..1932fb506a5 100644 --- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java +++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/CamelCatalog.java @@ -20,6 +20,7 @@ import java.io.InputStream; import java.net.URISyntaxException; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import org.apache.camel.tooling.model.ArtifactModel; @@ -28,6 +29,8 @@ import org.apache.camel.tooling.model.ComponentModel; import org.apache.camel.tooling.model.DataFormatModel; import org.apache.camel.tooling.model.DevConsoleModel; import org.apache.camel.tooling.model.EipModel; +import org.apache.camel.tooling.model.EntityRef; +import org.apache.camel.tooling.model.Kind; import org.apache.camel.tooling.model.LanguageModel; import org.apache.camel.tooling.model.MainModel; import org.apache.camel.tooling.model.OtherModel; @@ -214,6 +217,11 @@ public interface CamelCatalog { */ List<String> findOtherNames(); + /** + * Find all the capability names from the Camel catalog + */ + List<String> findCapabilityNames(); + /** * @param kind the kind to look for * @return the list of part names of the given {@link Kind} available in this {@link CamelCatalog} @@ -640,4 +648,8 @@ public interface CamelCatalog { */ List<ReleaseModel> camelQuarkusReleases(); + /** + * Find the entity the given capability maps to. + */ + Optional<EntityRef> findCapabilityRef(String capability); } diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java index aca19fb66e7..0d4e0b1a4a4 100644 --- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java +++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultCamelCatalog.java @@ -24,6 +24,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; @@ -40,7 +41,9 @@ import org.apache.camel.tooling.model.ComponentModel; import org.apache.camel.tooling.model.DataFormatModel; import org.apache.camel.tooling.model.DevConsoleModel; import org.apache.camel.tooling.model.EipModel; +import org.apache.camel.tooling.model.EntityRef; import org.apache.camel.tooling.model.JsonMapper; +import org.apache.camel.tooling.model.Kind; import org.apache.camel.tooling.model.LanguageModel; import org.apache.camel.tooling.model.MainModel; import org.apache.camel.tooling.model.OtherModel; @@ -303,6 +306,11 @@ public class DefaultCamelCatalog extends AbstractCamelCatalog implements CamelCa return findNames(filter, this::findOtherNames, this::otherModel); } + @Override + public List<String> findCapabilityNames() { + return List.copyOf(runtimeProvider.findCapabilities().keySet()); + } + private List<String> findNames( String filter, Supplier<List<String>> findNames, Function<String, ? extends BaseModel<?>> modelLoader) { List<String> answer = new ArrayList<>(); @@ -589,6 +597,23 @@ public class DefaultCamelCatalog extends AbstractCamelCatalog implements CamelCa return camelReleases("camel-quarkus-releases.json"); } + @Override + public Optional<EntityRef> findCapabilityRef(String capability) { + Map<String, String> capabilities = cache("capabilities", runtimeProvider::findCapabilities); + + String ref = capabilities.get(capability); + if (ref == null) { + return Optional.empty(); + } + + String[] items = ref.split("/"); + if (items.length != 2) { + return Optional.empty(); + } + + return Optional.of(new EntityRef(Kind.valueOf(items[0]), items[1])); + } + private List<ReleaseModel> camelReleases(String file) { return cache(file, () -> { try { diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java index e2cc049a4da..9abb9e93ff0 100644 --- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java +++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java @@ -20,6 +20,9 @@ import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Properties; +import java.util.TreeMap; import org.apache.camel.catalog.impl.CatalogHelper; @@ -37,6 +40,7 @@ public class DefaultRuntimeProvider implements RuntimeProvider { private static final String TRANSFORMER_CATALOG = "org/apache/camel/catalog/transformers.properties"; private static final String CONSOLE_CATALOG = "org/apache/camel/catalog/dev-consoles.properties"; private static final String OTHER_CATALOG = "org/apache/camel/catalog/others.properties"; + private static final String CAPABILITIES_CATALOG = "org/apache/camel/catalog/capabilities.properties"; private CamelCatalog camelCatalog; @@ -126,6 +130,10 @@ public class DefaultRuntimeProvider implements RuntimeProvider { return OTHER_CATALOG; } + protected String getCapabilitiesCatalog() { + return CAPABILITIES_CATALOG; + } + @Override public List<String> findComponentNames() { return find(getComponentsCatalog()); @@ -156,6 +164,20 @@ public class DefaultRuntimeProvider implements RuntimeProvider { return find(getOtherCatalog()); } + @SuppressWarnings({ "unchecked", "rawtypes" }) + @Override + public Map<String, String> findCapabilities() { + final Properties properties = new Properties(); + + try (InputStream is = getCamelCatalog().getVersionManager().getResourceAsStream(getCapabilitiesCatalog())) { + properties.load(is); + } catch (IOException e) { + // ignore + } + + return new TreeMap<>((Map<String, String>) (Map) properties); + } + protected List<String> find(String resourceName) { List<String> names = new ArrayList<>(); try (InputStream is = getCamelCatalog().getVersionManager().getResourceAsStream(resourceName)) { diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java index 3731dce8815..ef3841f856c 100644 --- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java +++ b/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java @@ -17,6 +17,7 @@ package org.apache.camel.catalog; import java.util.List; +import java.util.Map; /** * A pluggable strategy for chosen runtime to run Camel such as default, karaf, spring-boot, etc. This allows third @@ -110,4 +111,9 @@ public interface RuntimeProvider { */ List<String> findOtherNames(); + /** + * Find all the capabilities from the Camel catalog supported by the provider + */ + Map<String, String> findCapabilities(); + } diff --git a/catalog/camel-catalog/src/main/resources/org/apache/camel/catalog/capabilities.properties b/catalog/camel-catalog/src/main/resources/org/apache/camel/catalog/capabilities.properties new file mode 100644 index 00000000000..bb6876771b0 --- /dev/null +++ b/catalog/camel-catalog/src/main/resources/org/apache/camel/catalog/capabilities.properties @@ -0,0 +1,17 @@ +## --------------------------------------------------------------------------- +## 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. +## --------------------------------------------------------------------------- +platform-http=other/platform-http-main \ No newline at end of file diff --git a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java index a4c168436a4..997851ebd98 100644 --- a/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java +++ b/catalog/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java @@ -24,12 +24,15 @@ import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; 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.EntityRef; +import org.apache.camel.tooling.model.Kind; import org.apache.camel.tooling.model.LanguageModel; import org.apache.camel.tooling.model.ReleaseModel; import org.junit.jupiter.api.Assertions; @@ -1616,4 +1619,17 @@ public class CamelCatalogTest { Assertions.assertEquals("11", rel.getJdk()); } + @Test + public void capabilities() { + List<String> list = catalog.findCapabilityNames(); + Assertions.assertEquals(1, list.size()); + + Optional<EntityRef> ref = catalog.findCapabilityRef("platform-http"); + Assertions.assertTrue(ref.isPresent()); + Assertions.assertEquals(Kind.other, ref.get().kind()); + Assertions.assertEquals("platform-http-main", ref.get().name()); + + Optional<EntityRef> ref2 = catalog.findCapabilityRef("not-implemented"); + Assertions.assertFalse(ref2.isPresent()); + } } diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/Kind.java b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/EntityRef.java similarity index 78% copy from catalog/camel-catalog/src/main/java/org/apache/camel/catalog/Kind.java copy to tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/EntityRef.java index c1f589d02ea..ff7f5def40d 100644 --- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/Kind.java +++ b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/EntityRef.java @@ -14,17 +14,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.catalog; +package org.apache.camel.tooling.model; /** - * Kind of a Camel part, such as component, dataformat, language, etc. + * Reference a Camel entity. */ -public enum Kind { - component, - dataformat, - language, - transformer, - console, - other, - eip +public record EntityRef(Kind kind, String name) { } diff --git a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/Kind.java b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/Kind.java similarity index 96% rename from catalog/camel-catalog/src/main/java/org/apache/camel/catalog/Kind.java rename to tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/Kind.java index c1f589d02ea..371c1060310 100644 --- a/catalog/camel-catalog/src/main/java/org/apache/camel/catalog/Kind.java +++ b/tooling/camel-tooling-model/src/main/java/org/apache/camel/tooling/model/Kind.java @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.catalog; +package org.apache.camel.tooling.model; /** * Kind of a Camel part, such as component, dataformat, language, etc.