package ve.usb.squinlib;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* @author Daniel Izquierdo
*/
public class SparqlQuerySock {
private final String queryServer;
private final static Logger logger = Logger.getLogger(SparqlQuerySock.class.getCanonicalName());
public SparqlQuerySock(final String queryServer) {
logger.setLevel(Level.FINE);
this.queryServer = queryServer;
}
public String call(final String query) throws MalformedURLException, IOException {
logger.log(Level.INFO, "SparqlQuerySock.call(...)");
Map<String, String> request_params = new HashMap<String, String>();
request_params.put("query", query);
logger.log(Level.FINE, "query server: " + queryServer);
logger.log(Level.FINE, "query: " + query);
String requestUrl = createQueryURLString(this.queryServer, request_params);
logger.log(Level.FINE, "request url: " + requestUrl);
URL url = new URL(requestUrl);
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
StringBuffer output = new StringBuffer();
String line;
while ((line = in.readLine()) != null) {
output.append(line);
}
return output.toString();
}
public static String createQueryURLString(String url, Map params) {
return url + '?' + createQueryString(params);
}
public static String createQueryString(Map params) {
StringBuffer queryString = new StringBuffer();
boolean first = true;
for (Object key : params.keySet()) {
if (first) {
first = false;
} else {
queryString.append('&');
}
try {
queryString.append(key.toString() + '=' + URLEncoder.encode(params.get(key).toString(), "UTF-8"));
} catch (UnsupportedEncodingException ex) {
/* realmente no deberÃa pasar */
Logger.getLogger(SparqlQuerySock.class.getName()).log(Level.SEVERE, null, ex);
}
}
return queryString.toString();
}
}