Update of /cvsroot/gmod/apollo/src/java/apollo/dataadapter/chado/jdbc In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv20268/apollo/dataadapter/chado/jdbc Modified Files: AbstractChadoInstance.java ChadoInstance.java JdbcChadoAdapter.java PureJDBCTransactionWriter.java Log Message: New option for the PureJDBCTransationWriter <pureJDBCUseCDS>true</pureJDBCUseCDS> in the chado-adapter.xml. By default this class uses the TIGR data model gene / mRNA / exon / polypeptide AND CDS. Set this option to false, to use only gene / mRNA / exon / polypeptide and not CDS. Index: AbstractChadoInstance.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/dataadapter/chado/jdbc/AbstractChadoInstance.java,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** AbstractChadoInstance.java 13 Apr 2007 09:47:58 -0000 1.36 --- AbstractChadoInstance.java 27 Nov 2007 13:42:34 -0000 1.37 *************** *** 49,52 **** --- 49,53 ---- private boolean pureJDBCCopyOnWrite = false; private boolean pureJDBCNoCommit = false; + private boolean pureJDBCUseCDS = true; // cv names *************** *** 148,151 **** --- 149,160 ---- return pureJDBCNoCommit; } + + public void setPureJDBCUseCDS(boolean useCDS) { + this.pureJDBCUseCDS = useCDS; + } + + public boolean getPureJDBCUseCDS() { + return pureJDBCUseCDS; + } public void setLogDirectory(String path) { Index: ChadoInstance.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/dataadapter/chado/jdbc/ChadoInstance.java,v retrieving revision 1.45 retrieving revision 1.46 diff -C2 -d -r1.45 -r1.46 *** ChadoInstance.java 13 Mar 2007 13:52:18 -0000 1.45 --- ChadoInstance.java 27 Nov 2007 13:42:34 -0000 1.46 *************** *** 445,448 **** --- 445,451 ---- public boolean getPureJDBCNoCommit(); + public void setPureJDBCUseCDS(boolean useCDS); + public boolean getPureJDBCUseCDS(); + public void setLogDirectory(String path); public String getLogDirectory(); Index: JdbcChadoAdapter.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/dataadapter/chado/jdbc/JdbcChadoAdapter.java,v retrieving revision 1.191 retrieving revision 1.192 diff -C2 -d -r1.191 -r1.192 *** JdbcChadoAdapter.java 27 Nov 2007 13:04:13 -0000 1.191 --- JdbcChadoAdapter.java 27 Nov 2007 13:42:34 -0000 1.192 *************** *** 4756,4770 **** public List getTranscriptPolypeptideIds(Long transFeatureId) { ! List cl = getTranscriptCdsIds(transFeatureId); ! Iterator cli = cl.iterator(); ! ArrayList result = new ArrayList(); ! ! while (cli.hasNext()) { ! Long cdsId = (Long)(cli.next()); ! List pl = getCdsPolypeptideIds(cdsId); ! result.addAll(pl); ! } ! ! return result; } --- 4756,4762 ---- public List getTranscriptPolypeptideIds(Long transFeatureId) { ! boolean transIsSubject = false; ! String relTypeName = getChadoInstance().getTransProtRelationTerm(); ! return getRelatedFeatureIds(transFeatureId, transIsSubject, relTypeName, "polypeptide"); } Index: PureJDBCTransactionWriter.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/dataadapter/chado/jdbc/PureJDBCTransactionWriter.java,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -d -r1.26 -r1.27 *** PureJDBCTransactionWriter.java 16 Aug 2007 08:34:12 -0000 1.26 --- PureJDBCTransactionWriter.java 27 Nov 2007 13:42:35 -0000 1.27 *************** *** 110,114 **** // whether to log all SQL commands issued as part of a commit or attempted commit protected boolean logSql = true; ! // ----------------------------------------------------------------------- // Constructor --- 110,116 ---- // whether to log all SQL commands issued as part of a commit or attempted commit protected boolean logSql = true; ! ! // If you want to use the CDS feature ! protected boolean useCDS = true; // ----------------------------------------------------------------------- // Constructor *************** *** 121,129 **** * @param noCommit Whether to run in 'no commit' mode. */ ! public PureJDBCTransactionWriter(ChadoAdapter adapter, JdbcChadoAdapter jdbcAdapter, boolean copyOnWrite, boolean noCommit) { this.adapter = adapter; this.jdbcAdapter = jdbcAdapter; this.copyOnWrite = copyOnWrite; this.noCommit = noCommit; logger.debug("PureJDBCTransactionWriter copyOnWrite=" + copyOnWrite + ", noCommit=" + noCommit); } --- 123,132 ---- * @param noCommit Whether to run in 'no commit' mode. */ ! public PureJDBCTransactionWriter(ChadoAdapter adapter, JdbcChadoAdapter jdbcAdapter, boolean copyOnWrite, boolean noCommit, boolean useCDS) { this.adapter = adapter; this.jdbcAdapter = jdbcAdapter; this.copyOnWrite = copyOnWrite; this.noCommit = noCommit; + this.useCDS = useCDS; logger.debug("PureJDBCTransactionWriter copyOnWrite=" + copyOnWrite + ", noCommit=" + noCommit); } *************** *** 905,963 **** if (flId == null) { return null; } ! // --------------------------------------- ! // add CDS ! // --------------------------------------- - // TODO - We're currently assuming a 1-1-1 relationship between transcript, CDS, and polypeptide, - // hence the addTranscript method is responsible for adding the CDS and polypeptide features. ! // TODO - handle issue of non-protein-coding genes. ! // config option? ( TIGR policy is to create CDS and polypeptide but make the residues/seqlen null/0.) ! // generate new CDS id using name adapter ! ApolloNameAdapterI nameAdapter = this.adapter.getNameAdapter((AnnotatedFeatureI)transcript); ! String cdsName = nameAdapter.generateChadoCdsNameFromTranscriptName(name); ! String cdsUniquename = cdsName; ! String cdsResidues = transcript.getCodingDNA(); ! Long cdsSeqlen = new Long(cdsResidues.length()); ! Long cdsTypeId = this.jdbcAdapter.getFeatureCVTermId("CDS"); ! // use same dbxrefId and isAnalysis as for the transcript ! Long cdsId = this.jdbcAdapter.insertFeatureRow(dbxrefId, organismId, cdsName, cdsUniquename, cdsResidues, cdsSeqlen, cdsTypeId, isAnalysis, date); ! if (cdsId == null) return null; ! // --------------------------------------- ! // CDS-transcript relationship ! // --------------------------------------- ! String cdsTransRelTerm = this.jdbcAdapter.getChadoInstance().getCdsTransRelationTerm(); ! Long cdsTransRelId = getChadoRelationshipCvTermId(cdsTransRelTerm); ! value = null; ! // set rank to 0 - assuming only 1 CDS per transcript ! rank = new Long(0); ! Long ctRelId = this.jdbcAdapter.insertFeatureRelationshipRow(cdsId, transId, cdsTransRelId, value, rank); ! if (ctRelId == null) return null; ! // --------------------------------------- ! // CDS featureloc ! // --------------------------------------- ! ChadoCds cc = getCdsCoordinatesFromTranscript(transcript, tfmin, tfmax); ! phase = null; ! residueInfo = null; ! locgroup = getChadoLocgroup(transcript, srcFeature); ! Long cdsFlId = this.jdbcAdapter.insertFeaturelocRow(cdsId, new Long(srcFeature.getFeatureId()), new Integer(cc.getFmin()), new Integer(cc.getFmax()), cc.getFminPartial(), cc.getFmaxPartial(), tstrand, phase, residueInfo, locgroup, transcriptRank); ! if (cdsFlId == null) return null; ! // --------------------------------------- ! // CDS featureprop ! // --------------------------------------- ! if (ownerTypeId != null) { ! Long cdsOwnerFpId = this.jdbcAdapter.insertFeaturepropRow(cdsId, ownerTypeId, author, 0); ! if (cdsOwnerFpId == null) return null; ! } ! if (dateTypeId != null) { ! Long cdsDateFpId = this.jdbcAdapter.insertFeaturepropRow(cdsId, dateTypeId, date.toString(), 0); ! if (cdsDateFpId == null) return null; ! } // --------------------------------------- --- 908,971 ---- if (flId == null) { return null; } ! ! ApolloNameAdapterI nameAdapter = this.adapter.getNameAdapter((AnnotatedFeatureI)transcript); ! Long cdsId = null; ! ChadoCds cc = getCdsCoordinatesFromTranscript(transcript, tfmin, tfmax); ! if(useCDS) { ! // --------------------------------------- ! // add CDS ! // --------------------------------------- ! ! // TODO - We're currently assuming a 1-1-1 relationship between transcript, CDS, and polypeptide, ! // hence the addTranscript method is responsible for adding the CDS and polypeptide features. ! // TODO - handle issue of non-protein-coding genes. ! // config option? ( TIGR policy is to create CDS and polypeptide but make the residues/seqlen null/0.) ! String cdsName = nameAdapter.generateChadoCdsNameFromTranscriptName(name); ! String cdsUniquename = cdsName; ! String cdsResidues = transcript.getCodingDNA(); ! Long cdsSeqlen = new Long(cdsResidues.length()); ! Long cdsTypeId = this.jdbcAdapter.getFeatureCVTermId("CDS"); ! // use same dbxrefId and isAnalysis as for the transcript ! cdsId = this.jdbcAdapter.insertFeatureRow(dbxrefId, organismId, cdsName, cdsUniquename, cdsResidues, cdsSeqlen, cdsTypeId, isAnalysis, date); ! if (cdsId == null) return null; ! // --------------------------------------- ! // CDS-transcript relationship ! // --------------------------------------- ! String cdsTransRelTerm = this.jdbcAdapter.getChadoInstance().getCdsTransRelationTerm(); ! Long cdsTransRelId = getChadoRelationshipCvTermId(cdsTransRelTerm); ! value = null; ! // set rank to 0 - assuming only 1 CDS per transcript ! rank = new Long(0); ! Long ctRelId = this.jdbcAdapter.insertFeatureRelationshipRow(cdsId, transId, cdsTransRelId, value, rank); ! if (ctRelId == null) return null; ! ! // --------------------------------------- ! // CDS featureloc ! // --------------------------------------- ! phase = null; ! residueInfo = null; ! locgroup = getChadoLocgroup(transcript, srcFeature); ! Long cdsFlId = this.jdbcAdapter.insertFeaturelocRow(cdsId, new Long(srcFeature.getFeatureId()), new Integer(cc.getFmin()), new Integer(cc.getFmax()), cc.getFminPartial(), cc.getFmaxPartial(), tstrand, phase, residueInfo, locgroup, transcriptRank); ! if (cdsFlId == null) return null; ! // --------------------------------------- ! // CDS featureprop ! // --------------------------------------- ! if (ownerTypeId != null) { ! Long cdsOwnerFpId = this.jdbcAdapter.insertFeaturepropRow(cdsId, ownerTypeId, author, 0); ! if (cdsOwnerFpId == null) return null; ! } ! if (dateTypeId != null) { ! Long cdsDateFpId = this.jdbcAdapter.insertFeaturepropRow(cdsId, dateTypeId, date.toString(), 0); ! if (cdsDateFpId == null) return null; ! } ! } // --------------------------------------- *************** *** 992,1005 **** } - // --------------------------------------- - // polypeptide-CDS relationship - // --------------------------------------- - String pepCdsRelTerm = this.jdbcAdapter.getChadoInstance().getPolypeptideCdsRelationTerm(); - Long pepCdsRelId = getChadoRelationshipCvTermId(pepCdsRelTerm); - value = null; - rank = new Long(0); - Long pcRelId = this.jdbcAdapter.insertFeatureRelationshipRow(protId, cdsId, pepCdsRelId, value, rank); - if (pcRelId == null) return null; // --------------------------------------- // polypeptide-transcript relationship --- 1000,1016 ---- } + if(useCDS) { + // --------------------------------------- + // polypeptide-CDS relationship + // --------------------------------------- + String pepCdsRelTerm = this.jdbcAdapter.getChadoInstance().getPolypeptideCdsRelationTerm(); + Long pepCdsRelId = getChadoRelationshipCvTermId(pepCdsRelTerm); + value = null; + rank = new Long(0); + Long pcRelId = this.jdbcAdapter.insertFeatureRelationshipRow(protId, cdsId, pepCdsRelId, value, rank); + if (pcRelId == null) return null; + } + // --------------------------------------- // polypeptide-transcript relationship *************** *** 1528,1531 **** --- 1539,1543 ---- // 1. find and delete linked CDS feature(s) + List clist = this.jdbcAdapter.getTranscriptCdsIds(new Long(featureId)); logger.debug("retrieved " + clist.size() + " CDS features linked to transcript with id " + featureId); *************** *** 1536,1540 **** if (!deleteCDS(cdsId.longValue())) { return false; } } ! // 3. delete transcript (and all referencing rows) if (!this.jdbcAdapter.deleteRow("feature", featureId)) { --- 1548,1562 ---- if (!deleteCDS(cdsId.longValue())) { return false; } } ! ! // 2. find and delete linked polypeptide features ! List plist = this.jdbcAdapter.getTranscriptPolypeptideIds(new Long(featureId)); ! logger.debug("retrieved " + plist.size() + " polypeptide features linked to CDS with id " + featureId); ! Iterator pi = plist.iterator(); ! while (pi.hasNext()) { ! Long pepId = (Long)(pi.next()); ! if (!deletePolypeptide(pepId.longValue())) { return false; } ! } ! ! // 3. delete transcript (and all referencing rows) if (!this.jdbcAdapter.deleteRow("feature", featureId)) { *************** *** 1547,1551 **** protected boolean deleteCDS(long featureId) { // 1. find and delete linked polypeptide features ! List plist = this.jdbcAdapter.getCdsPolypeptideIds(new Long(featureId)); logger.debug("retrieved " + plist.size() + " polypeptide features linked to CDS with id " + featureId); Iterator pi = plist.iterator(); --- 1569,1573 ---- protected boolean deleteCDS(long featureId) { // 1. find and delete linked polypeptide features ! /* List plist = this.jdbcAdapter.getCdsPolypeptideIds(new Long(featureId)); logger.debug("retrieved " + plist.size() + " polypeptide features linked to CDS with id " + featureId); Iterator pi = plist.iterator(); *************** *** 1553,1557 **** Long pepId = (Long)(pi.next()); if (!deletePolypeptide(pepId.longValue())) { return false; } ! } // 2. delete CDS (and all referencing rows) --- 1575,1579 ---- Long pepId = (Long)(pi.next()); if (!deletePolypeptide(pepId.longValue())) { return false; } ! }*/ // 2. delete CDS (and all referencing rows) *************** *** 1789,1844 **** // get existing CDS feature from database ! List clist = this.jdbcAdapter.getTranscriptCdsIds(new Long(featureId)); ! int nc = clist.size(); ! if (nc == 0) { ! logger.error("transcript with feature_id=" + featureId + " has no linked CDS to update"); ! return false; ! } else if (nc > 1) { ! // TODO - support Transcripts with multiple CDS features (not sure that Apollo allows this) ! logger.error("transcript with feature_id=" + featureId + " has multiple linked CDSs"); ! return false; ! } ! // updating the CDS entails changing both the featureloc and the feature (due to the sequence change) ! Long cdsId = (Long)(clist.get(0)); ! ChadoFeatureLoc newCdsLoc = new ChadoFeatureLoc(cc.getFmin(), cc.getFmax(), cc.getFminPartial(), cc.getFmaxPartial(), cc.getStrand()); ! if (!updateFeatureLocation(cdsId.longValue(), oldLocn, newCdsLoc)) { ! logger.error("failed to update CDS location for feature_id=" + cdsId); ! return false; ! } ! // update CDS sequence/residues ! Connection c = this.jdbcAdapter.getConnectionUsedForLastTransaction(); ! ChadoFeature dbCdsFeat = new ChadoFeature(cdsId, c, true); ! // updated residues, length and md5checksum ! String cdsResidues = transcript.getCodingDNA(); ! // other values are left unchanged ! Long cdsDbXrefId = dbCdsFeat.getDbXrefId(); ! long cdsOrganismId = dbCdsFeat.getOrganismId(); ! String cdsName = dbCdsFeat.getName(); ! String cdsUniquename = dbCdsFeat.getUniquename(); ! long cdsTypeId = dbCdsFeat.getTypeId(); ! boolean cdsIsAnalysis = dbCdsFeat.getIsAnalysis(); ! boolean cdsIsObsolete = dbCdsFeat.getIsObsolete(); ! if (!this.jdbcAdapter.updateFeatureRow(cdsId.longValue(), dbCdsFeat, cdsDbXrefId, cdsOrganismId, cdsName, cdsUniquename, ! cdsResidues, cdsTypeId, cdsIsAnalysis, cdsIsObsolete)) ! { ! return false; ! } // find linked polypeptide feature ! List plist = this.jdbcAdapter.getCdsPolypeptideIds(cdsId); int np = plist.size(); if (np == 0) { ! logger.error("CDS with feature_id=" + cdsId + " has no linked polypeptide to update"); return false; } else if (np > 1) { // TODO - support CDSs with multiple polypeptide features (not sure Apollo even allows this) ! logger.error("CDS with feature_id=" + cdsId + " has multiple linked polypeptides"); return false; } --- 1811,1870 ---- // get existing CDS feature from database ! Connection c = this.jdbcAdapter.getConnectionUsedForLastTransaction(); ! if(useCDS) { ! List clist = this.jdbcAdapter.getTranscriptCdsIds(new Long(featureId)); ! int nc = clist.size(); ! if (nc == 0) { ! logger.error("transcript with feature_id=" + featureId + " has no linked CDS to update"); ! return false; ! } else if (nc > 1) { ! // TODO - support Transcripts with multiple CDS features (not sure that Apollo allows this) ! logger.error("transcript with feature_id=" + featureId + " has multiple linked CDSs"); ! return false; ! } ! // updating the CDS entails changing both the featureloc and the feature (due to the sequence change) ! Long cdsId = (Long)(clist.get(0)); ! ChadoFeatureLoc newCdsLoc = new ChadoFeatureLoc(cc.getFmin(), cc.getFmax(), cc.getFminPartial(), cc.getFmaxPartial(), cc.getStrand()); ! if (!updateFeatureLocation(cdsId.longValue(), oldLocn, newCdsLoc)) { ! logger.error("failed to update CDS location for feature_id=" + cdsId); ! return false; ! } ! // update CDS sequence/residues ! ChadoFeature dbCdsFeat = new ChadoFeature(cdsId, c, true); ! // updated residues, length and md5checksum ! String cdsResidues = transcript.getCodingDNA(); ! // other values are left unchanged ! Long cdsDbXrefId = dbCdsFeat.getDbXrefId(); ! long cdsOrganismId = dbCdsFeat.getOrganismId(); ! String cdsName = dbCdsFeat.getName(); ! String cdsUniquename = dbCdsFeat.getUniquename(); ! long cdsTypeId = dbCdsFeat.getTypeId(); ! boolean cdsIsAnalysis = dbCdsFeat.getIsAnalysis(); ! boolean cdsIsObsolete = dbCdsFeat.getIsObsolete(); + if (!this.jdbcAdapter.updateFeatureRow(cdsId.longValue(), dbCdsFeat, cdsDbXrefId, cdsOrganismId, cdsName, cdsUniquename, + cdsResidues, cdsTypeId, cdsIsAnalysis, cdsIsObsolete)) + { + return false; + } + } + // find linked polypeptide feature ! List plist = this.jdbcAdapter.getTranscriptPolypeptideIds(new Long(featureId)); int np = plist.size(); if (np == 0) { ! logger.error("Transcript with feature_id=" + featureId + " has no linked polypeptide to update"); return false; } else if (np > 1) { // TODO - support CDSs with multiple polypeptide features (not sure Apollo even allows this) ! // normally not possible ? ! logger.error("Transcript with feature_id=" + featureId + " has multiple linked polypeptides"); return false; } |