package org.genedb.db.dao; import org.gmod.schema.mapped.Analysis; import org.gmod.schema.mapped.AnalysisFeature; import org.gmod.schema.mapped.CvTerm; import org.gmod.schema.mapped.Db; import org.gmod.schema.mapped.DbXRef; import org.gmod.schema.mapped.Feature; import org.gmod.schema.mapped.Synonym; import org.apache.log4j.Logger; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Transactional(readOnly = true) public class GeneralDao extends BaseDao { private static final Logger logger = Logger.getLogger(GeneralDao.class); private CvDao cvDao; public Db getDbByName(String name) { @SuppressWarnings("unchecked") List<Db> results = getSession().createQuery( "from Db db where upper(db.name)=:name") .setString("name", name.toUpperCase()) .list(); return firstFromList(results, "name", name); } public DbXRef getDbXRefByDbAndAcc(Db db, String accession) { @SuppressWarnings("unchecked") List<DbXRef> xrefs = getSession().createQuery( "from DbXRef dbXRef where dbXRef.db=:db and dbXRef.accession=:accession") .setParameter("db", db) .setString("accession", accession) .list(); return firstFromList(xrefs, "db", db, "accession", accession); } public Analysis getAnalysisByProgram(String program) { @SuppressWarnings("unchecked") List<Analysis> temp = getSession().createQuery("from Analysis where program=:program") .setString("program",program).list(); if (temp.size() > 0) { return temp.get(0); } return null; } public AnalysisFeature getAnalysisFeatureFromFeature(Feature feature) { @SuppressWarnings("unchecked") List<AnalysisFeature> results = getSession().createQuery("from AnalysisFeature where feature = :feature") .setParameter("feature", feature).list(); return firstFromList(results,"feature",feature); } public Synonym getSynonym(String synonymType, String synonymString) { @SuppressWarnings("unchecked") List<Synonym> synonyms = getSession().createQuery( "from Synonym where type.cv.name='genedb_synonym_type' and type.name=:type and name=:name") .setString("type", synonymType).setString("name", synonymString).list(); return super.firstFromList(synonyms, "type", synonymType, "name", synonymString); } public Synonym getSynonym(int synonymTypeId, String synonymString) { @SuppressWarnings("unchecked") List<Synonym> synonyms = getSession().createQuery( "from Synonym where type.cvTermId=:typeId and name=:name") .setInteger("typeId", synonymTypeId).setString("name", synonymString).list(); return firstFromList(synonyms, "typeId", synonymTypeId, "name", synonymString); } public Synonym getSynonym(CvTerm synonymType, String synonymString) { @SuppressWarnings("unchecked") List<Synonym> synonyms = getSession().createQuery( "from Synonym where type=:type and name=:name") .setParameter("type", synonymType).setString("name", synonymString).list(); return super.firstFromList(synonyms, "type", synonymType, "name", synonymString); } public Synonym getOrCreateSynonym(String synonymType, String synonymString) { logger.trace(String.format("Looking for synonym '%s' of type '%s'", synonymString, synonymType)); Synonym synonym = getSynonym(synonymType, synonymString); if (synonym != null) { logger.trace("Synonym found in database"); return synonym; } logger.trace("Creating new synonym"); CvTerm synonymTypeCvTerm = cvDao.getCvTermByNameAndCvName(synonymType, "genedb_synonym_type"); return new Synonym(synonymTypeCvTerm, synonymString, synonymString); } public Synonym getOrCreateSynonym(int synonymTypeId, String synonymString) { logger.trace(String.format("Looking for synonym '%s' of type %d", synonymString, synonymTypeId)); Synonym synonym = getSynonym(synonymTypeId, synonymString); if (synonym != null) { logger.trace("Synonym found in database"); return synonym; } logger.trace("Creating new synonym"); CvTerm synonymTypeCvTerm = cvDao.getCvTermById(synonymTypeId); return new Synonym(synonymTypeCvTerm, synonymString, synonymString); } public Synonym getOrCreateSynonym(CvTerm synonymType, String synonymString) { logger.trace(String.format("Looking for synonym '%s' of type '%s'", synonymString, synonymType.getName())); Synonym synonym = getSynonym(synonymType, synonymString); if (synonym != null) { logger.trace("Synonym found in database"); return synonym; } logger.trace("Creating new synonym"); return new Synonym(synonymType, synonymString, synonymString); } public List<Db> getAllDbs() { @SuppressWarnings("unchecked") List<Db> dbs = getSession().createQuery( "from Db") .list(); return dbs; } public List<String> getAllDbNames() { @SuppressWarnings("unchecked") List<String> names = getSession().createQuery( "select name from Db") .list(); return names; } public void setCvDao(CvDao cvDao) { this.cvDao = cvDao; } }