From a2a599b84a290c508a0edb6447cf40f15beab0ed Mon Sep 17 00:00:00 2001 From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04> Date: Fri, 29 Jul 2005 12:38:47 +0000 Subject: [PATCH] chado insert & delete featureprop git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@3310 ee4ac58c-ac51-4696-9907-e4b3aa274f04 --- .../artemis/chado/ChadoTransaction.java | 47 ++++++++++- .../chado/ChadoTransactionManager.java | 79 ++++++++++++++++--- .../sanger/artemis/util/DatabaseDocument.java | 3 +- 3 files changed, 113 insertions(+), 16 deletions(-) diff --git a/uk/ac/sanger/artemis/chado/ChadoTransaction.java b/uk/ac/sanger/artemis/chado/ChadoTransaction.java index befeca708..425fd4191 100644 --- a/uk/ac/sanger/artemis/chado/ChadoTransaction.java +++ b/uk/ac/sanger/artemis/chado/ChadoTransaction.java @@ -165,9 +165,50 @@ public class ChadoTransaction } } } -// else if(type == INSERT) -// else - + else if(type == INSERT) + { + sqlBuff.append("INSERT INTO "+chadoTable); + StringBuffer sqlKeys = new StringBuffer(); + StringBuffer sqlValues = new StringBuffer(); + + sqlKeys.append("feature_id , "); + sqlValues.append("(SELECT feature_id FROM feature WHERE uniquename='"+uniquename+"') , "); + + String name; + Enumeration enum_prop = properties.keys(); + while(enum_prop.hasMoreElements()) + { + name = (String)enum_prop.nextElement(); + sqlKeys.append(name); + sqlValues.append((String)properties.get(name)); + if(enum_prop.hasMoreElements()) + { + sqlKeys.append(" , "); + sqlValues.append(" , "); + } + } + + sqlBuff.append(" ( "+sqlKeys.toString()+" ) "); + sqlBuff.append(" values "); + sqlBuff.append(" ( "+sqlValues.toString()+" ) "); + } + else if(type == DELETE) + { + sqlBuff.append("DELETE FROM "+chadoTable+" WHERE "); + + String name; + String value; + Enumeration enum_constraint = constraint.keys(); + while(enum_constraint.hasMoreElements()) + { + name = (String)enum_constraint.nextElement(); + value = (String)constraint.get(name); + sqlBuff.append(name+"="+value+" AND "); + } + sqlBuff.append("feature_id=(SELECT feature_id FROM feature WHERE uniquename='"+ + uniquename+"')"); + } + return sqlBuff.toString(); } } diff --git a/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java b/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java index 99319e276..834d19c86 100644 --- a/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java +++ b/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java @@ -39,7 +39,7 @@ import uk.ac.sanger.artemis.FeatureChangeListener; import uk.ac.sanger.artemis.FeatureChangeEvent; import java.util.Vector; - +import javax.swing.JOptionPane; /** * @@ -165,42 +165,97 @@ public class ChadoTransactionManager ++qualifier_index) { final Qualifier this_qualifier = (Qualifier)qualifiers_new.elementAt(qualifier_index); + if(!qualifiers_old.contains(this_qualifier)) { String name = this_qualifier.getName(); - if(qualifiers_old.indexOfQualifierWithName(name) > -1) // update qualifier + int old_index = qualifiers_old.indexOfQualifierWithName(name); + + Qualifier this_old_qualifier = null; + StringVector old_qualifier_strings = null; + if(old_index> -1) // update qualifier + { + this_old_qualifier = (Qualifier)qualifiers_old.elementAt(old_index); + + old_qualifier_strings = + StreamQualifier.toStringVector(null, this_old_qualifier); + } + + final StringVector new_qualifier_strings = + StreamQualifier.toStringVector(null, this_qualifier); + + String cvterm_id = DatabaseDocument.getCvtermID(name).toString(); + + if(cvterm_id == null) // chado doesn't recognise this + { + JOptionPane.showMessageDialog(null, + name+" is not a valid qualifier!", + "Invalid Qualifier", + JOptionPane.WARNING_MESSAGE); + continue; + } + + if(old_index > -1 && + new_qualifier_strings.size() == 1 && + old_qualifier_strings.size() == 1) { tsn = new ChadoTransaction(ChadoTransaction.UPDATE, feature_id, "featureprop"); - final StringVector new_qualifier_strings = - StreamQualifier.toStringVector(null, this_qualifier); + String qualifier_string = new_qualifier_strings.elementAt(0); + int index = qualifier_string.indexOf("="); + if(index > -1) + qualifier_string = qualifier_string.substring(index+1); - String cvterm_id = DatabaseDocument.getCvtermID(name).toString(); + tsn.addProperty("value", "'"+ stripQuotes(qualifier_string) +"'"); + tsn.setConstraint("featureprop.type_id", cvterm_id); + sql.add(tsn); + } + else + { + if(old_index > -1) // delete existing featureprops + { + tsn = new ChadoTransaction(ChadoTransaction.DELETE, + feature_id, "featureprop"); + tsn.setConstraint("type_id", cvterm_id); + sql.add(tsn); + System.out.println(tsn.getSqlQuery()); + } + + // insert new featureprops for(int value_index = 0; value_index < new_qualifier_strings.size(); ++value_index) { + tsn = new ChadoTransaction(ChadoTransaction.INSERT, + feature_id, "featureprop"); String qualifier_string = new_qualifier_strings.elementAt(value_index); int index = qualifier_string.indexOf("="); if(index > -1) qualifier_string = qualifier_string.substring(index+1); - tsn.addProperty("value", "'"+qualifier_string+"'"); + tsn.addProperty("value", "'"+ stripQuotes(qualifier_string) +"'"); + tsn.addProperty("type_id", "'"+cvterm_id+"'"); + tsn.addProperty("rank", Integer.toString(value_index)); + sql.add(tsn); + System.out.println(tsn.getSqlQuery()); } - tsn.setConstraint("featureprop.type_id", cvterm_id); - sql.add(tsn); - + System.out.println("******** "+DatabaseDocument.getCvtermID(name)); - System.out.println(tsn.getSqlQuery()); } - else // insert qualifier - {} } } } + private String stripQuotes(String s) + { + if(s.startsWith("\"") && s.endsWith("\"")) + s = s.substring(1,s.length()-1); + + return s; + } + /** * diff --git a/uk/ac/sanger/artemis/util/DatabaseDocument.java b/uk/ac/sanger/artemis/util/DatabaseDocument.java index 1463c763c..590973055 100644 --- a/uk/ac/sanger/artemis/util/DatabaseDocument.java +++ b/uk/ac/sanger/artemis/util/DatabaseDocument.java @@ -304,7 +304,8 @@ public class DatabaseDocument extends Document if(name.equals(cvterm.get(key))) return key; } - return new Long("-1."); + return null; +// return new Long("-1."); } private String getCvtermName(Connection conn, long id) -- GitLab