blob: 1c92ca252a75cb553c23042bbfcd7bcffbb9abe6 [file] [log] [blame]
/**
* 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.List;
import java.util.Map;
import java.util.Set;
import javax.management.MXBean;
/**
* Catalog of components, data formats, models (EIPs), languages, and more from this Apache Camel release.
*/
@MXBean
public interface CamelCatalog {
/**
* Returns the {@link JSonSchemaResolver} used by this catalog.
*
* @return the resolver
*/
JSonSchemaResolver getJSonSchemaResolver();
/**
* To use a custom {@link JSonSchemaResolver} with this catalog.
*
* @param resolver the custom resolver
*/
void setJSonSchemaResolver(JSonSchemaResolver resolver);
/**
* To plugin a custom {@link RuntimeProvider} that amends the catalog to only include information that is supported on the runtime.
*/
void setRuntimeProvider(RuntimeProvider provider);
/**
* Gets the {@link RuntimeProvider} in use.
*/
RuntimeProvider getRuntimeProvider();
/**
* Enables caching of the resources which makes the catalog faster, but keeps data in memory during caching.
* <p/>
* The catalog does not cache by default.
*/
void enableCache();
/**
* Whether caching has been enabled.
*/
boolean isCaching();
/**
* To plugin a custom {@link SuggestionStrategy} to provide suggestion for unknown options
*/
void setSuggestionStrategy(SuggestionStrategy suggestionStrategy);
/**
* Gets the {@link SuggestionStrategy} in use
*/
SuggestionStrategy getSuggestionStrategy();
/**
* To plugin a custom {@link VersionManager} to load other versions of Camel the catalog should use.
*/
void setVersionManager(VersionManager versionManager);
/**
* Gets the {@link VersionManager} in use
*/
VersionManager getVersionManager();
/**
* Adds a 3rd party component to this catalog.
*
* @param name the component name
* @param className the fully qualified class name for the component class
*/
void addComponent(String name, String className);
/**
* Adds a 3rd party component to this catalog.
*
* @param name the component name
* @param className the fully qualified class name for the component class
* @param jsonSchema the component JSon schema
*/
void addComponent(String name, String className, String jsonSchema);
/**
* Adds a 3rd party data format to this catalog.
*
* @param name the data format name
* @param className the fully qualified class name for the data format class
*/
void addDataFormat(String name, String className);
/**
* Adds a 3rd party data format to this catalog.
*
* @param name the data format name
* @param className the fully qualified class name for the data format class
* @param jsonSchema the data format JSon schema
*/
void addDataFormat(String name, String className, String jsonSchema);
/**
* The version of this Camel Catalog
*/
String getCatalogVersion();
/**
* 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.
* <p/>
* When loading a new version the cache will be invalidated.
* <p/>
* <b>Important:</b> When loading a new runtime provider version, then its strongly advised to
* load the same/corresponding version first using {@link #loadVersion(String)}.
*
* @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 Camel version used by the catalog.
*/
String getLoadedVersion();
/**
* 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.
* <p/>
* <b>Important:</b> When loading a new runtime provider version, then its strongly advised to
* load the same/corresponding version first using {@link #loadVersion(String)}.
*
* @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);
/**
* Find all the component names from the Camel catalog
*/
List<String> findComponentNames();
/**
* Find all the data format names from the Camel catalog
*/
List<String> findDataFormatNames();
/**
* Find all the language names from the Camel catalog
*/
List<String> findLanguageNames();
/**
* Find all the model names from the Camel catalog
*/
List<String> findModelNames();
/**
* Find all the other (miscellaneous) names from the Camel catalog
*/
List<String> findOtherNames();
/**
* Find all the component names from the Camel catalog that matches the label
*/
List<String> findComponentNames(String filter);
/**
* Find all the data format names from the Camel catalog that matches the label
*/
List<String> findDataFormatNames(String filter);
/**
* Find all the language names from the Camel catalog that matches the label
*/
List<String> findLanguageNames(String filter);
/**
* Find all the model names from the Camel catalog that matches the label
*/
List<String> findModelNames(String filter);
/**
* Find all the other (miscellaneous) names from the Camel catalog that matches the label
*/
List<String> findOtherNames(String filter);
/**
* Returns the component information as JSon format.
*
* @param name the component name
* @return component details in JSon
*/
String componentJSonSchema(String name);
/**
* Returns the data format information as JSon format.
*
* @param name the data format name
* @return data format details in JSon
*/
String dataFormatJSonSchema(String name);
/**
* Returns the language information as JSon format.
*
* @param name the language name
* @return language details in JSon
*/
String languageJSonSchema(String name);
/**
* Returns the other (miscellaneous) information as JSon format.
*
* @param name the other (miscellaneous) name
* @return other (miscellaneous) details in JSon
*/
String otherJSonSchema(String name);
/**
* Returns the model information as JSon format.
*
* @param name the model name
* @return model details in JSon
*/
String modelJSonSchema(String name);
/**
* Returns the component documentation as Ascii doc format.
*
* @param name the component name
* @return component documentation in ascii doc format.
*/
String componentAsciiDoc(String name);
/**
* Returns the component documentation as HTML format.
*
* @param name the component name
* @return component documentation in html format.
*/
String componentHtmlDoc(String name);
/**
* Returns the data format documentation as Ascii doc format.
*
* @param name the data format name
* @return data format documentation in ascii doc format.
*/
String dataFormatAsciiDoc(String name);
/**
* Returns the data format documentation as HTML format.
*
* @param name the data format name
* @return data format documentation in HTML format.
*/
String dataFormatHtmlDoc(String name);
/**
* Returns the language documentation as Ascii doc format.
*
* @param name the language name
* @return language documentation in ascii doc format.
*/
String languageAsciiDoc(String name);
/**
* Returns the language documentation as HTML format.
*
* @param name the language name
* @return language documentation in HTML format.
*/
String languageHtmlDoc(String name);
/**
* Returns the other (miscellaneous) documentation as Ascii doc format.
*
* @param name the other (miscellaneous) name
* @return other (miscellaneous) documentation in ascii doc format.
*/
String otherAsciiDoc(String name);
/**
* Returns the other (miscellaneous) documentation as HTML format.
*
* @param name the other (miscellaneous) name
* @return other (miscellaneous) documentation in HTML format.
*/
String otherHtmlDoc(String name);
/**
* Find all the unique label names all the components are using.
*
* @return a set of all the labels.
*/
Set<String> findComponentLabels();
/**
* Find all the unique label names all the data formats are using.
*
* @return a set of all the labels.
*/
Set<String> findDataFormatLabels();
/**
* Find all the unique label names all the languages are using.
*
* @return a set of all the labels.
*/
Set<String> findLanguageLabels();
/**
* Find all the unique label names all the models are using.
*
* @return a set of all the labels.
*/
Set<String> findModelLabels();
/**
* Find all the unique label names all the other (miscellaneous) are using.
*
* @return a set of all the labels.
*/
Set<String> findOtherLabels();
/**
* Returns the Apache Camel Maven Archetype catalog in XML format.
*
* @return the catalog in XML
*/
String archetypeCatalogAsXml();
/**
* Returns the Camel Spring XML schema
*
* @return the spring XML schema
*/
String springSchemaAsXml();
/**
* Returns the Camel Blueprint XML schema
*
* @return the blueprint XML schema
*/
String blueprintSchemaAsXml();
/**
* Parses the endpoint uri and constructs a key/value properties of each option
*
* @param uri the endpoint uri
* @return properties as key value pairs of each endpoint option
*/
Map<String, String> endpointProperties(String uri) throws URISyntaxException;
/**
* Parses the endpoint uri and constructs a key/value properties of only the lenient properties (eg custom options)
* <p/>
* For example using the HTTP components to provide query parameters in the endpoint uri.
*
* @param uri the endpoint uri
* @return properties as key value pairs of each lenient properties
*/
Map<String, String> endpointLenientProperties(String uri) throws URISyntaxException;
/**
* Validates the pattern whether its a valid time pattern.
*
* @param pattern the pattern such as 5000, 5s, 5sec, 4min, 4m30s, 1h, etc.
* @return <tt>true</tt> if valid, <tt>false</tt> if invalid
*/
boolean validateTimePattern(String pattern);
/**
* Parses and validates the endpoint uri and constructs a key/value properties of each option.
*
* @param uri the endpoint uri
* @return validation result
*/
EndpointValidationResult validateEndpointProperties(String uri);
/**
* Parses and validates the endpoint uri and constructs a key/value properties of each option.
* <p/>
* The option ignoreLenientProperties can be used to ignore components that uses lenient properties.
* When this is true, then the uri validation is stricter but would fail on properties that are not part of the component
* but in the uri because of using lenient properties.
* For example using the HTTP components to provide query parameters in the endpoint uri.
*
* @param uri the endpoint uri
* @param ignoreLenientProperties whether to ignore components that uses lenient properties.
* @return validation result
*/
EndpointValidationResult validateEndpointProperties(String uri, boolean ignoreLenientProperties);
/**
* Parses and validates the endpoint uri and constructs a key/value properties of each option.
* <p/>
* The option ignoreLenientProperties can be used to ignore components that uses lenient properties.
* When this is true, then the uri validation is stricter but would fail on properties that are not part of the component
* but in the uri because of using lenient properties.
* For example using the HTTP components to provide query parameters in the endpoint uri.
*
* @param uri the endpoint uri
* @param ignoreLenientProperties whether to ignore components that uses lenient properties.
* @param consumerOnly whether the endpoint is only used as a consumer
* @param producerOnly whether the endpoint is only used as a producer
* @return validation result
*/
EndpointValidationResult validateEndpointProperties(String uri, boolean ignoreLenientProperties, boolean consumerOnly, boolean producerOnly);
/**
* Parses and validates the simple expression.
* <p/>
* <b>Important:</b> This requires having <tt>camel-core</tt> on the classpath
*
* @param simple the simple expression
* @return validation result
* @deprecated use {@link #validateSimpleExpression(ClassLoader, String)}
*/
@Deprecated
SimpleValidationResult validateSimpleExpression(String simple);
/**
* Parses and validates the simple expression.
* <p/>
* <b>Important:</b> This requires having <tt>camel-core</tt> on the classpath
*
* @param classLoader a custom classloader to use for loading the language from the classpath, or <tt>null</tt> for using default classloader
* @param simple the simple expression
* @return validation result
*/
SimpleValidationResult validateSimpleExpression(ClassLoader classLoader, String simple);
/**
* Parses and validates the simple predicate
* <p/>
* <b>Important:</b> This requires having <tt>camel-core</tt> on the classpath
*
* @param simple the simple predicate
* @return validation result
* @deprecated use {@link #validateSimplePredicate(ClassLoader, String)}
*/
@Deprecated
SimpleValidationResult validateSimplePredicate(String simple);
/**
* Parses and validates the simple predicate
* <p/>
* <b>Important:</b> This requires having <tt>camel-core</tt> on the classpath
*
* @param classLoader a custom classloader to use for loading the language from the classpath, or <tt>null</tt> for using default classloader
* @param simple the simple predicate
* @return validation result
*/
SimpleValidationResult validateSimplePredicate(ClassLoader classLoader, String simple);
/**
* Parses and validates the language as a predicate
* <p/>
* <b>Important:</b> This requires having <tt>camel-core</tt> and the language dependencies on the classpath
*
* @param classLoader a custom classloader to use for loading the language from the classpath, or <tt>null</tt> for using default classloader
* @param language the name of the language
* @param text the predicate text
* @return validation result
*/
LanguageValidationResult validateLanguagePredicate(ClassLoader classLoader, String language, String text);
/**
* Parses and validates the language as an expression
* <p/>
* <b>Important:</b> This requires having <tt>camel-core</tt> and the language dependencies on the classpath
*
* @param classLoader a custom classloader to use for loading the language from the classpath, or <tt>null</tt> for using default classloader
* @param language the name of the language
* @param text the expression text
* @return validation result
*/
LanguageValidationResult validateLanguageExpression(ClassLoader classLoader, String language, String text);
/**
* Returns the component name from the given endpoint uri
*
* @param uri the endpoint uri
* @return the component name (aka scheme), or <tt>null</tt> if not possible to determine
*/
String endpointComponentName(String uri);
/**
* Creates an endpoint uri in Java style from the information in the json schema
*
* @param scheme the endpoint schema
* @param json the json schema with the endpoint properties
* @param encode whether to URL encode the returned uri or not
* @return the constructed endpoint uri
* @throws java.net.URISyntaxException is thrown if there is encoding error
*/
@Deprecated
String asEndpointUri(String scheme, String json, boolean encode) throws URISyntaxException;
/**
* Creates an endpoint uri in XML style from the information in the json schema
*
* @param scheme the endpoint schema
* @param json the json schema with the endpoint properties
* @param encode whether to URL encode the returned uri or not
* @return the constructed endpoint uri
* @throws java.net.URISyntaxException is thrown if there is encoding error
*/
@Deprecated
String asEndpointUriXml(String scheme, String json, boolean encode) throws URISyntaxException;
/**
* Creates an endpoint uri in Java style from the information from the properties
*
* @param scheme the endpoint schema
* @param properties the properties as key value pairs
* @param encode whether to URL encode the returned uri or not
* @return the constructed endpoint uri
* @throws java.net.URISyntaxException is thrown if there is encoding error
*/
String asEndpointUri(String scheme, Map<String, String> properties, boolean encode) throws URISyntaxException;
/**
* Creates an endpoint uri in XML style from the information from the properties
*
* @param scheme the endpoint schema
* @param properties the properties as key value pairs
* @param encode whether to URL encode the returned uri or not
* @return the constructed endpoint uri
* @throws java.net.URISyntaxException is thrown if there is encoding error
*/
String asEndpointUriXml(String scheme, Map<String, String> properties, boolean encode) throws URISyntaxException;
/**
* Lists all the components summary details in JSon
*/
String listComponentsAsJson();
/**
* Lists all the data formats summary details in JSon
*/
String listDataFormatsAsJson();
/**
* Lists all the languages summary details in JSon
*/
String listLanguagesAsJson();
/**
* Lists all the models (EIPs) summary details in JSon
*/
String listModelsAsJson();
/**
* Lists all the others (miscellaneous) summary details in JSon
*/
String listOthersAsJson();
/**
* Reports a summary what the catalog contains in JSon
*/
String summaryAsJson();
}