You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2024/03/18 12:37:20 UTC
(camel) branch main updated: CAMEL-20548: include a capability section to advertise which artifact provides a specific feature
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 <lb...@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.