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 2017/04/06 10:59:47 UTC
[1/3] camel git commit: CAMEL-11113 camel-catalog build uri improved
with an esaier way when we have all the parameters
Repository: camel
Updated Branches:
refs/heads/master 994bea0cf -> 6a97606f0
CAMEL-11113 camel-catalog build uri improved with an esaier way when we have all the parameters
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/6a97606f
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/6a97606f
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/6a97606f
Branch: refs/heads/master
Commit: 6a97606f035c38e46c97cad1943b4d3a4abdda20
Parents: 6743f74
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Apr 6 12:58:00 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Apr 6 12:59:05 2017 +0200
----------------------------------------------------------------------
.../camel/catalog/AbstractCamelCatalog.java | 189 ++++++++++-------
.../camel/catalog/AbstractCamelCatalog.java | 209 +++++++++++++------
.../camel/catalog/JSonSchemaResolver.java | 2 +-
.../apache/camel/catalog/CamelCatalogTest.java | 12 ++
4 files changed, 272 insertions(+), 140 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/6a97606f/camel-core/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java b/camel-core/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
index 7135400..6511eff 100644
--- a/camel-core/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
+++ b/camel-core/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
@@ -913,97 +913,117 @@ public abstract class AbstractCamelCatalog {
}
}
-
+ // do we have all the options the original syntax needs (easy way)
+ String[] keys = syntaxKeys(originalSyntax);
+ boolean hasAllKeys = properties.keySet().containsAll(Arrays.asList(keys));
- // the tokens between the options in the path
- String[] oldTokens = syntax.split("\\w+");
- String[] tokens = syntaxTokens(syntax);
-
- // parse the syntax into each options
- Matcher matcher = SYNTAX_PATTERN.matcher(originalSyntax);
- List<String> options = new ArrayList<String>();
- while (matcher.find()) {
- String s = matcher.group(1);
- options.add(s);
- }
-
- // need to preserve {{ and }} from the syntax
- // (we need to use words only as its provisional placeholders)
- syntax = syntax.replaceAll("\\{\\{", "BEGINCAMELPLACEHOLDER");
- syntax = syntax.replaceAll("\\}\\}", "ENDCAMELPLACEHOLDER");
-
- // parse the syntax into each options
- Matcher matcher2 = SYNTAX_PATTERN.matcher(syntax);
- List<String> options2 = new ArrayList<String>();
- while (matcher2.find()) {
- String s = matcher2.group(1);
- s = s.replaceAll("BEGINCAMELPLACEHOLDER", "\\{\\{");
- s = s.replaceAll("ENDCAMELPLACEHOLDER", "\\}\\}");
- options2.add(s);
- }
-
- // build the endpoint
+ // build endpoint uri
StringBuilder sb = new StringBuilder();
sb.append(scheme);
sb.append(":");
- int range = 0;
- boolean first = true;
- boolean hasQuestionmark = false;
- for (int i = 0; i < options.size(); i++) {
- String key = options.get(i);
- String key2 = options2.get(i);
- String token = null;
- if (tokens.length > i) {
- token = tokens[i];
+ if (hasAllKeys) {
+ // we have all the keys for the syntax so we can build the uri the easy way
+ sb.append(syntax);
+
+ if (!copy.isEmpty()) {
+ boolean hasQuestionmark = sb.toString().contains("?");
+ // the last option may already contain a ? char, if so we should use & instead of ?
+ sb.append(hasQuestionmark ? ampersand : '?');
+ String query = createQueryString(copy, ampersand, encode);
+ sb.append(query);
+ }
+ } else {
+ // TODO: revisit this and see if we can do this in another way
+ // oh darn some options is missing, so we need a complex way of building the uri
+
+ // the tokens between the options in the path
+ String[] tokens = syntax.split("\\w+");
+
+ // parse the syntax into each options
+ Matcher matcher = SYNTAX_PATTERN.matcher(originalSyntax);
+ List<String> options = new ArrayList<String>();
+ while (matcher.find()) {
+ String s = matcher.group(1);
+ options.add(s);
+ }
+
+ // need to preserve {{ and }} from the syntax
+ // (we need to use words only as its provisional placeholders)
+ syntax = syntax.replaceAll("\\{\\{", "BEGINCAMELPLACEHOLDER");
+ syntax = syntax.replaceAll("\\}\\}", "ENDCAMELPLACEHOLDER");
+
+ // parse the syntax into each options
+ Matcher matcher2 = SYNTAX_PATTERN.matcher(syntax);
+ List<String> options2 = new ArrayList<String>();
+ while (matcher2.find()) {
+ String s = matcher2.group(1);
+ s = s.replaceAll("BEGINCAMELPLACEHOLDER", "\\{\\{");
+ s = s.replaceAll("ENDCAMELPLACEHOLDER", "\\}\\}");
+ options2.add(s);
}
- boolean contains = properties.containsKey(key);
- if (!contains) {
- // if the key are similar we have no explicit value and can try to find a default value if the option is required
- if (isPropertyRequired(rows, key)) {
- String value = getPropertyDefaultValue(rows, key);
- if (value != null) {
- properties.put(key, value);
- key2 = value;
+ // build the endpoint
+ int range = 0;
+ boolean first = true;
+ boolean hasQuestionmark = false;
+ for (int i = 0; i < options.size(); i++) {
+ String key = options.get(i);
+ String key2 = options2.get(i);
+ String token = null;
+ if (tokens.length > i) {
+ token = tokens[i];
+ }
+
+ boolean contains = properties.containsKey(key);
+ if (!contains) {
+ // if the key are similar we have no explicit value and can try to find a default value if the option is required
+ if (isPropertyRequired(rows, key)) {
+ String value = getPropertyDefaultValue(rows, key);
+ if (value != null) {
+ properties.put(key, value);
+ key2 = value;
+ }
}
}
- }
- // was the option provided?
- if (properties.containsKey(key)) {
- if (!first && token != null) {
- sb.append(token);
+ // was the option provided?
+ if (properties.containsKey(key)) {
+ if (!first && token != null) {
+ sb.append(token);
+ }
+ hasQuestionmark |= key.contains("?") || (token != null && token.contains("?"));
+ sb.append(key2);
+ first = false;
}
- hasQuestionmark |= key.contains("?") || (token != null && token.contains("?"));
- sb.append(key2);
- first = false;
+ range++;
}
- range++;
- }
- // append any extra options that was in surplus for the last
- while (range < options2.size()) {
- String token = null;
- if (tokens.length > range) {
- token = tokens[range];
+ // append any extra options that was in surplus for the last
+ while (range < options2.size()) {
+ String token = null;
+ if (tokens.length > range) {
+ token = tokens[range];
+ }
+ String key2 = options2.get(range);
+ sb.append(token);
+ sb.append(key2);
+ hasQuestionmark |= key2.contains("?") || (token != null && token.contains("?"));
+ range++;
}
- String key2 = options2.get(range);
- sb.append(token);
- sb.append(key2);
- hasQuestionmark |= key2.contains("?") || (token != null && token.contains("?"));
- range++;
- }
- if (!copy.isEmpty()) {
- // the last option may already contain a ? char, if so we should use & instead of ?
- sb.append(hasQuestionmark ? ampersand : '?');
- String query = createQueryString(copy, ampersand, encode);
- sb.append(query);
+
+ if (!copy.isEmpty()) {
+ // the last option may already contain a ? char, if so we should use & instead of ?
+ sb.append(hasQuestionmark ? ampersand : '?');
+ String query = createQueryString(copy, ampersand, encode);
+ sb.append(query);
+ }
}
return sb.toString();
}
+ @Deprecated
private static String[] syntaxTokens(String syntax) {
// build tokens between the words
List<String> tokens = new ArrayList<>();
@@ -1031,6 +1051,31 @@ public abstract class AbstractCamelCatalog {
return tokens.toArray(new String[tokens.size()]);
}
+ private static String[] syntaxKeys(String syntax) {
+ // build tokens between the separators
+ List<String> tokens = new ArrayList<>();
+
+ String current = "";
+ for (int i = 0; i < syntax.length(); i++) {
+ char ch = syntax.charAt(i);
+ if (Character.isLetterOrDigit(ch)) {
+ current += ch;
+ } else {
+ // reset for new current tokens
+ if (current.length() > 0) {
+ tokens.add(current);
+ current = "";
+ }
+ }
+ }
+ // anything left over?
+ if (current.length() > 0) {
+ tokens.add(current);
+ }
+
+ return tokens.toArray(new String[tokens.size()]);
+ }
+
public SimpleValidationResult validateSimpleExpression(String simple) {
return doValidateSimple(null, simple, false);
}
http://git-wip-us.apache.org/repos/asf/camel/blob/6a97606f/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java b/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
index 7fd25c8..6511eff 100644
--- a/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
+++ b/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
@@ -913,92 +913,167 @@ public abstract class AbstractCamelCatalog {
}
}
- // the tokens between the options in the path
- String[] tokens = syntax.split("\\w+");
+ // do we have all the options the original syntax needs (easy way)
+ String[] keys = syntaxKeys(originalSyntax);
+ boolean hasAllKeys = properties.keySet().containsAll(Arrays.asList(keys));
- // parse the syntax into each options
- Matcher matcher = SYNTAX_PATTERN.matcher(originalSyntax);
- List<String> options = new ArrayList<String>();
- while (matcher.find()) {
- String s = matcher.group(1);
- options.add(s);
- }
-
- // need to preserve {{ and }} from the syntax
- // (we need to use words only as its provisional placeholders)
- syntax = syntax.replaceAll("\\{\\{", "BEGINCAMELPLACEHOLDER");
- syntax = syntax.replaceAll("\\}\\}", "ENDCAMELPLACEHOLDER");
-
- // parse the syntax into each options
- Matcher matcher2 = SYNTAX_PATTERN.matcher(syntax);
- List<String> options2 = new ArrayList<String>();
- while (matcher2.find()) {
- String s = matcher2.group(1);
- s = s.replaceAll("BEGINCAMELPLACEHOLDER", "\\{\\{");
- s = s.replaceAll("ENDCAMELPLACEHOLDER", "\\}\\}");
- options2.add(s);
- }
-
- // build the endpoint
+ // build endpoint uri
StringBuilder sb = new StringBuilder();
sb.append(scheme);
sb.append(":");
- int range = 0;
- boolean first = true;
- boolean hasQuestionmark = false;
- for (int i = 0; i < options.size(); i++) {
- String key = options.get(i);
- String key2 = options2.get(i);
- String token = null;
- if (tokens.length > i) {
- token = tokens[i];
+ if (hasAllKeys) {
+ // we have all the keys for the syntax so we can build the uri the easy way
+ sb.append(syntax);
+
+ if (!copy.isEmpty()) {
+ boolean hasQuestionmark = sb.toString().contains("?");
+ // the last option may already contain a ? char, if so we should use & instead of ?
+ sb.append(hasQuestionmark ? ampersand : '?');
+ String query = createQueryString(copy, ampersand, encode);
+ sb.append(query);
+ }
+ } else {
+ // TODO: revisit this and see if we can do this in another way
+ // oh darn some options is missing, so we need a complex way of building the uri
+
+ // the tokens between the options in the path
+ String[] tokens = syntax.split("\\w+");
+
+ // parse the syntax into each options
+ Matcher matcher = SYNTAX_PATTERN.matcher(originalSyntax);
+ List<String> options = new ArrayList<String>();
+ while (matcher.find()) {
+ String s = matcher.group(1);
+ options.add(s);
}
- boolean contains = properties.containsKey(key);
- if (!contains) {
- // if the key are similar we have no explicit value and can try to find a default value if the option is required
- if (isPropertyRequired(rows, key)) {
- String value = getPropertyDefaultValue(rows, key);
- if (value != null) {
- properties.put(key, value);
- key2 = value;
+ // need to preserve {{ and }} from the syntax
+ // (we need to use words only as its provisional placeholders)
+ syntax = syntax.replaceAll("\\{\\{", "BEGINCAMELPLACEHOLDER");
+ syntax = syntax.replaceAll("\\}\\}", "ENDCAMELPLACEHOLDER");
+
+ // parse the syntax into each options
+ Matcher matcher2 = SYNTAX_PATTERN.matcher(syntax);
+ List<String> options2 = new ArrayList<String>();
+ while (matcher2.find()) {
+ String s = matcher2.group(1);
+ s = s.replaceAll("BEGINCAMELPLACEHOLDER", "\\{\\{");
+ s = s.replaceAll("ENDCAMELPLACEHOLDER", "\\}\\}");
+ options2.add(s);
+ }
+
+ // build the endpoint
+ int range = 0;
+ boolean first = true;
+ boolean hasQuestionmark = false;
+ for (int i = 0; i < options.size(); i++) {
+ String key = options.get(i);
+ String key2 = options2.get(i);
+ String token = null;
+ if (tokens.length > i) {
+ token = tokens[i];
+ }
+
+ boolean contains = properties.containsKey(key);
+ if (!contains) {
+ // if the key are similar we have no explicit value and can try to find a default value if the option is required
+ if (isPropertyRequired(rows, key)) {
+ String value = getPropertyDefaultValue(rows, key);
+ if (value != null) {
+ properties.put(key, value);
+ key2 = value;
+ }
}
}
- }
- // was the option provided?
- if (properties.containsKey(key)) {
- if (!first && token != null) {
- sb.append(token);
+ // was the option provided?
+ if (properties.containsKey(key)) {
+ if (!first && token != null) {
+ sb.append(token);
+ }
+ hasQuestionmark |= key.contains("?") || (token != null && token.contains("?"));
+ sb.append(key2);
+ first = false;
+ }
+ range++;
+ }
+ // append any extra options that was in surplus for the last
+ while (range < options2.size()) {
+ String token = null;
+ if (tokens.length > range) {
+ token = tokens[range];
}
- hasQuestionmark |= key.contains("?") || (token != null && token.contains("?"));
+ String key2 = options2.get(range);
+ sb.append(token);
sb.append(key2);
- first = false;
+ hasQuestionmark |= key2.contains("?") || (token != null && token.contains("?"));
+ range++;
+ }
+
+
+ if (!copy.isEmpty()) {
+ // the last option may already contain a ? char, if so we should use & instead of ?
+ sb.append(hasQuestionmark ? ampersand : '?');
+ String query = createQueryString(copy, ampersand, encode);
+ sb.append(query);
}
- range++;
}
- // append any extra options that was in surplus for the last
- while (range < options2.size()) {
- String token = null;
- if (tokens.length > range) {
- token = tokens[range];
+
+ return sb.toString();
+ }
+
+ @Deprecated
+ private static String[] syntaxTokens(String syntax) {
+ // build tokens between the words
+ List<String> tokens = new ArrayList<>();
+ // preserve backwards behavior which had an empty token first
+ tokens.add("");
+
+ String current = "";
+ for (int i = 0; i < syntax.length(); i++) {
+ char ch = syntax.charAt(i);
+ if (Character.isLetterOrDigit(ch)) {
+ // reset for new current tokens
+ if (current.length() > 0) {
+ tokens.add(current);
+ current = "";
+ }
+ } else {
+ current += ch;
}
- String key2 = options2.get(range);
- sb.append(token);
- sb.append(key2);
- hasQuestionmark |= key2.contains("?") || (token != null && token.contains("?"));
- range++;
}
+ // anything left over?
+ if (current.length() > 0) {
+ tokens.add(current);
+ }
+
+ return tokens.toArray(new String[tokens.size()]);
+ }
- if (!copy.isEmpty()) {
- // the last option may already contain a ? char, if so we should use & instead of ?
- sb.append(hasQuestionmark ? ampersand : '?');
- String query = createQueryString(copy, ampersand, encode);
- sb.append(query);
+ private static String[] syntaxKeys(String syntax) {
+ // build tokens between the separators
+ List<String> tokens = new ArrayList<>();
+
+ String current = "";
+ for (int i = 0; i < syntax.length(); i++) {
+ char ch = syntax.charAt(i);
+ if (Character.isLetterOrDigit(ch)) {
+ current += ch;
+ } else {
+ // reset for new current tokens
+ if (current.length() > 0) {
+ tokens.add(current);
+ current = "";
+ }
+ }
+ }
+ // anything left over?
+ if (current.length() > 0) {
+ tokens.add(current);
}
- return sb.toString();
+ return tokens.toArray(new String[tokens.size()]);
}
public SimpleValidationResult validateSimpleExpression(String simple) {
http://git-wip-us.apache.org/repos/asf/camel/blob/6a97606f/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/JSonSchemaResolver.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/JSonSchemaResolver.java b/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/JSonSchemaResolver.java
index e992f95..9bf09cc 100644
--- a/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/JSonSchemaResolver.java
+++ b/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/JSonSchemaResolver.java
@@ -17,7 +17,7 @@
package org.apache.camel.catalog;
/**
- * Pluggable resolver to load JSon schmea files for components, data formats, languages etc.
+ * Pluggable resolver to load JSon schema files for components, data formats, languages etc.
*/
public interface JSonSchemaResolver {
http://git-wip-us.apache.org/repos/asf/camel/blob/6a97606f/platforms/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java b/platforms/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
index 3494c62..3b9952c 100644
--- a/platforms/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
+++ b/platforms/camel-catalog/src/test/java/org/apache/camel/catalog/CamelCatalogTest.java
@@ -18,6 +18,7 @@ package org.apache.camel.catalog;
import java.io.FileInputStream;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -299,6 +300,17 @@ public class CamelCatalogTest {
}
@Test
+ public void testAsEndpointUriRestUriTemplate() throws Exception {
+ Map<String, String> map = new LinkedHashMap<>();
+ map.put("method", "get");
+ map.put("path", "api");
+ map.put("uriTemplate", "user/{id}");
+ String uri = catalog.asEndpointUri("rest", map, true);
+
+ assertEquals("rest:get:api:user/{id}", uri);
+ }
+
+ @Test
public void testAsEndpointUriJson() throws Exception {
String json = loadText(CamelCatalogTest.class.getClassLoader().getResourceAsStream("sample.json"));
String uri = catalog.asEndpointUri("ftp", json, true);
[3/3] camel git commit: CAMEL-11113 added unit tests
Posted by da...@apache.org.
CAMEL-11113 added unit tests
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/d7f23195
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/d7f23195
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/d7f23195
Branch: refs/heads/master
Commit: d7f23195a4fe55d45b7125dbf1ecaa04043c5f08
Parents: 994bea0
Author: Zoran Regvart <zr...@apache.org>
Authored: Wed Apr 5 16:01:33 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Apr 6 12:59:05 2017 +0200
----------------------------------------------------------------------
.../camel/catalog/AbstractCamelCatalog.java | 2 +-
.../camel/catalog/AbstractCamelCatalogTest.java | 104 +++++++++++++++++++
.../camel/catalog/AbstractCamelCatalog.java | 2 +-
3 files changed, 106 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/d7f23195/camel-core/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java b/camel-core/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
index 6c1e3d4..7fd25c8 100644
--- a/camel-core/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
+++ b/camel-core/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
@@ -872,7 +872,7 @@ public abstract class AbstractCamelCatalog {
return doAsEndpointUri(scheme, properties, "&", encode);
}
- private String doAsEndpointUri(String scheme, Map<String, String> properties, String ampersand, boolean encode) throws URISyntaxException {
+ String doAsEndpointUri(String scheme, Map<String, String> properties, String ampersand, boolean encode) throws URISyntaxException {
String json = jsonSchemaResolver.getComponentJSonSchema(scheme);
if (json == null) {
throw new IllegalArgumentException("Cannot find endpoint with scheme " + scheme);
http://git-wip-us.apache.org/repos/asf/camel/blob/d7f23195/camel-core/src/test/java/org/apache/camel/catalog/AbstractCamelCatalogTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/catalog/AbstractCamelCatalogTest.java b/camel-core/src/test/java/org/apache/camel/catalog/AbstractCamelCatalogTest.java
new file mode 100644
index 0000000..ed7e997
--- /dev/null
+++ b/camel-core/src/test/java/org/apache/camel/catalog/AbstractCamelCatalogTest.java
@@ -0,0 +1,104 @@
+/**
+ * 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.catalog;
+
+import java.net.URISyntaxException;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.mock;
+import static org.easymock.EasyMock.replay;
+import static org.junit.Assert.assertEquals;
+
+public class AbstractCamelCatalogTest {
+
+ AbstractCamelCatalog catalog = new AbstractCamelCatalog() {
+ };
+
+ JSonSchemaResolver resolver;
+
+ @Before
+ public void setupMockCatalog() {
+ resolver = mock(JSonSchemaResolver.class);
+
+ catalog.setJSonSchemaResolver(resolver);
+ }
+
+ @Test
+ public void shouldConstructEndpointUris() throws URISyntaxException {
+ expect(resolver.getComponentJSonSchema("comp")).andReturn("{\n"//
+ + " \"component\": {\n"//
+ + " \"syntax\": \"comp:param1:param2\"\n"//
+ + " }\n"//
+ + "}");
+
+ replay(resolver);
+
+ final Map<String, String> properties = new HashMap<>();
+ properties.put("param1", "value1");
+ properties.put("param2", "value2");
+ properties.put("param3", "value3");
+
+ final String endpointUri = catalog.doAsEndpointUri("comp", properties, "&", false);
+
+ assertEquals("comp:value1:value2?param3=value3", endpointUri);
+ }
+
+ @Test
+ public void shouldConstructEndpointUrisWithPropertyPlaceholders() throws URISyntaxException {
+ expect(resolver.getComponentJSonSchema("comp")).andReturn("{\n"//
+ + " \"component\": {\n"//
+ + " \"syntax\": \"comp:param1:param2\"\n"//
+ + " }\n"//
+ + "}");
+
+ replay(resolver);
+
+ final Map<String, String> properties = new HashMap<>();
+ properties.put("param1", "{{prop1}}");
+ properties.put("param2", "{{prop2}}");
+ properties.put("param3", "{{prop3}}");
+
+ final String endpointUri = catalog.doAsEndpointUri("comp", properties, "&", false);
+
+ assertEquals("comp:{{prop1}}:{{prop2}}?param3={{prop3}}", endpointUri);
+ }
+
+ @Test
+ public void shouldConstructEndpointUrisWhenValuesContainTokens() throws URISyntaxException {
+ expect(resolver.getComponentJSonSchema("comp")).andReturn("{\n"//
+ + " \"component\": {\n"//
+ + " \"syntax\": \"comp:param1:param2\"\n"//
+ + " }\n"//
+ + "}");
+
+ replay(resolver);
+
+ final Map<String, String> properties = new HashMap<>();
+ properties.put("param1", "{value1}");
+ properties.put("param2", "/value2/");
+ properties.put("param3", "/value3/{param}");
+
+ final String endpointUri = catalog.doAsEndpointUri("comp", properties, "&", false);
+
+ assertEquals("comp:{value1}:/value2/?param3=/value3/{param}", endpointUri);
+ }
+}
http://git-wip-us.apache.org/repos/asf/camel/blob/d7f23195/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
----------------------------------------------------------------------
diff --git a/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java b/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
index 6c1e3d4..7fd25c8 100644
--- a/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
+++ b/platforms/camel-catalog/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
@@ -872,7 +872,7 @@ public abstract class AbstractCamelCatalog {
return doAsEndpointUri(scheme, properties, "&", encode);
}
- private String doAsEndpointUri(String scheme, Map<String, String> properties, String ampersand, boolean encode) throws URISyntaxException {
+ String doAsEndpointUri(String scheme, Map<String, String> properties, String ampersand, boolean encode) throws URISyntaxException {
String json = jsonSchemaResolver.getComponentJSonSchema(scheme);
if (json == null) {
throw new IllegalArgumentException("Cannot find endpoint with scheme " + scheme);
[2/3] camel git commit: CAMEL-11113 work in progress
Posted by da...@apache.org.
CAMEL-11113 work in progress
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/6743f743
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/6743f743
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/6743f743
Branch: refs/heads/master
Commit: 6743f7437a299e5b549d6e703b91a6559a6f064a
Parents: d7f2319
Author: Claus Ibsen <da...@apache.org>
Authored: Thu Apr 6 10:59:47 2017 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Apr 6 12:59:05 2017 +0200
----------------------------------------------------------------------
.../camel/catalog/AbstractCamelCatalog.java | 32 +++++++++++++++++++-
.../camel/catalog/JSonSchemaResolver.java | 2 +-
2 files changed, 32 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/6743f743/camel-core/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java b/camel-core/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
index 7fd25c8..7135400 100644
--- a/camel-core/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
+++ b/camel-core/src/main/java/org/apache/camel/catalog/AbstractCamelCatalog.java
@@ -913,8 +913,11 @@ public abstract class AbstractCamelCatalog {
}
}
+
+
// the tokens between the options in the path
- String[] tokens = syntax.split("\\w+");
+ String[] oldTokens = syntax.split("\\w+");
+ String[] tokens = syntaxTokens(syntax);
// parse the syntax into each options
Matcher matcher = SYNTAX_PATTERN.matcher(originalSyntax);
@@ -1001,6 +1004,33 @@ public abstract class AbstractCamelCatalog {
return sb.toString();
}
+ private static String[] syntaxTokens(String syntax) {
+ // build tokens between the words
+ List<String> tokens = new ArrayList<>();
+ // preserve backwards behavior which had an empty token first
+ tokens.add("");
+
+ String current = "";
+ for (int i = 0; i < syntax.length(); i++) {
+ char ch = syntax.charAt(i);
+ if (Character.isLetterOrDigit(ch)) {
+ // reset for new current tokens
+ if (current.length() > 0) {
+ tokens.add(current);
+ current = "";
+ }
+ } else {
+ current += ch;
+ }
+ }
+ // anything left over?
+ if (current.length() > 0) {
+ tokens.add(current);
+ }
+
+ return tokens.toArray(new String[tokens.size()]);
+ }
+
public SimpleValidationResult validateSimpleExpression(String simple) {
return doValidateSimple(null, simple, false);
}
http://git-wip-us.apache.org/repos/asf/camel/blob/6743f743/camel-core/src/main/java/org/apache/camel/catalog/JSonSchemaResolver.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/catalog/JSonSchemaResolver.java b/camel-core/src/main/java/org/apache/camel/catalog/JSonSchemaResolver.java
index e992f95..9bf09cc 100644
--- a/camel-core/src/main/java/org/apache/camel/catalog/JSonSchemaResolver.java
+++ b/camel-core/src/main/java/org/apache/camel/catalog/JSonSchemaResolver.java
@@ -17,7 +17,7 @@
package org.apache.camel.catalog;
/**
- * Pluggable resolver to load JSon schmea files for components, data formats, languages etc.
+ * Pluggable resolver to load JSon schema files for components, data formats, languages etc.
*/
public interface JSonSchemaResolver {