package org.isatools.isacreator.ontologiser.logic.impl;
import org.apache.commons.httpclient.HostConfiguration;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.isatools.isacreator.configuration.Ontology;
import org.isatools.isacreator.ontologymanager.bioportal.io.AcceptedOntologies;
import org.isatools.isacreator.ontologymanager.bioportal.jsonresulthandlers.BioPortalAnnotatorResultHandler;
import org.isatools.isacreator.ontologymanager.bioportal.model.AnnotatorResult;
import uk.ac.ebi.utils.io.DownloadUtils;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/**
* Created by the ISA team
*
* @author Eamonn Maguire (eamonnmag@gmail.com)
* <p/>
* Date: 26/01/2011
* Time: 11:29
*/
public class AnnotatorSearchClient {
public static final String BASE_QUERY_URL = "http://data.bioontology.org/annotator";
public Map<String, Map<String, AnnotatorResult>> searchForTerms(Set<String> terms) {
return searchForTerms(terms, "", true);
}
public Map<String, Map<String, AnnotatorResult>> searchForTerms(Set<String> terms, String ontologiesToSearchOn, boolean wholeWordOnly) {
try {
String flattenedTerms = flattenSetToString(terms);
HttpClient client = new HttpClient();
PostMethod method = new PostMethod(BASE_QUERY_URL);
// Configure the form parameters
method.addParameter("wholeWordOnly", wholeWordOnly ? " true" : "false");
method.addParameter("ontologies", ontologiesToSearchOn);
method.addParameter("text", flattenedTerms);
method.addParameter("include", "prefLabel");
method.addParameter("apikey", "fd88ee35-6995-475d-b15a-85f1b9dd7a42");
try {
HostConfiguration configuration = new HostConfiguration();
configuration.setHost("http://data.bioontology.org");
configuration.setProxy(System.getProperty("http.proxyHost"), Integer.valueOf(System.getProperty("http.proxyPort")));
client.setHostConfiguration(configuration);
} catch (Exception e) {
System.err.println("Problem encountered setting proxy for annotator search");
}
int statusCode = client.executeMethod(method);
if (statusCode != -1) {
String contents = method.getResponseBodyAsString();
method.releaseConnection();
return processContent(contents, flattenedTerms, terms);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private Map<String, Map<String, AnnotatorResult>> processContent(String content, String originalText, Set<String> terms) {
BioPortalAnnotatorResultHandler handler = new BioPortalAnnotatorResultHandler();
return handler.getSearchResults(content, originalText, terms);
}
private String flattenSetToString(Set<String> terms) {
StringBuilder buffer = new StringBuilder();
for (String term : terms) {
buffer.append(term);
buffer.append(" ");
}
// return Substring to remove last comma
return buffer.toString();
}
}