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