package org.genedb.querying.tmpquery;
import org.genedb.db.taxon.TaxonNode;
import org.genedb.db.taxon.TaxonNodeList;
import org.genedb.querying.core.HqlQuery;
import org.genedb.querying.core.QueryClass;
import org.genedb.querying.core.QueryParam;
import org.springframework.util.StringUtils;
import org.springframework.validation.Errors;
import java.util.HashSet;
import java.util.Set;
@QueryClass(
title="Coding and pseudogenes by protein length",
shortDesc="Get a list of transcripts ",
longDesc=""
)
public abstract class OrganismHqlQuery extends HqlQuery implements TaxonQuery {
@QueryParam(
order=1,
title="Organism(s) to search"
)
protected TaxonNodeList taxons;
/*
* A filter to make sure only public organisms are searched.
*/
private final String publicSelector = " select op.organism from OrganismProp op where op.cvTerm.name = 'genedb_public' and op.value = 'yes' ";
private final String publicFilter = " and f.organism in ( "+ publicSelector +" ) ";
@Override
protected String getOrganismHql() {
if (taxons==null || taxons.getNodeCount()==0) {
return publicFilter ;
}
return publicFilter + " and f.organism.abbreviation in (:organismList) ";
}
public void setTaxons(TaxonNodeList taxons) {
this.taxons = taxons;
}
public TaxonNodeList getTaxons() {
return taxons;
}
@Override
protected String[] getParamNames() {
return new String[] {"taxons"};
}
@Override
protected void populateQueryWithParams(org.hibernate.Query query) {
if (taxons != null && taxons.getNodeCount() > 0) {
Set<String> names = new HashSet<String>();
for (TaxonNode node : taxons.getNodes()) {
names.addAll(node.getAllChildrenNames());
}
query.setParameterList("organismList", names);
//System.err.println(StringUtils.collectionToDelimitedString(names, " "));
}
}
protected String[] arrayAppend(String[] superParamNames, String[] thisQuery) {
String[] ret = new String[superParamNames.length+thisQuery.length];
System.arraycopy(superParamNames, 0, ret, 0, superParamNames.length);
System.arraycopy(thisQuery, 0, ret, superParamNames.length, thisQuery.length);
return ret;
}
@Override
protected void extraValidation(Errors errors) {
// Deliberately empty
}
}