Merge branch 'servlets' of https://source.jalview.org/git/proteocache into servlets
authorNatasha Sherstneva <n.shertneva@gmail.com>
Thu, 5 Dec 2013 10:22:53 +0000 (10:22 +0000)
committerNatasha Sherstneva <n.shertneva@gmail.com>
Thu, 5 Dec 2013 10:22:53 +0000 (10:22 +0000)
Conflicts:
server/compbio/controllers/JobExecutionTimeController.java
server/compbio/controllers/SequenceController.java
server/compbio/statistic/CassandraRequester.java

1  2 
server/compbio/controllers/DailyStatisticsController.java
server/compbio/controllers/JobExecutionTimeController.java
server/compbio/controllers/SequenceController.java
server/compbio/statistic/CassandraRequester.java

@@@ -12,9 -12,11 +12,9 @@@ import org.springframework.web.bind.ann
  import org.springframework.web.bind.annotation.RequestMethod;
  import org.springframework.web.bind.annotation.RequestParam;
  
  import compbio.cassandra.DateBean;
  import compbio.cassandra.TotalJobsStatisticBean;
  import compbio.statistic.CassandraRequester;
 -import compbio.statistic.StatisticsProt;
  
  /**
   * @author Alexander Sherstnev
@@@ -32,7 -34,7 +32,7 @@@ public class DailyStatisticsController 
  
                model.put("date1", date1);
                model.put("date2", date2);
-               
                return "queryJobStatistics";
        }
  
                CassandraRequester cr = new CassandraRequester();
                if (option.equals("AllDates,off")) {
                        Calendar cal = Calendar.getInstance();
 -                      date1 = StatisticsProt.DateFormatYYMMDD(cr.earliestDate());
 +                      date1 = cr.earliestDateString();
                        date2 = cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DAY_OF_MONTH);
                }
                model.put("date1", date1);
                model.put("date2", date2);
                TotalJobsStatisticBean res = cr.countJobs(date1, date2);
                model.put("result", res);
+               model.put("ndays", res.getDateTotal().size());
                final long endTime = System.currentTimeMillis();
                model.put("timeExecution", (endTime - startTime));
                model.put("option", option);
                return "/reportJobStatistics";
        }
-       
        @RequestMapping(value = "/stat/oneday", method = RequestMethod.GET)
        public String findJobsInOneDay(@RequestParam("date") String date, Map<String, Object> model) throws ParseException {
                final long startTime = System.currentTimeMillis();
@@@ -1,6 -1,7 +1,7 @@@
  package compbio.controllers;
  
  import java.util.Calendar;
+ import java.util.List;
  import java.util.Map;
  
  import org.springframework.stereotype.Controller;
@@@ -8,8 -9,10 +9,8 @@@ import org.springframework.web.bind.ann
  import org.springframework.web.bind.annotation.RequestMethod;
  import org.springframework.web.bind.annotation.RequestParam;
  
- import compbio.statistic.CassandraRequester;
  
+ import compbio.statistic.CassandraRequester;
 -import compbio.cassandra.DataBase;
 -import compbio.statistic.StatisticsProt;
  
  /**
   * @author Alexander Sherstnev
@@@ -38,13 -41,15 +39,15 @@@ public class JobExecutionTimeControlle
                CassandraRequester sp = new CassandraRequester();
                if (option.equals("AllDates,off")) {
                        Calendar cal = Calendar.getInstance();
 -                      date1 = StatisticsProt.DateFormatYYMMDD(sp.earliestDate());
 -                      date2 = cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DAY_OF_MONTH);
 +//                    date1 = StatisticsProt.DateFormatYYMMDD(sp.earliestDate());
 +//                    date2 = cal.get(Calendar.YEAR) + "/" + (cal.get(Calendar.MONTH) + 1) + "/" + cal.get(Calendar.DAY_OF_MONTH);
                }
                model.put("date1", date1);
                model.put("date2", date2);
                model.put("option", option);
-       //      model.put("result", sp.extractExecutionTime(date1, date2));
 -              List<DataBase> res = sp.extractExecutionTime(date1, date2);
 -              model.put("result", res);
 -              model.put("ndays", res.size() - 1);
++//            List<DataBase> res = sp.extractExecutionTime(date1, date2);
++//            model.put("result", res);
++//            model.put("ndays", res.size() - 1);
                final long endTime = System.currentTimeMillis();
                model.put("timeExecution", (endTime - startTime));
                return "/reportTimeExecution";
@@@ -2,6 -2,7 +2,7 @@@ package compbio.controllers
  
  import java.util.List;
  import java.util.Map;
+ import java.util.regex.Pattern;
  
  import org.springframework.stereotype.Controller;
  import org.springframework.web.bind.annotation.RequestMapping;
@@@ -9,16 -10,29 +10,28 @@@ import org.springframework.web.bind.ann
  import org.springframework.web.bind.annotation.RequestParam;
  
  import compbio.cassandra.ProteinBean;
 -import compbio.cassandra.DataBase;
+ import compbio.data.sequence.SequenceUtil;
  import compbio.cassandra.TotalByCounterBean;
  import compbio.statistic.CassandraRequester;
  
  /**
+  * Spring controller for sequence search. This version works in the servlet
+  * style.
+  * 
   * @author Alexander Sherstnev
   * @author Natasha Sherstneva
+  * 
+  * @since 0.5
+  * @version 1.0 December 2013
   */
  @Controller
  public class SequenceController {
  
+       /**
+        * pattern for NON-protein alphabet symbols
+        */
+       private final Pattern NONPROTEIN = Pattern.compile("[^ARNDCQEGHILKMFPSTWYV]+", Pattern.CASE_INSENSITIVE);
        @RequestMapping(value = "/sequence/query1", method = RequestMethod.GET)
        public String formSequenceQuery(Map<String, Object> model) {
                model.put("value", "AAAAA");
                model.put("value", 5);
                return "queryProteinSequenceCounter";
        }
-       
        @RequestMapping(value = "/sequence/querysequence", method = RequestMethod.GET)
        public String findSequence(@RequestParam("sequence") String sequence, @RequestParam("protein") String flag, Map<String, Object> model) {
                final long startTime = System.currentTimeMillis();
  
+               // input checks
                String trimmedsequence = sequence.replaceAll("\\s", "");
+               if (trimmedsequence.equalsIgnoreCase("")) {
+                       model.put("error", "The sequence cann't be empty");
+                       model.put("value", sequence);
+                       return "queryProteinSequence";
+               }
+               if (NONPROTEIN.matcher(trimmedsequence).find()) {
+                       model.put("error", "The sequence contains symbols not from the standard protein alphabet");
+                       model.put("value", sequence);
+                       return "queryProteinSequence";
+               }
                model.put("njobs", 0);
                model.put("prot", trimmedsequence);
                model.put("flag", flag);
@@@ -46,7 -72,7 +71,7 @@@
                        model.put("results", r);
                        if (null != r) {
                                if (flag.equals("whole"))
-                                       model.put("njobs",r.get(0).getJobid().size());
+                                       model.put("njobs", r.get(0).getJobid().size());
                                else
                                        model.put("njobs", r.size());
                        }
@@@ -13,6 -13,7 +13,6 @@@ import compbio.cassandra.DateBean
  import compbio.cassandra.ProteinBean;
  import compbio.cassandra.CassandraNativeConnector;
  import compbio.cassandra.CassandraReader;
 -import compbio.cassandra.DataBase;
  import compbio.cassandra.Pair;
  import compbio.cassandra.JobBean;
  import compbio.cassandra.Total;
@@@ -22,6 -23,7 +22,6 @@@ import compbio.cassandra.UserBean
  
  public class CassandraRequester {
        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 -31,7 +29,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";
@@@ -37,7 -39,7 +37,7 @@@
                if (null == date2) {
                        date1 = "2100/1/1";
                }
-               if (!isThisDateValid(date1,formatYYMMDD) || !isThisDateValid(date2,formatYYMMDD)) {
+               if (!isThisDateValid(date1, formatYYMMDD) || !isThisDateValid(date2, formatYYMMDD)) {
                        System.out.println("CassandraRequester.extractExecutionTime: wrong format for date1 " + date1 + "or date2 " + date2);
                        return null;
                }
                db.setTimeTotalExec(totalTime);
                query.add(db);
                return query;
 -      }
 -
++<<<<<<< HEAD
 +      }*/
 +      
        /*
-        * query: total number of jobs  for the period from date1 till date2
+        * query: total number of jobs for the period from date1 till date2
         */
        public TotalJobsStatisticBean countJobs(String date1, String date2) {
                if (null == date1) {
                Calendar end = Calendar.getInstance();
                end.setTime(new Date(dateEnd));
                TotalJobsStatisticBean query = new TotalJobsStatisticBean();
-               Total wholeTotal = new Total(0,0,0,0,0);
+               Total wholeTotal = new Total(0, 0, 0, 0, 0);
                for (Date date = start.getTime(); !start.after(end); start.add(Calendar.DATE, 1), date = start.getTime()) {
                        Total res = db.ReadDateTable(date.getTime());
                        if (res == null)
        /*
         * query: jobs and sequence at date
         */
-       public DateBean readJobByDay (String date) {
+       public DateBean readJobByDay(String date) {
                if (!isThisDateValid(date, formatDDMMYY)) {
                        System.out.println("CassandraRequester.readJobByDay: Wrong date format for " + date);
                        return null;
                SetDateRange();
                long day = DateParsing(date, formatDDMMYY);
                if (day < earlestDate || day > currentDate)
-                       return null;    
+                       return null;
                return db.ReadProteinData(day, date);
        }
  
-       /* 
+       /*
         * query: protein sequence
-        **/
+        */
        public List<ProteinBean> readProteins(String protIn, String flag) {
                List<ProteinBean> result;
-               if (flag.equals("whole")) 
+               if (flag.equals("whole"))
                        result = db.ReadWholeSequence(protIn);
-                else 
-                        result = db.ReadPartOfSequence(protIn);
+               else
+                       result = db.ReadPartOfSequence(protIn);
                if (result == null)
                        return null;
-               
                if (flag.equals("part")) {
                        for (ProteinBean entry : result) {
                                entry.setSubProt(CreateSubprot(entry.getSequence(), protIn));
                        }
-               }                                       
+               }
                return result;
        }
-       
  
-       /* 
+       /*
         * query protein sequences with number of jobs
         */
-       public List<TotalByCounterBean> readProteinByCounter(int minimalcounter) {              
+       public List<TotalByCounterBean> readProteinByCounter(int minimalcounter) {
                List<TotalByCounterBean> query = new ArrayList<TotalByCounterBean>();
                Map<String, Integer> map = db.ReadProteinSequenceByCounter();
                if (map == null)
                }
                return query;
        }
-       
-       /* 
+       /*
         * query ip with number of jobs
         */
        public List<TotalByCounterBean> readIpByCounter(Integer minimalcounter) {
                }
                return query;
        }
        /*
         * query jobs log info
         */
                        return null;
                return db.ReadJobLog(jobid);
        }
-       
-       
        /*
         * query jobs by ipStructureJobLog
         */
                if (ip == null)
                        return null;
                Map<String, String[]> res = db.ReadIpWithJobs(ip);
-               if (res == null) 
+               if (res == null)
                        return null;
                UserBean query = new UserBean(ip);
                query.setMainInfo(res);
                return query;
        }
-       
        /*
         * create list of parts of protein sequence;
         */
-       private static List<String> CreateSubprot (String protein, String subprot) {
+       private static List<String> CreateSubprot(String protein, String subprot) {
                List<String> sub = new ArrayList<String>();
                String subStr = protein;
                while (subStr.length() > 0 && subStr.contains(subprot)) {
                        sub.add(subStr);
                return sub;
        }
        /*
         * convert String date into long date (miliseconds since the epoch start)
         */
                        return 0;
                }
                long dateWorkSt = 0;
-               
                try {
                        dateWorkSt = formatter.parse(datInput).getTime();
                } catch (ParseException e) {
                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
         */
        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), formatYYMMDD);
+               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();
                earlestDate = CassandraNativeConnector.getEarliestDateInDB();
                return earlestDate;
        }
 -
 +      
 +      /*
 +       * find the earliest date in the database in String format
 +       */
 +      public String earliestDateString() {
 +              earlestDate = CassandraNativeConnector.getEarliestDateInDB();
 +              return DateFormatYYMMDD(earlestDate);
 +      }
 +      
  }