diff --git a/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java b/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java index c05bc8abbe2e66dc99e71545d904b54cfe05e895..3137f72903e3681e6efbd7d4a94017bbb4f2e2c3 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; } /**