servletName = req.getContextPath()+"/"+req.getServletPath();
String response = "";
String action = req.getParameter("action");
try{
Terminology terminology = getTerminology(req.getParameter("term"));
if ( action == null ) {
response = "Unrecognized parameter";
}else if (action.equals("set_sources")){
String src = req.getParameter("src");
Source [] srcs = (src != null)?terminology.getSources(src):null;
terminology.setFilterSources(srcs);
}else if (action.equals("get_terminologies")){
response = processOutput(terminologyParams.keySet());
}else if ( action.equals("search")){
String text = req.getParameter("text");
//check if in fact we want to lookup concept
Object c = null;
if(text.matches("CL?\\d+") || text.startsWith("http://")){
c = terminology.lookupConcept(text.trim());
}else if("ROOT".equals(text)){
c = terminology.getRootConcepts();
}else{
c = terminology.search(text);
}
response = processOutput(c);
}else if ( action.equals("get_roots")){
response = processOutput(terminology.getRootConcepts());
}else if ( action.equals("lookup_concept")){
String text = req.getParameter("code");
Concept c = terminology.lookupConcept(text.trim());
response = processOutput(c);
}else if ( action.equals("get_sources")){
Source [] src = terminology.getSources();
response = processOutput(src);
}else if ( action.equals("get_related_concepts")){
String code = req.getParameter("code");
String rel = req.getParameter("relation");
Concept c = terminology.lookupConcept(code.trim());
/*
try{
code = URLDecoder.decode(code,"utf-8");
}catch(Exception ex){}
*/
// find relationship
if(c != null){
Relation r = Relation.BROADER; // default
rel = rel.toLowerCase();
Relation [] rs = c.getRelations();
for(int i=0;i<rs.length;i++){
if(rs[i].getName().toLowerCase().contains(rel) ||
rs[i].getCode().toLowerCase().contains(rel)){
r = rs[i];
break;
}
}
Concept [] cs = terminology.getRelatedConcepts(c, r);
response = processOutput(cs);
}else{
response = processOutput(new Concept [0]);
}
}else if ( action.equals("get_related_concept_map")){
String code = req.getParameter("code");
Concept c = terminology.lookupConcept(code);
// find relationship
Map cs = terminology.getRelatedConcepts(c);
response = processOutput(cs);
}
}catch(TerminologyException ex){
response = "Terminology Error: "+ex.getMessage();
ex.printStackTrace();