X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=server%2Fcompbio%2Fstatistic%2FCassandraRequester.java;h=410a722e6feff04bdc9dbd423bcbe06871470e1b;hb=92420f700bca908529b5dc0e0e998dd2a7f98bc2;hp=83c8a7a89c820b879ab3a36e642ca41a14757280;hpb=561c8c711c21527404b6bddb05d423aa3a1f6547;p=proteocache.git diff --git a/server/compbio/statistic/CassandraRequester.java b/server/compbio/statistic/CassandraRequester.java index 83c8a7a..410a722 100755 --- a/server/compbio/statistic/CassandraRequester.java +++ b/server/compbio/statistic/CassandraRequester.java @@ -5,17 +5,24 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; +import java.util.Iterator; import java.util.List; +import java.util.Map; +import compbio.cassandra.AnnotatedProteinSequenceBean; import compbio.cassandra.CassandraNativeConnector; +import compbio.cassandra.CassandraReader; import compbio.cassandra.DataBase; import compbio.cassandra.Pair; +import compbio.cassandra.StructureJobLog; public class CassandraRequester { - private CassandraNativeConnector DBInstance = new CassandraNativeConnector(); + private CassandraReader db = new CassandraReader(); private ArrayList query; private static long currentDate = 0; private static long earlestDate = 0; + private final static SimpleDateFormat formatYYMMDD = new SimpleDateFormat("yyyy/MM/dd"); + private final static SimpleDateFormat formatDDMMYY = new SimpleDateFormat("dd/MM/yyyy"); /* * query: execution time for the period from date1 till date2 @@ -27,14 +34,14 @@ public class CassandraRequester { if (null == date2) { date1 = "2100/1/1"; } - if (!isThisDateValid(date1) || !isThisDateValid(date2)) { + if (!isThisDateValid(date1,formatYYMMDD) || !isThisDateValid(date2,formatYYMMDD)) { System.out.println("Wrong date: point 3"); return null; } SetDateRange(); int nbins = 5; - long dateStart = DateParsing(date1); - long dateEnd = DateParsing(date2); + long dateStart = DateParsing(date1, formatYYMMDD); + long dateEnd = DateParsing(date2, formatYYMMDD); if (dateEnd < earlestDate || dateStart > currentDate || dateStart > dateEnd) return null; if (dateStart < earlestDate) @@ -50,7 +57,7 @@ public class CassandraRequester { List totalTime = new ArrayList(); for (int i = 0; i < nbins; i++) totalTime.add(i, 0); - List> res = DBInstance.ReadProteinDataTable(); + List> res = db.ReadProteinDataTable(); List> numres = new ArrayList>(); for (Pair entry : res) { @@ -105,16 +112,138 @@ public class CassandraRequester { System.out.println("StatisticsProt.readLength: total number of dates = " + query.size()); return query; } + + /* + * query: total number of jobs for the period from date1 till date2 + */ + public List countJobs(String date1, String date2) { + if (null == date1) { + date1 = "1970/1/1"; + } + if (null == date2) { + date1 = "2100/1/1"; + } + if (!isThisDateValid(date1, formatYYMMDD) || !isThisDateValid(date2, formatYYMMDD)) { + System.out.println("Wrong date: point 3"); + return null; + } + SetDateRange(); + long dateStart = DateParsing(date1, formatYYMMDD); + long dateEnd = DateParsing(date2, formatYYMMDD); + if (dateEnd < earlestDate || dateStart > currentDate || dateStart > dateEnd) + return null; + if (dateStart < earlestDate) + dateStart = earlestDate; + if (dateEnd > currentDate) + dateStart = currentDate; + Calendar start = Calendar.getInstance(); + start.setTime(new Date(dateStart)); + Calendar end = Calendar.getInstance(); + end.setTime(new Date(dateEnd)); + query = new ArrayList(); + for (Date date = start.getTime(); !start.after(end); start.add(Calendar.DATE, 1), date = start.getTime()) { + List res = db.ReadDateTable(date.getTime()); + if (res == null) + continue; + DataBase bean = new DataBase(); + bean.setTotal((int)(long)res.get(0)); + bean.setTotalOK((int)(long)res.get(1)); + bean.setTotalStopped((int)(long)res.get(2)); + bean.setTotalError((int)(long)res.get(3)); + bean.setTotalTimeOut((int)(long)res.get(4)); + bean.setDate(DateFormat(date.getTime())); + query.add(bean); + } + System.out.println("StatisticsProt.readLength: total number of dates = " + query.size()); + return query; + } + + /* + * query: protein sequence + * */ + public List readProteins(String protIn, String flag) { + if (protIn == null) + return null; + System.out.println(protIn.length()); + query = new ArrayList(); + List res; + if (flag.equals("whole")) + res = db.ReadWholeSequence(protIn); + else + res = (protIn.length() > 0) ? db.ReadPartOfSequence(protIn) : null; + if (res == null) + return null; + for (AnnotatedProteinSequenceBean entry : res) { + DataBase db = new DataBase(); + db.setProt(entry.getSequence()); + db.setPredictions(entry); + db.setId(entry.getJobid()); + if (flag.equals("part")) { + db.setSubProt(CreateSubprot (entry.getSequence(), protIn)); + } + query.add(db); + } + return query; + } + + /* + * query protein sequences with number of jobs + */ + public List readProteinByCounter(int minimalcounter) { + query = new ArrayList(); + Map map = db.ReadProteinSequenceByCounter(); + for (Map.Entry entry : map.entrySet()) { + if (entry.getValue() > minimalcounter && entry.getKey().length() > 0) { + DataBase bean = new DataBase(); + bean.setTotalId(entry.getValue()); + bean.setProt(entry.getKey()); + query.add(bean); + } + } + return query; + } + + /* + * query jobs log info + */ + public DataBase readJobLog(String jobid) { + if (jobid == null) + return null; + StructureJobLog res = db.ReadJobLog(jobid); + if (res == null) + return null; + DataBase query = new DataBase(); + query.setLogInfo(res); + return query; + } + + /* + * create list of parts of protein sequence; + */ + private static List CreateSubprot (String protein, String subprot) { + List sub = new ArrayList(); + String subStr = protein; + while (subStr.length() > 0 && subStr.contains(subprot)) { + String first = subStr.substring(0, subStr.indexOf(subprot)); + if (first.length() > 0) + sub.add(first); + sub.add(subprot); + subStr = subStr.substring(subStr.indexOf(subprot) + subprot.length(), subStr.length()); + } + if (subStr.length() > 0) + sub.add(subStr); + return sub; + } /* * convert String date into long date (miliseconds since the epoch start) */ - private static long DateParsing(String datInput) { + private static long DateParsing(String datInput, SimpleDateFormat formatter) { if (datInput == null) { return 0; } long dateWorkSt = 0; - SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); + try { dateWorkSt = formatter.parse(datInput).getTime(); } catch (ParseException e) { @@ -135,7 +264,7 @@ public class CassandraRequester { */ private static void SetDateRange() { Calendar cal = Calendar.getInstance(); - currentDate = DateParsing(cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DAY_OF_MONTH)); + currentDate = DateParsing(cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DAY_OF_MONTH), formatYYMMDD); if (0 == earlestDate) { CassandraRequester cr = new CassandraRequester(); earlestDate = cr.earliestDate(); @@ -143,12 +272,11 @@ public class CassandraRequester { } } - public boolean isThisDateValid(String dateToValidate) { + public boolean isThisDateValid(String dateToValidate, SimpleDateFormat sdf) { if (dateToValidate == null || dateToValidate.equals("")) { System.out.println("Undefined date"); return false; } - SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd"); try { // if not valid, this will throw ParseException sdf.setLenient(false); @@ -164,7 +292,8 @@ public class CassandraRequester { * find the earliest date in the database */ public long earliestDate() { - earlestDate = DBInstance.getEarliestDateInDB(); + earlestDate = CassandraNativeConnector.getEarliestDateInDB(); return earlestDate; } + }