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 2020/09/02 13:08:39 UTC
[camel] branch master updated: CAMEL-15478: camel-catalog now
validates API component endpoints and uses it extra set of options in the
validation.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new 1a12f85 CAMEL-15478: camel-catalog now validates API component endpoints and uses it extra set of options in the validation.
1a12f85 is described below
commit 1a12f85731f303945ffc7acf8071aa498c7589a4
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Sep 2 15:07:49 2020 +0200
CAMEL-15478: camel-catalog now validates API component endpoints and uses it extra set of options in the validation.
---
.../apache/camel/catalog/components/zendesk.json | 2 +-
.../org/apache/camel/catalog/CamelCatalogTest.java | 24 ++++++++++++
.../apache/camel/component/zendesk/zendesk.json | 2 +-
.../camel/component/zendesk/ZendeskEndpoint.java | 3 +-
.../src/generated/resources/metadata.json | 2 +-
.../camel/catalog/impl/AbstractCamelCatalog.java | 45 ++++++++++++++++++++++
6 files changed, 73 insertions(+), 5 deletions(-)
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/zendesk.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/zendesk.json
index 68a0120..bd71381 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/zendesk.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/zendesk.json
@@ -20,7 +20,7 @@
"apiPropertyQualifier": "methodName",
"consumerOnly": false,
"producerOnly": false,
- "lenientProperties": true
+ "lenientProperties": false
},
"componentProperties": {
"serverUrl": { "kind": "property", "displayName": "Server Url", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "The server URL to connect." },
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 08e34e0..1819914 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
@@ -1182,6 +1182,30 @@ public class CamelCatalogTest {
}
@Test
+ public void testValidateApiEndpoint() throws Exception {
+ // there is a type converter that converts from and to to phone number
+ String uri = "twilio:call/create?applicationSid=123&from=#555&to=#999";
+ EndpointValidationResult result = catalog.validateEndpointProperties(uri);
+ assertTrue(result.isSuccess());
+
+ // there is a type converter that converts from and to to phone number
+ uri = "twilio:call/create?applicationSid=123&from=#555&to=#999&unknown=true";
+ result = catalog.validateEndpointProperties(uri);
+ assertFalse(result.isSuccess());
+ assertTrue(result.getUnknown().contains("unknown"));
+
+ // there is a type converter that converts from and to to phone number
+ uri = "zendesk:getTopicsByUser?userId=123";
+ result = catalog.validateEndpointProperties(uri);
+ assertTrue(result.isSuccess());
+
+ uri = "zendesk:getTopicsByUser?userId=123&unknown=true";
+ result = catalog.validateEndpointProperties(uri);
+ assertFalse(result.isSuccess());
+ assertTrue(result.getUnknown().contains("unknown"));
+ }
+
+ @Test
public void testValidateEndpointTimerDuration() throws Exception {
String uri = "timer:foo?period=5s";
EndpointValidationResult result = catalog.validateEndpointProperties(uri);
diff --git a/components/camel-zendesk/src/generated/resources/org/apache/camel/component/zendesk/zendesk.json b/components/camel-zendesk/src/generated/resources/org/apache/camel/component/zendesk/zendesk.json
index 68a0120..bd71381 100644
--- a/components/camel-zendesk/src/generated/resources/org/apache/camel/component/zendesk/zendesk.json
+++ b/components/camel-zendesk/src/generated/resources/org/apache/camel/component/zendesk/zendesk.json
@@ -20,7 +20,7 @@
"apiPropertyQualifier": "methodName",
"consumerOnly": false,
"producerOnly": false,
- "lenientProperties": true
+ "lenientProperties": false
},
"componentProperties": {
"serverUrl": { "kind": "property", "displayName": "Server Url", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "The server URL to connect." },
diff --git a/components/camel-zendesk/src/main/java/org/apache/camel/component/zendesk/ZendeskEndpoint.java b/components/camel-zendesk/src/main/java/org/apache/camel/component/zendesk/ZendeskEndpoint.java
index 2fa85a9..e758444 100644
--- a/components/camel-zendesk/src/main/java/org/apache/camel/component/zendesk/ZendeskEndpoint.java
+++ b/components/camel-zendesk/src/main/java/org/apache/camel/component/zendesk/ZendeskEndpoint.java
@@ -40,8 +40,7 @@ import org.zendesk.client.v2.Zendesk;
*/
@UriEndpoint(firstVersion = "2.19.0", scheme = "zendesk", title = "Zendesk", syntax = "zendesk:methodName",
apiPropertyQualifier = "methodName",
- consumerPrefix = "consumer", category = { Category.CLOUD, Category.API, Category.SUPPORT },
- lenientProperties = true)
+ consumerPrefix = "consumer", category = { Category.CLOUD, Category.API, Category.SUPPORT })
public class ZendeskEndpoint extends AbstractApiEndpoint<ZendeskApiName, ZendeskConfiguration> {
@UriParam
diff --git a/core/camel-componentdsl/src/generated/resources/metadata.json b/core/camel-componentdsl/src/generated/resources/metadata.json
index 8944822..1521304 100644
--- a/core/camel-componentdsl/src/generated/resources/metadata.json
+++ b/core/camel-componentdsl/src/generated/resources/metadata.json
@@ -8233,7 +8233,7 @@
"apiPropertyQualifier": "methodName",
"consumerOnly": false,
"producerOnly": false,
- "lenientProperties": true
+ "lenientProperties": false
},
"ZookeeperComponentBuilderFactory": {
"kind": "component",
diff --git a/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/AbstractCamelCatalog.java b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/AbstractCamelCatalog.java
index c9d03af..ee96f82 100644
--- a/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/AbstractCamelCatalog.java
+++ b/core/camel-core-catalog/src/main/java/org/apache/camel/catalog/impl/AbstractCamelCatalog.java
@@ -52,6 +52,7 @@ import org.apache.camel.tooling.model.LanguageModel;
import org.apache.camel.tooling.model.MainModel;
import org.apache.camel.tooling.model.OtherModel;
import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.StringHelper;
/**
* Base class for both the runtime RuntimeCamelCatalog from camel-core and the complete CamelCatalog from camel-catalog.
@@ -172,6 +173,13 @@ public abstract class AbstractCamelCatalog {
model.getEndpointOptions().forEach(o -> rows.put(o.getName(), o));
model.getEndpointPathOptions().forEach(o -> rows.put(o.getName(), o));
+ if (model.isApi()) {
+ String qualifier = model.getApiPropertyQualifier();
+ String key = properties.get(qualifier);
+ Map<String, BaseOptionModel> apiProperties = extractApiProperties(model, key);
+ rows.putAll(apiProperties);
+ }
+
// the dataformat component refers to a data format so lets add the properties for the selected
// data format to the list of rows
if ("dataformat".equals(scheme)) {
@@ -534,6 +542,17 @@ public abstract class AbstractCamelCatalog {
model.getEndpointOptions().forEach(o -> rows.put(o.getName(), o));
model.getEndpointPathOptions().forEach(o -> rows.put(o.getName(), o));
+ // is this an api component then there may be additional options
+ if (model.isApi()) {
+ String qualifier = model.getApiPropertyQualifier();
+ int pos = word.indexOf(qualifier);
+ if (pos != -1) {
+ String key = word2.size() > pos ? word2.get(pos) : null;
+ Map<String, BaseOptionModel> apiProperties = extractApiProperties(model, key);
+ rows.putAll(apiProperties);
+ }
+ }
+
// word contains the syntax path elements
Iterator<String> it = word2.iterator();
for (int i = 0; i < word.size(); i++) {
@@ -628,6 +647,32 @@ public abstract class AbstractCamelCatalog {
return answer;
}
+ private Map<String, BaseOptionModel> extractApiProperties(ComponentModel model, String key) {
+ Map<String, BaseOptionModel> answer = new LinkedHashMap<>();
+ if (key != null) {
+ String matchKey = null;
+ if (model.getApiOptions().containsKey(key)) {
+ matchKey = key;
+ }
+ if (matchKey == null) {
+ key = StringHelper.camelCaseToDash(key);
+ if (model.getApiOptions().containsKey(key)) {
+ matchKey = key;
+ }
+ }
+ if (matchKey == null) {
+ key = "DEFAULT";
+ if (model.getApiOptions().containsKey(key)) {
+ matchKey = key;
+ }
+ }
+ if (matchKey != null) {
+ model.getApiOptions().get(matchKey).forEach(o -> answer.put(o.getName(), o));
+ }
+ }
+ return answer;
+ }
+
public Map<String, String> endpointLenientProperties(String uri) throws URISyntaxException {
// need to normalize uri first