package gr.ntua.ivml.mint.db; import gr.ntua.ivml.mint.persistent.Organization; import gr.ntua.ivml.mint.persistent.XmlObject; import java.util.Collections; import java.util.HashMap; import java.util.List; public class OrganizationDAO extends DAO<Organization, Long> { private HashMap<Long, Long> xmlToOrgId = new HashMap<Long,Long>(); public List<Organization> findPrimary() { List<Organization> result = Collections.emptyList(); try { result = getSession().createQuery(" from Organization where parentalOrganization is null" ).list(); } catch( Exception e ) { log.error( "Problems: ", e ); } return result; } public Organization findByName( String name ) { Organization result = null; try { result = (Organization) getSession() .createQuery(" from Organization where shortName=:name" ) .setString("name", name ) .uniqueResult(); } catch( Exception e ) { log.error( "Problems: ", e ); } return result; } /** * Which organization owns the XmlObject. Tricky, it can be in many places ... * @param xo * @return */ public Organization findByXmlObject( XmlObject xo ) { Organization org = null; if( xmlToOrgId.containsKey(xo.getDbID())) { org = getById( xmlToOrgId.get( xo.getDbID()), false ); } else { org = (Organization) getSession() .createQuery( "select du.organization from DataUpload du where du.xmlObject=:xo" ) .setEntity("xo", xo) .uniqueResult(); if( org == null ) { org = (Organization) getSession() .createQuery( "select tr.dataUpload.organization from Transformation tr join tr.dataUpload where tr.parsedOutput=:xo" ) .setEntity("xo", xo) .uniqueResult(); } if( org != null ) xmlToOrgId.put( xo.getDbID(), org.getDbID()); } return org; } public List<Organization> findByCountry( String country ) { List<Organization> result = null; result = getSession() .createQuery("from Organization where country=:country " +" order by englishName" ) .setString("country", country ) .list(); return result; } public List<Organization> findAll() { List<Organization> result = null; result = getSession() .createQuery("from Organization " +" order by englishName" ) .list(); return result; } }