package org.genedb.querying.tmpquery;
import org.genedb.querying.core.LuceneQuery;
import org.genedb.querying.core.QueryException;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.BooleanClause.Occur;
import org.springframework.validation.Errors;
import java.util.ArrayList;
import java.util.List;
public class IdsToGeneDetailQuery extends LuceneQuery {
private List<String> ids;
@Override
public String getQueryDescription() {
return "Generates a basket entry from a feature id.";
}
@Override
public String getQueryName() {
return "Ids2BasketEntry";
}
@Override
protected void extraValidation(Errors errors) {
// no validation....
}
@Override
protected String[] getParamNames() {
return new String[] {"ids"};
}
@Override
protected void getQueryTerms(List<Query> queries) {
BooleanQuery bq = new BooleanQuery();
for(String id : ids) {
bq.add(new TermQuery(new Term("uniqueName",id)), Occur.SHOULD);
}
queries.add(bq);
}
@Override
protected String getluceneIndexName() {
return "org.gmod.schema.mapped.Feature";
}
public List<String> getIds() {
return ids;
}
public void setIds(List<String> ids) {
this.ids = ids;
}
protected Pager<GeneDetail> geneDetailPager = new Pager<GeneDetail>() {
@Override public GeneDetail convert(Document document) {
String location = document.get("start") + " - " + document.get("stop");
int strand = Integer.parseInt(document.get("strand"));
if (strand < 0) {
location += " (reverse strand)";
}
List<String> synonyms = new ArrayList<String>();
for (Field field : document.getFields("synonym")) {
synonyms.add(field.stringValue());
}
GeneDetail ret = new GeneDetail(
document.get("uniqueName"),
document.get("organism.commonName"),
document.get("product"),
document.get("chr"),
location,
synonyms,
document.get("type.name"),
document.get("featureId"),
document.get("name")
);
return ret;
}
};
public List<GeneDetail> getGeneDetails(int page, int length) throws QueryException {
return geneDetailPager.getResults(page, length);
}
}