Merge branch 'master' into servlets
authorSasha Sherstnev <a.sherstnev@dundee.ac.uk>
Thu, 19 Dec 2013 12:42:04 +0000 (12:42 +0000)
committerSasha Sherstnev <a.sherstnev@dundee.ac.uk>
Thu, 19 Dec 2013 12:42:04 +0000 (12:42 +0000)
Conflicts:
server/compbio/controllers/DailyStatisticsController.java
server/compbio/controllers/JobExecutionTimeController.java
server/compbio/controllers/SequenceController.java
server/compbio/listeners/ServletJobsByDate.java
server/compbio/listeners/ServletTimeExecution.java
server/compbio/statistic/CassandraRequester.java

1  2 
server/compbio/controllers/DailyStatisticsController.java
server/compbio/listeners/ServletJobsByDate.java
server/compbio/listeners/ServletTimeExecution.java
server/compbio/statistic/CassandraRequester.java

@@@ -4,7 -4,6 +4,6 @@@ import java.text.ParseException
  import java.text.SimpleDateFormat;
  import java.util.Calendar;
  import java.util.Date;
- import java.util.List;
  import java.util.Map;
  
  import org.springframework.stereotype.Controller;
@@@ -12,41 -11,69 +11,45 @@@ import org.springframework.web.bind.ann
  import org.springframework.web.bind.annotation.RequestMethod;
  import org.springframework.web.bind.annotation.RequestParam;
  
+ import compbio.engine.JobStatus;
 -import compbio.cassandra.CassandraReader;
  import compbio.cassandra.DateBean;
 -import compbio.cassandra.DateFormatter;
  import compbio.cassandra.TotalJobsStatisticBean;
  import compbio.statistic.CassandraRequester;
 -
++import compbio.statistic.StatisticsProt;
  
  /**
   * @author Alexander Sherstnev
   * @author Natasha Sherstneva
   */
  @Controller
- public class DailyStatisticsController {
+ public class DailyStatisticsController extends BasicController {
 -      Calendar cal = Calendar.getInstance();
 -      final SimpleDateFormat formaterDDMMYY = DateFormatter.getFormatDDMMYY();
 -      final SimpleDateFormat formaterYYMMDD = DateFormatter.getFormatYYMMDD();
 -      String theEaerlistDate = DateFormatter.DateLongToString(CassandraReader.earliestDate(), formaterYYMMDD);
 -      String theCurrentDate = cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DAY_OF_MONTH);
 -      
 +
-       @RequestMapping(value = "/stat", method = RequestMethod.GET)
+       @RequestMapping(value = "/stat/jobs/query", method = RequestMethod.GET)
        public String initFindForm(Map<String, Object> model) {
+               model.put("username", getPrincipalName());
 +              Calendar cal = Calendar.getInstance();
                String date2 = cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DATE);
                cal.add(Calendar.DATE, -3);
                String date1 = cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DATE);
 +
                model.put("date1", date1);
                model.put("date2", date2);
 +
-               return "queryJobStatistics";
+               return "query/JobStatistics";
        }
  
-       @RequestMapping(value = "/stat/query", method = RequestMethod.GET)
+       @RequestMapping(value = "/stat/jobsdaily/results", method = RequestMethod.GET)
        public String findJobsInPeriod(@RequestParam("date1") String date1, @RequestParam("date2") String date2,
                        @RequestParam("option") String option, Map<String, Object> model) {
+               model.put("username", getPrincipalName());
 -              final long startTime = System.currentTimeMillis();              
 +              final long startTime = System.currentTimeMillis();
 +
                CassandraRequester cr = new CassandraRequester();
                if (option.equals("AllDates,off")) {
 -                      date1 = theEaerlistDate;
 -                      date2 = theCurrentDate;
 -              }
 -      
 -              // dates in string format
 -              String trimmeddate1 = date1.replaceAll("\\s", "");
 -              String trimmeddate2 = date2.replaceAll("\\s", "");
 -              // dates in long format
 -              long longDate1 = DateFormatter.DateParsing(date1,formaterYYMMDD);
 -              long longDate2 = DateFormatter.DateParsing(date2, formaterYYMMDD);
 -              String error = DateChecking(trimmeddate1, trimmeddate2, longDate1, longDate2);
 -              if (error != null) {
 -                      model.put("error", error);
 -                      model.put("date1", date1);
 -                      model.put("date2", date2);
 -                      return "query/JobStatistics";
 +                      Calendar cal = Calendar.getInstance();
-                       date1 = cr.earliestDateString();
++                      date1 = StatisticsProt.DateFormatYYMMDD(cr.earliestDate());
 +                      date2 = cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DAY_OF_MONTH);
                }
 -
 -              if (longDate1 < CassandraReader.earliestDate())
 -                      longDate1 = CassandraReader.earliestDate();
 -              if (longDate2 > cal.getTimeInMillis())
 -                      longDate2 =  cal.getTimeInMillis();     
 -              
 -              date1 = DateFormatter.DateLongToString(longDate1, formaterYYMMDD);
 -              date2 = DateFormatter.DateLongToString(longDate2, formaterYYMMDD);
                model.put("date1", date1);
                model.put("date2", date2);
                TotalJobsStatisticBean res = cr.countJobs(date1, date2);
                return "/reportJobStatistics";
        }
  
