Improve presentation of job on the web (servlet ServletSequenceProtein)
[proteocache.git] / server / compbio / statistic / StatisticsProt.java
old mode 100644 (file)
new mode 100755 (executable)
index df6fec5..05375c0
@@ -9,135 +9,133 @@ import java.util.Date;
 import java.util.Iterator;
 import java.util.List;
 
-import me.prettyprint.cassandra.serializers.LongSerializer;
-import me.prettyprint.cassandra.serializers.StringSerializer;
-import me.prettyprint.hector.api.beans.ColumnSlice;
-import me.prettyprint.hector.api.beans.HColumn;
-import me.prettyprint.hector.api.beans.OrderedRows;
-import me.prettyprint.hector.api.beans.Row;
-import me.prettyprint.hector.api.factory.HFactory;
-import me.prettyprint.hector.api.query.QueryResult;
-import me.prettyprint.hector.api.query.RangeSlicesQuery;
-import me.prettyprint.hector.api.query.SliceQuery;
-import compbio.cassandra.CassandraCreate;
+import compbio.cassandra.CassandraNativeConnector;
 import compbio.cassandra.DataBase;
 
 public class StatisticsProt {
-       private final static long MILLISECONDS_PER_DAY = 1000L * 60 * 60 * 24;
-       private CassandraCreate cc = new CassandraCreate();
+       private CassandraNativeConnector cc = new CassandraNativeConnector();
        private ArrayList<DataBase> query;
        private static long currentDate = 0;
        private static long earlestDate = 0;
 
-       /* query: the period from date1 till date2 */
+       /* 
+        * query: the period from date1 till date2
+        * */
        public List<DataBase> readDetails(String date1, String date2) {
+
                if (!isThisDateValid(date1) || !isThisDateValid(date2)) {
                        System.out.println("Wrong date: point 1");
                        return null;
                }
                SetDateRange();
-
                long dateStart = DateParsing(date1);
                long dateEnd = DateParsing(date2);
+               if ((dateStart < earlestDate && dateEnd < earlestDate) || (dateStart > currentDate && dateEnd > currentDate) || dateStart > dateEnd)
+                       return null;
                if (dateStart < earlestDate)
                        dateStart = earlestDate;
-               if (dateStart > currentDate)
-                       dateStart = currentDate - MILLISECONDS_PER_DAY;
-               if (dateEnd < earlestDate)
-                       dateStart = earlestDate + MILLISECONDS_PER_DAY;
                if (dateEnd > currentDate)
                        dateStart = currentDate;
                System.out.println("StatisticsProt.readDetails: earlestDate = " + earlestDate + ", currentDate = " + currentDate);
                System.out.println("StatisticsProt.readDetails: Start date " + date1 + ": int representation = " + dateStart);
                System.out.println("StatisticsProt.readDetails: End date " + date2 + ": int representation = " + dateEnd);
-
+               Calendar start = Calendar.getInstance();
+               start.setTime(new Date(dateStart));
+               Calendar end = Calendar.getInstance();
+               end.setTime(new Date(dateEnd));
                query = new ArrayList<DataBase>();
                int day = 0;
-               while (dateStart <= dateEnd) {
+               /*
+               for (Date date = start.getTime(); !start.after(end); start.add(Calendar.DATE, 1), date = start.getTime()) {
                        SliceQuery<Long, String, String> result = HFactory.createSliceQuery(cc.GetKeyspace(), LongSerializer.get(),
                                        StringSerializer.get(), StringSerializer.get());
                        result.setColumnFamily("ProteinData");
-                       result.setKey(dateStart);
+                       result.setKey(date.getTime());
                        result.setRange(null, null, false, Integer.MAX_VALUE);
                        QueryResult<ColumnSlice<String, String>> columnSlice = result.execute();
                        ++day;
-                       System.out.print("Day " + day + ": dataStart = " + dateStart + ": ");
+                       System.out.print("Day " + day + ": dataStart = " + date + ": ");
                        if (!columnSlice.get().getColumns().isEmpty()) {
-                               DataBase db = new DataBase(DateFormat(dateStart), columnSlice.get().getColumns().size());
+                               DataBase db = new DataBase(DateFormat(date.getTime()), columnSlice.get().getColumns().size());
                                query.add(db);
                                System.out.println("data exist");
                        } else {
                                System.out.println("no data");
                        }
-                       dateStart += MILLISECONDS_PER_DAY;
                }
+               */
                System.out.println("StatisticsProt.readLength: total number of dates = " + query.size());
                return query;
        }
 
        /*
         * query: execution time for the period from date1 till date2
-        */
+        * */
        public List<DataBase> readLength(String date1, String date2) {
                if (!isThisDateValid(date1) || !isThisDateValid(date2)) {
                        System.out.println("Wrong date: point 3");
                        return null;
                }
                SetDateRange();
-
+               int nbins = 5;
                long dateStart = DateParsing(date1);
                long dateEnd = DateParsing(date2);
+               if ((dateStart < earlestDate && dateEnd < earlestDate) || (dateStart > currentDate && dateEnd > currentDate) || dateStart > dateEnd)
+                       return null;
                if (dateStart < earlestDate)
                        dateStart = earlestDate;
-               if (dateStart > currentDate)
-                       dateStart = currentDate - MILLISECONDS_PER_DAY;
-               if (dateEnd < earlestDate)
-                       dateStart = earlestDate + MILLISECONDS_PER_DAY;
                if (dateEnd > currentDate)
                        dateStart = currentDate;
                System.out.println("StatisticsProt.readLength: earlestDate = " + earlestDate + ", currentDate = " + currentDate);
                System.out.println("StatisticsProt.readLength: Start date is " + date1 + ": int representation = " + dateStart);
                System.out.println("StatisticsProt.readLength: End date is " + date2 + ": int representation = " + dateEnd);
-
+               Calendar start = Calendar.getInstance();
+               start.setTime(new Date(dateStart));
+               Calendar end = Calendar.getInstance();
+               end.setTime(new Date(dateEnd));
                query = new ArrayList<DataBase>();
                List<Integer> totalTime = new ArrayList<Integer>();
-               for (int i = 0; i < 4; i++)
+               for (int i = 0; i < nbins; i++)
                        totalTime.add(i, 0);
-               while (dateStart <= dateEnd) {
+               /*
+               for (Date date = start.getTime(); !start.after(end); start.add(Calendar.DATE, 1), date = start.getTime()) {
                        List<Integer> timeResult = new ArrayList<Integer>();
                        SliceQuery<Long, String, String> result = HFactory.createSliceQuery(cc.GetKeyspace(), LongSerializer.get(),
                                        StringSerializer.get(), StringSerializer.get());
                        result.setColumnFamily("ProteinData");
-                       result.setKey(dateStart);
+                       result.setKey(date.getTime());
                        result.setRange(null, null, false, Integer.MAX_VALUE);
                        QueryResult<ColumnSlice<String, String>> columnSlice = result.execute();
                        List<HColumn<String, String>> col = columnSlice.get().getColumns();
                        if (!col.isEmpty()) {
                                Iterator<HColumn<String, String>> itCol = col.iterator();
-                               for (int i = 0; i < 4; i++)
+                               for (int i = 0; i < nbins; i++)
                                        timeResult.add(i, 0);
+                               // split all jobs into nbins bins
                                while (itCol.hasNext()) {
                                        String id = itCol.next().getName();
                                        long lenResult = CountID(id);
-                                       if (lenResult <= 30) 
+                                       if (lenResult <= 30)
                                                timeResult.set(0, timeResult.get(0) + 1);
                                        else if (lenResult > 30 && lenResult <= 60)
                                                timeResult.set(1, timeResult.get(1) + 1);
                                        else if (lenResult > 60 && lenResult <= 120)
                                                timeResult.set(2, timeResult.get(2) + 1);
-                                       else {
+                                       else if (lenResult > 120 && lenResult <= 600)
                                                timeResult.set(3, timeResult.get(3) + 1);
+                                       else {
+                                               timeResult.set(4, timeResult.get(4) + 1);
                                        }
                                }
-                               for (int i = 0; i < 4; i++)
+                               for (int i = 0; i < nbins; i++)
                                        totalTime.set(i, totalTime.get(i) + timeResult.get(i));
                                DataBase db = new DataBase();
                                db.setTimeRez(timeResult);
-                               db.setDate(DateFormat(dateStart));
+                               db.setDate(DateFormat(date.getTime()));
                                query.add(db);
                        }
-                       dateStart += MILLISECONDS_PER_DAY;
                }
+               */
                DataBase db = new DataBase();
                db.setTimeTotalExec(totalTime);
                query.add(db);
@@ -145,9 +143,12 @@ public class StatisticsProt {
                return query;
        }
 
-       /* query: protein sequence */
+       /* 
+        * query: protein sequence
+        * */
        public List<DataBase> readProteins(String protIn) {
                query = new ArrayList<DataBase>();
+               /*
                SliceQuery<String, String, String> result = HFactory.createSliceQuery(cc.GetKeyspace(), StringSerializer.get(),
                                StringSerializer.get(), StringSerializer.get());
                result.setColumnFamily("ProteinRow");
@@ -166,17 +167,21 @@ public class StatisticsProt {
                                query.add(db);
                        }
                }
+               */
                return query;
        }
 
-       // query by a protein sequence
+       /* 
+        * query by a protein sequence
+        * */
        public List<DataBase> readProtID(int counter) {
                query = new ArrayList<DataBase>();
-               int row_count = 100000000;
+               int row_count = 100;
+               /*
                RangeSlicesQuery<String, String, String> result = HFactory.createRangeSlicesQuery(cc.GetKeyspace(), StringSerializer.get(),
                                StringSerializer.get(), StringSerializer.get());
                result.setColumnFamily("ProteinRow");
-               result.setRange(null, null, false, Integer.MAX_VALUE);
+               result.setRange(null, null, false, 100);
                result.setRowCount(row_count);
                String last_key = null;
                while (true) {
@@ -188,14 +193,15 @@ public class StatisticsProt {
                                Row<String, String, String> row = rowsIterator.next();
                                last_key = row.getKey();
                                List<HColumn<String, String>> clms = row.getColumnSlice().getColumns();
-                               int npred = 0;
-                               for (HColumn<String, String> cln : clms) {
-                                       String name = cln.getName();
-                                       if (name.matches("(.*)jnetpred")) {
-                                               ++npred;
-                                       }
-                               }
-                               if (npred >= counter) {
+                               //int npred = 0;
+                               //for (HColumn<String, String> cln : clms) {
+                               //      String name = cln.getName();
+                               //      if (name.matches("(.*)jnetpred")) {
+                               //              ++npred;
+                               //      }
+                               //}
+                               int npred = clms.size();
+                               if (npred > counter) {
                                        DataBase db = new DataBase();
                                        db.setProt(last_key);
                                        db.setTotalId(npred);
@@ -204,14 +210,17 @@ public class StatisticsProt {
                        }
                        if (rows.getCount() < row_count)
                                break;
-               }
+               }*/
                return query;
        }
 
-       // query by a part of sequence
+       /* 
+        * query by a part of sequence
+        * */
        public List<DataBase> readPart(String protIn) {
                int row_count = 10000;
                query = new ArrayList<DataBase>();
+               /*
                RangeSlicesQuery<String, String, String> result = HFactory.createRangeSlicesQuery(cc.GetKeyspace(), StringSerializer.get(),
                                StringSerializer.get(), StringSerializer.get());
                result.setColumnFamily("ProteinRow");
@@ -256,10 +265,13 @@ public class StatisticsProt {
                        if (rows.getCount() < row_count)
                                break;
                }
+               */
                return query;
        }
 
-       // convert String to Date
+       /* 
+        * convert String date into long date (miliseconds since the epoch start)
+        */
        private static long DateParsing(String datInput) {
                if (datInput == null) {
                        return 0;
@@ -274,7 +286,9 @@ public class StatisticsProt {
                return dateWorkSt;
        }
 
-       // convert String to Date
+       /*
+        * convert String date:time into long date:time (miliseconds since the epoch start)
+        */
        private static long TimeConvert(String datInput) {
                long dateWorkSt = 0;
                if (datInput == null) {
@@ -297,9 +311,7 @@ public class StatisticsProt {
        }
 
        /*
-        * private static String DateFormat1(long inDate) { SimpleDateFormat
-        * datformat = new SimpleDateFormat("yyyy/MM/dd:hh:mm:ss"); String
-        * dateString = datformat.format(new Date(inDate)); return dateString; }
+        * convert ???
         */
        public static String DateFormatYYMMDD(long indate) {
                SimpleDateFormat datformat = new SimpleDateFormat("yyyy/MM/dd");
@@ -307,7 +319,11 @@ public class StatisticsProt {
                return dateString;
        }
 
+       /*
+        * ???
+        */
        public long CountID(String id) {
+               /*
                SliceQuery<String, String, String> sliceQuery = HFactory.createSliceQuery(cc.GetKeyspace(), StringSerializer.get(),
                                StringSerializer.get(), StringSerializer.get());
                sliceQuery.setColumnFamily("ProteinLog").setKey(id).setRange("", "", false, 100);
@@ -318,8 +334,15 @@ public class StatisticsProt {
                long datBeginLong = TimeConvert(datBegin);
                long datEndLong = TimeConvert(datEnd);
                return (datEndLong - datBeginLong) / 1000;
+               */
+               return 0;
        }
 
+       /*
+        * set earlest date and current dates. 
+        * earlestDate is static and should be set at the 1st call
+        * currentDate should be re-calculated every time
+        */
        private static void SetDateRange() {
                if (0 == earlestDate) {
                        StatisticsProt sp = new StatisticsProt();
@@ -347,10 +370,13 @@ public class StatisticsProt {
                return true;
        }
 
-       // find the earliest date
+       /*
+        * find the earliest date in the database
+        */
        public long earliestDate() {
                ArrayList<Long> dateSort = new ArrayList<Long>();
                int row_count = 10000;
+               /*
                RangeSlicesQuery<Long, String, String> result = HFactory.createRangeSlicesQuery(cc.GetKeyspace(), LongSerializer.get(),
                                StringSerializer.get(), StringSerializer.get());
                result.setColumnFamily("ProteinData");
@@ -369,7 +395,7 @@ public class StatisticsProt {
                        }
                        if (rows.getCount() < row_count)
                                break;
-               }
+               }*/
                Collections.sort(dateSort);
                return dateSort.get(0);
        }