Merge branch 'develop' of https://source.jalview.org/git/jalview.git into develop
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 2 Sep 2015 08:27:10 +0000 (09:27 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Wed, 2 Sep 2015 08:27:10 +0000 (09:27 +0100)
help/html/menus/alwcalculate.html
resources/lang/Messages.properties
src/jalview/ws/jws2/Jws2Discoverer.java
test/jalview/ws/seqfetcher/DbRefFetcherTest.java

index 50bb37b..10b5611 100755 (executable)
                                annotation which can then be used to sort the alignment via the Sort
                                by&#8594;Score menu.</em> <br></li>
                <li><strong>Translate as cDNA</strong> (not applet)<br><em>This option is visible for nucleotide alignments. 
-                       Selecting this option shows the DNA's calculated protein product in a new window. Note that the 
+                       Selecting this option shows the DNA's calculated protein product in a new <a href="../features/splitView.html">split frame</a> window. Note that the 
                        translation is not frame- or intron-aware; it simply translates all codons in each sequence, using the
                        standard <a href="../misc/geneticCode.html">genetic code</a> (any incomplete final codon is discarded). 
                        You can perform this action on the whole alignment, 
                        or selected rows, columns, or regions.</em> <br></li>
                <li><strong>Get Cross-References</strong> (not applet)<br><em>This option is visible where sequences have cross-references to
                        other standard databases; for example, an EMBL entry may have cross-references to one or more UNIPROT entries.
-                       Select the database to view all cross-referenced sequences in a new window.</em> <br></li>
+                       Select the database to view all cross-referenced sequences in a new <a href="../features/splitView.html">split frame</a> window.</em> <br></li>
                <li><strong>Autocalculate Consensus</strong><br> <em>For
                                large alignments it can be useful to deselect &quot;Autocalculate
                                Consensus&quot; when editing. This prevents the sometimes lengthy
index d9f13f2..2f63d26 100644 (file)
@@ -1166,6 +1166,8 @@ label.couldnt_create_sequence_fetcher = Couldn't create SequenceFetcher
 warn.couldnt_create_sequence_fetcher_client = Could not create the sequence fetcher client. Check error logs for details.
 warn.server_didnt_pass_validation = Service did not pass validation.\nCheck the Jalview Console for more details.
 warn.url_must_contain = Sequence URL must contain $SEQUENCE_ID$ or a regex $SEQUENCE_ID=/<regex>/=$
+warn.urls_not_contacted = URLs that could not be contacted
+warn.urls_no_jaba = URLs without any JABA Services
 info.validate_jabaws_server = Validate JabaWS Server ?\n(Look in console output for results)
 label.test_server = Test Server?
 info.you_want_jalview_to_find_uniprot_accessions = Do you want Jalview to find\nUniprot Accession ids for given sequence names?
index f2b1145..792e93f 100644 (file)
@@ -853,7 +853,8 @@ public class Jws2Discoverer implements Runnable, WSMenuEntryProviderI
       if (getInvalidServiceUrls() != null
               && getInvalidServiceUrls().size() > 0)
       {
-        ermsg.append("URLs that could not be contacted: \n");
+        ermsg.append(MessageManager.getString("warn.urls_not_contacted")
+                + ": \n");
         for (String svcurl : getInvalidServiceUrls())
         {
           if (list)
@@ -869,7 +870,7 @@ public class Jws2Discoverer implements Runnable, WSMenuEntryProviderI
       if (getUrlsWithoutServices() != null
               && getUrlsWithoutServices().size() > 0)
       {
-        ermsg.append("URLs without any JABA Services : \n");
+        ermsg.append(MessageManager.getString("warn.urls_no_jaba") + ": \n");
         for (String svcurl : getUrlsWithoutServices())
         {
           if (list)
index d9b1d90..1171bfd 100644 (file)
@@ -28,6 +28,9 @@ import jalview.analysis.CrossRef;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.DBRefEntry;
 import jalview.datamodel.DBRefSource;
+import jalview.datamodel.FeatureProperties;
+import jalview.datamodel.SequenceFeature;
+import jalview.datamodel.SequenceI;
 import jalview.util.DBRefUtils;
 import jalview.ws.SequenceFetcher;
 
@@ -62,6 +65,11 @@ public class DbRefFetcherTest
   {
   }
 
+  /**
+   * Tests that standard protein database sources include Uniprot (as the first)
+   * and also PDB. (Additional sources are dependent on available of DAS
+   * services.)
+   */
   @Test(groups ={ "Functional" })
   public void testStandardProtDbs()
   {
@@ -77,38 +85,53 @@ public class DbRefFetcherTest
         srces.addAll(srcesfordb);
       }
     }
-    DbSourceProxy uniprot = null;
+
     int i = 0;
+    int uniprotPos = -1;
+    int pdbPos = -1;
     // append the selected sequence sources to the default dbs
     for (DbSourceProxy s : srces)
     {
-      if (s.getDbSource().equalsIgnoreCase(DBRefSource.UNIPROT))
+      if (s instanceof jalview.ws.dbsources.Uniprot)
       {
-        i++;
+        uniprotPos = i;
       }
-
-      if (s instanceof jalview.ws.dbsources.Uniprot)
+      if (s instanceof jalview.ws.dbsources.Pdb)
       {
-        uniprot = s;
-        break;
+        pdbPos = i;
       }
+      i++;
     }
 
     assertTrue("Failed to find Uniprot source as first source amongst "
-            + srces.size() + " sources (source was at position " + i + ")",
-            uniprot != null && i < 2);
+            + srces.size() + " sources (source was at position "
+            + uniprotPos + ")", uniprotPos == 0);
+    assertTrue("Failed to find PDB source amongst " + srces.size()
+            + " sources", pdbPos >= 0);
   }
 
+  /**
+   * Tests retrieval of one entry from EMBL. Test is dependent on availability
+   * of network and the EMBL service.
+   * 
+   * @throws Exception
+   */
   @Test(groups =
   { "External" })
   public void testEmblUniprotProductRecovery() throws Exception
   {
-    String retrievalId = "CAA23748"; // "V00488";
+    String retrievalId = "V00488";
     DbSourceProxy embl = new SequenceFetcher().getSourceProxy(DBRefSource.EMBL).get(0);
     assertNotNull("Couldn't find the EMBL retrieval client", embl);
     verifyProteinNucleotideXref(retrievalId, embl);
   }
 
+  /**
+   * Tests retrieval of one entry from EMBLCDS. Test is dependent on
+   * availability of network and the EMBLCDS service.
+   * 
+   * @throws Exception
+   */
   @Test(groups =
   { "External" })
   public void testEmblCDSUniprotProductRecovery() throws Exception
@@ -120,24 +143,46 @@ public class DbRefFetcherTest
     verifyProteinNucleotideXref(retrievalId, embl);
   }
 
+  /**
+   * Helper method to perform database retrieval and verification of results.
+   * 
+   * @param retrievalId
+   * @param embl
+   * @throws Exception
+   */
   private void verifyProteinNucleotideXref(String retrievalId,
           DbSourceProxy embl) throws Exception
   {
     AlignmentI alsq = embl.getSequenceRecords(retrievalId);
     assertNotNull("Couldn't find the EMBL record " + retrievalId, alsq);
     assertEquals("Didn't retrieve right number of records", 1, alsq.getHeight());
-    DBRefEntry[] dr = DBRefUtils.selectRefs(alsq.getSequenceAt(0).getDBRef(), DBRefSource.PROTEINSEQ);
+    SequenceI seq = alsq.getSequenceAt(0);
+    assertEquals("Wrong sequence name", embl.getDbSource() + "|"
+            + retrievalId, seq.getName());
+    SequenceFeature[] sfs = seq.getSequenceFeatures();
+    assertNotNull("Sequence features missing", sfs);
+    assertTrue(
+            "Feature not CDS",
+            FeatureProperties.isCodingFeature(embl.getDbSource(),
+                    sfs[0].getType()));
+    assertEquals(embl.getDbSource(), sfs[0].getFeatureGroup());
+    DBRefEntry[] dr = DBRefUtils.selectRefs(seq.getDBRef(), DBRefSource.PROTEINSEQ);
     assertNotNull(dr);
     assertEquals("Expected a single Uniprot cross reference", 1, dr.length);
-    assertEquals("Expected cross refernce map to be one amino acid", dr[0]
+    assertEquals("Expected cross reference map to be one amino acid", dr[0]
             .getMap().getMappedWidth(), 1);
-    assertEquals("Expected local refernce map to be 3 nucleotides", dr[0]
+    assertEquals("Expected local reference map to be 3 nucleotides", dr[0]
             .getMap().getWidth(), 3);
     AlignmentI sprods = CrossRef.findXrefSequences(alsq.getSequencesArray(), true, dr[0].getSource(), alsq.getDataset());
     assertNotNull(
             "Couldn't recover cross reference sequence from dataset. Was it ever added ?",
             sprods);
-    
-    
+    assertEquals("Didn't xref right number of records", 1,
+            sprods.getHeight());
+    SequenceI proteinSeq = sprods.getSequenceAt(0);
+    assertEquals(proteinSeq.getSequenceAsString(), dr[0].getMap().getTo()
+            .getSequenceAsString());
+    assertEquals(dr[0].getSource() + "|" + dr[0].getAccessionId(),
+            proteinSeq.getName());
   }
 }