diff --git a/src/main/java/uk/ac/ebi/embl/api/validation/helper/SourceFeatureUtils.java b/src/main/java/uk/ac/ebi/embl/api/validation/helper/SourceFeatureUtils.java index 142cc4c9..fc279484 100644 --- a/src/main/java/uk/ac/ebi/embl/api/validation/helper/SourceFeatureUtils.java +++ b/src/main/java/uk/ac/ebi/embl/api/validation/helper/SourceFeatureUtils.java @@ -77,16 +77,23 @@ public void addSourceQualifier(String tag, String value, SourceFeature source) { if (MASTERSOURCEQUALIFIERS.isNoValueQualifiers(tag)) { if (!"NO".equalsIgnoreCase(value)) { - source.addQualifier(new QualifierFactory().createQualifier(tag)); + enforceQualifierFromSample(source, tag, null); } } else { - source.addQualifier(new QualifierFactory().createQualifier(tag, value)); + enforceQualifierFromSample(source, tag, value); } } else if (isCovidTaxId(source.getTaxId()) && covid19RequiredQuals.contains(tag)) { - source.addQualifier(new QualifierFactory().createQualifier(tag, value)); + enforceQualifierFromSample(source, tag, value); } } + public void enforceQualifierFromSample(SourceFeature source, String tag, String value) { + if(!source.getQualifiers(tag).isEmpty()){ + source.removeQualifier(tag); + } + source.addQualifier(new QualifierFactory().createQualifier(tag, value)); + } + public void addExtraSourceQualifiers( SourceFeature source, TaxonomyClient taxonomyClient, String uniqueName) { if (addUniqueName(source) diff --git a/src/test/java/uk/ac/ebi/embl/api/validation/helper/SourceFeatureUtilsTest.java b/src/test/java/uk/ac/ebi/embl/api/validation/helper/SourceFeatureUtilsTest.java index f907f16c..146df58c 100644 --- a/src/test/java/uk/ac/ebi/embl/api/validation/helper/SourceFeatureUtilsTest.java +++ b/src/test/java/uk/ac/ebi/embl/api/validation/helper/SourceFeatureUtilsTest.java @@ -15,6 +15,7 @@ import java.util.ArrayList; import java.util.List; import org.junit.Test; +import uk.ac.ebi.embl.api.entry.feature.FeatureFactory; import uk.ac.ebi.embl.api.entry.feature.SourceFeature; import uk.ac.ebi.embl.api.entry.qualifier.Qualifier; import uk.ac.ebi.ena.taxonomy.client.TaxonomyClient; @@ -225,6 +226,18 @@ public void testAttributesWithNullKeyAndValue() { assertEquals(1, sourceFeature.getQualifiers().size()); } + @Test + public void testEnforceQualifierFromSample() { + + FeatureFactory featureFactory = new FeatureFactory(); + SourceFeature sourceFeature = featureFactory.createSourceFeature(); + sourceFeature.addQualifier(Qualifier.COLLECTION_DATE_QUALIFIER_NAME,"2025-02-05"); + assertEquals( sourceFeature.getSingleQualifier(Qualifier.COLLECTION_DATE_QUALIFIER_NAME).getValue(),"2025-02-05"); + //Enforce qualifier value from sample + new SourceFeatureUtils().enforceQualifierFromSample(sourceFeature, Qualifier.COLLECTION_DATE_QUALIFIER_NAME,"2020-02-10"); + assertEquals( sourceFeature.getSingleQualifier(Qualifier.COLLECTION_DATE_QUALIFIER_NAME).getValue(),"2020-02-10"); + } + private Sample createSampleWithAttributes(List attributes) { Sample sample = new Sample(); sample.setOrganism("Test Organism");