package com.dedupeer.dao.operation; import java.util.HashMap; import java.util.Map; import me.prettyprint.cassandra.serializers.StringSerializer; import me.prettyprint.hector.api.Cluster; import me.prettyprint.hector.api.Keyspace; import me.prettyprint.hector.api.beans.ColumnSlice; import me.prettyprint.hector.api.beans.HColumn; import me.prettyprint.hector.api.factory.HFactory; import me.prettyprint.hector.api.mutation.Mutator; import me.prettyprint.hector.api.query.ColumnQuery; import me.prettyprint.hector.api.query.QueryResult; import me.prettyprint.hector.api.query.SliceQuery; /** * @author Paulo Fernando (pf@paulofernando.net.br) */ public class FilesDaoOpeartion { private Cluster cluster; private Keyspace keyspaceOperator; /** * Creates an object to manipulate the operations on the Files Column Family * @param clusterName The cluster name from instance of Cassandra * @param keyspaceName The Keyspace name where the File Column Family was created */ public FilesDaoOpeartion(String clusterName, String keyspaceName) { cluster = HFactory.getOrCreateCluster(clusterName, "localhost:9160"); keyspaceOperator = HFactory.createKeyspace(keyspaceName, cluster); } /** Inserts a new row on the Files Column Family */ public void insertRow(String ownerName, String fileName, String fileID) { Mutator<String> mutator = HFactory.createMutator(keyspaceOperator, StringSerializer.get()); mutator.insert(ownerName, "Files", HFactory.createStringColumn(fileName, fileID)); } /** * Retrieves the files information of a owner * @param ownerName Owner of the files * @return A Map of file information. Filename as key and fileID as value */ public Map<String, Long> getAllFiles(String ownerName) { SliceQuery<String,String,String> query = HFactory.createSliceQuery(keyspaceOperator, StringSerializer.get(), StringSerializer.get(), StringSerializer.get()); query.setColumnFamily("Files").setKey(ownerName).setRange(null, null, false, 100); QueryResult<ColumnSlice<String,String>> result = query.execute(); Map<String, Long> files = new HashMap<String, Long>(); for (HColumn<String, String> column : result.get().getColumns()) { files.put(column.getName(), Long.parseLong(column.getValue())); } return files; } /** * Retrieves a ID of a file * @param ownerName File's owner * @param filename File name * @return ID of the file */ public String getFileID(String ownerName, String filename) { ColumnQuery<String, String, String> columnQuery = HFactory.createStringColumnQuery(keyspaceOperator); columnQuery.setColumnFamily("Files").setKey(ownerName).setName(filename); QueryResult<HColumn<String, String>> result = columnQuery.execute(); return result.get().getValue(); } /** Closes the connection with cluster */ public void close() { cluster.getConnectionManager().shutdown(); } }