CLEiM
Cross Lingual Education in Medicine
 All Classes Namespaces Files Functions Variables
CallFBTre.java
Go to the documentation of this file.
00001 package com.uem.gsi.cleim.scl;
00002 
00003 import java.util.ArrayList;
00004 import java.util.List;
00005 
00006 import org.apache.commons.httpclient.HttpClient;
00007 import org.apache.commons.httpclient.methods.GetMethod;
00008 
00009 import com.freebase.api.Freebase;
00010 import com.freebase.json.JSON;
00011 import com.uem.gsi.cleim.util.Constants;
00012 
00013 import static com.freebase.json.JSON.o;
00014 import static com.freebase.json.JSON.a;
00015 
00016 public class CallFBTre {
00017         private String treatment;
00018         private JSON query;
00019         private JSON envelope;
00020         private int limit=10;
00021         private int page=0;
00022         private int count=0;
00023         private int totalpages=0;
00024         private List<String> lIDList;
00025         private List<String> lConcept;
00026         private List<String> lArticle;
00027         private List<String> lImage;
00028         private List<String> lFBUrl;
00029         //private List<String> lContra;
00030         private List<String> lSideEf;
00031         private List<String> lUsedTo;
00032         //private List<String> lTrials;
00033 
00034         public CallFBTre(String ptreatment) {
00035                 this.treatment=ptreatment;
00036                 this.query=o();
00037                 this.envelope=o();
00038                 lIDList = new ArrayList<String>();
00039                 lConcept = new ArrayList<String>();
00040         lArticle = new ArrayList<String>();
00041         lImage = new ArrayList<String>();
00042         lFBUrl = new ArrayList<String>();
00043         //lContra = new ArrayList<String>();
00044         lSideEf = new ArrayList<String>();
00045         lUsedTo = new ArrayList<String>();
00046         //lTrials = new ArrayList<String>();
00047   }
00048 
00049         private JSON doQuery(){
00050                 Freebase freebase = Freebase.getFreebase();
00051                 JSON mqlJsonResult = freebase.mqlread(this.query,this.envelope,null);
00052                 return mqlJsonResult;
00053         }
00054 
00055         public void queryFB(){
00056                 //Count
00057                 this.query = o(
00058                                 "type", "/medicine/medical_treatment", "name~=", "*"+this.treatment+"*", 
00059                                 "return" , "count"
00060                         );
00061                 JSON json=doQuery();
00062                 this.count=new Integer(json.get("result").toString());
00063                 totalpages=new Integer(count/limit);
00064                 
00065                 //Search Result
00066                 this.envelope=o("page", this.page,"cursor", true);
00067                 this.query = a(o(
00068                                 "type", "/medicine/medical_treatment", "name~=", "*"+this.treatment+"*", "id", null, "name", null, "limit", this.limit, "sort","name", 
00069                                 "/common/topic/article",a(o("guid", null, "limit", 1, "optional", true)),
00070                                 "/common/topic/image",a(o("id", null, "limit", 1, "optional", true)))
00071                 );
00072                 JSON jsontemp=doQuery();
00073                 json =jsontemp.get("result");
00074                 int size=json.array().size();
00075                 for (int i=0;i<size;i++){
00076                         String id=(String) json.get(i).get("id").value();
00077                         lIDList.add(id);
00078                         lConcept.add((String) json.get(i).get("name").value());
00079                         //get raw data if exists
00080                         lArticle.add(
00081                                 (json.get(i).get("/common/topic/article").array().size()>0)?
00082                                         doRawQuery("http://api.freebase.com/api/trans/raw/"+
00083                                         ((String)json.get(i).get("/common/topic/article").get(0).get("guid").value()).substring(1)):"");
00084                         lImage.add(
00085                                 (json.get(i).get("/common/topic/image").array().size()>0)?
00086                                         "http://api.freebase.com/api/trans/image_thumb"+
00087                                         json.get(i).get("/common/topic/image").get(0).get("id").value():
00088                                                 "");
00089                         lFBUrl.add(Constants.FREEBASE_VIEW+id);
00090                         //Semantic detail
00091                         queryFBDetail(id);
00092                         JSON jsonDetail=doQuery().get("result");
00093                         //Contraindications
00094                         /*String sContra="";
00095                         for (int k=0;k<jsonDetail.get("contraindications").array().size();k++){
00096                                 sContra+="<a href=\""+Constants.FREEBASE_VIEW+
00097                                 jsonDetail.get("contraindications").get(k).get("id").value()+
00098                                 "\" target=_blank>"+
00099                                 jsonDetail.get("contraindications").get(k).get("name").value()+
00100                                 "</a><br>\r\n";
00101                         }
00102                         lContra.add(sContra);
00103                         */
00104                         //Side Effects
00105                         String sSideEf="";
00106                         for (int k=0;k<jsonDetail.get("side_effects").array().size();k++){
00107                                 sSideEf+=(sSideEf.equals(""))?"":"<span> | </span>";
00108                                 sSideEf+="<a href=\"symptom.jsp?term="+
00109                                 jsonDetail.get("side_effects").get(k).get("name").value()+"\">"+
00110                                 jsonDetail.get("side_effects").get(k).get("name").value()+"</a>\r\n";
00111                         }
00112                         lSideEf.add(sSideEf);
00113                         //Used to treat
00114                         String sUsedTo="";
00115                         for (int k=0;k<jsonDetail.get("used_to_treat").array().size();k++){
00116                                 sUsedTo+=(sUsedTo.equals(""))?"":"<span> | </span>";
00117                                 sUsedTo+="<a href=\"disease.jsp?term="+
00118                                 jsonDetail.get("used_to_treat").get(k).get("name").value()+"\">"+
00119                                 jsonDetail.get("used_to_treat").get(k).get("name").value()+"</a>\r\n";
00120                         }
00121                         lUsedTo.add(sUsedTo);
00122                         //Trials
00123                         /*String sTrials="";
00124                         for (int k=0;k<jsonDetail.get("trials").array().size();k++){
00125                                 sTrials+="<a href=\""+Constants.FREEBASE_VIEW+
00126                                 jsonDetail.get("trials").get(k).get("id").value()+
00127                                 "\" target=_blank>"+
00128                                 jsonDetail.get("trials").get(k).get("name").value()+
00129                                 "</a><br>\r\n";
00130                         }
00131                         lTrials.add(sTrials);
00132                         */
00133                         
00134                 }
00135                 
00136         }
00137         private void queryFBDetail(String pid){
00138                 this.query = o(
00139                                 "type", "/medicine/medical_treatment","id", pid,"name", null,
00140         "side_effects", a(o("id", null,"index", null,"name", null,"optional", true,"sort", "index","type", "/medicine/symptom")),
00141         "used_to_treat", a(o("id", null,"index", null,"name", null,"optional", true,"sort", "index","type", "/medicine/disease"))
00142                 );
00143         }
00144         private String doRawQuery(String url){
00145                 String sSource="";
00146                 try {
00147           HttpClient client = new HttpClient();
00148       GetMethod method=new GetMethod(url);
00149                         int statusCode = client.executeMethod(method);
00150                         if( statusCode != -1 ) {
00151                           sSource = method.getResponseBodyAsString();
00152                           method.releaseConnection();
00153                         }else{
00154                                 sSource+=statusCode;
00155                         }
00156     }
00157     catch( Exception e ) {
00158         sSource+=e.toString();
00159     }
00160                 return sSource;
00161         }
00162         public void setPage(int pPage){
00163                 this.page=pPage;
00164         }
00165         public int getCount(){
00166         return this.count;
00167   }
00168         public int getTotalPages(){
00169         return this.totalpages;
00170   }
00171         public List<String> getIDLists(){
00172         return this.lIDList;
00173   }
00174         public List<String> getConcepts(){
00175         return this.lConcept;
00176   }
00177   public List<String> getArticles(){
00178         return this.lArticle;
00179   }
00180   public List<String> getImages(){
00181         return this.lImage;
00182   }
00183   public List<String> getFBUrls(){
00184         return this.lFBUrl;
00185   }
00186   /*public List<String> getContras(){
00187         return this.lContra;
00188   }*/
00189   public List<String> getSideEf(){
00190         return this.lSideEf;
00191   }
00192   public List<String> getUsedTo(){
00193         return this.lUsedTo;
00194   }
00195   /*public List<String> getTrials(){
00196         return this.lTrials;
00197   }*/
00198   public static void main (String[] args){
00199                 CallFBTre h=new CallFBTre("chemotherapy");
00200                 h.setPage(0);
00201                 h.queryFB();
00202                 System.out.println(h.getCount());
00203                 for (int i=0;i<h.getIDLists().size();i++){
00204                         System.out.println("ID: "+h.getIDLists().get(i));
00205                         System.out.println("CONCEPT: "+h.getConcepts().get(i));
00206                         System.out.println("ARTICLE: "+h.getArticles().get(i));
00207                         System.out.println("IMAGE: "+h.getImages().get(i));
00208                         System.out.println("FREEBASE URL: "+h.getFBUrls().get(i));
00209                         //System.out.println("CONTRAINDICATIONS: "+h.getContras().get(i));
00210                         System.out.println("EFFECT OF: "+h.getSideEf().get(i));
00211                         System.out.println("USED TO: "+h.getUsedTo().get(i));
00212                         //System.out.println("TRIALS: "+h.getTrials().get(i));
00213                 }
00214         }
00215         
00216 }