/**
* 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.model.cloud;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import org.apache.camel.ExchangePattern;
import org.apache.camel.Expression;
import org.apache.camel.builder.ExpressionClause;
import org.apache.camel.cloud.ServiceChooser;
import org.apache.camel.cloud.ServiceDiscovery;
import org.apache.camel.cloud.ServiceFilter;
import org.apache.camel.cloud.ServiceLoadBalancer;
import org.apache.camel.model.IdentifiedType;
import org.apache.camel.spi.Metadata;
/**
* Remote service call configuration
*/
@Metadata(label = "routing,cloud")
@XmlRootElement(name = "serviceCallConfiguration")
@XmlAccessorType(XmlAccessType.FIELD)
public class ServiceCallConfigurationDefinition extends IdentifiedType {
@XmlAttribute
private String uri;
@XmlAttribute @Metadata(defaultValue = ServiceCallDefinitionConstants.DEFAULT_COMPONENT)
private String component;
@XmlAttribute
private ExchangePattern pattern;
@XmlAttribute
private String serviceDiscoveryRef;
@XmlTransient
private ServiceDiscovery serviceDiscovery;
@XmlAttribute
private String serviceFilterRef;
@XmlTransient
private ServiceFilter serviceFilter;
@XmlAttribute
private String serviceChooserRef;
@XmlTransient
private ServiceChooser serviceChooser;
@XmlAttribute
private String loadBalancerRef;
@XmlTransient
private ServiceLoadBalancer loadBalancer;
@XmlAttribute
private String expressionRef;
@XmlTransient
private Expression expression;
@XmlElements({
@XmlElement(name = "cachingServiceDiscovery", type = CachingServiceCallServiceDiscoveryConfiguration.class),
@XmlElement(name = "aggregatingServiceDiscovery", type = AggregatingServiceCallServiceDiscoveryConfiguration.class),
@XmlElement(name = "consulServiceDiscovery", type = ConsulServiceCallServiceDiscoveryConfiguration.class),
@XmlElement(name = "dnsServiceDiscovery", type = DnsServiceCallServiceDiscoveryConfiguration.class),
@XmlElement(name = "etcdServiceDiscovery", type = EtcdServiceCallServiceDiscoveryConfiguration.class),
@XmlElement(name = "kubernetesServiceDiscovery", type = KubernetesServiceCallServiceDiscoveryConfiguration.class),
@XmlElement(name = "staticServiceDiscovery", type = StaticServiceCallServiceDiscoveryConfiguration.class)}
)
private ServiceCallServiceDiscoveryConfiguration serviceDiscoveryConfiguration;
@XmlElements({
@XmlElement(name = "blacklistServiceFilter", type = BlacklistServiceCallServiceFilterConfiguration.class),
@XmlElement(name = "chainedServiceFilter", type = ChainedServiceCallServiceFilterConfiguration.class),
@XmlElement(name = "customServiceFilter", type = CustomServiceCallServiceFilterConfiguration.class),
@XmlElement(name = "healthyServiceFilter", type = HealthyServiceCallServiceFilterConfiguration.class),
@XmlElement(name = "passThroughServiceFilter", type = PassThroughServiceCallServiceFilterConfiguration.class)}
)
private ServiceCallServiceFilterConfiguration serviceFilterConfiguration;
@XmlElements({
@XmlElement(name = "ribbonLoadBalancer", type = RibbonServiceCallServiceLoadBalancerConfiguration.class),
@XmlElement(name = "defaultLoadBalancer", type = DefaultServiceCallServiceLoadBalancerConfiguration.class) }
)
private ServiceCallServiceLoadBalancerConfiguration loadBalancerConfiguration;
@XmlElements({
@XmlElement(name = "expression", type = ServiceCallExpressionConfiguration.class)}
)
private ServiceCallExpressionConfiguration expressionConfiguration;
public ServiceCallConfigurationDefinition() {
}
// *****************************
// Properties
// *****************************
public ExchangePattern getPattern() {
return pattern;
}
public void setPattern(ExchangePattern pattern) {
this.pattern = pattern;
}
public String getUri() {
return uri;
}
/**
* The uri of the endpoint to send to.
* The uri can be dynamic computed using the {@link org.apache.camel.language.simple.SimpleLanguage} expression.
*/
public void setUri(String uri) {
this.uri = uri;
}
public String getComponent() {
return component;
}
/**
* The component to use.
*/
public void setComponent(String component) {
this.component = component;
}
public String getServiceDiscoveryRef() {
return serviceDiscoveryRef;
}
/**
* Sets a reference to a custom {@link ServiceDiscovery} to use.
*/
public void setServiceDiscoveryRef(String serviceDiscoveryRef) {
this.serviceDiscoveryRef = serviceDiscoveryRef;
}
public ServiceDiscovery getServiceDiscovery() {
return serviceDiscovery;
}
/**
* Sets a custom {@link ServiceDiscovery} to use.
*/
public void setServiceDiscovery(ServiceDiscovery serviceDiscovery) {
this.serviceDiscovery = serviceDiscovery;
}
public String getServiceFilterRef() {
return serviceFilterRef;
}
/**
* Sets a reference to a custom {@link ServiceFilter} to use.
*/
public void setServiceFilterRef(String serviceFilterRef) {
this.serviceFilterRef = serviceFilterRef;
}
public ServiceFilter getServiceFilter() {
return serviceFilter;
}
/**
* Sets a custom {@link ServiceFilter} to use.
*/
public void setServiceFilter(ServiceFilter serviceFilter) {
this.serviceFilter = serviceFilter;
}
public String getServiceChooserRef() {
return serviceChooserRef;
}
/**
* Sets a reference to a custom {@link ServiceChooser} to use.
*/
public void setServiceChooserRef(String serviceChooserRef) {
this.serviceChooserRef = serviceChooserRef;
}
public ServiceChooser getServiceChooser() {
return serviceChooser;
}
/**
* Sets a custom {@link ServiceChooser} to use.
*/
public void setServiceChooser(ServiceChooser serviceChooser) {
this.serviceChooser = serviceChooser;
}
public String getLoadBalancerRef() {
return loadBalancerRef;
}
/**
* Sets a reference to a custom {@link ServiceLoadBalancer} to use.
*/
public void setLoadBalancerRef(String loadBalancerRef) {
this.loadBalancerRef = loadBalancerRef;
}
public ServiceLoadBalancer getLoadBalancer() {
return loadBalancer;
}
/**
* Sets a custom {@link ServiceLoadBalancer} to use.
*/
public void setLoadBalancer(ServiceLoadBalancer loadBalancer) {
this.loadBalancer = loadBalancer;
}
public String getExpressionRef() {
return expressionRef;
}
/**
* Set a reference to a custom {@link Expression} to use.
*/
public void setExpressionRef(String expressionRef) {
this.expressionRef = expressionRef;
}
public Expression getExpression() {
return expression;
}
/**
* Set a custom {@link Expression} to use.
*/
public void setExpression(Expression expression) {
this.expression = expression;
}
public ServiceCallServiceDiscoveryConfiguration getServiceDiscoveryConfiguration() {
return serviceDiscoveryConfiguration;
}
/**
* Configures the ServiceDiscovery using the given configuration.
*/
public void setServiceDiscoveryConfiguration(ServiceCallServiceDiscoveryConfiguration serviceDiscoveryConfiguration) {
this.serviceDiscoveryConfiguration = serviceDiscoveryConfiguration;
}
public ServiceCallServiceFilterConfiguration getServiceFilterConfiguration() {
return serviceFilterConfiguration;
}
/**
* Configures the ServiceFilter using the given configuration.
*/
public void setServiceFilterConfiguration(ServiceCallServiceFilterConfiguration serviceFilterConfiguration) {
this.serviceFilterConfiguration = serviceFilterConfiguration;
}
public ServiceCallServiceLoadBalancerConfiguration getLoadBalancerConfiguration() {
return loadBalancerConfiguration;
}
/**
* Configures theL oadBalancer using the given configuration.
*/
public void setLoadBalancerConfiguration(ServiceCallServiceLoadBalancerConfiguration loadBalancerConfiguration) {
this.loadBalancerConfiguration = loadBalancerConfiguration;
}
public ServiceCallExpressionConfiguration getExpressionConfiguration() {
return expressionConfiguration;
}
/**
* Configures the Expression using the given configuration.
*/
public void setExpressionConfiguration(ServiceCallExpressionConfiguration expressionConfiguration) {
this.expressionConfiguration = expressionConfiguration;
}
// *****************************
// Fluent API
// *****************************
/**
* Sets the default Camel component to use for calling the remote service.
* <p/>
* By default the http component is used. You can configure this to use <tt>netty4-http</tt>, <tt>jetty</tt>,
* <tt>restlet</tt> or some other components of choice. If the service is not HTTP protocol you can use other
* components such as <tt>mqtt</tt>, <tt>jms</tt>, <tt>amqp</tt> etc.
* <p/>
* If the service call has been configured using an uri, then the component from the uri is used instead
* of this default component.
*/
public ServiceCallConfigurationDefinition component(String component) {
setComponent(component);
return this;
}
/**
* Sets the uri of the service to use
*/
public ServiceCallConfigurationDefinition uri(String uri) {
setUri(uri);
return this;
}
/**
* Sets the optional {@link ExchangePattern} used to invoke this endpoint
*/
public ServiceCallConfigurationDefinition pattern(ExchangePattern pattern) {
setPattern(pattern);
return this;
}
/**
* Sets a reference to a custom {@link ServiceDiscovery} to use.
*/
public ServiceCallConfigurationDefinition serviceDiscovery(String serviceDiscoveryRef) {
setServiceDiscoveryRef(serviceDiscoveryRef);
return this;
}
/**
* Sets a custom {@link ServiceDiscovery} to use.
*/
public ServiceCallConfigurationDefinition serviceDiscovery(ServiceDiscovery serviceDiscovery) {
setServiceDiscovery(serviceDiscovery);
return this;
}
/**
* Sets a reference to a custom {@link ServiceFilter} to use.
*/
public ServiceCallConfigurationDefinition serviceFilter(String serviceFilterRef) {
setServiceDiscoveryRef(serviceDiscoveryRef);
return this;
}
/**
* Sets a custom {@link ServiceFilter} to use.
*/
public ServiceCallConfigurationDefinition serviceFilter(ServiceFilter serviceFilter) {
setServiceFilter(serviceFilter);
return this;
}
/**
* Sets a reference to a custom {@link ServiceChooser} to use.
*/
public ServiceCallConfigurationDefinition serviceChooser(String serviceChooserRef) {
setServiceChooserRef(serviceChooserRef);
return this;
}
/**
* Sets a custom {@link ServiceChooser} to use.
*/
public ServiceCallConfigurationDefinition serviceChooser(ServiceChooser serviceChooser) {
setServiceChooser(serviceChooser);
return this;
}
/**
* Sets a reference to a custom {@link ServiceLoadBalancer} to use.
*/
public ServiceCallConfigurationDefinition loadBalancer(String loadBalancerRef) {
setLoadBalancerRef(loadBalancerRef);
return this;
}
/**
* Sets a custom {@link ServiceLoadBalancer} to use.
*/
public ServiceCallConfigurationDefinition loadBalancer(ServiceLoadBalancer loadBalancer) {
setLoadBalancer(loadBalancer);
return this;
}
/**
* Sets a reference to a custom {@link Expression} to use.
*/
public ServiceCallConfigurationDefinition expression(String expressionRef) {
setExpressionRef(loadBalancerRef);
return this;
}
/**
* Sets a custom {@link Expression} to use.
*/
public ServiceCallConfigurationDefinition expression(Expression expression) {
setExpression(expression);
return this;
}
/**
* Sets a custom {@link Expression} to use through an expression builder clause.
*
* @return a expression builder clause to set the body
*/
public ExpressionClause<ServiceCallConfigurationDefinition> expression() {
ExpressionClause<ServiceCallConfigurationDefinition> clause = new ExpressionClause<>(this);
setExpression(clause);
return clause;
}
/**
* Configures the ServiceDiscovery using the given configuration.
*/
public ServiceCallConfigurationDefinition serviceDiscoveryConfiguration(ServiceCallServiceDiscoveryConfiguration serviceDiscoveryConfiguration) {
setServiceDiscoveryConfiguration(serviceDiscoveryConfiguration);
return this;
}
/**
* Configures the ServiceFilter using the given configuration.
*/
public ServiceCallConfigurationDefinition serviceFilterConfiguration(ServiceCallServiceFilterConfiguration serviceFilterConfiguration) {
setServiceFilterConfiguration(serviceFilterConfiguration);
return this;
}
/**
* Configures the LoadBalancer using the given configuration.
*/
public ServiceCallConfigurationDefinition loadBalancerConfiguration(ServiceCallServiceLoadBalancerConfiguration loadBalancerConfiguration) {
setLoadBalancerConfiguration(loadBalancerConfiguration);
return this;
}
/**
* Configures the Expression using the given configuration.
*/
public ServiceCallConfigurationDefinition expressionConfiguration(ServiceCallExpressionConfiguration expressionConfiguration) {
setExpressionConfiguration(expressionConfiguration);
return this;
}
// *****************************
// Shortcuts - ServiceDiscovery
// *****************************
public CachingServiceCallServiceDiscoveryConfiguration cachingServiceDiscovery() {
CachingServiceCallServiceDiscoveryConfiguration conf = new CachingServiceCallServiceDiscoveryConfiguration();
setServiceDiscoveryConfiguration(conf);
return conf;
}
public ConsulServiceCallServiceDiscoveryConfiguration consulServiceDiscovery() {
ConsulServiceCallServiceDiscoveryConfiguration conf = new ConsulServiceCallServiceDiscoveryConfiguration();
setServiceDiscoveryConfiguration(conf);
return conf;
}
public DnsServiceCallServiceDiscoveryConfiguration dnsServiceDiscovery() {
DnsServiceCallServiceDiscoveryConfiguration conf = new DnsServiceCallServiceDiscoveryConfiguration();
setServiceDiscoveryConfiguration(conf);
return conf;
}
public ServiceCallConfigurationDefinition dnsServiceDiscovery(String domain) {
DnsServiceCallServiceDiscoveryConfiguration conf = new DnsServiceCallServiceDiscoveryConfiguration();
conf.setDomain(domain);
setServiceDiscoveryConfiguration(conf);
return this;
}
public ServiceCallConfigurationDefinition dnsServiceDiscovery(String domain, String protocol) {
DnsServiceCallServiceDiscoveryConfiguration conf = new DnsServiceCallServiceDiscoveryConfiguration();
conf.setDomain(domain);
conf.setProto(protocol);
setServiceDiscoveryConfiguration(conf);
return this;
}
public EtcdServiceCallServiceDiscoveryConfiguration etcdServiceDiscovery() {
EtcdServiceCallServiceDiscoveryConfiguration conf = new EtcdServiceCallServiceDiscoveryConfiguration();
setServiceDiscoveryConfiguration(conf);
return conf;
}
public KubernetesServiceCallServiceDiscoveryConfiguration kubernetesServiceDiscovery() {
KubernetesServiceCallServiceDiscoveryConfiguration conf = new KubernetesServiceCallServiceDiscoveryConfiguration();
setServiceDiscoveryConfiguration(conf);
return conf;
}
public KubernetesServiceCallServiceDiscoveryConfiguration kubernetesClientServiceDiscovery() {
KubernetesServiceCallServiceDiscoveryConfiguration conf = new KubernetesServiceCallServiceDiscoveryConfiguration();
conf.setLookup("client");
setServiceDiscoveryConfiguration(conf);
return conf;
}
public ServiceCallConfigurationDefinition kubernetesEnvServiceDiscovery() {
KubernetesServiceCallServiceDiscoveryConfiguration conf = new KubernetesServiceCallServiceDiscoveryConfiguration();
conf.setLookup("environment");
setServiceDiscoveryConfiguration(conf);
return this;
}
public ServiceCallConfigurationDefinition kubernetesDnsServiceDiscovery(String namespace, String domain) {
KubernetesServiceCallServiceDiscoveryConfiguration conf = new KubernetesServiceCallServiceDiscoveryConfiguration();
conf.setNamespace(namespace);
conf.setDnsDomain(domain);
setServiceDiscoveryConfiguration(conf);
return this;
}
public AggregatingServiceCallServiceDiscoveryConfiguration multiServiceDiscovery() {
AggregatingServiceCallServiceDiscoveryConfiguration conf = new AggregatingServiceCallServiceDiscoveryConfiguration();
setServiceDiscoveryConfiguration(conf);
return conf;
}
public ServiceCallConfigurationDefinition multiServiceDiscovery(AggregatingServiceCallServiceDiscoveryConfiguration conf) {
setServiceDiscoveryConfiguration(conf);
return this;
}
public StaticServiceCallServiceDiscoveryConfiguration staticServiceDiscovery() {
StaticServiceCallServiceDiscoveryConfiguration conf = new StaticServiceCallServiceDiscoveryConfiguration();
setServiceDiscoveryConfiguration(conf);
return conf;
}
public ServiceCallConfigurationDefinition staticServiceDiscovery(StaticServiceCallServiceDiscoveryConfiguration conf) {
setServiceDiscoveryConfiguration(conf);
return this;
}
// *****************************
// Shortcuts - ServiceFilter
// *****************************
public ServiceCallConfigurationDefinition healthyFilter() {
HealthyServiceCallServiceFilterConfiguration conf = new HealthyServiceCallServiceFilterConfiguration();
setServiceFilterConfiguration(conf);
return this;
}
public ServiceCallConfigurationDefinition passThroughFilter() {
PassThroughServiceCallServiceFilterConfiguration conf = new PassThroughServiceCallServiceFilterConfiguration();
setServiceFilterConfiguration(conf);
return this;
}
public ChainedServiceCallServiceFilterConfiguration multiFilter() {
ChainedServiceCallServiceFilterConfiguration conf = new ChainedServiceCallServiceFilterConfiguration();
setServiceFilterConfiguration(conf);
return conf;
}
public BlacklistServiceCallServiceFilterConfiguration blacklistFilter() {
BlacklistServiceCallServiceFilterConfiguration conf = new BlacklistServiceCallServiceFilterConfiguration();
setServiceFilterConfiguration(conf);
return conf;
}
public ServiceCallConfigurationDefinition customFilter(String serviceFilter) {
CustomServiceCallServiceFilterConfiguration conf = new CustomServiceCallServiceFilterConfiguration();
conf.setServiceFilterRef(serviceFilter);
setServiceFilterConfiguration(conf);
return this;
}
public ServiceCallConfigurationDefinition customFilter(ServiceFilter serviceFilter) {
CustomServiceCallServiceFilterConfiguration conf = new CustomServiceCallServiceFilterConfiguration();
conf.setServiceFilter(serviceFilter);
setServiceFilterConfiguration(conf);
return this;
}
// *****************************
// Shortcuts - LoadBalancer
// *****************************
public ServiceCallConfigurationDefinition defaultLoadBalancer() {
DefaultServiceCallServiceLoadBalancerConfiguration conf = new DefaultServiceCallServiceLoadBalancerConfiguration();
setLoadBalancerConfiguration(conf);
return this;
}
public ServiceCallConfigurationDefinition ribbonLoadBalancer() {
RibbonServiceCallServiceLoadBalancerConfiguration conf = new RibbonServiceCallServiceLoadBalancerConfiguration();
setLoadBalancerConfiguration(conf);
return this;
}
public ServiceCallConfigurationDefinition ribbonLoadBalancer(String clientName) {
RibbonServiceCallServiceLoadBalancerConfiguration conf = new RibbonServiceCallServiceLoadBalancerConfiguration();
conf.setClientName(clientName);
setLoadBalancerConfiguration(conf);
return this;
}
}