package org.genedb.query.custom;
import org.genedb.querying.core.Query;
import org.genedb.querying.core.QueryException;
import org.genedb.querying.core.NumericQueryVisibility;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.validation.Errors;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URLConnection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
public class GenesByURI implements Query {
private static final String NAME = "GenesByURI";
private URI uri;
private List<String> results = null;
public List<String> getResults() throws QueryException {
if (results != null) {
return results;
}
// Fetch from URI
BufferedReader br = null;
try {
URLConnection connection = uri.toURL().openConnection();
InputStream is = connection.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = br.readLine()) != null) {
results.add(line);
}
} catch (IOException exp) {
throw new QueryException(exp);
} finally {
IOUtils.closeQuietly(br);
}
return null;
}
public URI getUri() {
return uri;
}
@Required
public void setUri(URI uri) {
this.uri = uri.normalize();
}
public String getParseableDescription() {
// TODO Auto-generated method stub
return NAME + "{uri=\""+uri.toASCIIString()+"\"}";
}
public String[] prepareModelData(int count) {
return null;
}
@Override
public Map<String, Object> prepareModelData() {
return Collections.emptyMap();
}
public int getOrder() {
return 0;
}
public String getQueryDescription() {
return "Fetch IDs by URL";
}
@Override
public void validate(Object target, Errors errors) {
return;
}
@Override
public boolean supports(Class<?> clazz) {
return GenesByURI.class.isAssignableFrom(clazz);
}
@Override
public boolean isMaxResultsReached() {
// Not Implemented
return false;
}
@Override
public String getQueryName() {
return "Genes By URI";
}
}