package com.dedupeer.dao;
import java.util.ArrayList;
import java.util.Arrays;
import javax.swing.JOptionPane;
import me.prettyprint.cassandra.service.CassandraHostConfigurator;
import me.prettyprint.cassandra.service.ThriftCfDef;
import me.prettyprint.cassandra.service.ThriftCluster;
import me.prettyprint.cassandra.service.ThriftKsDef;
import me.prettyprint.hector.api.Cluster;
import me.prettyprint.hector.api.ddl.ColumnDefinition;
import me.prettyprint.hector.api.ddl.ColumnFamilyDefinition;
import me.prettyprint.hector.api.ddl.ColumnType;
import me.prettyprint.hector.api.ddl.ComparatorType;
import me.prettyprint.hector.api.ddl.KeyspaceDefinition;
import me.prettyprint.hector.api.factory.HFactory;
/**
* @author Paulo Fernando (pf@paulofernando.net.br)
*/
public class CassandraManager {
private static final String CLUSTER_NAME = "TestCluster";
private static final String KEYSPACE_NAME = "Dedupeer";
private static final String HOST = "localhost:9160";
private int replicationFactor = 1;
public void createDedupeerDataModel() {
Cluster cluster = HFactory.getOrCreateCluster(CLUSTER_NAME,HOST);
ColumnFamilyDefinition cfFiles = HFactory.createColumnFamilyDefinition(KEYSPACE_NAME,
"Files",
ComparatorType.UTF8TYPE);
ThriftCfDef cfUserFiles = (ThriftCfDef)HFactory.createColumnFamilyDefinition(KEYSPACE_NAME, "UserFiles", ComparatorType.UTF8TYPE, new ArrayList<ColumnDefinition>() );
cfUserFiles.setColumnType(ColumnType.SUPER);
cfUserFiles.setSubComparatorType(ComparatorType.UTF8TYPE);
ThriftCfDef cfChunks = (ThriftCfDef)HFactory.createColumnFamilyDefinition(KEYSPACE_NAME, "Chunks", ComparatorType.BYTESTYPE, new ArrayList<ColumnDefinition>() );
cfChunks.setColumnType(ColumnType.SUPER);
cfChunks.setSubComparatorType(ComparatorType.BYTESTYPE);
cfChunks.setComparatorType(ComparatorType.BYTESTYPE);
cfChunks.setDefaultValidationClass("BytesType");
cfChunks.setKeyValidationClass("BytesType");
KeyspaceDefinition newKeyspace = HFactory.createKeyspaceDefinition(KEYSPACE_NAME,
ThriftKsDef.DEF_STRATEGY_CLASS,
replicationFactor,
Arrays.asList(cfFiles));
cluster.addKeyspace(newKeyspace, true);
cluster.addColumnFamily(cfUserFiles);
cluster.addColumnFamily(cfChunks);
}
/**
* @return if the keyspace was dropped or not.
*/
public boolean dropDedupeerDataModel() {
CassandraHostConfigurator cassandraHostConfigurator = new CassandraHostConfigurator(HOST);
ThriftCluster cassandraCluster = new ThriftCluster(CLUSTER_NAME, cassandraHostConfigurator);
String ks = cassandraCluster.dropKeyspace(KEYSPACE_NAME, true);
return (ks != null);
}
public boolean isDedupeerKeySpaceCreated() {
KeyspaceDefinition keyspaceDetail = null;
try {
CassandraHostConfigurator cassandraHostConfigurator = new CassandraHostConfigurator(HOST);
ThriftCluster cassandraCluster = new ThriftCluster(CLUSTER_NAME, cassandraHostConfigurator);
keyspaceDetail = cassandraCluster.describeKeyspace(KEYSPACE_NAME);
} catch (me.prettyprint.hector.api.exceptions.HectorException ex) {
JOptionPane.showMessageDialog(null, "Apache Cassandra is not running!", "Error", JOptionPane.ERROR_MESSAGE);
}
return (keyspaceDetail != null);
}
}