From: arnaiz <oli...@us...> - 2007-02-13 13:36:11
|
Update of /cvsroot/gmod/apollo/src/java/apollo/dataadapter/chado/jdbc In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv15823 Modified Files: JdbcChadoAdapter.java PureJDBCTransactionWriter.java Log Message: The PureJDBCTransactionWriter can manage the addition of synonyms. New cv 'null' which contains the term :'synonym' used in the synonym table. Should be changed when GMOD will change its strategy about that. Two new functions in the JdbcChadoAdapter : - insertSynonymRowIfNeeded : insert a synonym if it is not already stored in the database. - insertFeatureSynonymRow : the link between the feature table and the synonym table. Index: JdbcChadoAdapter.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/dataadapter/chado/jdbc/JdbcChadoAdapter.java,v retrieving revision 1.172 retrieving revision 1.173 diff -C2 -d -r1.172 -r1.173 *** JdbcChadoAdapter.java 9 Feb 2007 03:15:06 -0000 1.172 --- JdbcChadoAdapter.java 13 Feb 2007 13:35:42 -0000 1.173 *************** *** 142,145 **** --- 142,147 ---- private Map propertyTypeCvTerms; + private Map nullCvTerms; + private ChadoInstance chadoInstance; *************** *** 835,839 **** --- 837,853 ---- return h; } + // cvterm from the table cv 'null' + + public Long getNullCVTermId(String name) { + if (nullCvTerms == null) + nullCvTerms = getCVTerms("null"); + + Long result = (Long)(nullCvTerms.get(name)); + if (result == null) + logger.error("lookup failed for cvterm_id for cvterm with name ='" + name + "'; " ); + return result; + } + /** Returns null if name not present in cvterm table */ Long getFeatureCVTermId(String name) { *************** *** 3585,3588 **** --- 3599,3603 ---- pkcMap.put("feature_dbxref", "feature_dbxref_id"); pkcMap.put("feature_synonym", "feature_synonym_id"); + pkcMap.put("synonym", "synonym_id"); pkcMap.put("feature_relationship", "feature_relationship_id"); *************** *** 3996,3999 **** --- 4011,4087 ---- } + public Long insertSynonymRowIfNeeded(String name,Long typeId,String synonym_sgml) { + Long synonymId = getSynonymId(name,typeId); + if(synonymId != null) + return synonymId; + + String tableName = "synonym"; + HashMap colValues = new HashMap(); + + // TODO - add some error checking + + // add synonym_id + long newSynonymId = addPrimaryKeyColumnValue(tableName, colValues); + + // non-NULLable columns + colValues.put("name", name); + colValues.put("type_id", typeId); + colValues.put("synonym_sgml", synonym_sgml); + + // Unquoted/hard-coded columns + HashMap unquotedCols =null; + + if (insertRow(tableName, colValues, unquotedCols)) { + return new Long(newSynonymId); + } else { + return null; + } + } + + // allow to get synonym_id with the name and the type_id + + private Long getSynonymId(String name,Long typeId) { + Connection c = getConnectionUsedForLastTransaction(); + + try { + String sql = "SELECT synonym_id FROM synonym WHERE name ='"+name+ "' AND type_id="+typeId; + ResultSet rs = executeLoggedSelectQuery("getSynonymId", c, sql); + if(rs.next()) + return rs.getLong("synonym_id"); + } catch (SQLException sqle) { + logger.error("SQLException getting row id from getSynonymId() ResultSet", sqle); + return null; + } + return null; + } + + public Long insertFeatureSynonymRow(Long synId, Long featId,Integer pubId,boolean is_current ,boolean is_internal) { + String tableName = "feature_synonym"; + HashMap colValues = new HashMap(); + + // TODO - add some error checking + + // add feature_synonym_id + long newFeatureSynonymId = addPrimaryKeyColumnValue(tableName, colValues); + + // non-NULLable columns + colValues.put("synonym_id", synId); + colValues.put("feature_id", featId); + colValues.put("pub_id", pubId); + colValues.put("is_current", is_current); + colValues.put("is_internal", is_internal); + + // Unquoted/hard-coded columns + HashMap unquotedCols =null; + + if (insertRow(tableName, colValues, unquotedCols)) { + return new Long(newFeatureSynonymId); + } else { + return null; + } + + + } + /** * @param featureId chado feature_id of the original feature Index: PureJDBCTransactionWriter.java =================================================================== RCS file: /cvsroot/gmod/apollo/src/java/apollo/dataadapter/chado/jdbc/PureJDBCTransactionWriter.java,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** PureJDBCTransactionWriter.java 9 Feb 2007 04:10:20 -0000 1.12 --- PureJDBCTransactionWriter.java 13 Feb 2007 13:35:42 -0000 1.13 *************** *** 613,618 **** // synonym if (subpart.isSynonym()) { ! // TODO ! logger.warn("add SYNONYM not yet implemented"); } else { logger.error("not yet implemented - gene AddTransaction with subpart = " + subpart); --- 613,617 ---- // synonym if (subpart.isSynonym()) { ! addSucceeded = addSynonym(feature,t); } else { logger.error("not yet implemented - gene AddTransaction with subpart = " + subpart); *************** *** 1101,1105 **** return exonId; } ! /** * Compute the chado featureloc.locgroup for an Apollo feature. --- 1100,1132 ---- return exonId; } ! ! protected boolean addSynonym (SeqFeatureI feature, AddTransaction t) { ! long featId = getChadoFeatureId(feature); ! ! String name=t.getNewSubpartValue().toString(); ! if(name == null) { ! logger.error("Can't insert a synonym with a name null"); ! return false; ! } ! ! Long synonymTypeId = this.jdbcAdapter.getNullCVTermId("synonym"); ! Long synId = null; ! if (synonymTypeId == null) { ! logger.warn("database has no 'synonym' cvterm; cannot record synonym with name = " + name); ! } else { ! synId = this.jdbcAdapter.insertSynonymRowIfNeeded(name,synonymTypeId,name); ! } ! if(synId == null) return false; ! ! // feature_synonym table ! Integer pubId = new Integer(1); //Need to be changed ! boolean is_current = true; ! boolean is_internal = false; ! Long featsynId = this.jdbcAdapter.insertFeatureSynonymRow(synId,featId,new Integer(1),is_current,is_internal); ! if(featsynId == null) ! return false; ! ! return true; ! } /** * Compute the chado featureloc.locgroup for an Apollo feature. |