From: Jonathan C. <jcr...@us...> - 2007-01-29 05:18:17
|
Update of /cvsroot/gmod/apollo/src/java/apollo/dataadapter/chado/jdbc In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv22627 Modified Files: JdbcChadoAdapter.java PureJDBCTransactionWriter.java Log Message: Working on update parent transactions. Index: JdbcChadoAdapter.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/dataadapter/chado/jdbc/JdbcChadoAdapter.java,v retrieving revision 1.158 retrieving revision 1.159 diff -C2 -d -r1.158 -r1.159 *** JdbcChadoAdapter.java 27 Jan 2007 15:55:38 -0000 1.158 --- JdbcChadoAdapter.java 29 Jan 2007 05:18:15 -0000 1.159 *************** *** 3855,3858 **** --- 3855,3867 ---- } + public boolean deleteFeatureRelationshipRow(Long subjectId, Long objectId, Long typeId) + { + String tableName = "feature_relationship"; + // TODO + // long featRelId ; + // return deleteRow(tableName, featRelId); + return false; + } + public Long insertFeaturelocRow(Long featureId, Long srcFeatureId, Integer fmin, Integer fmax, boolean fmin_partial, boolean fmax_partial, Integer strand, *************** *** 4016,4020 **** } ! // Decrement the feature_relationship.rank of any exon whose rank is > (strictly greater than) newExonRank public boolean decrementTranscriptExonRanks(Long transFeatureId, long newExonRank) { boolean transIsSubject = false; --- 4025,4029 ---- } ! // Decrement the feature_relationship.rank of any exon whose rank is > (strictly greater than) oldExonRank public boolean decrementTranscriptExonRanks(Long transFeatureId, long newExonRank) { boolean transIsSubject = false; Index: PureJDBCTransactionWriter.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/dataadapter/chado/jdbc/PureJDBCTransactionWriter.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** PureJDBCTransactionWriter.java 27 Jan 2007 15:55:39 -0000 1.5 --- PureJDBCTransactionWriter.java 29 Jan 2007 05:18:15 -0000 1.6 *************** *** 217,225 **** logger.debug("commitTransaction: " + transId + "/" + numTransactions + ": " + t.oneLineSummary()); ! // CompoundTransaction - ! if (t instanceof CompoundTransaction) { CompoundTransaction ct = (CompoundTransaction)t; ! // has compound type - must be either a merge or a split if (ct.hasCompoundType()) { if (ct.isSplit()) { --- 217,231 ---- logger.debug("commitTransaction: " + transId + "/" + numTransactions + ": " + t.oneLineSummary()); ! // UpdateParentTransaction - must check this before CompoundTransaction since it's a superclass ! if (t instanceof UpdateParentTransaction) { ! // could handle this as a CompoundTransaction with NO_TYPE ! commitSucceeded = commitUpdateParentTransaction(transId, (UpdateParentTransaction)t); ! } ! ! // CompoundTransaction ! else if (t instanceof CompoundTransaction) { CompoundTransaction ct = (CompoundTransaction)t; ! // has compound type if (ct.hasCompoundType()) { if (ct.isSplit()) { *************** *** 264,273 **** } - // UpdateParentTransaction - else if (t instanceof UpdateParentTransaction) { - throw new UnsupportedOperationException("PureJDBCTransactionWriter - UpdateParentTransactions not supported"); - // TODO - } - // Unknown subclass of Transaction else { --- 270,273 ---- *************** *** 310,313 **** --- 310,396 ---- // ---------------------------------- + // UPDATE PARENT + // ---------------------------------- + + protected boolean commitUpdateParentTransaction(String transId, UpdateParentTransaction t) { + List tl = t.getTransactions(); + int nt = tl.size(); + + if (nt != 2) { + logger.error("unexpected number of child transactions (" + nt + ") in UpdateParentTransaction"); + return false; + } + + Transaction t1 = (Transaction)(tl.get(0)); + Transaction t2 = (Transaction)(tl.get(1)); + + if (!(t1 instanceof DeleteTransaction)) { + logger.error("transaction 0 of UpdateParentTransaction is not a DeleteTranaction"); + return false; + } + if (!(t2 instanceof AddTransaction)) { + logger.error("transaction 1 of UpdateParentTransaction is not an AddTranaction"); + return false; + } + + DeleteTransaction dt = (DeleteTransaction)t1; + AddTransaction at = (AddTransaction)t2; + SeqFeatureI f1 = dt.getDeletedFeatureClone(); + SeqFeatureI oldParent = dt.getParentFeatureClone(); + SeqFeatureI newParent = at.getParentFeatureClone(); + int newRank = at.getRank(); + + logger.debug("committing UpdateParentTransaction with feature=" + f1 + " old parent=" + oldParent + " new parent=" + newParent + " new rank=" + newRank); + String author = t.getAuthor(); + Date date = t.getDate(); + boolean updateSucceeded = true; + + // case 1: Exon moving between Transcripts + if (f1.isExon() && oldParent.isTranscript() && newParent.isTranscript()) { + long exonId = getChadoIdForFeature(f1); + long transcriptId1 = getChadoIdForFeature(oldParent); + long transcriptId2 = getChadoIdForFeature(newParent); + + // query for old exon rank + Long oldRank = this.jdbcAdapter.getExonRank(new Long(exonId), new Long(transcriptId1)); + + // delete old feature_relationship (exon - transcript) + String exonTransRelTerm = this.jdbcAdapter.getChadoInstance().getExonTransRelationTerm(); + Long exonTransRelId = getChadoRelationshipCvTermId(exonTransRelTerm); + if (!this.jdbcAdapter.deleteFeatureRelationshipRow(new Long(exonId), new Long(transcriptId1), exonTransRelId)) { + logger.error("commitUpdateParentTransaction failed to delete old exon-transcript feature_relationship"); + return false; + } + + // decrement old exon ranks + if (!this.jdbcAdapter.decrementTranscriptExonRanks(new Long(transcriptId1), oldRank.longValue())) { + logger.error("commitUpdateParentTransaction failed to decrement exon ranks for old transcript"); + return false; + } + + // increment new exon ranks + if (!this.jdbcAdapter.incrementTranscriptExonRanks(new Long(transcriptId2), (long)newRank)) { + logger.error("commitUpdateParentTransaction failed to increment exon ranks for new transcript"); + return false; + } + + // insert new feature_relationship (exon - transcript) + Long featRelId = this.jdbcAdapter.insertFeatureRelationshipRow(new Long(exonId), new Long(transcriptId2), exonTransRelId, null, new Long(newRank)); + if (featRelId == null) { + logger.error("commitUpdateParentTransaction failed to insert new exon-transcript feature_relationship"); + return false; + } + } + + // anything else to handle? moving transcripts between genes? + else { + logger.error("don't know how to handle UpdateParentTransaction with feature=" + f1 + " old parent=" + oldParent + " new parent=" + newParent); + updateSucceeded = false; + } + + return updateSucceeded; + } + + // ---------------------------------- // ADD // ---------------------------------- *************** *** 889,893 **** protected boolean deleteExon(long exonId, long transcriptId) { // query database for exon's current rank; can't get it from the transaction because the ! // exon may already have been removed from the transcript by the time the transaction is Long exonRank = this.jdbcAdapter.getExonRank(new Long(exonId), new Long(transcriptId)); if (exonRank == null) { --- 972,976 ---- protected boolean deleteExon(long exonId, long transcriptId) { // query database for exon's current rank; can't get it from the transaction because the ! // exon may already have been removed from the transcript by the time the transaction is created Long exonRank = this.jdbcAdapter.getExonRank(new Long(exonId), new Long(transcriptId)); if (exonRank == null) { *************** *** 904,907 **** --- 987,992 ---- } + // TODO - delete feature_relationships + // adjust feature_relationship rank of any exon following this one if (!this.jdbcAdapter.decrementTranscriptExonRanks(new Long(transcriptId), exonRank.longValue())) { *************** *** 910,913 **** --- 995,1000 ---- } + // TODO - delete featurelocs + return true; } |