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