/* IBatisDAO /* IBatisDAO * * created: 2006 * * This file is part of Artemis * * Copyright (C) 2005 Genome Research Limited * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * */ package uk.ac.sanger.artemis.chado; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Hashtable; import java.util.Vector; import java.sql.*; import org.gmod.schema.sequence.Feature; import org.gmod.schema.sequence.FeatureCvTerm; import org.gmod.schema.sequence.FeatureCvTermDbXRef; import org.gmod.schema.sequence.FeatureCvTermProp; import org.gmod.schema.sequence.FeatureCvTermPub; import org.gmod.schema.sequence.FeatureDbXRef; import org.gmod.schema.sequence.FeatureProp; import org.gmod.schema.sequence.FeaturePub; import org.gmod.schema.sequence.Synonym; import org.gmod.schema.sequence.FeatureLoc; import org.gmod.schema.sequence.FeatureRelationship; import org.gmod.schema.sequence.FeatureSynonym; import org.gmod.schema.general.Db; import org.gmod.schema.general.DbXRef; import org.gmod.schema.organism.Organism; import org.gmod.schema.pub.Pub; import org.gmod.schema.pub.PubDbXRef; import org.gmod.schema.analysis.AnalysisFeature; import org.gmod.schema.cv.Cv; import org.gmod.schema.cv.CvTerm; import javax.sql.DataSource; import javax.swing.JPasswordField; /** * * iBATIS implemetation of the DAO data * access interface. * */ public class IBatisDAO extends GmodDAO { private static org.apache.log4j.Logger logger4j = org.apache.log4j.Logger.getLogger(IBatisDAO.class); private SqlMapClientWrapper sqlMap; private boolean featureCvTermRank = true; private boolean featureCvTermRankChecked = false; /** * Define a iBatis data access object. This uses DbSqlConfig * to read the configuration in. The system property chado * can be used to define the database location e.g. * -Dchado=host:port/database?user */ public IBatisDAO(final JPasswordField pfield) { SqlMapClientWrapper sqlMap = new SqlMapClientWrapper(pfield); this.sqlMap = sqlMap; /* DbSqlConfig sql_config = new DbSqlConfig(); sql_config.init(pfield); this.sqlMap = sql_config.getSqlMapInstance();*/ } public void close() throws SQLException { sqlMap.close(); } public DataSource getDataSource() throws SQLException { return sqlMap.getSqlMap().getDataSource(); } /** * Test to see if this is an old chado database version * without the feature_cvterm.rank column. * @return true if the feature_cvterm.rank column exists. */ private boolean isFeatureCvTermRank() { if(featureCvTermRankChecked) return featureCvTermRank; String schema = ArtemisUtils.getCurrentSchema(); // check column names List list = sqlMap.queryForList("getFeatureCvTermColumnsForASchema", schema); featureCvTermRank = false; for(int i=0; iFeature based on its uniquename and type_id */ public Feature getFeatureByUniqueName(String uniquename, String featureType) { org.gmod.schema.sequence.Feature feature = new org.gmod.schema.sequence.Feature(); feature.setUniqueName(uniquename); CvTerm cvTerm = new CvTerm(); cvTerm.setName(featureType); feature.setCvTerm(cvTerm); if(isFeatureCvTermRank()) return (Feature)sqlMap.queryForObject("getLazyFeatureExact", feature); else return (Feature)sqlMap.queryForObject("getLazyFeatureExactNoFeatureCvTermRank", feature); } /** * Return a list of features with any current (ie non-obsolete) name or synonym * @param name the lookup name * @return a (possibly empty) List of children with this current name */ public List getFeaturesByAnyCurrentName(String name) { final Synonym alias = new Synonym(); alias.setName(name); List feature_synonym_list = sqlMap.queryForList("getFeatureSynonymsByName", alias); Feature feature = new Feature(); feature.setUniqueName(name); feature.setFeatureSynonyms(feature_synonym_list); if(isFeatureCvTermRank()) return sqlMap.queryForList("getLazyFeature", feature); else return sqlMap.queryForList("getLazyFeatureNoFeatureCvTermRank", feature); } /** * Return a list of features with this name or synonym (including obsolete names) * * @param name the lookup name * @return a (possibly empty) List of children with this name */ public List getFeaturesByAnyName(String name, String featureType) { return null; } /** * Return a list of features located on a source Feature, within a given range * * @param min the minimum (interbase) coordinate * @param max the maximum (interbase) coordinate * @param strand * @param parent the source feature * @param type * @return a List which ??? this range */ public List getFeaturesByRange(int min, int max, int strand, Feature parent, String type) { Feature feature = new Feature(); FeatureLoc featureLoc = new FeatureLoc(); featureLoc.setFmin(new Integer(min)); featureLoc.setFmax(new Integer(max)); feature.setFeatureLoc(featureLoc); featureLoc.setFeatureBySrcFeatureId(parent); return sqlMap.queryForList("getFeature", feature); } /** * This can be used to get individual features or children. * If Feature.featureloc.srcfeature_id is set this is used * to return the children of that srcfeature_id. * @param feature the feature to query * @return the List of child Feature objects */ public List getFeaturesByLocatedOnFeature(final Feature feature) { if(isFeatureCvTermRank()) return sqlMap.queryForList("getFeature", feature); else return sqlMap.queryForList("getFeatureNoFeatureCvTermRank", feature); } /** * Return the FeatureCvTerm that links a given Feature and CvTerm, * with a given value of 'not' * * @param feature the Feature to test the link for * @param cvTerm the CvTerm to test the link for * @param not test for the not flag in the FeatureCvTerm * @return the Feature, or null */ public FeatureCvTerm getFeatureCvTermByFeatureAndCvTerm( Feature feature, CvTerm cvTerm, boolean not) { return null; } /** * Return a list of FeatureCvterm's for a Feature, or a list * of all FeatureCvTerm's if Feature is null. * @param feature the Feature to retrieve associated FeatureCvTerm's * @return the FeatureCvTerm's */ public List getFeatureCvTermsByFeature(Feature feature) { if(isFeatureCvTermRank()) return sqlMap.queryForList("getFeatureCvTermsByFeature", feature); else return sqlMap.queryForList("getFeatureCvTermsNoRankByFeature", feature); } /** * Return a synonym of the given name and type if it exists * @param name the name to lookup * @param type the type of the Synonym * @return a Synonym, or null */ public Synonym getSynonymByNameAndCvTerm( String name, CvTerm type) { Synonym synonym = new Synonym(); synonym.setName(name); synonym.setCvTerm(type); return (Synonym)sqlMap.queryForObject("getSynonymByNameAndType", synonym); } /** * Return a list of FeatureSynonyms which link a given Feature * and Synonym * @param feature the test Feature * @param synonym the test Synonym * @return a (possibly empty) List */ public List getFeatureSynonymsByFeatureAndSynonym( Feature feature, Synonym synonym) { return sqlMap.queryForList("getFeatureSynonymsByName", synonym); } public List getFeatureSynonymsBySrcFeature(final Feature srcFeature) { return sqlMap.queryForList("getFeatureSynonymsBySrcFeature", srcFeature); } public List getFeatureSynonymsByFeatureIds(final List featuresIds) { return sqlMap.queryForList("getFeatureSynonymsByFeatureIds", featuresIds); } /** * Return all the FeatureDbXRefs for a given feature, specified by name, or all if * null is passed * * @param uniqueName the uniquename of a Feature, or null for all FeatureDbXRefs * @return a (possibly empty) List */ public List getFeatureDbXRefsByFeatureUniquename(final String uniqueName) { Feature feature = new Feature(); feature.setUniqueName(uniqueName); return sqlMap.queryForList("getFeatureDbXRef", feature); } public List getFeatureDbXRefsBySrcFeature(final Feature srcFeature) { return sqlMap.queryForList("getFeatureDbXRefsBySrcFeature", srcFeature); } /** * Return the list of FeatureSynonyms for a given Feature, specified by name, or all if * null is passed * * @param uniqueName the uniquename of a Feature, or null for all * @return a (possibly empty) List of matching synonyms */ public List getFeatureSynonymsByFeatureUniquename(final String uniqueName) { Feature feature = new Feature(); feature.setUniqueName(uniqueName); return sqlMap.queryForList("getFeatureSynonymsByUniquename", feature); } public List getAllFeatureSynonymsAsFeature() { return sqlMap.queryForList("getAllFeatureSynonymsAsFeature", null); } /** * Return the list of Features for a given GO number * * * @param go the GO number * @return a (possibly empty) List of matching genes */ public List getFeatureByGO(final String go) { return null; } /** * Return a list of features contained in this organisms with this name or synonym (including obsolete names). The * name can contain an SQL wildcard (%) * * @param name the lookup name * @param featureType the type of feature to return eg "gene" * @param organisms the list of organisms * @return a (possibly empty) List of children with this name */ public List getFeaturesByAnyNameAndOrganism(String nl,List ids,String featureType) { return null; } /** * Return a list of features that have this particular cvterm * * * @param cvTermName the CvTerm name * @return a (possibly empty) List of children */ public List getFeaturesByCvTermName(String cvTermName) { return null; } /** * Return a list of top-level features * @return a (possibly empty) List of children */ public List getTopLevelFeatures() { return null; } /** * Get a list of all FeatureCvTermDbXRef's for a Feature, or a list * of all FeatureCvTermDbXRef's if Feature is null. * @param feature the Feature to retrieve associated FeatureCvTermDbXRef's * @return the FeatureCvTermDbXRef's */ public List getFeatureCvTermDbXRefByFeature(Feature feature) { return sqlMap.queryForList("getFeatureCvTermDbXRefByFeature", feature); } /** * Get a list of all FeatureCvTermDbXRef's for a Feature, or a list * of all FeatureCvTermDbXRef's if Feature is null. * @param feature the Feature to retrieve associated FeatureCvTermDbXRef's * @return the FeatureCvTermDbXRef's */ public List getFeatureCvTermDbXRefBySrcFeature(final Feature srcFeature) { return sqlMap.queryForList("getFeatureCvTermDbXRefBySrcFeature", srcFeature); } /** * Get a list of all FeatureCvTermPub's for a Feature, or a list * of all FeatureCvTermPub's if Feature is null. * @param feature the Feature to retrieve associated FeatureCvTermPub's * @return the FeatureCvTermPub's */ public List getFeatureCvTermPubByFeature(Feature feature) { return sqlMap.queryForList("getFeatureCvTermPubByFeature", feature); } /** * Get a list of all FeatureCvTermPub's for a Feature, or a list * of all FeatureCvTermPub's if Feature is null. * @param feature the Feature to retrieve associated FeatureCvTermPub's * @return the FeatureCvTermPub's */ public List getFeatureCvTermPubBySrcFeature(final Feature srcFeature) { return sqlMap.queryForList("getFeatureCvTermPubBySrcFeature", srcFeature); } public List getProducts() { return null; } ////// ////// SchemaDaoI ////// ////// /** * Return a list of chado features with residues * with residues. * @return the List of Feature objects */ public List getResidueFeatures() { CvTerm cvTerm = getCvTermByNameAndCvName("top_level_seq", "genedb_misc"); if(cvTerm != null) return sqlMap.queryForList("getTopLevelFeatures",null); else return sqlMap.queryForList("getResidueFeatures",null); } public List getOrganismsContainingSrcFeatures() { CvTerm cvTerm = getCvTermByNameAndCvName("populated", "genedb_misc"); if(cvTerm != null) return sqlMap.queryForList("getTopLevelOrganisms", null); else return sqlMap.queryForList("getOrganismsContainingSrcFeatures", null); } /** * * For a schema return the type_id's with residues. * @param schema schema/organism name or null * @return the List of type_id's as String * objects */ public List getResidueType(final String schema) { return sqlMap.queryForList("getResidueType", schema); } /** * * Get available schemas (as a List of String * objects). * @return the available schemas */ public List getSchema() { return sqlMap.queryForList("getSchema", null); } ////// ////// CvDaoI ////// ////// public List getAllCvs() { return sqlMap.queryForList("getAllCvs", null); } /** * Retrieve a named CvTerm from a given Cv * * @param cvTermName the name of the cvterm * @param cv the controlled vocabulary this cvterm is part of * @return a (possibly empty) list of matching cvterms */ public List getCvTermByNameInCv(String cvTermName, Cv cv) { CvTerm cvTerm = new CvTerm(); cvTerm.setName(cvTermName); cvTerm.setCv(cv); return sqlMap.queryForList("getCvterm", cvTerm); } /** * Get the full list of cvterm_id and name as a List of * CvTerm objects. * @return the full list of cvterm_id and name */ public List getCvTerms() { return sqlMap.queryForList("getCvterm", null); } /** * Retrieve a named CvTerm from a given Cv * * @param cvTermName the name of the cvterm * @param name the controlled vocabulary name this cvterm could be part of * @return a (possibly empty) cvterm */ public CvTerm getCvTermByNameAndCvName(String cvTermName, String name) { Cv cv = new Cv(); cv.setName(name); CvTerm cvTerm = new CvTerm(); cvTerm.setName(cvTermName); cvTerm.setCv(cv); return (CvTerm)sqlMap.queryForObject("getCvterm", cvTerm); } public CvTerm getCvTermById(final int cvTermId) { return (CvTerm)sqlMap.queryForObject("getCvtermByCvTermId", new Integer(cvTermId)); } ////// ////// OrganismDaoI ////// ////// public List getOrganisms() { return sqlMap.queryForList("getOrganism", null); } public Organism getOrganismByCommonName(String commonName) { Organism o = new Organism(); o.setCommonName(commonName); return (Organism)sqlMap.queryForObject("getOrganism", o); } ////// ////// PubDaoI ////// ////// /** * Get a list of all PubDbXRef's * @return list of PubDbXRef's */ public List getPubDbXRef() { return sqlMap.queryForList("getPubDbXRef", null); } // // Graph data public Graph getGraph(final Integer graphId) { //return (Graph) sqlMap.queryForObject("getGraph", graphId); return null; } public List getGraphs(final Integer featureId) { return sqlMap.queryForList("getGraphs", featureId); } public List getTableColumns(String tableName) { return sqlMap.queryForList("getTableColumns", tableName); } // // WRITE BACK // /** * Merge (update) an already persistent object back to the database (at the end of * the current transaction, or depending upon flush mode). This method is defined in * all the DAOs. It's recommended to call it through an appropriate one eg SequenceDaoI * for FeatureI * * @param o The object to merge */ public void merge(Object o) { if(o instanceof FeatureLoc) updateFeatureLoc((FeatureLoc)o); else if(o instanceof Feature) { /*Feature f = (Feature)o; if(f.getSeqLen() > 0 && f.getCvTerm().getName().equals("region")) { // insert sequence region sqlMap.insert("updateRegionSequence", o); } */ if(o instanceof FeatureForUpdatingResidues) { if(! ((FeatureForUpdatingResidues)o).isResidueUpdate() ) sqlMap.update("updateFeatureLocByChangingSequence", o); sqlMap.update("updateFeatureResidues", o); } else sqlMap.update("updateFeature", o); } else if(o instanceof FeatureProp) sqlMap.update("updateFeatureProp", o); else if(o instanceof FeatureRelationship) sqlMap.update("updateFeatureRelationshipsForSubjectId", o); else if(o instanceof FeatureCvTerm) sqlMap.update("updateFeatureCvTerm", o); } /** * Save the object to the database (at the end of the current transaction, * or depending upon flush mode). This method is defined in all the DAOs. * It's recommended to call it through an appropriate one eg SequenceDaoI * for FeatureI * @param o The object to store */ public void persist(Object o) { if(o instanceof FeatureProp) sqlMap.insert("insertFeatureProp", o); else if(o instanceof Feature) insertFeature((Feature)o); else if(o instanceof FeatureDbXRef) insertFeatureDbXRef((FeatureDbXRef)o); else if(o instanceof FeatureSynonym) insertFeatureAlias((FeatureSynonym)o); else if(o instanceof FeatureCvTerm) insertAllFeatureCvTerm((FeatureCvTerm)o); else if(o instanceof FeaturePub) insertFeaturePub((FeaturePub)o); else if(o instanceof FeatureRelationship) insertFeatureRelationship((FeatureRelationship)o); else if(o instanceof AnalysisFeature) insertAnalysisFeature((AnalysisFeature)o); else if(o instanceof CvTerm) insertCvTerm((CvTerm)o); } /** * Remove the object from the database (at the end of the current transaction, * or depending upon flush mode). This method is defined in all the DAOs. * It's recommended to call it through an appropriate one eg SequenceDaoI for * FeatureI * @param o The object to delete */ public void delete(Object o) { if(o instanceof Feature) sqlMap.delete("deleteFeature", o); else if(o instanceof FeatureProp) sqlMap.delete("deleteFeatureProp", o); else if(o instanceof FeatureDbXRef) sqlMap.delete("deleteFeatureDbXRef", o); else if(o instanceof FeatureSynonym) deleteFeatureSynonym((FeatureSynonym)o); else if(o instanceof FeatureCvTerm) sqlMap.delete("deleteFeatureCvTerm", o); else if(o instanceof FeaturePub) sqlMap.delete("deleteFeaturePub", o); else if(o instanceof FeatureRelationship) sqlMap.delete("deleteFeatureRelationship", o); else if(o instanceof AnalysisFeature) deleteAnalysisFeature((AnalysisFeature)o); } /** * Update a featureLoc. This checks if there are multiple featureLocs * associated with this feature and will update all of them. * @param featureLoc */ private void updateFeatureLoc(FeatureLoc featureLoc) { List featureLocs = sqlMap.queryForList("getFeatureLoc", featureLoc.getFeatureByFeatureId().getFeatureId()); if(featureLocs.size() > 1) { // the feature appears to have multiple featureLocs int srcFeatureId = featureLoc.getFeatureBySrcFeatureId().getFeatureId(); int newFmin = featureLoc.getFmin(); int newFmax = featureLoc.getFmax(); int diffFmin = 0; int diffFmax = 0; for(int i=0; iFeature. * @param feature the feature to insert */ private void insertFeature (final Feature feature) { final Organism organism; if(feature.getFeatureId() > 0 || feature.getFeatureLoc() != null) { Integer organism_id = (Integer)sqlMap.queryForObject( "getOrganismIdBySrcFeatureIdOrFeatureId", feature); organism = new Organism(); organism.setOrganismId(organism_id.intValue()); } else organism = (Organism)sqlMap.queryForObject("getOrganism", feature.getOrganism()); feature.setOrganism(organism); // // insert feature into feature table sqlMap.insert("insertFeature", feature); // // get the current feature_id sequence value int feature_id = ((Integer)sqlMap.queryForObject("currval", "feature_feature_id_seq")).intValue(); // // insert feature location into featureloc if(feature.getFeatureLoc() != null) { feature.setFeatureId(feature_id); FeatureLoc featureLoc = feature.getFeatureLoc(); featureLoc.setFeatureByFeatureId(feature); sqlMap.insert("insertFeatureLoc", featureLoc); } // insert feature relationships if(feature.getFeatureRelationshipsForSubjectId() != null) { List parents = new Vector( feature.getFeatureRelationshipsForSubjectId()); for(int i=0; iFeatureDbXRef */ private void insertFeatureDbXRef(final FeatureDbXRef feature_dbxref) { DbXRef dbXRef = loadDbXRef(feature_dbxref.getDbXRef()); feature_dbxref.setDbXRef(dbXRef); // get the feature id's List features = getFeaturesByUniqueName( feature_dbxref.getFeature().getUniqueName()); feature_dbxref.getFeature().setFeatureId( ((Feature)features.get(0)).getFeatureId() ); sqlMap.insert("insertFeatureDbXRef", feature_dbxref); } /** * Insert analysis_feature, match feature and associated query and subject features * @param analysisFeature */ private void insertAnalysisFeature(AnalysisFeature analysisFeature) { Feature matchFeature = analysisFeature.getFeature(); Feature queryFeature = null; Feature subjectFeature = null; FeatureLoc queryLoc = null; FeatureLoc subjectLoc = null; Collection featureLocs = matchFeature.getFeatureLocsForFeatureId(); Iterator it = featureLocs.iterator(); while(it.hasNext()) { FeatureLoc featureLoc = (FeatureLoc)it.next(); if(featureLoc.getFeatureBySrcFeatureId().getFeatureId() > 0 || featureLoc.getFeatureBySrcFeatureId().getFeatureId() == -1) { queryFeature = featureLoc.getFeatureBySrcFeatureId(); queryLoc = featureLoc; } else { subjectFeature = featureLoc.getFeatureBySrcFeatureId(); subjectLoc = featureLoc; } } if(queryFeature.getFeatureId() == -1) queryFeature = (Feature)getFeaturesByUniqueName(queryFeature.getUniqueName()).get(0); Integer organism_id = (Integer)sqlMap.queryForObject( "getOrganismIdBySrcFeatureIdOrFeatureId", queryFeature); Organism organism = new Organism(); organism.setOrganismId(organism_id.intValue()); matchFeature.setOrganism(organism); subjectFeature.setOrganism(organism); // insert match feature int value = 1; List matches = getFeaturesByUniqueName(matchFeature.getUniqueName()+"_%"); for(int i=0; i= value ) value = Integer.parseInt(name)+1; } matchFeature.setUniqueName( matchFeature.getUniqueName()+"_"+value); sqlMap.insert("insertFeature", matchFeature); int matchFeatureId = ((Integer)sqlMap.queryForObject("currval", "feature_feature_id_seq")).intValue(); matchFeature.setFeatureId(matchFeatureId); // insert primary dbXRef DbXRef primaryDbXRef = subjectFeature.getDbXRef(); primaryDbXRef = loadDbXRef(primaryDbXRef); subjectFeature.setDbXRef(primaryDbXRef); // insert subject feature Feature f = getFeatureByUniqueName(subjectFeature.getUniqueName(), subjectFeature.getCvTerm().getName()); if(f != null) subjectFeature.setFeatureId(f.getFeatureId()); else { sqlMap.insert("insertFeature", subjectFeature); int subjectFeatureId = ((Integer)sqlMap.queryForObject("currval", "feature_feature_id_seq")).intValue(); subjectFeature.setFeatureId(subjectFeatureId); } // insert match featureLocs queryLoc.setFeatureBySrcFeatureId(queryFeature); queryLoc.setFeatureByFeatureId(matchFeature); sqlMap.insert("insertFeatureLoc", queryLoc); subjectLoc.setFeatureBySrcFeatureId(subjectFeature); subjectLoc.setFeatureByFeatureId(matchFeature); sqlMap.insert("insertFeatureLoc", subjectLoc); // insert analysis Integer analysisId = (Integer) sqlMap.insert("insertAnalysis", analysisFeature.getAnalysis()); analysisFeature.getAnalysis().setAnalysisId(analysisId.intValue()); // insert analysis feature matchFeature.setFeatureId(matchFeatureId); analysisFeature.setFeature(matchFeature); sqlMap.insert("insertAnalysisFeature", analysisFeature); // if subject feature not inserted add dbXRefs and featureProps if(f == null) { // insert dbXRefs Collection featureCvTermDbXRefs = subjectFeature.getFeatureDbXRefs(); if(featureCvTermDbXRefs != null) { it = featureCvTermDbXRefs.iterator(); while(it.hasNext()) insertFeatureDbXRef((FeatureDbXRef) it.next()); } // insert subject featureprops Collection featureProps = subjectFeature.getFeatureProps(); if(featureProps != null) { it = featureProps.iterator(); while(it.hasNext()) { FeatureProp featureProp = (FeatureProp) it.next(); featureProp.setFeature(subjectFeature); sqlMap.insert("insertFeatureProp", featureProp); } } } // insert match featureprops Collection featureProps = matchFeature.getFeatureProps(); if(featureProps != null) { it = featureProps.iterator(); while(it.hasNext()) { FeatureProp featureProp = (FeatureProp) it.next(); featureProp.setFeature(matchFeature); sqlMap.insert("insertFeatureProp", featureProp); } } } /** * Insert a cvterm */ private void insertCvTerm(final CvTerm cvTerm) { Cv cv = (Cv)sqlMap.queryForObject("getCvByName", cvTerm.getCv().getName()); cvTerm.setCv(cv); DbXRef dbXRef = cvTerm.getDbXRef(); dbXRef = loadDbXRef(dbXRef); cvTerm.setDbXRef(dbXRef); sqlMap.insert("insertCvTerm", cvTerm); } /** * Insert a feature_synonym for a feature. * @param feature_synonym the FeatureSynonym */ private void insertFeatureAlias(final FeatureSynonym feature_synonym) { Object synonym = sqlMap.queryForObject("getSynonymByNameAndType", feature_synonym.getSynonym()); if(synonym == null) { logger4j.debug("synonym "+feature_synonym.getSynonym()+" needs inserting"); // create a new synonym name sqlMap.insert("insertAlias", feature_synonym); synonym = sqlMap.queryForObject("getSynonymByNameAndType", feature_synonym.getSynonym()); } feature_synonym.setSynonym((Synonym)synonym); sqlMap.insert("insertFeatureAlias", feature_synonym); } protected void insertFeatureCvTerm(final FeatureCvTerm feature_cvterm) { sqlMap.insert("insertFeatureCvTerm", feature_cvterm); } protected int getCurrval(String seq_id) { return ((Integer)sqlMap.queryForObject("currval", seq_id)).intValue(); } protected void insertFeatureCvTermProp(FeatureCvTermProp featureCvTermProp) { sqlMap.insert("insertFeatureCvTermProp", featureCvTermProp); } protected void insertFeatureCvTermPub(FeatureCvTermPub featureCvTermPub) { sqlMap.insert("insertFeatureCvTermPub", featureCvTermPub); } protected void insertFeatureCvTermDbXRef(FeatureCvTermDbXRef featureCvTermDbXRef) { sqlMap.insert("insertFeatureCvTermDbXRef", featureCvTermDbXRef); } private void deleteAnalysisFeature(AnalysisFeature analysisFeature) { // Feature matchFeature = analysisFeature.getFeature(); List featureLocs = new Vector(matchFeature.getFeatureLocsForFeatureId()); Feature subjectFeature = null; Feature queryFeature = null; int nsubject = 0; int nquery = 0; for(int i=0; i 0 || featureLoc.getFeatureBySrcFeatureId().getFeatureId() == -1) { queryFeature = featureLoc.getFeatureBySrcFeatureId(); nquery = i; } else { subjectFeature = featureLoc.getFeatureBySrcFeatureId(); nsubject = i; } } if(queryFeature.getFeatureId() == -1) { Feature feat = (Feature)getFeaturesByUniqueName(queryFeature.getUniqueName()).get(0); queryFeature.setFeatureId(feat.getFeatureId()); ((FeatureLoc)featureLocs.get(nquery)).setFeatureBySrcFeatureId(queryFeature); } /* if(((FeatureLoc)featureLocs.get(0)).getFeatureBySrcFeatureId().getDbXRef() != null) { subjectFeature = ((FeatureLoc)featureLocs.get(0)).getFeatureBySrcFeatureId(); nsubject = 0; } else { subjectFeature = ((FeatureLoc)featureLocs.get(1)).getFeatureBySrcFeatureId(); nsubject = 1; } */ // look for SWALL: and UNIPROT: subjectFeature.setUniqueName( "%"+subjectFeature.getDbXRef().getAccession() ); List subjectFeatures = sqlMap.queryForList("getLazyFeature", subjectFeature); Integer matchFeatureId = null; for(int i=0; iFeatureSynonym */ private int deleteFeatureSynonym(FeatureSynonym feature_synonym) { List feature_synonym_list = sqlMap.queryForList("getFeatureSynonymsByName", feature_synonym.getSynonym()); feature_synonym.setSynonym( ((FeatureSynonym)feature_synonym_list.get(0)).getSynonym() ); // check this name is not used some where else, // i.e. in more than one row if(feature_synonym_list.size() > 1) return sqlMap.delete("deleteFeatureAlias", feature_synonym); else return sqlMap.delete("deleteAlias", feature_synonym); } protected Integer getDbId(Db db) { Integer dbId = (Integer)sqlMap.queryForObject("getDbId", db); if(dbId == null) { List dbIds = sqlMap.queryForList("getDbIdIgnoreCase", db); if(dbIds.size() > 0) dbId = (Integer)dbIds.get(0); } return dbId; } protected Integer getDbXRefId(DbXRef dbXRef) { return (Integer)sqlMap.queryForObject("getDbXRefId", dbXRef); } protected void insertDbXRef(DbXRef dbXRef) { sqlMap.insert("insertDbXRef", dbXRef); } protected Pub getPubByUniqueName(Pub pub) { return (Pub)sqlMap.queryForObject("getPubByUniqueName", pub); } protected void insertPub(Pub pub) { sqlMap.insert("insertPub", pub); } protected void insertPubDbXRef(PubDbXRef pubDbXRef) { sqlMap.insert("insertPubDbXRef", pubDbXRef); } public void startTransaction() throws SQLException { sqlMap.startTransaction(); } public void endTransaction() throws SQLException { sqlMap.endTransaction(); } public void commitTransaction() throws SQLException { sqlMap.commitTransaction(); } /** * Takes a list and creates a Hashtable with the keys * being the feature_id and the value a Vector of the dbxrefs. * @param list a List of DbXRef objects. * @return a Hashtable of dbxrefs. */ public static Hashtable> mergeDbXRef(final List list) { Hashtable> dbxrefHash = new Hashtable>(); for(FeatureDbXRef dbxref : list) { Integer feature_id = new Integer(dbxref.getFeature().getFeatureId()); String value = dbxref.getDbXRef().getDb().getName() + ":" + dbxref.getDbXRef().getAccession(); if(dbxrefHash.containsKey(feature_id)) { List v = dbxrefHash.get(feature_id); v.add(value); dbxrefHash.put(feature_id, v); } else { List v = new Vector(); v.add(value); dbxrefHash.put(feature_id, v); } } return dbxrefHash; } }