JAL-3017 parse multiple variant elements for uniprot feature
authorJim Procter <jprocter@issues.jalview.org>
Sat, 2 Jun 2018 13:17:31 +0000 (14:17 +0100)
committerJim Procter <jprocter@issues.jalview.org>
Sat, 2 Jun 2018 13:17:31 +0000 (14:17 +0100)
resources/uniprot_mapping.xml
src/jalview/datamodel/xdb/uniprot/UniprotFeature.java
test/jalview/ws/dbsources/UniprotTest.java

index 832d3e5..4c9ad5f 100755 (executable)
@@ -69,7 +69,7 @@
     <field name="end">
       <bind-xml name="position" node="attribute" location="location/end"/>
     </field>
-    <field name="variation">
+    <field name="variation" collection="vector" type="string">
      <bind-xml name="variation"/>
     </field>
     <field name="original">
index 4c2ae24..3bae87e 100644 (file)
@@ -20,6 +20,8 @@
  */
 package jalview.datamodel.xdb.uniprot;
 
+import java.util.Vector;
+
 /**
  * A data model class for binding from Uniprot XML via uniprot_mapping.xml
  */
@@ -31,7 +33,7 @@ public class UniprotFeature
 
   private String original = null;
 
-  private String variation = null;
+  private Vector<String> variation = null;
 
   private String status;
 
@@ -55,15 +57,36 @@ public class UniprotFeature
     {
       return null;
     }
-    return (description == null ? "" : description)
-            + (variation != null
-                    ? (description != null ? " " : "") + "Variation: '"
-                            + variation + "'"
-                    : "")
-            + (original != null
-                    ? ((description != null || variation != null) ? " "
-                            : "") + "Original: '" + original + "'"
-                    : "");
+    StringBuilder sb = new StringBuilder();
+    if (description != null)
+    {
+      sb.append(description);
+    }
+    if (variation != null && variation.size() > 0)
+    {
+      int i = 0;
+      for (String var : variation)
+      {
+        if (i++ > 0)
+        {
+          sb.append(",");
+        }
+        if (sb.length() > 0)
+        {
+          sb.append(" ");
+        }
+        sb.append("Variation: '" + var + "'");
+      }
+    }
+    if (original != null)
+    {
+      if (sb.length() > 0)
+      {
+        sb.append(" ");
+      }
+      sb.append("Original: '" + original + "'");
+    }
+    return sb.toString();
   }
 
   public void setDescription(String d)
@@ -122,12 +145,12 @@ public class UniprotFeature
     this.original = original;
   }
 
-  public String getVariation()
+  public Vector<String> getVariation()
   {
     return variation;
   }
 
-  public void setVariation(String variant)
+  public void setVariation(Vector<String> variant)
   {
     this.variation = variant;
   }
index c603a11..b70e581 100644 (file)
@@ -66,6 +66,7 @@ public class UniprotTest
           + "<feature type=\"sequence variant\"><original>M</original><variation>L</variation><location><position position=\"41\"/></location></feature>"
           + "<feature type=\"sequence variant\" description=\"Pathogenic\"><original>M</original><variation>L</variation><location><position position=\"41\"/></location></feature>"
           + "<feature type=\"sequence variant\" description=\"Pathogenic\"><original>M</original><location><position position=\"41\"/></location></feature>"
+          + "<feature type=\"sequence variant\" description=\"Foo\"><variation>L</variation><variation>LMV</variation><original>M</original><location><position position=\"42\"/></location></feature>"
           + "<sequence length=\"10\" mass=\"27410\" checksum=\"8CB760AACF88FE6C\" modified=\"2008-01-15\" version=\"1\">MHAPL VSKDL</sequence></entry>"
           + "</uniprot>";
 
@@ -101,7 +102,7 @@ public class UniprotTest
      * Check sequence features
      */
     Vector<UniprotFeature> features = entry.getFeature();
-    assertEquals(6, features.size());
+    assertEquals(7, features.size());
     UniprotFeature sf = features.get(0);
     assertEquals("signal peptide", sf.getType());
     assertNull(sf.getDescription());
@@ -142,6 +143,14 @@ public class UniprotTest
     assertEquals(41, sf.getPosition());
     assertEquals(41, sf.getBegin());
     assertEquals(41, sf.getEnd());
+
+    sf = features.get(6);
+    assertEquals("sequence variant", sf.getType());
+    assertEquals("Foo Variation: 'L', Variation: 'LMV' Original: 'M'",
+            sf.getDescription());
+    assertEquals(42, sf.getPosition());
+    assertEquals(42, sf.getBegin());
+    assertEquals(42, sf.getEnd());
     /*
      * Check cross-references
      */