package compbio.cassandra; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.ArrayList; import java.util.Map; import org.apache.log4j.Logger; import com.datastax.driver.core.Row; import com.datastax.driver.core.Session; import com.datastax.driver.core.ResultSet; import compbio.engine.ProteoCachePropertyHelperManager; import compbio.util.PropertyHelper; public class CassandraReader { private Session session; private static Logger log = Logger.getLogger(CassandraNativeConnector.class); public CassandraReader() { Session inis = CassandraNativeConnector.getSession(); setSession (inis); } public void setSession(Session s) { assert s != null; session = s; } /* * getting data from the db */ public List> ReadProteinDataTable() { final long startTime = System.currentTimeMillis(); String com = "SELECT DataBegin,DataEnd FROM ProteinLog;"; System.out.println("Command: " + com); ResultSet results = session.execute(com); final long queryTime = System.currentTimeMillis(); List rows = results.all(); System.out.println("Query time is " + (queryTime - startTime) + " msec"); List> res = new ArrayList>(); int c = 0; for (Row r : rows) { Pair pair = new Pair(r.getString("DataBegin"), r.getString("DataEnd")); res.add(pair); ++c; } final long endTime = System.currentTimeMillis(); System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec"); return res; } /* * getting data from the db JobDateInfo */ public long ReadDateTable(long queryDate) { ResultSet results = session.execute("SELECT Total FROM JobDateInfo WHERE jobday = " + queryDate + ";"); if (results.isExhausted()) return 0; Row therow = results.one(); long res = therow.getLong("Total"); if (!results.isExhausted()) { Date date = new Date (queryDate); log.warn("CassandraReader.ReadDateTable: date row for " + date.toString () + " ("+ queryDate + ") duplicated "); } return res; } /* * getting whole protein sequence from the db ProteinRow */ public List ReadWholeSequence(String queryProtein) { final long startTime = System.currentTimeMillis(); String com = "SELECT JobID, Predictions FROM ProteinRow WHERE Protein = '" + queryProtein + "';"; System.out.println("Command: " + com); ResultSet results = session.execute(com); if (results.isExhausted()) return null; final long queryTime = System.currentTimeMillis(); List rows = results.all(); System.out.println("Query time is " + (queryTime - startTime) + " msec"); System.out.println(" rows analysed, " + rows.size()); List res = new ArrayList(); int c = 0; for (Row r : rows) { StructureProteinPrediction structure = new StructureProteinPrediction(queryProtein, r.getString("JobID"), r.getMap( "Predictions", String.class, String.class)); res.add(structure); ++c; } final long endTime = System.currentTimeMillis(); System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec"); return res; } /* * getting part of protein sequence from the db ProteinRow */ public List ReadPartOfSequence(String queryProtein) { final long startTime = System.currentTimeMillis(); String com = "SELECT * FROM ProteinRow;"; System.out.println("Command: " + com); ResultSet results = session.execute(com); if (results.isExhausted()) return null; final long queryTime = System.currentTimeMillis(); List rows = results.all(); System.out.println("Query time is " + (queryTime - startTime) + " msec"); System.out.println(" rows analysed, " + rows.size()); List res = new ArrayList(); int c = 0; for (Row r : rows) { String prot = r.getString("Protein"); if (prot.matches("(.*)" + queryProtein + "(.*)")) { StructureProteinPrediction structure = new StructureProteinPrediction(prot, r.getString("JobID"), r.getMap("Predictions", String.class, String.class)); res.add(structure); ++c; } } final long endTime = System.currentTimeMillis(); System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec"); return res; } /* * getting protein sequences by counter */ public Map ReadProteinSequenceByCounter() { final long startTime = System.currentTimeMillis(); String com = "SELECT Protein FROM ProteinRow;"; System.out.println("Command: " + com); ResultSet results = session.execute(com); if (results.isExhausted()) return null; final long queryTime = System.currentTimeMillis(); List rows = results.all(); System.out.println("Query time is " + (queryTime - startTime) + " msec"); System.out.println(" rows analysed, " + rows.size()); Map res = new HashMap(); int c = 0; for (Row r : rows) { String protein = r.getString("Protein"); if (res.containsKey(protein)) res.put(protein, res.get(protein) + 1); else res.put(protein, 1); } final long endTime = System.currentTimeMillis(); System.out.println(c + " rows analysed, execution time is " + (endTime - startTime) + " msec"); return res; } /* * getting protein sequences by counter */ public StructureJobLog ReadJobLog(String jobid) { final long startTime = System.currentTimeMillis(); String com = "SELECT * FROM ProteinLog WHERE JobID = '" + jobid + "';"; System.out.println("Command: " + com); ResultSet results = session.execute(com); if (results.isExhausted()) return null; final long queryTime = System.currentTimeMillis(); Row row = results.one(); String com1 = "SELECT * FROM ProteinRow WHERE JobID = '" + jobid + "' ALLOW FILTERING;"; System.out.println("Command: " + com1); ResultSet results1 = session.execute(com1); if (results1.isExhausted()) return null; Row row1 = results1.one(); StructureJobLog res = new StructureJobLog(row.getString("Protein"), row.getString("JobID"), row.getString("DataBegin"), row.getString("DataEnd"), row.getString("ip"), row1.getMap("Predictions", String.class, String.class)); System.out.println("Query time is " + (queryTime - startTime) + " msec"); final long endTime = System.currentTimeMillis(); System.out.println(" rows analysed, execution time is " + (endTime - startTime) + " msec"); return res; } }