blob: 809c90e3d5ba841fad8d4436f0fbb52c3061e61b [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;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
import java.util.Optional;
import org.apache.camel.component.extension.ComponentExtension;
import org.apache.camel.spi.PropertyConfigurer;
/**
* A <a href="http://camel.apache.org/component.html">component</a> is
* a factory of {@link Endpoint} objects.
*/
public interface Component extends CamelContextAware, Service {
/**
* Attempt to resolve an endpoint for the given URI if the component is
* capable of handling the URI.
* <p/>
* See {@link #useRawUri()} for controlling whether the passed in uri
* should be as-is (raw), or encoded (default).
*
* @param uri the URI to create; either raw or encoded (default)
* @return a newly created {@link Endpoint} or null if this component cannot create
* {@link Endpoint} instances using the given uri
* @throws Exception is thrown if error creating the endpoint
* @see #useRawUri()
*/
Endpoint createEndpoint(String uri) throws Exception;
/**
* Attempt to resolve an endpoint for the given URI if the component is
* capable of handling the URI.
* <p/>
* See {@link #useRawUri()} for controlling whether the passed in uri
* should be as-is (raw), or encoded (default).
*
* @param uri the URI to create; either raw or encoded (default)
* @param parameters the parameters for the endpoint
* @return a newly created {@link Endpoint} or null if this component cannot create
* {@link Endpoint} instances using the given uri
* @throws Exception is thrown if error creating the endpoint
* @see #useRawUri()
*/
Endpoint createEndpoint(String uri, Map<String, Object> parameters) throws Exception;
/**
* Whether to use raw or encoded uri, when creating endpoints.
* <p/>
* <b>Notice:</b> When using raw uris, then the parameter values is raw as well.
*
* @return <tt>true</tt> to use raw uris, <tt>false</tt> to use encoded uris (default).
*
* @since Camel 2.11.0
*/
boolean useRawUri();
/**
* Gets the component {@link PropertyConfigurer}.
*
* @return the configurer, or <tt>null</tt> if the component does not support using property configurer.
*/
default PropertyConfigurer getComponentPropertyConfigurer() {
return null;
}
/**
* Gets the endpoint {@link PropertyConfigurer}.
*
* @return the configurer, or <tt>null</tt> if the endpoint does not support using property configurer.
*/
default PropertyConfigurer getEndpointPropertyConfigurer() {
return null;
}
/**
* Gets a list of supported extensions.
*
* @return the list of extensions.
*/
default Collection<Class<? extends ComponentExtension>> getSupportedExtensions() {
return Collections.emptyList();
}
/**
* Gets the extension of the given type.
*
* @param extensionType tye type of the extensions
* @return an optional extension
*/
default <T extends ComponentExtension> Optional<T> getExtension(Class<T> extensionType) {
return Optional.empty();
}
/**
* Set the {@link Component} context if the component is an instance of {@link ComponentAware}.
*/
static <T> T trySetComponent(T object, Component component) {
if (object instanceof ComponentAware) {
((ComponentAware) object).setComponent(component);
}
return object;
}
}