All Downloads are FREE. Search and download functionalities are using the official Maven repository.

info.archinnov.achilles.configuration.CQLArgumentExtractor Maven / Gradle / Ivy

/**
 *
 * Copyright (C) 2012-2013 DuyHai DOAN
 *
 * Licensed 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 info.archinnov.achilles.configuration;

import static info.archinnov.achilles.configuration.CQLConfigurationParameters.*;
import info.archinnov.achilles.validation.Validator;

import java.util.Map;

import org.apache.commons.lang.StringUtils;

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Cluster.Builder;
import com.datastax.driver.core.ProtocolOptions.Compression;
import com.datastax.driver.core.SSLOptions;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.policies.LoadBalancingPolicy;
import com.datastax.driver.core.policies.Policies;
import com.datastax.driver.core.policies.ReconnectionPolicy;
import com.datastax.driver.core.policies.RetryPolicy;

public class CQLArgumentExtractor extends ArgumentExtractor {

	public Cluster initCluster(Map configurationMap) {
		Cluster cluster = (Cluster) configurationMap.get(CLUSTER_PARAM);
		if (cluster == null) {
			String contactPoints = (String) configurationMap.get(CONNECTION_CONTACT_POINTS_PARAM);
			Integer port = (Integer) configurationMap.get(CONNECTION_PORT_PARAM);

			Compression compression = Compression.SNAPPY;
			if (configurationMap.containsKey(COMPRESSION_TYPE)) {
				compression = (Compression) configurationMap.get(COMPRESSION_TYPE);
			}

			RetryPolicy retryPolicy = Policies.defaultRetryPolicy();
			if (configurationMap.containsKey(RETRY_POLICY)) {
				retryPolicy = (RetryPolicy) configurationMap.get(RETRY_POLICY);
			}

			LoadBalancingPolicy loadBalancingPolicy = Policies.defaultLoadBalancingPolicy();
			if (configurationMap.containsKey(LOAD_BALANCING_POLICY)) {
				loadBalancingPolicy = (LoadBalancingPolicy) configurationMap.get(LOAD_BALANCING_POLICY);
			}

			ReconnectionPolicy reconnectionPolicy = Policies.defaultReconnectionPolicy();
			if (configurationMap.containsKey(RECONNECTION_POLICY)) {
				reconnectionPolicy = (ReconnectionPolicy) configurationMap.get(RECONNECTION_POLICY);
			}

			String username = null;
			String password = null;
			if (configurationMap.containsKey(USERNAME) && configurationMap.containsKey(PASSWORD)) {
				username = (String) configurationMap.get(USERNAME);
				password = (String) configurationMap.get(PASSWORD);
			}

			boolean disableJmx = false;
			if (configurationMap.containsKey(DISABLE_JMX)) {
				disableJmx = (Boolean) configurationMap.get(DISABLE_JMX);
			}

			boolean disableMetrics = false;
			if (configurationMap.containsKey(DISABLE_METRICS)) {
				disableMetrics = (Boolean) configurationMap.get(DISABLE_METRICS);
			}

			boolean sslEnabled = false;
			if (configurationMap.containsKey(SSL_ENABLED)) {
				sslEnabled = (Boolean) configurationMap.get(SSL_ENABLED);
			}

			SSLOptions sslOptions = null;
			if (configurationMap.containsKey(SSL_OPTIONS)) {
				sslOptions = (SSLOptions) configurationMap.get(SSL_OPTIONS);
			}

			Validator
					.validateNotBlank(contactPoints, "%s property should be provided", CONNECTION_CONTACT_POINTS_PARAM);
			Validator.validateNotNull(port, "%s property should be provided", CONNECTION_PORT_PARAM);
			if (sslEnabled) {
				Validator
						.validateNotNull(sslOptions, "%s property should be provided when SSL is enabled", SSL_OPTIONS);
			}

			String[] contactPointsList = StringUtils.split(contactPoints, ",");

			Builder clusterBuilder = Cluster.builder().addContactPoints(contactPointsList).withPort(port)
					.withCompression(compression).withRetryPolicy(retryPolicy)
					.withLoadBalancingPolicy(loadBalancingPolicy).withReconnectionPolicy(reconnectionPolicy);

			if (StringUtils.isNotBlank(username) && StringUtils.isNotBlank(password)) {
				clusterBuilder.withCredentials(username, password);
			}

			if (disableJmx) {
				clusterBuilder.withoutJMXReporting();
			}

			if (disableMetrics) {
				clusterBuilder.withoutMetrics();
			}

			if (sslEnabled) {
				clusterBuilder.withSSL().withSSL(sslOptions);
			}
			cluster = clusterBuilder.build();
		}
		return cluster;
	}

	public Session initSession(Cluster cluster, Map configurationMap) {

		Session nativeSession = (Session) configurationMap.get(NATIVE_SESSION_PARAM);
		String keyspace = (String) configurationMap.get(KEYSPACE_NAME_PARAM);
		Validator.validateNotBlank(keyspace, "%s property should be provided", KEYSPACE_NAME_PARAM);

		if (nativeSession == null) {
			nativeSession = cluster.connect(keyspace);
		}
		return nativeSession;
	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy