From 818cb811b12a9d63ea3c2a076d499ac6504dcc2a Mon Sep 17 00:00:00 2001
From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04>
Date: Tue, 16 Mar 2010 10:36:34 +0000
Subject: [PATCH] changes to handle semi-colon separators in the qualifier
 field of a history term

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@13484 ee4ac58c-ac51-4696-9907-e4b3aa274f04
---
 .../chado/ChadoTransactionManager.java        |  6 ++-
 .../genebuilder/cv/AbstractCvBox.java         | 53 +++++++++++++++++--
 .../components/genebuilder/cv/HistoryBox.java | 11 ++--
 3 files changed, 61 insertions(+), 9 deletions(-)

diff --git a/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java b/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java
index 9e8e269a2..cad6d435d 100644
--- a/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java
+++ b/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java
@@ -2440,7 +2440,11 @@ public class ChadoTransactionManager
         String prop = this_qualifier_part.substring(index+1);
         
         logger4j.debug("FeatureCvTermProp = "+this_qualifier_part_lowercase);
-        CvTerm cvTerm = getCvTerm(this_qualifier_part.substring(0,index), null);
+        CvTerm cvTerm;
+        if(index == -1 && cvName.equals(HISTORY_CV))
+          cvTerm = getCvTerm("qualifier", null);
+        else
+          cvTerm = getCvTerm(this_qualifier_part.substring(0,index), null);
         
         if(cvTerm == null)
           JOptionPane.showMessageDialog(null, 
diff --git a/uk/ac/sanger/artemis/components/genebuilder/cv/AbstractCvBox.java b/uk/ac/sanger/artemis/components/genebuilder/cv/AbstractCvBox.java
index d24cfeb08..70381ab2d 100644
--- a/uk/ac/sanger/artemis/components/genebuilder/cv/AbstractCvBox.java
+++ b/uk/ac/sanger/artemis/components/genebuilder/cv/AbstractCvBox.java
@@ -60,6 +60,41 @@ abstract class AbstractCvBox
     return field;
   }
   
+  /**
+   * Strip out the value of a field of interest from a qualifier string
+   * by splitting on '='.
+   * @param fieldName
+   * @param qualifierString
+   * @return
+   */
+  protected static String getFieldIgnoreSeparator(final String fieldName, final String qualifierString)
+  {
+    String[] parts = qualifierString.split("=");
+    StringBuffer buff = null;
+    for(int i=0; i<parts.length; i++)
+    {
+      if(parts[i].endsWith(fieldName) && i<parts.length-1)
+      {
+        if(buff == null)
+          buff = new StringBuffer();
+        else
+          buff.append("; ");
+        
+        String part = parts[i+1];
+        if(i<parts.length-2)
+        {
+          int ind = part.lastIndexOf(';');
+          buff.append(part.substring(0, ind));
+        }
+        else
+          buff.append(part);
+      }
+    }
+    if(buff != null)
+      return buff.toString();
+    return getField(fieldName, qualifierString);
+  }
+  
   /**
    * Strip out the value of a field of interest from a qualifier string
    * 
@@ -108,6 +143,21 @@ abstract class AbstractCvBox
     return newQualifierString;
   }
   
+/*  protected String replace(String str, String pattern, String replace) 
+  { 
+    int s = 0; 
+    int e = 0; 
+    StringBuffer result = new StringBuffer(); 
+    while ((e = str.indexOf(pattern, s)) >= 0) 
+    { 
+      result.append(str.substring(s, e)); 
+      result.append(replace); 
+      s = e+pattern.length(); 
+    } 
+    result.append(str.substring(s)); 
+    return result.toString(); 
+  } */
+  
   /**
    * Get a Date object from a date string in the format 20061129
    * @param dateStr
@@ -130,9 +180,6 @@ abstract class AbstractCvBox
     return cal.getTime();
   }
   
-
-
-  
   protected abstract boolean isQualifierChanged();
   protected abstract void updateQualifier(final QualifierVector qv);
 }
\ No newline at end of file
diff --git a/uk/ac/sanger/artemis/components/genebuilder/cv/HistoryBox.java b/uk/ac/sanger/artemis/components/genebuilder/cv/HistoryBox.java
index 2690f808d..9359e31e2 100644
--- a/uk/ac/sanger/artemis/components/genebuilder/cv/HistoryBox.java
+++ b/uk/ac/sanger/artemis/components/genebuilder/cv/HistoryBox.java
@@ -104,7 +104,7 @@ class HistoryBox extends AbstractCvBox
     curatorNameField.setCaretPosition(0);
     xBox.add(curatorNameField);
     
-    qual = getField("qualifier=", qualifierString);
+    qual = getFieldIgnoreSeparator("qualifier", qualifierString);
     qualfTextField = new JTextField(qual);      
     qualfTextField.setToolTipText("qualifier column");
     Dimension dimension2 = new Dimension(dimension.width*2, dimension.height);
@@ -126,7 +126,7 @@ class HistoryBox extends AbstractCvBox
     if(!old.equals(termCombo.getSelectedItem()))
       return true;
     
-    old = getField("qualifier=", origQualifierString);
+    old = getFieldIgnoreSeparator("qualifier", origQualifierString);
     if(!old.equals(qualfTextField.getText()))
       return true;
     
@@ -238,11 +238,12 @@ class HistoryBox extends AbstractCvBox
                                        newQualifierString);
     }
     
-    old = getField("qualifier=", origQualifierString);
+    old = getFieldIgnoreSeparator("qualifier", origQualifierString);
     if(!old.equals(qualfTextField.getText()))
     {
-      newQualifierString = changeField("qualifier=", qualfTextField.getText().trim(), 
-                                       newQualifierString);
+      newQualifierString = newQualifierString.replaceAll("qualifier=[^;]+", "");
+      newQualifierString = newQualifierString.replaceAll("[;]+", ";");
+      newQualifierString += ";qualifier="+qualfTextField.getText().trim();
     }
     
     return newQualifierString;
-- 
GitLab