Merge branch 'develop' into features/JAL-653_JAL-1766_htslib_refseqsupport
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Fri, 11 Mar 2016 12:15:22 +0000 (12:15 +0000)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Fri, 11 Mar 2016 12:15:22 +0000 (12:15 +0000)
src/jalview/analysis/SequenceIdMatcher.java
src/jalview/gui/StructureChooser.java
src/jalview/ws/dbsources/PDBRestClient.java
src/jalview/ws/sifts/SiftsClient.java
test/jalview/analysis/SequenceIdMatcherTest.java [new file with mode: 0644]

index 23e9a14..b89287c 100755 (executable)
@@ -272,7 +272,7 @@ public class SequenceIdMatcher
     return r;
   }
 
-  private class SeqIdName
+  class SeqIdName
   {
     String id;
 
index 5d381b9..d313002 100644 (file)
@@ -43,6 +43,7 @@ import java.util.Collection;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Objects;
 
 import javax.swing.JCheckBox;
 import javax.swing.JComboBox;
@@ -301,6 +302,7 @@ public class StructureChooser extends GStructureChooser implements
     if (!isPDBRefsFound && !isUniProtRefsFound)
     {
       String seqName = seq.getName();
+      seqName = sanitizeSeqName(seqName);
       String[] names = seqName.toLowerCase().split("\\|");
       for (String name : names)
       {
@@ -328,6 +330,21 @@ public class StructureChooser extends GStructureChooser implements
   }
 
   /**
+   * Remove the following special characters from input string +, -, &, |, !, (,
+   * ), {, }, [, ], ^, ", ~, *, ?, :, \
+   * 
+   * @param seqName
+   * @return
+   */
+  private static String sanitizeSeqName(String seqName)
+  {
+    Objects.requireNonNull(seqName);
+    return seqName.replaceAll("\\[\\d*\\]", "")
+            .replaceAll("[^\\dA-Za-z ]", "").replaceAll("\\s+", "+");
+  }
+
+
+  /**
    * Ensures sequence ref names are not less than 3 characters and does not
    * contain a database name
    * 
@@ -921,7 +938,8 @@ public class StructureChooser extends GStructureChooser implements
           pdbRequest.setResponseSize(1);
           pdbRequest.setFieldToSearchBy("(pdb_id:");
           pdbRequest.setWantedFields(wantedFields);
-          pdbRequest.setSearchTerm(txt_search.getText() + ")");
+          pdbRequest
+                  .setSearchTerm(txt_search.getText().toLowerCase() + ")");
           pdbRequest.setAssociatedSequence(selectedSequence);
           pdbRestCleint = new PDBRestClient();
           PDBRestResponse resultList;
index 8e08c84..05dab95 100644 (file)
@@ -111,7 +111,7 @@ public class PDBRestClient
 
       // Get the JSON string from the response object
       String responseString = clientResponse.getEntity(String.class);
-      System.out.println("query >>>>>>> " + pdbRestRequest.toString());
+      // System.out.println("query >>>>>>> " + pdbRestRequest.toString());
 
       // Check the response status and report exception if one occurs
       if (clientResponse.getStatus() != 200)
index f25c1cf..50cf5cb 100644 (file)
@@ -927,7 +927,8 @@ public class SiftsClient implements SiftsClientI
     // output mappings
     StringBuffer output = new StringBuffer();
     output.append(NEWLINE);
-    output.append("Sequence ⟷ Structure mapping details").append(NEWLINE);
+    output.append("Sequence \u27f7 Structure mapping details").append(
+            NEWLINE);
     output.append("Method: SIFTS");
     output.append(NEWLINE).append(NEWLINE);
 
diff --git a/test/jalview/analysis/SequenceIdMatcherTest.java b/test/jalview/analysis/SequenceIdMatcherTest.java
new file mode 100644 (file)
index 0000000..eb0fc47
--- /dev/null
@@ -0,0 +1,78 @@
+package jalview.analysis;
+
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
+
+import jalview.analysis.SequenceIdMatcher.SeqIdName;
+import jalview.datamodel.SequenceI;
+
+import org.testng.annotations.Test;
+
+public class SequenceIdMatcherTest
+{
+
+  /**
+   * Test the method that checks for one sequence id starting with the other,
+   * followed by an 'allowed' separator character
+   */
+  @Test(groups = "Functional")
+  public void test_seqIdNameEquals()
+  {
+    SequenceIdMatcher sequenceIdMatcher = new SequenceIdMatcher(
+            new SequenceI[] {});
+
+    /*
+     * target name = matcher name + word separator...
+     */
+    SeqIdName testee = sequenceIdMatcher.new SeqIdName("A12345");
+    assertTrue(testee.equals("A12345"));
+    assertTrue(testee.equals("A12345~"));
+    assertTrue(testee.equals("A12345."));
+    assertTrue(testee.equals("A12345 "));
+    assertTrue(testee.equals("A12345|"));
+    assertTrue(testee.equals("A12345#"));
+    assertTrue(testee.equals("A12345\\"));
+    assertTrue(testee.equals("A12345/"));
+    assertTrue(testee.equals("A12345<"));
+    assertTrue(testee.equals("A12345>"));
+    assertTrue(testee.equals("A12345!"));
+    assertTrue(testee.equals("A12345\""));
+    assertTrue(testee.equals("A12345" + String.valueOf((char) 0x00A4)));
+    assertTrue(testee.equals("A12345$a"));
+    assertTrue(testee.equals("A12345%b"));
+    assertTrue(testee.equals("A12345^cd"));
+    assertTrue(testee.equals("A12345*efg"));
+    assertTrue(testee.equals("A12345)^&!"));
+    assertTrue(testee.equals("A12345}01&*"));
+    assertTrue(testee.equals("A12345[A23456"));
+    assertTrue(testee.equals("A12345@|Uniprot"));
+    assertTrue(testee.equals("A12345'whatever you want here"));
+    assertTrue(testee.equals("A12345,"));
+    assertTrue(testee.equals("A12345?"));
+    assertTrue(testee.equals("A12345_"));
+
+    /*
+     * matcher name = target name + word separator...
+     */
+    testee = sequenceIdMatcher.new SeqIdName("A12345#");
+    assertTrue(testee.equals("A12345"));
+
+    /*
+     * miscellaneous failing cases
+     */
+    testee = sequenceIdMatcher.new SeqIdName("A12345");
+    assertFalse(testee.equals((Object) null));
+    assertFalse(testee.equals(""));
+    assertFalse(testee.equals("a12345"));
+    assertFalse(testee.equals("A12346|A12345"));
+
+    testee = sequenceIdMatcher.new SeqIdName("A12345?B23456");
+    assertFalse(testee.equals("B23456"));
+    assertFalse(testee.equals("A12345|"));
+    assertFalse(testee.equals("A12345?"));
+
+    testee = sequenceIdMatcher.new SeqIdName("A12345<");
+    assertFalse(testee.equals("A12345?"));
+    assertTrue(testee.equals("A12345<")); // bug? inconsistent
+  }
+}