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