/**
* 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.component.etcd;
import mousio.etcd4j.EtcdClient;
import mousio.etcd4j.EtcdSecurityContext;
import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
import org.apache.camel.RuntimeCamelException;
import org.apache.camel.spi.UriParam;
import org.apache.camel.spi.UriParams;
import org.apache.camel.util.jsse.SSLContextParameters;
@UriParams
public class EtcdConfiguration implements CamelContextAware, Cloneable {
@UriParam(defaultValue = EtcdConstants.ETCD_DEFAULT_URIS)
private String uris = EtcdConstants.ETCD_DEFAULT_URIS;
@UriParam(label = "security")
private SSLContextParameters sslContextParameters;
@UriParam(label = "security", secret = true)
private String userName;
@UriParam(label = "security", secret = true)
private String password;
@UriParam(label = "consumer")
private boolean sendEmptyExchangeOnTimeout;
@UriParam
private boolean recursive;
@UriParam(label = "producer")
private Integer timeToLive;
@UriParam
private Long timeout;
@UriParam(label = "consumer,advanced", defaultValue = "0")
private Long fromIndex = 0L;
@UriParam(defaultValue = "/services/")
private String servicePath = "/services/";
private CamelContext context;
public EtcdConfiguration() {
this.context = null;
}
public EtcdConfiguration(CamelContext camelContext) {
this.context = camelContext;
}
@Override
public void setCamelContext(CamelContext context) {
this.context = context;
}
@Override
public CamelContext getCamelContext() {
return context;
}
public String getUris() {
return uris;
}
/**
* To set the URIs the client connects.
*/
public void setUris(String uris) {
this.uris = uris;
}
public SSLContextParameters getSslContextParameters() {
return sslContextParameters;
}
/**
* To configure security using SSLContextParameters.
*/
public void setSslContextParameters(SSLContextParameters sslContextParameters) {
this.sslContextParameters = sslContextParameters;
}
public String getUserName() {
return userName;
}
/**
* The user name to use for basic authentication.
*/
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
/**
* The password to use for basic authentication.
*/
public void setPassword(String password) {
this.password = password;
}
public boolean isSendEmptyExchangeOnTimeout() {
return sendEmptyExchangeOnTimeout;
}
/**
* To send an empty message in case of timeout watching for a key.
*/
public void setSendEmptyExchangeOnTimeout(boolean sendEmptyExchangeOnTimeout) {
this.sendEmptyExchangeOnTimeout = sendEmptyExchangeOnTimeout;
}
public boolean isRecursive() {
return recursive;
}
/**
* To apply an action recursively.
*/
public void setRecursive(boolean recursive) {
this.recursive = recursive;
}
public Integer getTimeToLive() {
return timeToLive;
}
/**
* To set the lifespan of a key in milliseconds.
*/
public void setTimeToLive(Integer timeToLive) {
this.timeToLive = timeToLive;
}
public Long getTimeout() {
return timeout;
}
public boolean hasTimeout() {
return timeout != null && timeout > 0;
}
/**
* To set the maximum time an action could take to complete.
*/
public void setTimeout(Long timeout) {
this.timeout = timeout;
}
public Long getFromIndex() {
return fromIndex;
}
/**
* The index to watch from
*/
public void setFromIndex(Long fromIndex) {
this.fromIndex = fromIndex;
}
public String getServicePath() {
return servicePath;
}
/**
* The path to look for for service discovery
*/
public void setServicePath(String servicePath) {
this.servicePath = servicePath;
}
public EtcdClient createClient() throws Exception {
return new EtcdClient(
new EtcdSecurityContext(
sslContextParameters != null
? sslContextParameters.createSSLContext(context)
: null,
userName,
password),
EtcdHelper.resolveURIs(context, getUris())
);
}
public EtcdConfiguration copy() {
try {
return (EtcdConfiguration)super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeCamelException(e);
}
}
}