/** * 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; } }