diff --git a/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java b/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java index 9e8e269a2d00e5e7f49dedacafa35814c27bbe96..cad6d435dae7054e91c8fea2c4ff76ed4b4fc775 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 d24cfeb081f26503ee3130021a83db6226418ddb..70381ab2d68ada9e2ad06b7dc8ecf6b849defab9 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 2690f808da83a5efb233d4ccf2f60857e7d8e880..9359e31e24a1c5d8da4c7ebc962c422e9fedef24 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;