-       @RequestMapping(value = "/stat/oneday", method = RequestMethod.GET)
-       public String findJobsInOneDay(@RequestParam("date") String date, Map<String, Object> model) throws ParseException {
+       @RequestMapping(value = "/stat/jobsoneday/results", method = RequestMethod.GET)
+       public String findJobsInOneDay(@RequestParam("date") String date, @RequestParam("status") String status, Map<String, Object> model)
+                       throws ParseException {
+               model.put("username", getPrincipalName());
                final long startTime = System.currentTimeMillis();
  
                String realdate;
 +              final SimpleDateFormat formaterDDMMYY = new SimpleDateFormat("dd/MM/yyyy");
 +              final SimpleDateFormat formaterYYMMDD = new SimpleDateFormat("yyyy/MM/dd");
                try {
                        long thetime = formaterYYMMDD.parse(date).getTime();
                        if (thetime < 0) {
                        realdate = date;
                }
  
+               if (null == JobStatus.getJobStatus(status)) {
+                       return "support/Notimplemented";
+               }
                CassandraRequester cr = new CassandraRequester();
                // IMPORTANT: input should be suppied in the format: DD/MM/YYYY
-               DateBean r = cr.readJobByDay(realdate);
+               DateBean r = cr.readJobByDay(realdate, JobStatus.getJobStatus(status));
                model.put("results", r);
                if (r != null)
                        model.put("njobs", r.getJobidAndSeq().size());
                model.put("date", realdate);
+               model.put("status", status);
                final long endTime = System.currentTimeMillis();
                model.put("timeExecution", (endTime - startTime));
                return "/reportJobStatisticsOneDay";
        }
 -      
 -      private String DateChecking(String trimmeddate1, String trimmeddate2, long longDate1, long longDate2) {
 -              
 -              if (trimmeddate1.equalsIgnoreCase("") || trimmeddate2.equalsIgnoreCase("")) 
 -                      return "The date cann't be empty";
 -              else if (!DateFormatter.isThisDateValid(trimmeddate1, formaterYYMMDD) || !DateFormatter.isThisDateValid(trimmeddate2, formaterYYMMDD)) 
 -                      return "The date format in invalid. Try format yyyy/mm/dd";
 -              else if (longDate2 < CassandraReader.earliestDate()) 
 -                      return "The date2 is after the earlestDate " + theEaerlistDate;
 -              else if (longDate1 > cal.getTimeInMillis())
 -                      return "The date1 is before the current date " + theCurrentDate;                        
 -              else if (longDate1 > longDate2)         
 -                      return "Wrong date's diaposon. The date1 is more than date2.";
 -              else                    
 -                      return null;
 -      }
  }
@@@ -1,7 -1,9 +1,7 @@@
  package compbio.listeners;
  
  import java.io.IOException;
 -import java.text.SimpleDateFormat;
  import java.util.Calendar;
 -import java.util.Date;
  import java.util.List;
  
  import javax.servlet.RequestDispatcher;
@@@ -11,7 -13,8 +11,9 @@@ import javax.servlet.http.HttpServlet
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
+ import compbio.cassandra.DataBase;
  import compbio.statistic.CassandraRequester;
++import compbio.statistic.StatisticsProt;
  
  @WebServlet("/ServletJobsByDate")
  public class ServletJobsByDate extends HttpServlet {
@@@ -28,7 -31,7 +30,7 @@@
                CassandraRequester cr = new CassandraRequester();
                if (null != request.getParameter("option")) {
                        Calendar cal = Calendar.getInstance();
-       //              date1 = StatisticsProt.DateFormatYYMMDD(cr.earliestDate());
 -                      date1 = DateFormatYYMMDD(cr.earliestDate());
++                      date1 = StatisticsProt.DateFormatYYMMDD(cr.earliestDate());
                        date2 = cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DAY_OF_MONTH);
                }
                request.setAttribute("data1", date1);
                doGet(request, response);
        }
  
 -      private String DateFormatYYMMDD(long indate) {
 -              SimpleDateFormat datformat = new SimpleDateFormat("yyyy/MM/dd");
 -              String dateString = datformat.format(new Date(indate));
 -              return dateString;
 -      }
 -      
  }
