http://git-wip-us.apache.org/repos/asf/camel/blob/b23fbb46/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java deleted file mode 100644 index 5e3ec9b..0000000 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultRuntimeProvider.java +++ /dev/null @@ -1,160 +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.catalog; - -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.List; - -public class DefaultRuntimeProvider implements RuntimeProvider { - - private static final String COMPONENT_DIR = "org/apache/camel/catalog/components"; - private static final String DATAFORMAT_DIR = "org/apache/camel/catalog/dataformats"; - private static final String LANGUAGE_DIR = "org/apache/camel/catalog/languages"; - private static final String OTHER_DIR = "org/apache/camel/catalog/others"; - private static final String COMPONENTS_CATALOG = "org/apache/camel/catalog/components.properties"; - private static final String DATA_FORMATS_CATALOG = "org/apache/camel/catalog/dataformats.properties"; - private static final String LANGUAGE_CATALOG = "org/apache/camel/catalog/languages.properties"; - private static final String OTHER_CATALOG = "org/apache/camel/catalog/others.properties"; - - private CamelCatalog camelCatalog; - - public DefaultRuntimeProvider() { - } - - public DefaultRuntimeProvider(CamelCatalog camelCatalog) { - this.camelCatalog = camelCatalog; - } - - @Override - public CamelCatalog getCamelCatalog() { - return camelCatalog; - } - - @Override - public void setCamelCatalog(CamelCatalog camelCatalog) { - this.camelCatalog = camelCatalog; - } - - @Override - public String getProviderName() { - return "default"; - } - - @Override - public String getProviderGroupId() { - return "org.apache.camel"; - } - - @Override - public String getProviderArtifactId() { - return "camel-catalog"; - } - - @Override - public String getComponentJSonSchemaDirectory() { - return COMPONENT_DIR; - } - - @Override - public String getDataFormatJSonSchemaDirectory() { - return DATAFORMAT_DIR; - } - - @Override - public String getLanguageJSonSchemaDirectory() { - return LANGUAGE_DIR; - } - - @Override - public String getOtherJSonSchemaDirectory() { - return OTHER_DIR; - } - - protected String getComponentsCatalog() { - return COMPONENTS_CATALOG; - } - - protected String getDataFormatsCatalog() { - return DATA_FORMATS_CATALOG; - } - - protected String getLanguageCatalog() { - return LANGUAGE_CATALOG; - } - - protected String getOtherCatalog() { - return OTHER_CATALOG; - } - - @Override - public List<String> findComponentNames() { - List<String> names = new ArrayList<String>(); - InputStream is = getCamelCatalog().getVersionManager().getResourceAsStream(getComponentsCatalog()); - if (is != null) { - try { - CatalogHelper.loadLines(is, names); - } catch (IOException e) { - // ignore - } - } - return names; - } - - @Override - public List<String> findDataFormatNames() { - List<String> names = new ArrayList<String>(); - InputStream is = getCamelCatalog().getVersionManager().getResourceAsStream(getDataFormatsCatalog()); - if (is != null) { - try { - CatalogHelper.loadLines(is, names); - } catch (IOException e) { - // ignore - } - } - return names; - } - - @Override - public List<String> findLanguageNames() { - List<String> names = new ArrayList<String>(); - InputStream is = getCamelCatalog().getVersionManager().getResourceAsStream(getLanguageCatalog()); - if (is != null) { - try { - CatalogHelper.loadLines(is, names); - } catch (IOException e) { - // ignore - } - } - return names; - } - - @Override - public List<String> findOtherNames() { - List<String> names = new ArrayList<String>(); - InputStream is = getCamelCatalog().getVersionManager().getResourceAsStream(getOtherCatalog()); - if (is != null) { - try { - CatalogHelper.loadLines(is, names); - } catch (IOException e) { - // ignore - } - } - return names; - } -}
http://git-wip-us.apache.org/repos/asf/camel/blob/b23fbb46/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultVersionManager.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultVersionManager.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultVersionManager.java deleted file mode 100644 index c30ddbc..0000000 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/DefaultVersionManager.java +++ /dev/null @@ -1,55 +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.catalog; - -import java.io.InputStream; - -public class DefaultVersionManager implements VersionManager { - - private final CamelCatalog camelCatalog; - - public DefaultVersionManager(CamelCatalog camelCatalog) { - this.camelCatalog = camelCatalog; - } - - @Override - public String getLoadedVersion() { - return camelCatalog.getCatalogVersion(); - } - - @Override - public boolean loadVersion(String version) { - return getLoadedVersion().equals(version); - } - - @Override - public String getRuntimeProviderLoadedVersion() { - // not supported - return null; - } - - @Override - public boolean loadRuntimeProviderVersion(String groupId, String artifactId, String version) { - // not supported - return false; - } - - @Override - public InputStream getResourceAsStream(String name) { - return DefaultCamelCatalog.class.getClassLoader().getResourceAsStream(name); - } -} http://git-wip-us.apache.org/repos/asf/camel/blob/b23fbb46/platforms/catalog/src/main/java/org/apache/camel/catalog/EndpointValidationResult.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/EndpointValidationResult.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/EndpointValidationResult.java deleted file mode 100644 index 11e2c5e..0000000 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/EndpointValidationResult.java +++ /dev/null @@ -1,426 +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.catalog; - -import java.io.Serializable; -import java.util.Arrays; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.Map; -import java.util.Set; - -import static org.apache.camel.catalog.URISupport.isEmpty; - -/** - * Details result of validating endpoint uri. - */ -public class EndpointValidationResult implements Serializable { - - private final String uri; - private int errors; - - // general - private String syntaxError; - private String unknownComponent; - private String incapable; - - // options - private Set<String> unknown; - private Map<String, String[]> unknownSuggestions; - private Set<String> lenient; - private Set<String> notConsumerOnly; - private Set<String> notProducerOnly; - private Set<String> required; - private Map<String, String> invalidEnum; - private Map<String, String[]> invalidEnumChoices; - private Map<String, String[]> invalidEnumSuggestions; - private Map<String, String> invalidReference; - private Map<String, String> invalidBoolean; - private Map<String, String> invalidInteger; - private Map<String, String> invalidNumber; - private Map<String, String> defaultValues; - - public EndpointValidationResult(String uri) { - this.uri = uri; - } - - public String getUri() { - return uri; - } - - public int getNumberOfErrors() { - return errors; - } - - public boolean isSuccess() { - boolean ok = syntaxError == null && unknownComponent == null && incapable == null - && unknown == null && required == null; - if (ok) { - ok = notConsumerOnly == null && notProducerOnly == null; - } - if (ok) { - ok = invalidEnum == null && invalidEnumChoices == null && invalidReference == null - && invalidBoolean == null && invalidInteger == null && invalidNumber == null; - } - return ok; - } - - public void addSyntaxError(String syntaxError) { - this.syntaxError = syntaxError; - errors++; - } - - public void addIncapable(String uri) { - this.incapable = uri; - errors++; - } - - public void addUnknownComponent(String name) { - this.unknownComponent = name; - errors++; - } - - public void addUnknown(String name) { - if (unknown == null) { - unknown = new LinkedHashSet<String>(); - } - if (!unknown.contains(name)) { - unknown.add(name); - errors++; - } - } - - public void addUnknownSuggestions(String name, String[] suggestions) { - if (unknownSuggestions == null) { - unknownSuggestions = new LinkedHashMap<String, String[]>(); - } - unknownSuggestions.put(name, suggestions); - } - - public void addLenient(String name) { - if (lenient == null) { - lenient = new LinkedHashSet<String>(); - } - if (!lenient.contains(name)) { - lenient.add(name); - } - } - - public void addRequired(String name) { - if (required == null) { - required = new LinkedHashSet<String>(); - } - if (!required.contains(name)) { - required.add(name); - errors++; - } - } - - public void addInvalidEnum(String name, String value) { - if (invalidEnum == null) { - invalidEnum = new LinkedHashMap<String, String>(); - } - if (!invalidEnum.containsKey(name)) { - invalidEnum.put(name, value); - errors++; - } - } - - public void addInvalidEnumChoices(String name, String[] choices) { - if (invalidEnumChoices == null) { - invalidEnumChoices = new LinkedHashMap<String, String[]>(); - } - invalidEnumChoices.put(name, choices); - } - - public void addInvalidEnumSuggestions(String name, String[] suggestions) { - if (invalidEnumSuggestions == null) { - invalidEnumSuggestions = new LinkedHashMap<String, String[]>(); - } - invalidEnumSuggestions.put(name, suggestions); - } - - public void addInvalidReference(String name, String value) { - if (invalidReference == null) { - invalidReference = new LinkedHashMap<String, String>(); - } - if (!invalidReference.containsKey(name)) { - invalidReference.put(name, value); - errors++; - } - } - - public void addInvalidBoolean(String name, String value) { - if (invalidBoolean == null) { - invalidBoolean = new LinkedHashMap<String, String>(); - } - if (!invalidBoolean.containsKey(name)) { - invalidBoolean.put(name, value); - errors++; - } - } - - public void addInvalidInteger(String name, String value) { - if (invalidInteger == null) { - invalidInteger = new LinkedHashMap<String, String>(); - } - if (!invalidInteger.containsKey(name)) { - invalidInteger.put(name, value); - errors++; - } - } - - public void addInvalidNumber(String name, String value) { - if (invalidNumber == null) { - invalidNumber = new LinkedHashMap<String, String>(); - } - if (!invalidNumber.containsKey(name)) { - invalidNumber.put(name, value); - errors++; - } - } - - public void addDefaultValue(String name, String value) { - if (defaultValues == null) { - defaultValues = new LinkedHashMap<String, String>(); - } - defaultValues.put(name, value); - } - - public void addNotConsumerOnly(String name) { - if (notConsumerOnly == null) { - notConsumerOnly = new LinkedHashSet<String>(); - } - if (!notConsumerOnly.contains(name)) { - notConsumerOnly.add(name); - errors++; - } - } - - public void addNotProducerOnly(String name) { - if (notProducerOnly == null) { - notProducerOnly = new LinkedHashSet<String>(); - } - if (!notProducerOnly.contains(name)) { - notProducerOnly.add(name); - errors++; - } - } - - public String getSyntaxError() { - return syntaxError; - } - - public String getIncapable() { - return incapable; - } - - public Set<String> getUnknown() { - return unknown; - } - - public Set<String> getLenient() { - return lenient; - } - - public Map<String, String[]> getUnknownSuggestions() { - return unknownSuggestions; - } - - public String getUnknownComponent() { - return unknownComponent; - } - - public Set<String> getRequired() { - return required; - } - - public Map<String, String> getInvalidEnum() { - return invalidEnum; - } - - public Map<String, String[]> getInvalidEnumChoices() { - return invalidEnumChoices; - } - - public Map<String, String> getInvalidReference() { - return invalidReference; - } - - public Map<String, String> getInvalidBoolean() { - return invalidBoolean; - } - - public Map<String, String> getInvalidInteger() { - return invalidInteger; - } - - public Map<String, String> getInvalidNumber() { - return invalidNumber; - } - - public Map<String, String> getDefaultValues() { - return defaultValues; - } - - public Set<String> getNotConsumerOnly() { - return notConsumerOnly; - } - - public Set<String> getNotProducerOnly() { - return notProducerOnly; - } - - /** - * A human readable summary of the validation errors. - * - * @param includeHeader whether to include a header - * @return the summary, or <tt>null</tt> if no validation errors - */ - public String summaryErrorMessage(boolean includeHeader) { - if (isSuccess()) { - return null; - } - - if (incapable != null) { - return "\tIncapable of parsing uri: " + incapable; - } else if (syntaxError != null) { - return "\tSyntax error: " + syntaxError; - } else if (unknownComponent != null) { - return "\tUnknown component: " + unknownComponent; - } - - // for each invalid option build a reason message - Map<String, String> options = new LinkedHashMap<String, String>(); - if (unknown != null) { - for (String name : unknown) { - if (unknownSuggestions != null && unknownSuggestions.containsKey(name)) { - String[] suggestions = unknownSuggestions.get(name); - if (suggestions != null && suggestions.length > 0) { - String str = Arrays.asList(suggestions).toString(); - options.put(name, "Unknown option. Did you mean: " + str); - } else { - options.put(name, "Unknown option"); - } - } else { - options.put(name, "Unknown option"); - } - } - } - if (notConsumerOnly != null) { - for (String name : notConsumerOnly) { - options.put(name, "Option not applicable in consumer only mode"); - } - } - if (notProducerOnly != null) { - for (String name : notProducerOnly) { - options.put(name, "Option not applicable in producer only mode"); - } - } - if (required != null) { - for (String name : required) { - options.put(name, "Missing required option"); - } - } - if (invalidEnum != null) { - for (Map.Entry<String, String> entry : invalidEnum.entrySet()) { - String name = entry.getKey(); - String[] choices = invalidEnumChoices.get(name); - String defaultValue = defaultValues != null ? defaultValues.get(entry.getKey()) : null; - String str = Arrays.asList(choices).toString(); - String msg = "Invalid enum value: " + entry.getValue() + ". Possible values: " + str; - if (invalidEnumSuggestions != null) { - String[] suggestions = invalidEnumSuggestions.get(name); - if (suggestions != null && suggestions.length > 0) { - str = Arrays.asList(suggestions).toString(); - msg += ". Did you mean: " + str; - } - } - if (defaultValue != null) { - msg += ". Default value: " + defaultValue; - } - - options.put(entry.getKey(), msg); - } - } - if (invalidReference != null) { - for (Map.Entry<String, String> entry : invalidReference.entrySet()) { - boolean empty = isEmpty(entry.getValue()); - if (empty) { - options.put(entry.getKey(), "Empty reference value"); - } else if (!entry.getValue().startsWith("#")) { - options.put(entry.getKey(), "Invalid reference value: " + entry.getValue() + " must start with #"); - } else { - options.put(entry.getKey(), "Invalid reference value: " + entry.getValue()); - } - } - } - if (invalidBoolean != null) { - for (Map.Entry<String, String> entry : invalidBoolean.entrySet()) { - boolean empty = isEmpty(entry.getValue()); - if (empty) { - options.put(entry.getKey(), "Empty boolean value"); - } else { - options.put(entry.getKey(), "Invalid boolean value: " + entry.getValue()); - } - } - } - if (invalidInteger != null) { - for (Map.Entry<String, String> entry : invalidInteger.entrySet()) { - boolean empty = isEmpty(entry.getValue()); - if (empty) { - options.put(entry.getKey(), "Empty integer value"); - } else { - options.put(entry.getKey(), "Invalid integer value: " + entry.getValue()); - } - } - } - if (invalidNumber != null) { - for (Map.Entry<String, String> entry : invalidNumber.entrySet()) { - boolean empty = isEmpty(entry.getValue()); - if (empty) { - options.put(entry.getKey(), "Empty number value"); - } else { - options.put(entry.getKey(), "Invalid number value: " + entry.getValue()); - } - } - } - - // build a table with the error summary nicely formatted - // lets use 24 as min length - int maxLen = 24; - for (String key : options.keySet()) { - maxLen = Math.max(maxLen, key.length()); - } - String format = "%" + maxLen + "s %s"; - - // build the human error summary - StringBuilder sb = new StringBuilder(); - if (includeHeader) { - sb.append("Endpoint validator error\n"); - sb.append("---------------------------------------------------------------------------------------------------------------------------------------\n"); - sb.append("\n"); - } - sb.append("\t").append(uri).append("\n"); - for (Map.Entry<String, String> option : options.entrySet()) { - String out = String.format(format, option.getKey(), option.getValue()); - sb.append("\n\t").append(out); - } - - return sb.toString(); - } -} http://git-wip-us.apache.org/repos/asf/camel/blob/b23fbb46/platforms/catalog/src/main/java/org/apache/camel/catalog/JSonSchemaHelper.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/JSonSchemaHelper.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/JSonSchemaHelper.java deleted file mode 100644 index 318cbf4..0000000 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/JSonSchemaHelper.java +++ /dev/null @@ -1,424 +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.catalog; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public final class JSonSchemaHelper { - - // 0 = text, 1 = enum, 2 = boolean, 3 = integer or number - private static final Pattern PATTERN = Pattern.compile("\"(.+?)\"|\\[(.+)\\]|(true|false)|(\\d+\\.?\\d*)"); - private static final String QUOT = """; - - private JSonSchemaHelper() { - } - - /** - * Parses the json schema to split it into a list or rows, where each row contains key value pairs with the metadata - * - * @param group the group to parse from such as <tt>component</tt>, <tt>componentProperties</tt>, or <tt>properties</tt>. - * @param json the json - * @return a list of all the rows, where each row is a set of key value pairs with metadata - */ - public static List<Map<String, String>> parseJsonSchema(String group, String json, boolean parseProperties) { - List<Map<String, String>> answer = new ArrayList<Map<String, String>>(); - if (json == null) { - return answer; - } - - boolean found = false; - - // parse line by line - String[] lines = json.split("\n"); - for (String line : lines) { - // we need to find the group first - if (!found) { - String s = line.trim(); - found = s.startsWith("\"" + group + "\":") && s.endsWith("{"); - continue; - } - - // we should stop when we end the group - if (line.equals(" },") || line.equals(" }")) { - break; - } - - // need to safe encode \" so we can parse the line - line = line.replaceAll("\"\\\\\"\"", '"' + QUOT + '"'); - - Map<String, String> row = new LinkedHashMap<String, String>(); - Matcher matcher = PATTERN.matcher(line); - - String key; - if (parseProperties) { - // when parsing properties the first key is given as name, so the first parsed token is the value of the name - key = "name"; - } else { - key = null; - } - while (matcher.find()) { - if (key == null) { - key = matcher.group(1); - } else { - String value = matcher.group(1); - if (value != null) { - // its text based - value = value.trim(); - // decode - value = value.replaceAll(QUOT, "\""); - value = decodeJson(value); - } - if (value == null) { - // not text then its maybe an enum? - value = matcher.group(2); - if (value != null) { - // its an enum so strip out " and trim spaces after comma - value = value.replaceAll("\"", ""); - value = value.replaceAll(", ", ","); - value = value.trim(); - } - } - if (value == null) { - // not text then its maybe a boolean? - value = matcher.group(3); - } - if (value == null) { - // not text then its maybe a integer? - value = matcher.group(4); - } - if (value != null) { - row.put(key, value); - } - // reset - key = null; - } - } - if (!row.isEmpty()) { - answer.add(row); - } - } - - return answer; - } - - private static String decodeJson(String value) { - // json encodes a \ as \\ so we need to decode from \\ back to \ - if ("\\\\".equals(value)) { - value = "\\"; - } - return value; - } - - public static boolean isComponentLenientProperties(List<Map<String, String>> rows) { - for (Map<String, String> row : rows) { - if (row.containsKey("lenientProperties")) { - return "true".equals(row.get("lenientProperties")); - } - } - return false; - } - - public static boolean isComponentConsumerOnly(List<Map<String, String>> rows) { - for (Map<String, String> row : rows) { - if (row.containsKey("consumerOnly")) { - return "true".equals(row.get("consumerOnly")); - } - } - return false; - } - - public static boolean isComponentProducerOnly(List<Map<String, String>> rows) { - for (Map<String, String> row : rows) { - if (row.containsKey("producerOnly")) { - return "true".equals(row.get("producerOnly")); - } - } - return false; - } - - public static boolean isPropertyConsumerOnly(List<Map<String, String>> rows, String name) { - for (Map<String, String> row : rows) { - String labels = null; - boolean found = false; - if (row.containsKey("name")) { - found = name.equals(row.get("name")); - } - if (row.containsKey("label")) { - labels = row.get("label"); - } - if (found) { - return labels != null && labels.contains("consumer"); - } - } - return false; - } - - public static boolean isPropertyProducerOnly(List<Map<String, String>> rows, String name) { - for (Map<String, String> row : rows) { - String labels = null; - boolean found = false; - if (row.containsKey("name")) { - found = name.equals(row.get("name")); - } - if (row.containsKey("label")) { - labels = row.get("label"); - } - if (found) { - return labels != null && labels.contains("producer"); - } - } - return false; - } - - public static boolean isPropertyRequired(List<Map<String, String>> rows, String name) { - for (Map<String, String> row : rows) { - boolean required = false; - boolean found = false; - if (row.containsKey("name")) { - found = name.equals(row.get("name")); - } - if (row.containsKey("required")) { - required = "true".equals(row.get("required")); - } - if (found) { - return required; - } - } - return false; - } - - public static String getPropertyKind(List<Map<String, String>> rows, String name) { - for (Map<String, String> row : rows) { - String kind = null; - boolean found = false; - if (row.containsKey("name")) { - found = name.equals(row.get("name")); - } - if (row.containsKey("kind")) { - kind = row.get("kind"); - } - if (found) { - return kind; - } - } - return null; - } - - public static boolean isPropertyBoolean(List<Map<String, String>> rows, String name) { - for (Map<String, String> row : rows) { - String type = null; - boolean found = false; - if (row.containsKey("name")) { - found = name.equals(row.get("name")); - } - if (row.containsKey("type")) { - type = row.get("type"); - } - if (found) { - return "boolean".equals(type); - } - } - return false; - } - - public static boolean isPropertyInteger(List<Map<String, String>> rows, String name) { - for (Map<String, String> row : rows) { - String type = null; - boolean found = false; - if (row.containsKey("name")) { - found = name.equals(row.get("name")); - } - if (row.containsKey("type")) { - type = row.get("type"); - } - if (found) { - return "integer".equals(type); - } - } - return false; - } - - public static boolean isPropertyNumber(List<Map<String, String>> rows, String name) { - for (Map<String, String> row : rows) { - String type = null; - boolean found = false; - if (row.containsKey("name")) { - found = name.equals(row.get("name")); - } - if (row.containsKey("type")) { - type = row.get("type"); - } - if (found) { - return "number".equals(type); - } - } - return false; - } - - public static boolean isPropertyObject(List<Map<String, String>> rows, String name) { - for (Map<String, String> row : rows) { - String type = null; - boolean found = false; - if (row.containsKey("name")) { - found = name.equals(row.get("name")); - } - if (row.containsKey("type")) { - type = row.get("type"); - } - if (found) { - return "object".equals(type); - } - } - return false; - } - - public static String getPropertyDefaultValue(List<Map<String, String>> rows, String name) { - for (Map<String, String> row : rows) { - String defaultValue = null; - boolean found = false; - if (row.containsKey("name")) { - found = name.equals(row.get("name")); - } - if (row.containsKey("defaultValue")) { - defaultValue = row.get("defaultValue"); - } - if (found) { - return defaultValue; - } - } - return null; - } - - public static String stripOptionalPrefixFromName(List<Map<String, String>> rows, String name) { - for (Map<String, String> row : rows) { - String optionalPrefix = null; - boolean found = false; - if (row.containsKey("optionalPrefix")) { - optionalPrefix = row.get("optionalPrefix"); - } - if (row.containsKey("name")) { - if (optionalPrefix != null && name.startsWith(optionalPrefix)) { - name = name.substring(optionalPrefix.length()); - // try again - return stripOptionalPrefixFromName(rows, name); - } else { - found = name.equals(row.get("name")); - } - } - if (found) { - return name; - } - } - return name; - } - - public static String getPropertyEnum(List<Map<String, String>> rows, String name) { - for (Map<String, String> row : rows) { - String enums = null; - boolean found = false; - if (row.containsKey("name")) { - found = name.equals(row.get("name")); - } - if (row.containsKey("enum")) { - enums = row.get("enum"); - } - if (found) { - return enums; - } - } - return null; - } - - public static String getPropertyPrefix(List<Map<String, String>> rows, String name) { - for (Map<String, String> row : rows) { - String prefix = null; - boolean found = false; - if (row.containsKey("name")) { - found = name.equals(row.get("name")); - } - if (row.containsKey("prefix")) { - prefix = row.get("prefix"); - } - if (found) { - return prefix; - } - } - return null; - } - - public static boolean isPropertyMultiValue(List<Map<String, String>> rows, String name) { - for (Map<String, String> row : rows) { - boolean multiValue = false; - boolean found = false; - if (row.containsKey("name")) { - found = name.equals(row.get("name")); - } - if (row.containsKey("multiValue")) { - multiValue = "true".equals(row.get("multiValue")); - } - if (found) { - return multiValue; - } - } - return false; - } - - public static String getPropertyNameFromNameWithPrefix(List<Map<String, String>> rows, String name) { - for (Map<String, String> row : rows) { - String propertyName = null; - boolean found = false; - if (row.containsKey("name")) { - propertyName = row.get("name"); - } - if (row.containsKey("prefix")) { - String preifx = row.get("prefix"); - found = name.startsWith(preifx); - } - if (found) { - return propertyName; - } - } - return null; - } - - public static Map<String, String> getRow(List<Map<String, String>> rows, String key) { - for (Map<String, String> row : rows) { - if (key.equals(row.get("name"))) { - return row; - } - } - return null; - } - - public static Set<String> getNames(List<Map<String, String>> rows) { - Set<String> answer = new LinkedHashSet<String>(); - for (Map<String, String> row : rows) { - if (row.containsKey("name")) { - answer.add(row.get("name")); - } - } - return answer; - } - -} http://git-wip-us.apache.org/repos/asf/camel/blob/b23fbb46/platforms/catalog/src/main/java/org/apache/camel/catalog/LanguageValidationResult.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/LanguageValidationResult.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/LanguageValidationResult.java deleted file mode 100644 index 4a977eb..0000000 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/LanguageValidationResult.java +++ /dev/null @@ -1,65 +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.catalog; - -import java.io.Serializable; - -/** - * Validation result of parsing a language expression or predicate - */ -public class LanguageValidationResult implements Serializable { - private final String text; - private String error; - private String shortError; - private int index; - - public LanguageValidationResult(String text) { - this.text = text; - } - - public String getText() { - return text; - } - - public boolean isSuccess() { - return error == null; - } - - public void setError(String error) { - this.error = error; - } - - public String getError() { - return error; - } - - public String getShortError() { - return shortError; - } - - public void setShortError(String shortError) { - this.shortError = shortError; - } - - public int getIndex() { - return index; - } - - public void setIndex(int index) { - this.index = index; - } -} http://git-wip-us.apache.org/repos/asf/camel/blob/b23fbb46/platforms/catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java deleted file mode 100644 index fa4c3d6..0000000 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/RuntimeProvider.java +++ /dev/null @@ -1,93 +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.catalog; - -import java.util.List; - -/** - * A pluggable strategy for chosen runtime to run Camel such as default, karaf, spring-boot, etc. - * This allows third party runtimes to provide their own provider, that can amend the catalog - * to match the runtime. For example spring-boot or karaf does not support all the default Camel components. - */ -public interface RuntimeProvider { - - /** - * Gets the {@link CamelCatalog} - */ - CamelCatalog getCamelCatalog(); - - /** - * Sets the {@link CamelCatalog} to use - */ - void setCamelCatalog(CamelCatalog camelCatalog); - - /** - * Name of provider such as <tt>default</tt>, <tt>karaf</tt>, <tt>spring-boot</tt> - */ - String getProviderName(); - - /** - * Maven group id of the runtime provider JAR dependency. - */ - String getProviderGroupId(); - - /** - * Maven artifact id of the runtime provider JAR dependency. - */ - String getProviderArtifactId(); - - /** - * Gets the directory where the component json files are stored in the catalog JAR file - */ - String getComponentJSonSchemaDirectory(); - - /** - * Gets the directory where the data format json files are stored in the catalog JAR file - */ - String getDataFormatJSonSchemaDirectory(); - - /** - * Gets the directory where the language json files are stored in the catalog JAR file - */ - String getLanguageJSonSchemaDirectory(); - - /** - * Gets the directory where the other (miscellaneous) json files are stored in the catalog JAR file - */ - String getOtherJSonSchemaDirectory(); - - /** - * Find all the component names from the Camel catalog supported by the provider - */ - List<String> findComponentNames(); - - /** - * Find all the data format names from the Camel catalog supported by the provider - */ - List<String> findDataFormatNames(); - - /** - * Find all the language names from the Camel catalog supported by the provider - */ - List<String> findLanguageNames(); - - /** - * Find all the other (miscellaneous) names from the Camel catalog supported by the provider - */ - List<String> findOtherNames(); - -} http://git-wip-us.apache.org/repos/asf/camel/blob/b23fbb46/platforms/catalog/src/main/java/org/apache/camel/catalog/SimpleValidationResult.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/SimpleValidationResult.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/SimpleValidationResult.java deleted file mode 100644 index 5c86f23..0000000 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/SimpleValidationResult.java +++ /dev/null @@ -1,32 +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.catalog; - -/** - * To be backwards compatible, but favor using {@link LanguageValidationResult} instead. - */ -public class SimpleValidationResult extends LanguageValidationResult { - - public SimpleValidationResult(String text) { - super(text); - } - - public String getSimple() { - return getText(); - } - -} http://git-wip-us.apache.org/repos/asf/camel/blob/b23fbb46/platforms/catalog/src/main/java/org/apache/camel/catalog/SuggestionStrategy.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/SuggestionStrategy.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/SuggestionStrategy.java deleted file mode 100644 index 057d372..0000000 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/SuggestionStrategy.java +++ /dev/null @@ -1,34 +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.catalog; - -import java.util.Set; - -/** - * Strategy to provide suggestions for unknown endpoint options - */ -public interface SuggestionStrategy { - - /** - * Provides a list of valid option names for a did you mean function. - * - * @param names valid names - * @param unknownOption unknown option name - * @return a list of suggested names (did you mean) - */ - String[] suggestEndpointOptions(Set<String> names, String unknownOption); -} http://git-wip-us.apache.org/repos/asf/camel/blob/b23fbb46/platforms/catalog/src/main/java/org/apache/camel/catalog/TimePatternConverter.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/TimePatternConverter.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/TimePatternConverter.java deleted file mode 100644 index 4ed843a..0000000 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/TimePatternConverter.java +++ /dev/null @@ -1,120 +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.catalog; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * This class is a copy from camel-core so we can use it independent to validate uris with time patterns - */ -public final class TimePatternConverter { - private static final Pattern NUMBERS_ONLY_STRING_PATTERN = Pattern.compile("^[-]?(\\d)+$", Pattern.CASE_INSENSITIVE); - private static final Pattern HOUR_REGEX_PATTERN = Pattern.compile("((\\d)*(\\d))h(our(s)?)?", Pattern.CASE_INSENSITIVE); - private static final Pattern MINUTES_REGEX_PATTERN = Pattern.compile("((\\d)*(\\d))m(in(ute(s)?)?)?", Pattern.CASE_INSENSITIVE); - private static final Pattern SECONDS_REGEX_PATTERN = Pattern.compile("((\\d)*(\\d))s(ec(ond)?(s)?)?", Pattern.CASE_INSENSITIVE); - - /** - * Utility classes should not have a public constructor. - */ - private TimePatternConverter() { - } - - public static long toMilliSeconds(String source) throws IllegalArgumentException { - long milliseconds = 0; - boolean foundFlag = false; - - checkCorrectnessOfPattern(source); - Matcher matcher; - - matcher = createMatcher(NUMBERS_ONLY_STRING_PATTERN, source); - if (matcher.find()) { - // Note: This will also be used for regular numeric strings. - // This String -> long converter will be used for all strings. - milliseconds = Long.valueOf(source); - } else { - matcher = createMatcher(HOUR_REGEX_PATTERN, source); - if (matcher.find()) { - milliseconds = milliseconds + (3600000 * Long.valueOf(matcher.group(1))); - foundFlag = true; - } - - matcher = createMatcher(MINUTES_REGEX_PATTERN, source); - if (matcher.find()) { - long minutes = Long.valueOf(matcher.group(1)); - if ((minutes > 59) && foundFlag) { - throw new IllegalArgumentException("Minutes should contain a valid value between 0 and 59: " + source); - } - foundFlag = true; - milliseconds = milliseconds + (60000 * minutes); - } - - matcher = createMatcher(SECONDS_REGEX_PATTERN, source); - if (matcher.find()) { - long seconds = Long.valueOf(matcher.group(1)); - if ((seconds > 59) && foundFlag) { - throw new IllegalArgumentException("Seconds should contain a valid value between 0 and 59: " + source); - } - foundFlag = true; - milliseconds = milliseconds + (1000 * seconds); - } - - // No pattern matched... initiating fallback check and conversion (if required). - // The source at this point may contain illegal values or special characters - if (!foundFlag) { - milliseconds = Long.valueOf(source); - } - } - - return milliseconds; - } - - private static void checkCorrectnessOfPattern(String source) { - //replace only numbers once - Matcher matcher = createMatcher(NUMBERS_ONLY_STRING_PATTERN, source); - String replaceSource = matcher.replaceFirst(""); - - //replace hour string once - matcher = createMatcher(HOUR_REGEX_PATTERN, replaceSource); - if (matcher.find() && matcher.find()) { - throw new IllegalArgumentException("Hours should not be specified more then once: " + source); - } - replaceSource = matcher.replaceFirst(""); - - //replace minutes once - matcher = createMatcher(MINUTES_REGEX_PATTERN, replaceSource); - if (matcher.find() && matcher.find()) { - throw new IllegalArgumentException("Minutes should not be specified more then once: " + source); - } - replaceSource = matcher.replaceFirst(""); - - //replace seconds once - matcher = createMatcher(SECONDS_REGEX_PATTERN, replaceSource); - if (matcher.find() && matcher.find()) { - throw new IllegalArgumentException("Seconds should not be specified more then once: " + source); - } - replaceSource = matcher.replaceFirst(""); - - if (replaceSource.length() > 0) { - throw new IllegalArgumentException("Illegal characters: " + source); - } - } - - private static Matcher createMatcher(Pattern pattern, String source) { - return pattern.matcher(source); - } -} http://git-wip-us.apache.org/repos/asf/camel/blob/b23fbb46/platforms/catalog/src/main/java/org/apache/camel/catalog/URISupport.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/URISupport.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/URISupport.java deleted file mode 100644 index ea1ecd5..0000000 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/URISupport.java +++ /dev/null @@ -1,392 +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.catalog; - -import java.io.UnsupportedEncodingException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URLDecoder; -import java.net.URLEncoder; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -/** - * Copied from org.apache.camel.util.URISupport - */ -public final class URISupport { - - public static final String RAW_TOKEN_START = "RAW("; - public static final String RAW_TOKEN_END = ")"; - - private static final String CHARSET = "UTF-8"; - - private URISupport() { - // Helper class - } - - /** - * Normalizes the URI so unsafe characters is encoded - * - * @param uri the input uri - * @return as URI instance - * @throws URISyntaxException is thrown if syntax error in the input uri - */ - public static URI normalizeUri(String uri) throws URISyntaxException { - return new URI(UnsafeUriCharactersEncoder.encode(uri, true)); - } - - public static Map<String, Object> extractProperties(Map<String, Object> properties, String optionPrefix) { - Map<String, Object> rc = new LinkedHashMap<String, Object>(properties.size()); - - for (Iterator<Map.Entry<String, Object>> it = properties.entrySet().iterator(); it.hasNext();) { - Map.Entry<String, Object> entry = it.next(); - String name = entry.getKey(); - if (name.startsWith(optionPrefix)) { - Object value = properties.get(name); - name = name.substring(optionPrefix.length()); - rc.put(name, value); - it.remove(); - } - } - - return rc; - } - - /** - * Strips the query parameters from the uri - * - * @param uri the uri - * @return the uri without the query parameter - */ - public static String stripQuery(String uri) { - int idx = uri.indexOf('?'); - if (idx > -1) { - uri = uri.substring(0, idx); - } - return uri; - } - - /** - * Parses the query parameters of the uri (eg the query part). - * - * @param uri the uri - * @return the parameters, or an empty map if no parameters (eg never null) - * @throws URISyntaxException is thrown if uri has invalid syntax. - */ - public static Map<String, Object> parseParameters(URI uri) throws URISyntaxException { - String query = uri.getQuery(); - if (query == null) { - String schemeSpecificPart = uri.getSchemeSpecificPart(); - int idx = schemeSpecificPart.indexOf('?'); - if (idx < 0) { - // return an empty map - return new LinkedHashMap<String, Object>(0); - } else { - query = schemeSpecificPart.substring(idx + 1); - } - } else { - query = stripPrefix(query, "?"); - } - return parseQuery(query); - } - - /** - * Strips the prefix from the value. - * <p/> - * Returns the value as-is if not starting with the prefix. - * - * @param value the value - * @param prefix the prefix to remove from value - * @return the value without the prefix - */ - public static String stripPrefix(String value, String prefix) { - if (value != null && value.startsWith(prefix)) { - return value.substring(prefix.length()); - } - return value; - } - - /** - * Parses the query part of the uri (eg the parameters). - * <p/> - * The URI parameters will by default be URI encoded. However you can define a parameter - * values with the syntax: <tt>key=RAW(value)</tt> which tells Camel to not encode the value, - * and use the value as is (eg key=value) and the value has <b>not</b> been encoded. - * - * @param uri the uri - * @return the parameters, or an empty map if no parameters (eg never null) - * @throws URISyntaxException is thrown if uri has invalid syntax. - * @see #RAW_TOKEN_START - * @see #RAW_TOKEN_END - */ - public static Map<String, Object> parseQuery(String uri) throws URISyntaxException { - return parseQuery(uri, false); - } - - /** - * Parses the query part of the uri (eg the parameters). - * <p/> - * The URI parameters will by default be URI encoded. However you can define a parameter - * values with the syntax: <tt>key=RAW(value)</tt> which tells Camel to not encode the value, - * and use the value as is (eg key=value) and the value has <b>not</b> been encoded. - * - * @param uri the uri - * @param useRaw whether to force using raw values - * @return the parameters, or an empty map if no parameters (eg never null) - * @throws URISyntaxException is thrown if uri has invalid syntax. - * @see #RAW_TOKEN_START - * @see #RAW_TOKEN_END - */ - public static Map<String, Object> parseQuery(String uri, boolean useRaw) throws URISyntaxException { - // must check for trailing & as the uri.split("&") will ignore those - if (uri != null && uri.endsWith("&")) { - throw new URISyntaxException(uri, "Invalid uri syntax: Trailing & marker found. " - + "Check the uri and remove the trailing & marker."); - } - - if (isEmpty(uri)) { - // return an empty map - return new LinkedHashMap<String, Object>(0); - } - - // need to parse the uri query parameters manually as we cannot rely on splitting by &, - // as & can be used in a parameter value as well. - - try { - // use a linked map so the parameters is in the same order - Map<String, Object> rc = new LinkedHashMap<String, Object>(); - - boolean isKey = true; - boolean isValue = false; - boolean isRaw = false; - StringBuilder key = new StringBuilder(); - StringBuilder value = new StringBuilder(); - - // parse the uri parameters char by char - for (int i = 0; i < uri.length(); i++) { - // current char - char ch = uri.charAt(i); - // look ahead of the next char - char next; - if (i <= uri.length() - 2) { - next = uri.charAt(i + 1); - } else { - next = '\u0000'; - } - - // are we a raw value - isRaw = value.toString().startsWith(RAW_TOKEN_START); - - // if we are in raw mode, then we keep adding until we hit the end marker - if (isRaw) { - if (isKey) { - key.append(ch); - } else if (isValue) { - value.append(ch); - } - - // we only end the raw marker if its )& or at the end of the value - - boolean end = ch == RAW_TOKEN_END.charAt(0) && (next == '&' || next == '\u0000'); - if (end) { - // raw value end, so add that as a parameter, and reset flags - addParameter(key.toString(), value.toString(), rc, useRaw || isRaw); - key.setLength(0); - value.setLength(0); - isKey = true; - isValue = false; - isRaw = false; - // skip to next as we are in raw mode and have already added the value - i++; - } - continue; - } - - // if its a key and there is a = sign then the key ends and we are in value mode - if (isKey && ch == '=') { - isKey = false; - isValue = true; - isRaw = false; - continue; - } - - // the & denote parameter is ended - if (ch == '&') { - // parameter is ended, as we hit & separator - String aKey = key.toString(); - // the key may be a placeholder of options which we then do not know what is - boolean validKey = !aKey.startsWith("{{") && !aKey.endsWith("}}"); - if (validKey) { - addParameter(aKey, value.toString(), rc, useRaw || isRaw); - } - key.setLength(0); - value.setLength(0); - isKey = true; - isValue = false; - isRaw = false; - continue; - } - - // regular char so add it to the key or value - if (isKey) { - key.append(ch); - } else if (isValue) { - value.append(ch); - } - } - - // any left over parameters, then add that - if (key.length() > 0) { - String aKey = key.toString(); - // the key may be a placeholder of options which we then do not know what is - boolean validKey = !aKey.startsWith("{{") && !aKey.endsWith("}}"); - if (validKey) { - addParameter(aKey, value.toString(), rc, useRaw || isRaw); - } - } - - return rc; - - } catch (UnsupportedEncodingException e) { - URISyntaxException se = new URISyntaxException(e.toString(), "Invalid encoding"); - se.initCause(e); - throw se; - } - } - - @SuppressWarnings("unchecked") - private static void addParameter(String name, String value, Map<String, Object> map, boolean isRaw) throws UnsupportedEncodingException { - name = URLDecoder.decode(name, CHARSET); - if (!isRaw) { - // need to replace % with %25 - value = URLDecoder.decode(value.replaceAll("%", "%25"), CHARSET); - } - - // does the key already exist? - if (map.containsKey(name)) { - // yes it does, so make sure we can support multiple values, but using a list - // to hold the multiple values - Object existing = map.get(name); - List<String> list; - if (existing instanceof List) { - list = (List<String>) existing; - } else { - // create a new list to hold the multiple values - list = new ArrayList<String>(); - String s = existing != null ? existing.toString() : null; - if (s != null) { - list.add(s); - } - } - list.add(value); - map.put(name, list); - } else { - map.put(name, value); - } - } - - /** - * Assembles a query from the given map. - * - * @param options the map with the options (eg key/value pairs) - * @param ampersand to use & for Java code, and & for XML - * @return a query string with <tt>key1=value&key2=value2&...</tt>, or an empty string if there is no options. - * @throws URISyntaxException is thrown if uri has invalid syntax. - */ - public static String createQueryString(Map<String, String> options, String ampersand, boolean encode) throws URISyntaxException { - try { - if (options.size() > 0) { - StringBuilder rc = new StringBuilder(); - boolean first = true; - for (Object o : options.keySet()) { - if (first) { - first = false; - } else { - rc.append(ampersand); - } - - String key = (String) o; - Object value = options.get(key); - - // use the value as a String - String s = value != null ? value.toString() : null; - appendQueryStringParameter(key, s, rc, encode); - } - return rc.toString(); - } else { - return ""; - } - } catch (UnsupportedEncodingException e) { - URISyntaxException se = new URISyntaxException(e.toString(), "Invalid encoding"); - se.initCause(e); - throw se; - } - } - - private static void appendQueryStringParameter(String key, String value, StringBuilder rc, boolean encode) throws UnsupportedEncodingException { - if (encode) { - rc.append(URLEncoder.encode(key, CHARSET)); - } else { - rc.append(key); - } - // only append if value is not null - if (value != null) { - rc.append("="); - if (value.startsWith(RAW_TOKEN_START) && value.endsWith(RAW_TOKEN_END)) { - // do not encode RAW parameters - rc.append(value); - } else { - if (encode) { - rc.append(URLEncoder.encode(value, CHARSET)); - } else { - rc.append(value); - } - } - } - } - - /** - * Tests whether the value is <tt>null</tt> or an empty string. - * - * @param value the value, if its a String it will be tested for text length as well - * @return true if empty - */ - public static boolean isEmpty(Object value) { - return !isNotEmpty(value); - } - - /** - * Tests whether the value is <b>not</b> <tt>null</tt> or an empty string. - * - * @param value the value, if its a String it will be tested for text length as well - * @return true if <b>not</b> empty - */ - public static boolean isNotEmpty(Object value) { - if (value == null) { - return false; - } else if (value instanceof String) { - String text = (String) value; - return text.trim().length() > 0; - } else { - return true; - } - } - -} http://git-wip-us.apache.org/repos/asf/camel/blob/b23fbb46/platforms/catalog/src/main/java/org/apache/camel/catalog/UnsafeUriCharactersEncoder.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/UnsafeUriCharactersEncoder.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/UnsafeUriCharactersEncoder.java deleted file mode 100644 index 563bac2..0000000 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/UnsafeUriCharactersEncoder.java +++ /dev/null @@ -1,206 +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.catalog; - -import java.util.ArrayList; -import java.util.BitSet; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Encoder for unsafe URI characters. - * <p/> - * A good source for details is <a href="http://en.wikipedia.org/wiki/Url_encode">wikipedia url encode</a> article. - */ -public final class UnsafeUriCharactersEncoder { - private static BitSet unsafeCharactersRfc1738; - private static BitSet unsafeCharactersHttp; - private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', - 'D', 'E', 'F', 'a', 'b', 'c', 'd', 'e', 'f'}; - private static final Pattern RAW_PATTERN = Pattern.compile("RAW\\([^\\)]+\\)"); - - static { - unsafeCharactersRfc1738 = new BitSet(256); - unsafeCharactersRfc1738.set(' '); - unsafeCharactersRfc1738.set('"'); - unsafeCharactersRfc1738.set('<'); - unsafeCharactersRfc1738.set('>'); - unsafeCharactersRfc1738.set('#'); - unsafeCharactersRfc1738.set('%'); - unsafeCharactersRfc1738.set('{'); - unsafeCharactersRfc1738.set('}'); - unsafeCharactersRfc1738.set('|'); - unsafeCharactersRfc1738.set('\\'); - unsafeCharactersRfc1738.set('^'); - unsafeCharactersRfc1738.set('~'); - unsafeCharactersRfc1738.set('['); - unsafeCharactersRfc1738.set(']'); - unsafeCharactersRfc1738.set('`'); - } - - static { - unsafeCharactersHttp = new BitSet(256); - unsafeCharactersHttp.set(' '); - unsafeCharactersHttp.set('"'); - unsafeCharactersHttp.set('<'); - unsafeCharactersHttp.set('>'); - unsafeCharactersHttp.set('#'); - unsafeCharactersHttp.set('%'); - unsafeCharactersHttp.set('{'); - unsafeCharactersHttp.set('}'); - unsafeCharactersHttp.set('|'); - unsafeCharactersHttp.set('\\'); - unsafeCharactersHttp.set('^'); - unsafeCharactersHttp.set('~'); - unsafeCharactersHttp.set('`'); - } - - private UnsafeUriCharactersEncoder() { - // util class - } - - public static String encode(String s) { - return encode(s, unsafeCharactersRfc1738); - } - - public static String encodeHttpURI(String s) { - return encode(s, unsafeCharactersHttp); - } - - public static String encode(String s, BitSet unsafeCharacters) { - return encode(s, unsafeCharacters, false); - } - - public static String encode(String s, boolean checkRaw) { - return encode(s, unsafeCharactersRfc1738, checkRaw); - } - - public static String encodeHttpURI(String s, boolean checkRaw) { - return encode(s, unsafeCharactersHttp, checkRaw); - } - - private static List<Pair> checkRAW(String s) { - Matcher matcher = RAW_PATTERN.matcher(s); - List<Pair> answer = new ArrayList<Pair>(); - // Check all occurrences - while (matcher.find()) { - answer.add(new Pair(matcher.start(), matcher.end())); - } - return answer; - } - - private static boolean isRaw(int index, List<Pair> pairs) { - for (Pair pair : pairs) { - if (index < pair.left) { - return false; - } else { - if (index >= pair.left) { - if (index <= pair.right) { - return true; - } else { - continue; - } - } - } - } - return false; - } - - private static class Pair { - int left; - int right; - - Pair(int left, int right) { - this.left = left; - this.right = right; - } - } - - // Just skip the encode for isRAW part - public static String encode(String s, BitSet unsafeCharacters, boolean checkRaw) { - List<Pair> rawPairs; - if (checkRaw) { - rawPairs = checkRAW(s); - } else { - rawPairs = new ArrayList<Pair>(); - } - - int n = s == null ? 0 : s.length(); - if (n == 0) { - return s; - } - - // First check whether we actually need to encode - char chars[] = s.toCharArray(); - for (int i = 0;;) { - // just deal with the ascii character - if (chars[i] > 0 && chars[i] < 128) { - if (unsafeCharacters.get(chars[i])) { - break; - } - } - if (++i >= chars.length) { - return s; - } - } - - // okay there are some unsafe characters so we do need to encode - // see details at: http://en.wikipedia.org/wiki/Url_encode - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < chars.length; i++) { - char ch = chars[i]; - if (ch > 0 && ch < 128 && unsafeCharacters.get(ch)) { - // special for % sign as it may be a decimal encoded value - if (ch == '%') { - char next = i + 1 < chars.length ? chars[i + 1] : ' '; - char next2 = i + 2 < chars.length ? chars[i + 2] : ' '; - - if (isHexDigit(next) && isHexDigit(next2) && !isRaw(i, rawPairs)) { - // its already encoded (decimal encoded) so just append as is - sb.append(ch); - } else { - // must escape then, as its an unsafe character - appendEscape(sb, (byte) ch); - } - } else { - // must escape then, as its an unsafe character - appendEscape(sb, (byte) ch); - } - } else { - sb.append(ch); - } - } - return sb.toString(); - } - - private static void appendEscape(StringBuilder sb, byte b) { - sb.append('%'); - sb.append(HEX_DIGITS[(b >> 4) & 0x0f]); - sb.append(HEX_DIGITS[(b >> 0) & 0x0f]); - } - - private static boolean isHexDigit(char ch) { - for (char hex : HEX_DIGITS) { - if (hex == ch) { - return true; - } - } - return false; - } - -} http://git-wip-us.apache.org/repos/asf/camel/blob/b23fbb46/platforms/catalog/src/main/java/org/apache/camel/catalog/VersionHelper.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/VersionHelper.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/VersionHelper.java deleted file mode 100644 index e1c69bc..0000000 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/VersionHelper.java +++ /dev/null @@ -1,73 +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.catalog; - -import java.io.InputStream; -import java.util.Properties; - -/** - * To get the version of this catalog. - */ -public class VersionHelper { - - private static volatile String version; - - public synchronized String getVersion() { - if (version != null) { - return version; - } - InputStream is = null; - // try to load from maven properties first - try { - Properties p = new Properties(); - is = getClass().getResourceAsStream("/META-INF/maven/org.apache.camel/camel-catalog/pom.properties"); - if (is != null) { - p.load(is); - version = p.getProperty("version", ""); - } - } catch (Exception e) { - // ignore - } finally { - if (is != null) { - try { - is.close(); - } catch (Exception e) { - // ignore - } - } - } - - // fallback to using Java API - if (version == null) { - Package aPackage = getClass().getPackage(); - if (aPackage != null) { - version = aPackage.getImplementationVersion(); - if (version == null) { - version = aPackage.getSpecificationVersion(); - } - } - } - - if (version == null) { - // we could not compute the version so use a blank - version = ""; - } - - return version; - } - -} http://git-wip-us.apache.org/repos/asf/camel/blob/b23fbb46/platforms/catalog/src/main/java/org/apache/camel/catalog/VersionManager.java ---------------------------------------------------------------------- diff --git a/platforms/catalog/src/main/java/org/apache/camel/catalog/VersionManager.java b/platforms/catalog/src/main/java/org/apache/camel/catalog/VersionManager.java deleted file mode 100644 index 6f8aff4..0000000 --- a/platforms/catalog/src/main/java/org/apache/camel/catalog/VersionManager.java +++ /dev/null @@ -1,70 +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.catalog; - -import java.io.InputStream; - -/** - * Strategy to manage and load Camel versions the catalog uses. - */ -public interface VersionManager { - - /** - * Gets the current loaded Camel version used by the catalog. - */ - String getLoadedVersion(); - - /** - * Attempt to load the Camel version to be used by the catalog. - * <p/> - * Loading the camel-catalog JAR of the given version of choice may require internet access - * to download the JAR from Maven central. You can pre download the JAR and install in a local - * Maven repository to avoid internet access for offline environments. - * - * @param version the Camel version such as <tt>2.17.1</tt> - * @return <tt>true</tt> if the version was loaded, <tt>false</tt> if not. - */ - boolean loadVersion(String version); - - /** - * Gets the current loaded runtime provider version used by the catalog. - */ - String getRuntimeProviderLoadedVersion(); - - /** - * Attempt to load the runtime provider version to be used by the catalog. - * <p/> - * Loading the runtime provider JAR of the given version of choice may require internet access - * to download the JAR from Maven central. You can pre download the JAR and install in a local - * Maven repository to avoid internet access for offline environments. - * - * @param groupId the runtime provider Maven groupId - * @param artifactId the runtime provider Maven artifactId - * @param version the runtime provider Maven version - * @return <tt>true</tt> if the version was loaded, <tt>false</tt> if not. - */ - boolean loadRuntimeProviderVersion(String groupId, String artifactId, String version); - - /** - * Returns an input stream for reading the specified resource from the loaded Catalog version. - * - * @param name the resource name - * @return the stream if found, or <tt>null</tt> if not found. - */ - InputStream getResourceAsStream(String name); - -}