package org.genedb.querying.tmpquery;
import org.genedb.db.taxon.TaxonNode;
import org.genedb.querying.core.QueryClass;
import org.genedb.querying.core.QueryParam;
import org.apache.lucene.index.Term;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.search.PhraseQuery;
import org.apache.lucene.search.TermQuery;
import org.apache.lucene.search.WildcardQuery;
import org.apache.lucene.search.BooleanClause.Occur;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@QueryClass(
title="Coding and pseudogenes by protein length",
shortDesc="Get a list of transcripts ",
longDesc=""
)
public class GoQuery extends OrganismLuceneQuery {
@QueryParam(
order=1,
title="The search string"
)
private String search = "";
@Override
public String getQueryDescription() {
return "Search for GO terms.";
}
@Override
protected String getluceneIndexName() {
return "org.gmod.schema.mapped.Feature";
}
@Override
public String getQueryName() {
return "GO";
}
@Override
protected void getQueryTermsWithoutOrganisms(List<org.apache.lucene.search.Query> queries) {
String tokens[] = search.trim().split("\\s");
BooleanQuery bq = new BooleanQuery();
if (tokens.length > 1) {
PhraseQuery pq = new PhraseQuery();
for (String token : tokens) {
pq.add(new Term("go", token));
}
bq.add(pq, Occur.SHOULD);
} else {
String searchTerm = search.toLowerCase();
//Strip out the go
if (searchTerm!= null && searchTerm.startsWith("go:")){
searchTerm = searchTerm.substring(3);
}
if (search.indexOf('*') == -1) {
bq.add(new TermQuery(new Term("go",searchTerm)), Occur.SHOULD);
} else {
bq.add(new WildcardQuery(new Term("go", searchTerm)), Occur.SHOULD);
}
}
queries.add(bq);
}
// ------ Autogenerated code below here
public void setSearch(String search) {
this.search = search;
}
public String getSearch() {
return search;
}
@Override
protected String[] getParamNames() {
return new String[] {"search"};
}
// @Override
// public Map<String, Object> prepareModelData() {
// List<String> taxonNames = new ArrayList<String>();
// for (TaxonNode t : taxons.getNodes()) {
// taxonNames.add(t.getLabel());
// }
// Map<String, Object> m = new HashMap<String,Object>();
// m.put("taxonNames", taxonNames);
// return Collections.emptyMap();
// }
}