From 7e66e77d507555899946ad9f0ee08ae6cbf2268c Mon Sep 17 00:00:00 2001
From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04>
Date: Thu, 17 Jul 2008 14:51:24 +0000
Subject: [PATCH] allow for removing duplicate qualifiers

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@8266 ee4ac58c-ac51-4696-9907-e4b3aa274f04
---
 .../chado/ChadoTransactionManager.java        | 37 ++++++++++++++++++-
 1 file changed, 35 insertions(+), 2 deletions(-)

diff --git a/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java b/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java
index c05bc8abb..3137f7290 100644
--- a/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java
+++ b/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java
@@ -1437,7 +1437,8 @@ public class ChadoTransactionManager
       String qualifierString = (String)old_qualifier_strings.elementAt(i);
       
       if( new_qualifier_strings == null ||
-         !new_qualifier_strings.contains(qualifierString) )
+         !new_qualifier_strings.contains(qualifierString) ||
+         isRemovingDuplicateQualifiers(i, new_qualifier_strings, old_qualifier_strings, qualifierString))
       {
          int index = qualifierString.indexOf("=");
          qualifierString = qualifierString.substring(index+1);
@@ -1569,8 +1570,40 @@ public class ChadoTransactionManager
         addReservedTag(qualifierString, qualifierName, uniquename,
             feature, old_qualifier_strings, new_qualifier_strings, false);
       }
-    }  
+    }   
+  }
+  
+  /**
+   * Check to see if the qualifier appears in the old qualifiers more than
+   * the new qualifiers
+   * @param index
+   * @param newValues
+   * @param oldValues
+   * @param qualifier_string
+   * @return
+   */
+  private boolean isRemovingDuplicateQualifiers(final int index,
+                                                final StringVector newValues,
+                                                final StringVector oldValues,
+                                                final String qualifier_string)
+  {
+    if(index > oldValues.indexOf(qualifier_string))
+      return false;
+    
+    int n_new = 0;
+    int n_old = 0;
+    
+    for(int i=0; i<newValues.size(); i++)
+      if(((String)newValues.get(i)).equals(qualifier_string))
+         n_new++;
     
+    for(int i=0; i<oldValues.size(); i++)
+      if(((String)oldValues.get(i)).equals(qualifier_string))
+         n_old++;
+    
+    if(n_new < n_old)
+      return true;
+    return false;
   }
   
   /**
-- 
GitLab