1 package compbio.statistic;
3 import java.text.ParseException;
4 import java.text.SimpleDateFormat;
5 import java.util.ArrayList;
6 import java.util.Calendar;
10 import compbio.cassandra.CassandraNativeConnector;
11 import compbio.cassandra.DataBase;
12 import compbio.cassandra.Pair;
14 public class CassandraRequester {
15 private CassandraNativeConnector DBInstance = new CassandraNativeConnector();
16 private ArrayList<DataBase> query;
17 private static long currentDate = 0;
18 private static long earlestDate = 0;
21 * query: execution time for the period from date1 till date2
23 public List<DataBase> extractExecutionTime(String date1, String date2) {
30 if (!isThisDateValid(date1) || !isThisDateValid(date2)) {
31 System.out.println("Wrong date: point 3");
36 long dateStart = DateParsing(date1);
37 long dateEnd = DateParsing(date2);
38 if (dateEnd < earlestDate || dateStart > currentDate || dateStart > dateEnd)
40 if (dateStart < earlestDate)
41 dateStart = earlestDate;
42 if (dateEnd > currentDate)
43 dateStart = currentDate;
45 Calendar start = Calendar.getInstance();
46 start.setTime(new Date(dateStart));
47 Calendar end = Calendar.getInstance();
48 end.setTime(new Date(dateEnd));
49 query = new ArrayList<DataBase>();
50 List<Integer> totalTime = new ArrayList<Integer>();
51 for (int i = 0; i < nbins; i++)
53 List<Pair<String, String>> res = DBInstance.ReadProteinDataTable();
54 List<Pair<Date, Long>> numres = new ArrayList<Pair<Date, Long>>();
56 for (Pair<String, String> entry : res) {
57 SimpleDateFormat dateformatter = new SimpleDateFormat("yyyy/MM/dd");
59 Date jobstartdate = dateformatter.parse(entry.getElement0());
60 long date = jobstartdate.getTime();
61 if (dateStart <= date && date <= dateEnd) {
62 SimpleDateFormat datetimeformatter = new SimpleDateFormat("yyyy/MM/dd:H:m:s");
63 Date jobstarttime = datetimeformatter.parse(entry.getElement0());
64 Date jobendtime = datetimeformatter.parse(entry.getElement1());
65 long diff = (jobendtime.getTime() - jobstarttime.getTime()) / 1000;
66 Pair<Date, Long> pair = new Pair<Date, Long>(jobstartdate, Long.valueOf(diff));
69 } catch (ParseException e) {
74 for (Date date = start.getTime(); !start.after(end); start.add(Calendar.DATE, 1), date = start.getTime()) {
75 List<Integer> timeResult = new ArrayList<Integer>();
76 for (int i = 0; i < nbins; i++)
78 for (Pair<Date, Long> p : numres) {
79 if (date.equals(p.getElement0())) {
80 long lenResult = p.getElement1().longValue();
82 timeResult.set(0, timeResult.get(0) + 1);
83 else if (lenResult > 30 && lenResult <= 60)
84 timeResult.set(1, timeResult.get(1) + 1);
85 else if (lenResult > 60 && lenResult <= 120)
86 timeResult.set(2, timeResult.get(2) + 1);
87 else if (lenResult > 120 && lenResult <= 600)
88 timeResult.set(3, timeResult.get(3) + 1);
90 timeResult.set(4, timeResult.get(4) + 1);
94 for (int i = 0; i < nbins; i++)
95 totalTime.set(i, totalTime.get(i) + timeResult.get(i));
96 DataBase db = new DataBase();
97 db.setTimeRez(timeResult);
98 db.setDate(DateFormat(date.getTime()));
102 DataBase db = new DataBase();
103 db.setTimeTotalExec(totalTime);
105 System.out.println("StatisticsProt.readLength: total number of dates = " + query.size());
110 * convert String date into long date (miliseconds since the epoch start)
112 private static long DateParsing(String datInput) {
113 if (datInput == null) {
117 SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd");
119 dateWorkSt = formatter.parse(datInput).getTime();
120 } catch (ParseException e) {
126 // convert long to date in string format
127 private static String DateFormat(long inDate) {
128 SimpleDateFormat datformat = new SimpleDateFormat("dd/MM/yyyy");
129 return datformat.format(new Date(inDate));
133 * set earlest date and current dates. earlestDate is static and should be
134 * set at the 1st call currentDate should be re-calculated every time
136 private static void SetDateRange() {
137 Calendar cal = Calendar.getInstance();
138 currentDate = DateParsing(cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DAY_OF_MONTH));
139 if (0 == earlestDate) {
140 CassandraRequester cr = new CassandraRequester();
141 earlestDate = cr.earliestDate();
142 System.out.println("Set earlest Date = " + earlestDate);
146 public boolean isThisDateValid(String dateToValidate) {
147 if (dateToValidate == null || dateToValidate.equals("")) {
148 System.out.println("Undefined date");
151 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
153 // if not valid, this will throw ParseException
154 sdf.setLenient(false);
155 Date date = sdf.parse(dateToValidate);
156 } catch (ParseException e) {
164 * find the earliest date in the database
166 public long earliestDate() {
167 earlestDate = DBInstance.getEarliestDateInDB();