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; import org.springframework.web.bind.annotation.RequestMethod; 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 model) { model.put("value", "AAAAA"); return "queryProteinSequence"; } @RequestMapping(value = "/sequence/query2", method = RequestMethod.GET) public String formCounterQuery(Map model) { 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 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); if (0 < trimmedsequence.length()) { CassandraRequester cr = new CassandraRequester(); List r = cr.readProteins(trimmedsequence, flag); model.put("results", r); if (null != r) { if (flag.equals("whole")) model.put("njobs",r.get(0).getJobid().size()); else model.put("njobs", r.size()); } } final long endTime = System.currentTimeMillis(); model.put("timeExecution", (endTime - startTime)); return "reportProteinSequences"; } @RequestMapping(value = "/sequence/querycounter", method = RequestMethod.GET) public String countSequences(@RequestParam("counterJob") String counter, Map model) { final long startTime = System.currentTimeMillis(); if (counter.equals("")) { model.put("error", "The value must not be empty"); model.put("value", counter); return "queryIPStatistics"; } int realcounter; try { realcounter = Integer.parseInt(counter.trim()); } catch (NumberFormatException e) { model.put("error", "The value must be an integer number"); model.put("value", counter); return "queryIPStatistics"; } if (realcounter < 1) { model.put("error", "The value must be greater than 0"); model.put("value", counter); return "queryIPStatistics"; } CassandraRequester cr = new CassandraRequester(); List r = cr.readProteinByCounter(realcounter); model.put("results", r); model.put("njobs", 0); if (null != r) { model.put("njobs", r.size()); } final long endTime = System.currentTimeMillis(); model.put("timeExecution", (endTime - startTime)); model.put("counter", realcounter); return "reportProteinSequencesCounter"; } }