@@@ -1,7 -1,9 +1,7 @@@
  package compbio.listeners;
  
  import java.io.IOException;
 -import java.text.SimpleDateFormat;
  import java.util.Calendar;
 -import java.util.Date;
  
  import javax.servlet.RequestDispatcher;
  import javax.servlet.ServletException;
@@@ -10,6 -12,6 +10,7 @@@ import javax.servlet.http.HttpServlet
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
++import compbio.statistic.StatisticsProt;
  import compbio.statistic.CassandraRequester;
  
  /**
@@@ -30,12 -32,12 +31,12 @@@ public class ServletTimeExecution exten
                CassandraRequester sp = new CassandraRequester();
                if (null != request.getParameter("option")) {
                        Calendar cal = Calendar.getInstance();
-       //              date1 = CassandraRequester.DateFormatYYMMDD(sp.earliestDate());
 -                      date1 = DateFormatYYMMDD(sp.earliestDate());
++                      date1 = StatisticsProt.DateFormatYYMMDD(sp.earliestDate());
                        date2 = cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DAY_OF_MONTH);
                }
                request.setAttribute("data1", date1);
                request.setAttribute("data2", date2);
-       //      request.setAttribute("result", sp.extractExecutionTime(date1, date2));
+               request.setAttribute("result", sp.extractExecutionTime(date1, date2));
                request.setAttribute("flag", request.getParameter("option"));
                final long endTime = System.currentTimeMillis();
                request.setAttribute("timeExecution", (endTime - startTime));
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                doGet(request, response);
        }
 -
 -      private String DateFormatYYMMDD(long indate) {
 -              SimpleDateFormat datformat = new SimpleDateFormat("yyyy/MM/dd");
 -              String dateString = datformat.format(new Date(indate));
 -              return dateString;
 -      }
  }
@@@ -5,23 -5,26 +5,26 @@@ import java.text.SimpleDateFormat
  import java.util.ArrayList;
  import java.util.Calendar;
  import java.util.Date;
- import java.util.Iterator;
+ import java.util.HashMap;
  import java.util.List;
  import java.util.Map;
  
  import compbio.cassandra.DateBean;
  import compbio.cassandra.ProteinBean;
  import compbio.cassandra.CassandraNativeConnector;
 -import compbio.cassandra.CassandraReaderOld;
 +import compbio.cassandra.CassandraReader;
+ import compbio.cassandra.DataBase;
  import compbio.cassandra.Pair;
  import compbio.cassandra.JobBean;
  import compbio.cassandra.Total;
  import compbio.cassandra.TotalByCounterBean;
  import compbio.cassandra.TotalJobsStatisticBean;
  import compbio.cassandra.UserBean;
+ import compbio.engine.JobStatus;
  
  public class CassandraRequester {
 -      private CassandraReaderOld db = new CassandraReaderOld();
 +      private CassandraReader db = new CassandraReader();
+       private ArrayList<DataBase> query;
        private static long currentDate = 0;
        private static long earlestDate = 0;
        private final static SimpleDateFormat formatYYMMDD = new SimpleDateFormat("yyyy/MM/dd");
@@@ -29,7 -32,7 +32,7 @@@
  
        /*
         * query: execution time for the period from date1 till date2
-        
+        */
        public List<DataBase> extractExecutionTime(String date1, String date2) {
                if (null == date1) {
                        date1 = "1970/1/1";
                db.setTimeTotalExec(totalTime);
                query.add(db);
                return query;
- <<<<<<< HEAD
-       }*/
-       
+       }
        /*
         * query: total number of jobs for the period from date1 till date2
         */
        public TotalJobsStatisticBean countJobs(String date1, String date2) {
 -      /*      if (null == date1) {
 +              if (null == date1) {
                        date1 = "1970/1/1";
                }
                if (null == date2) {
                if (!isThisDateValid(date1, formatYYMMDD) || !isThisDateValid(date2, formatYYMMDD)) {
                        System.out.println("CassandraRequester.countJobs: wrong format for date1 " + date1 + "or date2 " + date2);
                        return null;
 -              }*/
 +              }
                SetDateRange();
                long dateStart = DateParsing(date1, formatYYMMDD);
                long dateEnd = DateParsing(date2, formatYYMMDD);
 -/*            if (dateEnd < earlestDate || dateStart > currentDate || dateStart > dateEnd)
 +              if (dateEnd < earlestDate || dateStart > currentDate || dateStart > dateEnd)
                        return null;
                if (dateStart < earlestDate)
                        dateStart = earlestDate;
                if (dateEnd > currentDate)
 -                      dateStart = currentDate;*/
 +                      dateStart = currentDate;
 +
                Calendar start = Calendar.getInstance();
                start.setTime(new Date(dateStart));
                Calendar end = Calendar.getInstance();
        /*
         * query: jobs and sequence at date
         */
