/** * takes a query object and calls the appropriate sub component that answers the given query * * @param query the query that has to be answered * @return a string in the answer exchange format that will be sent to the frontend */ public static String handleQuery(Query query) { // interval search String answer; if (query.x_Search == null) { // check if necessary fields are given if (query.i_Start == -1 || query.i_End == -1) { // query.response_format = "Wrong interval given"; return "Wrong interval given"; } else if (query.s_Chromosome == -1) { // query.response_format = "No chromosome given"; return "No chromosome given"; } else if (query.s_Source == -1) { // query.response_format = "No source given"; return "No source given"; } // correct query format else { // Send query to IndexController // Translation from query to intervalst.query // needs to be unified /* short s_SourceNo=(short)0; if (query.source.equals("dbSNP")) { s_SourceNo = (short) 0; } if (query.source.equals("1000GenomesProject")){ s_SourceNo =(short) 1; } */ Query[] q_Query = {query}; QueryAnswer temp_answer = indexController.answerQuery(q_Query); answer = answerQuery(temp_answer); /* // byte temp = query.chromosome.get(); // byte[] b={temp}; //CRITICAL PART. change query format into intervallst.query . answerquery throws nullpointer byte[] b=new byte[0]; byte[] c=new byte[0]; int i=query.position[0]; int j=query.position[1]; IntervalST.Query intervalst_query=new IntervalST.Query(1,i,j,s_SourceNo,Integer.toString(query.chromosome).getBytes(),null,null); IntervalST.Query[] queries={intervalst_query}; IntervalST.Answer x_Result=indexController.answerQuery(queries); System.out.println("Length of AnswerList: "+x_Result.x_List.size()); if (query.hasDetail) { String sequence = Chromosome_reader.retrieve_sequence(i,j,Integer.toString(query.chromosome)); } return query; */ } } // gene name search else { // test for prefix query if (query.b_isPrefix) { /* // This needs to be replaced! String[] genenames = GeneTranslator.completeGeneName(query.search); */ String[] genenames = {"FOXP2", "FOXP4"}; JSONObject obj = new JSONObject(); obj.put("source", query.s_Source); obj.put("chromosome", query.s_Chromosome); JSONArray names = new JSONArray(); for (int i = 0; i < genenames.length; i++) { names.add(genenames[i]); } obj.put("prefix", names); StringWriter out = new StringWriter(); try { obj.writeJSONString(out); } catch (IOException e) { e.printStackTrace(); } answer = out.toString(); } else { if (query.x_Search == "getInitialSources") { System.out.println("getInitialSources"); return null; } else { String[] interval = GeneTranslator.translateToIntervall(query.x_Search); JSONObject pos_obj = new JSONObject(); JSONObject obj = new JSONObject(); pos_obj.put("from", Integer.valueOf(interval[0])); pos_obj.put("to", Integer.valueOf(interval[1])); obj.put("search", query.x_Search); obj.put("position", pos_obj); StringWriter out = new StringWriter(); try { obj.writeJSONString(out); } catch (IOException e) { e.printStackTrace(); } answer = out.toString(); } } } // queryID_pool.add(query.queryID); return answer; }