package gr.ntua.ivml.mint.db;
import java.util.List;
import gr.ntua.ivml.mint.persistent.DataUpload;
import gr.ntua.ivml.mint.persistent.Organization;
import gr.ntua.ivml.mint.persistent.Thesaurus;
import gr.ntua.ivml.mint.persistent.ThesaurusAssignment;
import gr.ntua.ivml.mint.persistent.XMLNode;
import gr.ntua.ivml.mint.persistent.XpathHolder;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
public class ThesaurusDAO extends DAO<Thesaurus, Long> {
public static final Logger log = Logger.getLogger( ThesaurusDAO.class );
public List<Thesaurus> findByOrganization( Organization o) {
List<Thesaurus> l = getSession().createQuery( "from Thesaurus where organization = :org order by title ASC" )
.setEntity("org", o)
.list();
return l;
}
//Should try to optimize this...
public List<Thesaurus> findByRootOrganization( Organization o) {
Organization root = o;
while(root.getParentalOrganization() != null) {
root.getParentalOrganization();
}
List<Thesaurus> result;
return findByOrganizationAndDependants(root);
}
public List<Thesaurus> findByOrganizationAndDependants(Organization o) {
List<Thesaurus> result;
result = findByOrganization(o);
List<Organization> deps = o.getDependantRecursive();
for(Organization org: deps) {
result.addAll(findByOrganization(org));
}
return result;
}
public List findDistinctXpathsByThesaurusId(Thesaurus t) {
return getSession().createQuery("select distinct ta.xpath.xpath from ThesaurusAssignment ta where ta.thesaurus=:t")
.setEntity("t",t)
.list();
}
public boolean delete(Long id) {
Thesaurus ta = findById(id, false);
if(ta == null)
return false;
getSession().delete(ta);
return true;
}
}