package compbio.controllers; import java.util.Map; 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.statistic.CassandraRequester; /** * Spring controller for protein secondary structure features. This version * works in the servlet style. * * @author Alexander Sherstnev * @author Natasha Sherstneva * * @since 0.5 * @version 1.0 December 2013 */ @Controller @RequestMapping("/features") public class SSFeaturesController extends BasicController { /** * form a query page for protein secondary structure feaatures: Proteins * with given fraction of H/E (helix/beta sheets) * * @param model * MVC model object * * @return link to the report JSP page */ @RequestMapping(value = "query", method = RequestMethod.GET) public String formCounterQuery(Map model) { model.put("username", getPrincipalName()); model.put("type", 'E'); model.put("value", 50); return "query/SSFeatures"; } /** * form a results page for protein secondary structure features: Proteins * with given fraction of H/E (helix/beta sheets) All proteins with E/H * higher than a given percent of the length are returned * * @param model * MVC model object * @param typeFeature * type of SS: H/E (helix/beta sheets) * @param percent * fraction of the protein length predicted as H/E (helix/beta * sheets) * * @return link to the report JSP page */ @RequestMapping(value = "results", method = RequestMethod.GET) public String countSequences(@RequestParam("TypeFeatures") String typeFeature, @RequestParam("Percent") String percent, Map model) { model.put("username", getPrincipalName()); final long startTime = System.currentTimeMillis(); if (percent.equals("")) { model.put("error", "The value must not be empty"); model.put("type", typeFeature); model.put("value", percent); return "query/SSFeatures"; } int realpercent; try { realpercent = Integer.parseInt(percent.trim()); } catch (NumberFormatException e) { model.put("error", "The value must be an integer number"); model.put("value", percent); return "query/SSFeatures"; } if (realpercent < 1) { model.put("error", "The value must be greater than 0"); model.put("value", percent); return "query/SSFeatures"; } if (realpercent > 100) { model.put("error", "The value must be less than 100"); model.put("value", percent); return "query/SSFeatures"; } CassandraRequester cr = new CassandraRequester(); Map r = cr.readProteinsPrediction(typeFeature, realpercent); model.put("results", r); model.put("njobs", 0); StringBuilder csvline = new StringBuilder(""); if (null != r) { model.put("njobs", r.size()); csvline.append("\'Prediction%20number\',\'Protein%20Sequence\', \'Secondary%20Structure%20Prediction\'%0A"); // form line for CSV file int counter = 1; for (Map.Entry entry : r.entrySet()) { csvline.append("\'" + counter + "\',\'" + entry.getKey() + "\',\'" + entry.getValue() + "\'%0A"); ++counter; } } model.put("csvfile", csvline.toString()); final long endTime = System.currentTimeMillis(); model.put("timeExecution", (endTime - startTime)); model.put("feature", typeFeature); model.put("percent", realpercent); return "reports/SSFeatures"; } }