| /** |
| * 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 java.util.Map; |
| import java.util.Optional; |
| |
| import org.apache.camel.CamelContext; |
| import org.apache.camel.Endpoint; |
| import org.apache.camel.SSLContextParametersAware; |
| import org.apache.camel.impl.DefaultComponent; |
| import org.apache.camel.spi.Metadata; |
| import org.apache.camel.util.StringHelper; |
| import org.apache.camel.util.jsse.SSLContextParameters; |
| |
| /** |
| * Represents the component that manages {@link AbstractEtcdEndpoint}. |
| */ |
| public class EtcdComponent extends DefaultComponent implements SSLContextParametersAware { |
| |
| @Metadata(label = "advanced") |
| private EtcdConfiguration configuration = new EtcdConfiguration(); |
| @Metadata(label = "security", defaultValue = "false") |
| private boolean useGlobalSslContextParameters; |
| |
| public EtcdComponent() { |
| super(); |
| } |
| |
| public EtcdComponent(CamelContext context) { |
| super(context); |
| } |
| |
| // ************************************ |
| // Options |
| // ************************************ |
| |
| public String getUris() { |
| return configuration.getUris(); |
| } |
| |
| /** |
| * To set the URIs the client connects. |
| * @param uris |
| */ |
| public void setUris(String uris) { |
| configuration.setUris(uris); |
| } |
| |
| public SSLContextParameters getSslContextParameters() { |
| return configuration.getSslContextParameters(); |
| } |
| |
| /** |
| * To configure security using SSLContextParameters. |
| * @param sslContextParameters |
| */ |
| public void setSslContextParameters(SSLContextParameters sslContextParameters) { |
| configuration.setSslContextParameters(sslContextParameters); |
| } |
| |
| public String getUserName() { |
| return configuration.getUserName(); |
| } |
| |
| /** |
| * The user name to use for basic authentication. |
| * @param userName |
| */ |
| public void setUserName(String userName) { |
| configuration.setUserName(userName); |
| } |
| |
| public String getPassword() { |
| return configuration.getPassword(); |
| } |
| |
| /** |
| * The password to use for basic authentication. |
| * @param password |
| */ |
| public void setPassword(String password) { |
| configuration.setPassword(password); |
| } |
| |
| public EtcdConfiguration getConfiguration() { |
| return configuration; |
| } |
| |
| /** |
| * Sets the common configuration shared among endpoints |
| */ |
| public void setConfiguration(EtcdConfiguration configuration) { |
| this.configuration = configuration; |
| } |
| |
| @Override |
| public boolean isUseGlobalSslContextParameters() { |
| return this.useGlobalSslContextParameters; |
| } |
| |
| /** |
| * Enable usage of global SSL context parameters. |
| */ |
| @Override |
| public void setUseGlobalSslContextParameters(boolean useGlobalSslContextParameters) { |
| this.useGlobalSslContextParameters = useGlobalSslContextParameters; |
| } |
| |
| @Override |
| protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception { |
| String ns = StringHelper.before(remaining, "/"); |
| String path = StringHelper.after(remaining, "/"); |
| |
| if (ns == null) { |
| ns = remaining; |
| } |
| if (path == null) { |
| path = remaining; |
| } |
| |
| EtcdNamespace namespace = getCamelContext().getTypeConverter().mandatoryConvertTo(EtcdNamespace.class, ns); |
| EtcdConfiguration configuration = loadConfiguration(parameters); |
| |
| if (namespace != null) { |
| // path must start with leading slash |
| if (!path.startsWith("/")) { |
| path = "/" + path; |
| } |
| |
| switch (namespace) { |
| case stats: |
| return new EtcdStatsEndpoint(uri, this, configuration, namespace, path); |
| case watch: |
| return new EtcdWatchEndpoint(uri, this, configuration, namespace, path); |
| case keys: |
| return new EtcdKeysEndpoint(uri, this, configuration, namespace, path); |
| default: |
| throw new IllegalStateException("No endpoint for " + remaining); |
| } |
| } |
| |
| throw new IllegalStateException("No endpoint for " + remaining); |
| } |
| |
| protected EtcdConfiguration loadConfiguration(Map<String, Object> parameters) throws Exception { |
| EtcdConfiguration configuration = Optional.ofNullable(this.configuration).orElseGet(EtcdConfiguration::new).copy(); |
| configuration.setCamelContext(getCamelContext()); |
| |
| setProperties(configuration, parameters); |
| |
| if (configuration.getSslContextParameters() == null) { |
| configuration.setSslContextParameters(retrieveGlobalSslContextParameters()); |
| } |
| |
| return configuration; |
| } |
| } |