-       public DateBean readJobByDay(String date) {
+       public DateBean readJobByDay(String date, JobStatus status) {
                if (!isThisDateValid(date, formatDDMMYY)) {
                        System.out.println("CassandraRequester.readJobByDay: Wrong date format for " + date);
                        return null;
                long day = DateParsing(date, formatDDMMYY);
                if (day < earlestDate || day > currentDate)
                        return null;
-               return db.ReadProteinData(day, date);
+               
+               if (status == JobStatus.OK) {
+                       return db.ReadProteinData(day, date);
+               }
+               return db.ReadFailedJobs(day, date, status);
        }
  
        /*
         * query: protein sequence
         */
-       public List<ProteinBean> readProteins(String protIn, String flag) {
+       public List<ProteinBean> readProteins(String protIn, String searchtype) {
                List<ProteinBean> result;
-               if (flag.equals("whole"))
+               if (searchtype.equals("whole"))
                        result = db.ReadWholeSequence(protIn);
                else
                        result = db.ReadPartOfSequence(protIn);
                if (result == null)
                        return null;
  
-               if (flag.equals("part")) {
+               if (searchtype.equals("partial")) {
                        for (ProteinBean entry : result) {
                                entry.setSubProt(CreateSubprot(entry.getSequence(), protIn));
                        }
                }
                return result;
        }
+       
+       /*
+        * query: protein feature
+        */
+       public Map<String, String> readProteinsPrediction(String feature, int percent) {
+               Map<String, String> result = db.ReadProtein();;
+               if (result == null)
+                       return null;
+               Map<String, String> query = new HashMap<String, String>();
+               for (Map.Entry<String, String> entry : result.entrySet()) {
+                       String pred = entry.getValue();                 
+                       if (pred.replaceAll("[^"+feature+"]", "").length() > pred.length() * percent / 100 && (!entry.getKey().equals(""))) {
+                       //      if (!entry.getKey().equals(""))
+                                       query.put(entry.getKey(), pred);
+                       }       
+               }
+               return query;
+       }
  
        /*
         * query protein sequences with number of jobs
                SimpleDateFormat datformat = new SimpleDateFormat("dd/MM/yyyy");
                return datformat.format(new Date(inDate));
        }
-       
-       // convert long to date in string format
-               private static String DateFormatYYMMDD(long inDate) {
-                       SimpleDateFormat datformat = new SimpleDateFormat("yyyy/MM/dd");
-                       return datformat.format(new Date(inDate));
-               }
  
        /*
         * set earlest date and current dates. earlestDate is static and should be
                earlestDate = CassandraNativeConnector.getEarliestDateInDB();
                return earlestDate;
        }
-       
-       /*
-        * find the earliest date in the database in String format
-        */
-       public String earliestDateString() {
-               earlestDate = CassandraNativeConnector.getEarliestDateInDB();
-               return DateFormatYYMMDD(earlestDate);
-       }
-       
  }