new readers for the queries
[proteocache.git] / datadb / compbio / cassandra / readers / ReaderByCounter.java
1 package compbio.cassandra.readers;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7
8 import com.datastax.driver.core.ResultSet;
9 import com.datastax.driver.core.Row;
10
11 import compbio.beans.TotalByCounterBean;
12
13 public class ReaderByCounter extends CassandraReader{
14         
15         public ReaderByCounter() {
16                 super();
17         }
18         
19         
20                 
21         /**
22          * query protein sequences with number of jobs
23          *  
24          * @param minimalcounter
25          * 
26          * @return List<TotalByCounterBean> to the controller SequenceController
27          * 
28          **/
29         public List<TotalByCounterBean> readProteinByCounter(int minimalcounter) {              
30                 ResultSet results = CassandraQuery("SELECT Protein, JobID FROM ProteinRow;");
31                 return QueryByCounter(results, "Protein", minimalcounter);
32         }
33         
34         /**
35          * query ip with number of jobs
36          * 
37          * @param minimalcounter
38          * 
39          * @return List<TotalByCounterBean> to the controller IPDataController
40          * 
41          **/
42         public List<TotalByCounterBean> readIpByCounter(Integer minimalcounter) {
43                 ResultSet results = CassandraQuery("SELECT JobID, ip FROM ProteinLog;");
44                 return QueryByCounter(results, "ip", minimalcounter);
45         }
46         
47         
48         /**
49          * query number of jobs by counter and parameter: ip or protein
50          * 
51          * @param results
52          *                              cassandra query result
53          * @param counterParameter
54          *                              parameter for a query: ip or proteint
55          * @param minimalcounter
56          *                              
57          * @return List<TotalByCounterBean> 
58          * 
59          **/
60         public List<TotalByCounterBean> QueryByCounter(ResultSet results, String counterParameter, int minimalcounter) {
61                 List<TotalByCounterBean> query = new ArrayList<TotalByCounterBean>();
62                 if (results.isExhausted())
63                         return null;
64                 List<Row> rows = results.all();
65                 Map<String, Integer> res = new HashMap<String, Integer>();
66                 for (Row r : rows) {
67                         String parameter = r.getString(counterParameter);
68                         if (res.containsKey(parameter))
69                                 res.put(parameter, res.get(parameter) + 1);
70                         else
71                                 res.put(parameter, 1);
72                 }
73                 for (Map.Entry<String, Integer> entry : res.entrySet()) {
74                         if (entry.getValue() > minimalcounter) {
75                                 TotalByCounterBean bean = new TotalByCounterBean();
76                                 bean.setTotaljobs(entry.getValue());
77                                 bean.setName(entry.getKey());
78                                 query.add(bean);
79                         }
80                 }
81                 return query;
82         }       
83                         
84 }