Merge branch 'bug/JAL-2547tooltipOnGap' into develop
authorJim Procter <jprocter@issues.jalview.org>
Sat, 27 May 2017 13:02:54 +0000 (14:02 +0100)
committerJim Procter <jprocter@issues.jalview.org>
Sat, 27 May 2017 13:02:54 +0000 (14:02 +0100)
17 files changed:
.classpath
help/html/releases.html
help/html/webServices/JABAWS.html
help/html/webServices/jnet.html
help/html/webServices/jnetprediction.gif [changed mode: 0755->0644]
help/html/webServices/msaclient.html
help/html/webServices/proteinDisorder.html
lib/jabaws-min-client-2.2.0.jar [moved from lib/min-jabaws-client-2.1.0.jar with 73% similarity]
src/jalview/appletgui/SeqPanel.java
src/jalview/datamodel/SequenceI.java
src/jalview/gui/SeqPanel.java
src/jalview/ws/jws2/JPred301Client.java [deleted file]
src/jalview/ws/jws2/jabaws2/Jws2InstanceFactory.java
test/jalview/gui/SeqPanelTest.java [new file with mode: 0644]
test/jalview/ws/jabaws/JpredJabaStructExportImport.java [deleted file]
test/jalview/ws/jabaws/MinJabawsClientTests.java
test/jalview/ws/jabaws/RNAStructExportImport.java

index 8aef745..c4a2832 100644 (file)
@@ -39,7 +39,7 @@
        <classpathentry kind="lib" path="lib/jdas-1.0.4.jar"/>
        <classpathentry kind="lib" path="lib/spring-core-3.0.5.RELEASE.jar"/>
        <classpathentry kind="lib" path="lib/spring-web-3.0.5.RELEASE.jar"/>
-       <classpathentry kind="lib" path="lib/min-jabaws-client-2.1.0.jar" sourcepath="/clustengine"/>
+       <classpathentry kind="lib" path="lib/jabaws-min-client-2.2.0.jar" sourcepath="/clustengine"/>
        <classpathentry kind="lib" path="lib/json_simple-1.1.jar" sourcepath="/Users/jimp/Downloads/json_simple-1.1-all.zip"/>
        <classpathentry kind="lib" path="lib/slf4j-api-1.7.7.jar"/>
        <classpathentry kind="lib" path="lib/jsoup-1.8.1.jar"/>
index 1fe2602..01fd6c2 100755 (executable)
@@ -90,7 +90,7 @@ li:before {
             <li><!-- JAL-1476 -->Warning in alignment status bar when there are not enough columns to superimpose structures in Chimera</li>
           <li><!-- JAL-1596 -->Faster Chimera/Jalview communication by file-based command exchange</li>  
           <li><!-- JAL-2316, -->URLs for viewing database cross-references provided by identifiers.org and the EMBL-EBI's MIRIAM DB</li>
-          
+          <li><!-- JAL-2549 -->Updated JABAWS client to v2.2</li>
           </ul>
           <em>Experimental features</em>
           <ul>
index f74e4c4..84b2b86 100644 (file)
     <strong><em>A</em></strong>nalysis <strong><em>W</em></strong>eb <strong><em>S</em></strong>ervices
     <strong>system</strong> (<strong>JABAWS</strong>)<br> Jalview
     includes a client for interacting with programmatic (SOAP) web
-    services for the <a href="http://www.compbio.dundee.ac.uk/jabaws">JABAWS</a>
-    service model, developed at the University of Dundee by Peter
-    Troshin and Geoff Barton. This is an open source system that
-    provides a framework for wrapping command line bioinformatics
+    services provided by the <a href="http://www.compbio.dundee.ac.uk/jabaws">JABAWS</a>
+    system, developed at the University of Dundee by Peter
+    Troshin, Sasha Sherstnev, Dan Barton, Fabio Madeira-Marquez, Jim Procter and Geoff Barton.
+    This is an open source system that provides a framework for wrapping command line bioinformatics
     analysis programs that enables them to be executed locally or on a
     cluster using data and analysis parameters provided by a program
     linked with the JABA engine directly or accessing it remotely <em>via</em>
     each new server.
   </p>
   <p>
-    <em>Support for accessing JABAWS servers was introduced in
-      Jalview 2.6.</em>
+    <em>JABAWS Client updated to version 2.2 in Jalview 2.10.2</em>
   </p>
   <p>
     <em>Option for adding JABAWS servers which fails validation was
       introduced from version 2.8.2 </em>
   </p>
+  <p>
+    <em>Support for accessing JABAWS servers was introduced in
+      Jalview 2.6.</em>
+  </p>
 </body>
 </html>
index 077ace6..e42a4e6 100755 (executable)
     <li>Lupas_21, Lupas_14, Lupas_28<br> <em>Coiled-coil
         predictions for the sequence. These are binary predictions for
         each location.</em></li>
-    <li>JNETSOL25,JNETSOL5,JNETSOL0<br> <em>Solvent
-        accessibility predictions - binary predictions of 25%, 5% or 0%
-        solvent accessibility.</em></li>
+    <li>Jnet Burial<br> <em>Prediction of Solvent
+        Accessibility. levels are
+        <ul>
+          <li>0 - Exposed</li>
+          <li>3 - 25% or more S.A. accessible</li>
+          <li>6 - 5% or more S.A. accessible</li>
+          <li>9 - Buried (<5% exposed)</li>
+        </ul></li>
     <li>JNetPRED<br> <em>The consensus prediction -
         helices are marked as red tubes, and sheets as dark green
         arrows.</em></li>
     <li>JNetHMM<br> <em>HMM profile based prediction -
         helices are marked as red tubes, and sheets as dark green
         arrows.</em></li>
-    <li>jpred<br> <em>Jpred prediction - helices are
-        marked as red tubes, and sheets as dark green arrows.</em></li>
     <li>JNETPSSM<br> <em>PSSM based prediction - helices
         are marked as red tubes, and sheets as dark green arrows.</em></li>
-    <li>JNETFREQ<br> <em>Amino Acid frequency based
-        prediction - helices are marked as red tubes, and sheets as dark
-        green arrows.</em></li>
     <li>JNETJURY<br> <em>A '*' in this annotation
         indicates that the JNETJURY was invoked to rationalise
         significantly different primary predictions.</em></li>
     href="../features/annotation.html#seqannots">Add reference
       annotation</a> Sequence ID popup menu option.
   </em>
-  <em>As of Jalview 2.6, the JPred service accessed accessed via the
-    'Secondary structure prediction' submenu should be considered a
+  <em>As of Jalview 2.6, the JPred service accessed accessed via
+    the 'Secondary structure prediction' submenu should be considered a
     legacy Jalview SOAP service, and will be replaced in the near future
     by a JPred4 Rest service.</em>
 
old mode 100755 (executable)
new mode 100644 (file)
index 3f827d9..006c50d
Binary files a/help/html/webServices/jnetprediction.gif and b/help/html/webServices/jnetprediction.gif differ
index 2fbbdbc..d627c66 100644 (file)
   </p>
   <p>
     <strong>Alignment programs supported by JABAWS</strong>. <br />Versions
-    shown are those bundled with JABAWS 2.01 - if you are using a
+    shown are those bundled with JABAWS 2.2 - if you are using a
     different server, check its home page to find out which versions are
     provided.
-  <ul>
-    <li><a href="http://www.clustal.org/">Clustal Omega and
-        Clustal W</a> (version 2.0.12)</li>
-    <li><a href="http://mafft.cbrc.jp/alignment/software/">Mafft</a>
-      (version 6.8.57b)</li>
-    <li><a href="http://www.drive5.com/muscle">Muscle</a> (version
-      3.8.31)</li>
-    <li><a
-      href="http://www.tcoffee.org/Projects_home_page/t_coffee_home_page.html">Tcoffee</a>
-      (version 8.99)</li>
-    <li><a href="http://probcons.stanford.edu/">Probcons</a>
-      (version 1.12)</li>
+    <ul>
+      <li><a href="http://www.clustal.org/omega">Clustal Omega</a> (version 1.2.4)</li>
+      <li><a href="http://www.clustal.org/clustal2">ClustalW</a> (version 2.1)</li>
+      <li><a href="http://align.bmr.kyushu-u.ac.jp/mafft/software/">Mafft</a> (version 7.310)</li>
+      <li><a href="http://www.drive5.com/muscle">Muscle</a> (version 3.8.31)</li>
+      <li><a href="http://www.tcoffee.org/Projects_home_page/t_coffee_home_page.html">T-coffee</a> (version 11.00.8cbe486)</li>
+      <li><a href="http://probcons.stanford.edu/">Probcons</a> (version 1.12)</li>
+      <li><a href="http://msaprobs.sourceforge.net/">MSAProbs</a> (version 0.9.7)</li>
+      <li><a href="http://sourceforge.net/projects/glprobs/">GLProbs</a> (version 0.9.7)</li>
   </ul>
   </p>
 
index 1c35bf3..a06b3a9 100644 (file)
@@ -48,7 +48,7 @@
       By Annotation</a> dialog box to colour sequences according to the
     results of predictors shown as annotation rows.
   </p>
-  <p>JABAWS 2.0 provides four disorder predictors which are
+  <p>JABAWS 2.2 provides four disorder predictors which are
     described below:</p>
   <ul>
     <li><a href="#disembl">DisEMBL</a></li>
   </p>
   <p>
     <strong><a name="iupred"></a><a
-      href="http://iupred.enzim.hu/Help.php">IUPred</a></strong><br />
+      href="http://iupred.enzim.hu/">IUPred</a></strong><br />
     IUPred employs an empirical model to estimate likely regions of
     disorder. There are three different prediction types offered, each
     using different parameters optimized for slightly different
similarity index 73%
rename from lib/min-jabaws-client-2.1.0.jar
rename to lib/jabaws-min-client-2.2.0.jar
index ea5a1f4..bf1e8b1 100644 (file)
Binary files a/lib/min-jabaws-client-2.1.0.jar and b/lib/jabaws-min-client-2.2.0.jar differ
index b89c435..2d2e3fd 100644 (file)
@@ -413,13 +413,13 @@ public class SeqPanel extends Panel implements MouseMotionListener,
    * 
    * @param sequence
    *          aligned sequence object
-   * @param res
+   * @param column
    *          alignment column
    * @param seq
    *          index of sequence in alignment
-   * @return position of res in sequence
+   * @return position of column in sequence or -1 if at gap
    */
-  void setStatusMessage(SequenceI sequence, int res, int seq)
+  void setStatusMessage(SequenceI sequence, int column, int seq)
   {
     // TODO remove duplication of identical gui method
     StringBuilder text = new StringBuilder(32);
@@ -430,7 +430,7 @@ public class SeqPanel extends Panel implements MouseMotionListener,
     /*
      * Try to translate the display character to residue name (null for gap).
      */
-    final String displayChar = String.valueOf(sequence.getCharAt(res));
+    final String displayChar = String.valueOf(sequence.getCharAt(column));
     if (av.getAlignment().isNucleotide())
     {
       residue = ResidueProperties.nucleotideName.get(displayChar);
@@ -453,7 +453,7 @@ public class SeqPanel extends Panel implements MouseMotionListener,
     int pos = -1;
     if (residue != null)
     {
-      pos = sequence.findPosition(res);
+      pos = sequence.findPosition(column);
       text.append(" (").append(Integer.toString(pos)).append(")");
     }
 
index 92f797f..e81553b 100755 (executable)
@@ -189,12 +189,13 @@ public interface SequenceI extends ASequenceI
   public int findIndex(int pos);
 
   /**
-   * Returns the sequence position for an alignment position
+   * Returns the sequence position for an alignment position.
    * 
    * @param i
    *          column index in alignment (from 0..<length)
    * 
-   * @return residue number for residue (left of and) nearest ith column
+   * @return TODO: JAL-2562 - residue number for residue (left of and) nearest
+   *         ith column
    */
   public int findPosition(int i);
 
index 2884c50..20e585a 100644 (file)
@@ -870,7 +870,7 @@ public class SeqPanel extends JPanel implements MouseListener,
    *          alignment column
    * @param seq
    *          index of sequence in alignment
-   * @return position of res in sequence
+   * @return position of column in sequence or -1 if at a gap
    */
   int setStatusMessage(SequenceI sequence, final int column, int seq)
   {
diff --git a/src/jalview/ws/jws2/JPred301Client.java b/src/jalview/ws/jws2/JPred301Client.java
deleted file mode 100644 (file)
index c15f256..0000000
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * This file is part of Jalview.
- * 
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *  
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
- * PURPOSE.  See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.ws.jws2;
-
-import jalview.datamodel.AlignmentAnnotation;
-import jalview.datamodel.Annotation;
-import jalview.gui.AlignFrame;
-import jalview.ws.jws2.jabaws2.Jws2Instance;
-import jalview.ws.params.ArgumentI;
-import jalview.ws.params.OptionI;
-import jalview.ws.params.WsParamSetI;
-import jalview.ws.uimodel.AlignAnalysisUIText;
-
-import java.awt.Color;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import compbio.data.sequence.FastaSequence;
-import compbio.data.sequence.JpredAlignment;
-import compbio.metadata.Argument;
-
-public class JPred301Client extends JabawsMsaInterfaceAlignCalcWorker
-{
-  /**
-   * 
-   * @return default args for this service when run as dynamic web service
-   */
-  public List<Argument> selectDefaultArgs()
-  {
-    List<ArgumentI> rgs = new ArrayList<ArgumentI>();
-    for (ArgumentI argi : service.getParamStore().getServiceParameters())
-    {
-      if (argi instanceof OptionI)
-      {
-        List<String> o = ((OptionI) argi).getPossibleValues();
-        if (o.contains("-pred-nohits"))
-        {
-          OptionI cpy = ((OptionI) argi).copy();
-          cpy.setValue("-pred-nohits");
-          rgs.add(cpy);
-        }
-      }
-    }
-    return JabaParamStore.getJabafromJwsArgs(rgs);
-  }
-
-  public JPred301Client(Jws2Instance service, AlignFrame alignFrame,
-          WsParamSetI preset, List<Argument> paramset)
-  {
-    super(service, alignFrame, preset, paramset);
-    submitGaps = true;
-    alignedSeqs = true;
-    nucleotidesAllowed = false;
-    proteinAllowed = true;
-    gapMap = new boolean[0];
-    updateParameters(null, selectDefaultArgs());
-  }
-
-  @Override
-  boolean checkValidInputSeqs(boolean dynamic, List<FastaSequence> seqs)
-  {
-    return (seqs.size() > 1);
-  }
-
-  @Override
-  public String getServiceActionText()
-  {
-    return "calculating consensus secondary structure prediction using JPred service";
-  }
-
-  private static Map<String, String[]> jpredRowLabels = new HashMap<String, String[]>();
-
-  private static final Set<String> jpredRes_graph;
-
-  private static final Set<String> jpredRes_ssonly;
-  static
-  {
-    jpredRes_ssonly = new HashSet<String>();
-    jpredRes_ssonly.add("jnetpred".toLowerCase());
-    jpredRes_ssonly.add("jnetpssm".toLowerCase());
-    jpredRes_ssonly.add("jnethmm".toLowerCase());
-    jpredRes_graph = new HashSet<String>();
-    jpredRes_graph.add("jnetconf".toLowerCase());
-    jpredRes_graph.add("jnet burial".toLowerCase());
-  }
-
-  /**
-   * update the consensus annotation from the sequence profile data using
-   * current visualization settings.
-   */
-  @Override
-  public void updateResultAnnotation(boolean immediate)
-  {
-    if (immediate || !calcMan.isWorking(this) && msascoreset != null)
-    {
-      if (msascoreset instanceof compbio.data.sequence.JpredAlignment)
-      {
-        JpredAlignment jpres = (JpredAlignment) msascoreset;
-        int alWidth = alignViewport.getAlignment().getWidth();
-        ArrayList<AlignmentAnnotation> ourAnnot = new ArrayList<AlignmentAnnotation>();
-        char[] sol = new char[jpres.getJpredSequences().get(0).getLength()];
-        boolean firstsol = true;
-        for (FastaSequence fsq : jpres.getJpredSequences())
-        {
-          String[] k = jpredRowLabels.get(fsq.getId());
-          if (k == null)
-          {
-            k = new String[] { fsq.getId(), "JNet Output" };
-          }
-          if (fsq.getId().startsWith("JNETSOL"))
-          {
-            char amnt = (fsq.getId().endsWith("25") ? "3" : fsq.getId()
-                    .endsWith("5") ? "6" : "9").charAt(0);
-            char[] vseq = fsq.getSequence().toCharArray();
-            for (int spos = 0, sposL = fsq.getLength(); spos < sposL; spos++)
-            {
-              if (firstsol)
-              {
-                sol[spos] = '0';
-              }
-              if (vseq[spos] == 'B'
-                      && (sol[spos] == '0' || sol[spos] < amnt))
-              {
-                sol[spos] = amnt;
-              }
-            }
-            firstsol = false;
-          }
-          else
-          {
-            createAnnotationRowFromString(
-                    ourAnnot,
-                    getCalcId(),
-                    alWidth,
-                    k[0],
-                    k[1],
-                    jpredRes_graph.contains(fsq.getId()) ? AlignmentAnnotation.BAR_GRAPH
-                            : AlignmentAnnotation.NO_GRAPH, 0f, 9f,
-                    fsq.getSequence());
-          }
-
-        }
-        createAnnotationRowFromString(
-                ourAnnot,
-                getCalcId(),
-                alWidth,
-                "Jnet Burial",
-                "<html>Prediction of Solvent Accessibility<br/>levels are<ul><li>0 - Exposed</li><li>3 - 25% or more S.A. accessible</li><li>6 - 5% or more S.A. accessible</li><li>9 - Buried (<5% exposed)</li></ul>",
-                AlignmentAnnotation.BAR_GRAPH, 0f, 9f, new String(sol));
-        for (FastaSequence fsq : jpres.getSequences())
-        {
-          if (fsq.getId().equalsIgnoreCase("QUERY"))
-          {
-            createAnnotationRowFromString(ourAnnot, getCalcId(), alWidth,
-                    "Query", "JPred Reference Sequence",
-                    AlignmentAnnotation.NO_GRAPH, 0f, 0f, fsq.getSequence());
-          }
-        }
-        if (ourAnnot.size() > 0)
-        {
-          updateOurAnnots(ourAnnot);
-        }
-      }
-    }
-  }
-
-  private void createAnnotationRowFromString(
-          ArrayList<AlignmentAnnotation> ourAnnot, String calcId,
-          int alWidth, String label, String descr, int rowType, float min,
-          float max, String jpredPrediction)
-  {
-    // simple annotation row
-    AlignmentAnnotation annotation = alignViewport.getAlignment()
-            .findOrCreateAnnotation(label, calcId, true, null, null);
-    if (alWidth == gapMap.length) // scr.getScores().size())
-    {
-      annotation.label = new String(label);
-      annotation.description = new String(descr);
-      annotation.graph = rowType;
-      annotation.graphMin = min;
-      annotation.graphMax = max;
-      if (constructAnnotationFromString(annotation, jpredPrediction,
-              alWidth, rowType))
-      {
-        // created a valid annotation from the data
-        ourAnnot.add(annotation);
-        // annotation.validateRangeAndDisplay();
-      }
-    }
-  }
-
-  private boolean constructAnnotationFromString(
-          AlignmentAnnotation annotation, String sourceData, int alWidth,
-          int rowType)
-  {
-    if (sourceData.length() == 0 && alWidth > 0)
-    {
-      return false;
-    }
-    Annotation[] elm = new Annotation[alWidth];
-    boolean ssOnly = jpredRes_ssonly.contains(annotation.label
-            .toLowerCase());
-    boolean graphOnly = rowType != AlignmentAnnotation.NO_GRAPH;
-    if (!ssOnly && !graphOnly)
-    {
-      // for burial 'B'
-      annotation.showAllColLabels = true;
-    }
-
-    for (int i = 0, iSize = sourceData.length(); i < iSize; i++)
-    {
-      char annot = sourceData.charAt(i);
-      // if we're at a gapped column then skip to next ungapped position
-      if (gapMap != null && gapMap.length > 0)
-      {
-        while (!gapMap[i])
-        {
-          elm[i++] = new Annotation("", "", ' ', Float.NaN);
-        }
-      }
-      switch (rowType)
-      {
-      case AlignmentAnnotation.NO_GRAPH:
-        elm[i] = ssOnly ? new Annotation("", "", annot, Float.NaN,
-                colourSS(annot)) : new Annotation("" + annot, "" + annot,
-                '\0', Float.NaN);
-        break;
-      default:
-        try
-        {
-          elm[i] = new Annotation("" + annot, "" + annot, annot,
-                  Integer.valueOf("" + annot));
-        } catch (Exception x)
-        {
-          System.err.println("Expected numeric value in character '"
-                  + annot + "'");
-        }
-      }
-    }
-
-    annotation.annotations = elm;
-    annotation.belowAlignment = true;
-    annotation.validateRangeAndDisplay();
-    return true;
-  }
-
-  private Color colourSS(char annot)
-  {
-    switch (annot)
-    {
-    case 'H':
-      return jalview.renderer.AnnotationRenderer.HELIX_COLOUR;
-    case 'E':
-      return jalview.renderer.AnnotationRenderer.SHEET_COLOUR;
-    }
-    return jalview.renderer.AnnotationRenderer.GLYPHLINE_COLOR;
-  }
-
-  @Override
-  public String getCalcId()
-  {
-    return CALC_ID;
-  }
-
-  private static String CALC_ID = "jabaws21.JPred3Cons";
-
-  public static AlignAnalysisUIText getAlignAnalysisUITest()
-  {
-    return new AlignAnalysisUIText(
-            compbio.ws.client.Services.JpredWS.toString(),
-            jalview.ws.jws2.JPred301Client.class, CALC_ID, false, true,
-            true, "JPred Consensus",
-            "When checked, JPred consensus is updated automatically.",
-            "Change JPred Settings...",
-            "Modify settings for JPred calculations.");
-  }
-}
index 7c8395f..671b5f1 100644 (file)
@@ -21,7 +21,6 @@
 package jalview.ws.jws2.jabaws2;
 
 import jalview.ws.jws2.AAConClient;
-import jalview.ws.jws2.JPred301Client;
 import jalview.ws.jws2.RNAalifoldClient;
 import jalview.ws.uimodel.AlignAnalysisUIText;
 
@@ -51,11 +50,8 @@ public class Jws2InstanceFactory
               AAConClient.getAlignAnalysisUITest());
       aaConGUI.put(compbio.ws.client.Services.RNAalifoldWS.toString(),
               RNAalifoldClient.getAlignAnalysisUITest());
-      // disable the JPred301 client in jalview ...
+      // ignore list for JABAWS services not supported in jalview ...
       ignoreGUI = new HashSet<String>();
-      ignoreGUI.add(compbio.ws.client.Services.JpredWS.toString());
-      aaConGUI.put(compbio.ws.client.Services.JpredWS.toString(),
-              JPred301Client.getAlignAnalysisUITest());
     }
   }
 
diff --git a/test/jalview/gui/SeqPanelTest.java b/test/jalview/gui/SeqPanelTest.java
new file mode 100644 (file)
index 0000000..53dff0e
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ * 
+ * This file is part of Jalview.
+ * 
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
+ * Jalview is distributed in the hope that it will be useful, but 
+ * WITHOUT ANY WARRANTY; without even the implied warranty 
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
+ * PURPOSE.  See the GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.gui;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.Sequence;
+import jalview.datamodel.SequenceI;
+
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+public class SeqPanelTest
+{
+  AlignFrame af;
+
+  @BeforeClass(alwaysRun = true)
+  public void setUpJvOptionPane()
+  {
+    JvOptionPane.setInteractiveMode(false);
+    JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
+  }
+  @Test(groups = "Functional")
+  public void testSetStatusReturnsPosOrMinusOne()
+  {
+    SequenceI seq1 = new Sequence("Seq1", "AACDE");
+    SequenceI seq2 = new Sequence("Seq2", "AA--E");
+    AlignmentI al = new Alignment(new SequenceI[] { seq1, seq2 });
+    AlignFrame alignFrame = new AlignFrame(al, al.getWidth(),
+            al.getHeight());
+    AlignmentI visAl = alignFrame.getViewport().getAlignment();
+    // Test either side of gap
+    // This first assert fails due to JAL-2563
+    assertEquals(
+            alignFrame.alignPanel.getSeqPanel().setStatusMessage(
+                    visAl.getSequenceAt(1), 1, 1), 2);
+    assertEquals(
+            alignFrame.alignPanel.getSeqPanel().setStatusMessage(
+                    visAl.getSequenceAt(1), 4, 1), 3);
+    // Test gaps are -1
+    assertEquals(
+            alignFrame.alignPanel.getSeqPanel().setStatusMessage(
+                    visAl.getSequenceAt(1), 2, 1), -1);
+    assertEquals(
+            alignFrame.alignPanel.getSeqPanel().setStatusMessage(
+                    visAl.getSequenceAt(1), 3, 1), -1);
+  }
+
+  @Test(groups = "Functional")
+  public void testAmbiguousAminoAcidGetsStatusMessage()
+  {
+    SequenceI seq1 = new Sequence("Seq1", "ABCDE");
+    SequenceI seq2 = new Sequence("Seq2", "AB--E");
+    AlignmentI al = new Alignment(new SequenceI[] { seq1, seq2 });
+    AlignFrame alignFrame = new AlignFrame(al, al.getWidth(),
+            al.getHeight());
+    AlignmentI visAl = alignFrame.getViewport().getAlignment();
+    // Test either side of gap
+    // This first assert fails due to JAL-2563
+    assertEquals(
+            alignFrame.alignPanel.getSeqPanel().setStatusMessage(
+                    visAl.getSequenceAt(1), 1, 1), 2);
+    assertTrue(alignFrame.statusBar.getText().contains("(2)"));
+  }
+}
diff --git a/test/jalview/ws/jabaws/JpredJabaStructExportImport.java b/test/jalview/ws/jabaws/JpredJabaStructExportImport.java
deleted file mode 100644 (file)
index dc157e2..0000000
+++ /dev/null
@@ -1,327 +0,0 @@
-/*
- * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
- * Copyright (C) $$Year-Rel$$ The Jalview Authors
- * 
- * This file is part of Jalview.
- * 
- * Jalview is free software: you can redistribute it and/or
- * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3
- * of the License, or (at your option) any later version.
- *  
- * Jalview is distributed in the hope that it will be useful, but 
- * WITHOUT ANY WARRANTY; without even the implied warranty 
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
- * PURPOSE.  See the GNU General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
- * The Jalview Authors are detailed in the 'AUTHORS' file.
- */
-package jalview.ws.jabaws;
-
-import static org.testng.AssertJUnit.assertNotNull;
-import static org.testng.AssertJUnit.assertTrue;
-
-import jalview.bin.Cache;
-import jalview.datamodel.AlignmentI;
-import jalview.gui.Jalview2XML;
-import jalview.gui.JvOptionPane;
-import jalview.io.AnnotationFile;
-import jalview.io.DataSourceType;
-import jalview.io.FileFormat;
-import jalview.io.FormatAdapter;
-import jalview.io.StockholmFileTest;
-import jalview.ws.jws2.JPred301Client;
-import jalview.ws.jws2.JabaParamStore;
-import jalview.ws.jws2.Jws2Discoverer;
-import jalview.ws.jws2.SequenceAnnotationWSClient;
-import jalview.ws.jws2.jabaws2.Jws2Instance;
-import jalview.ws.params.AutoCalcSetting;
-
-import java.awt.Component;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.swing.JMenu;
-import javax.swing.JMenuItem;
-
-import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.BeforeGroups;
-import org.testng.annotations.Test;
-
-import compbio.metadata.Argument;
-import compbio.metadata.WrongParameterException;
-
-public class JpredJabaStructExportImport
-{
-
-  @BeforeClass(alwaysRun = true)
-  public void setUpJvOptionPane()
-  {
-    JvOptionPane.setInteractiveMode(false);
-    JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
-  }
-
-  public static String testseqs = "examples/uniref50.fa";
-
-  public static Jws2Discoverer disc;
-
-  public static Jws2Instance jpredws;
-
-  jalview.ws.jws2.JPred301Client jpredClient;
-
-  public static jalview.gui.AlignFrame af = null;
-
-  @BeforeGroups(groups = { "Network" })
-  public static void setUpBeforeClass() throws Exception
-  {
-    Cache.loadProperties("test/jalview/io/testProps.jvprops");
-    Cache.initLogger();
-    disc = JalviewJabawsTestUtils.getJabawsDiscoverer(false);
-
-    for (Jws2Instance svc : disc.getServices())
-    {
-      if (svc.getServiceTypeURI().toLowerCase().contains("jpred"))
-      {
-        jpredws = svc;
-      }
-    }
-
-    System.out.println("State of jpredws: " + jpredws);
-    Assert.assertNotNull(jpredws, "jpredws is null!");
-    jalview.io.FileLoader fl = new jalview.io.FileLoader(false);
-    af = fl.LoadFileWaitTillLoaded(testseqs, jalview.io.DataSourceType.FILE);
-    assertNotNull("Couldn't load test data ('" + testseqs + "')", af);
-  }
-
-  @AfterClass(alwaysRun = true)
-  public static void tearDownAfterClass() throws Exception
-  {
-    if (af != null)
-    {
-      af.setVisible(false);
-      af.dispose();
-    }
-  }
-
-  @Test(groups = { "Network" }, enabled = false)
-  public void testJPredStructOneSeqOnly()
-  {
-    af.selectAllSequenceMenuItem_actionPerformed(null);
-    af.getViewport()
-            .getSelectionGroup()
-            .addOrRemove(
-                    af.getViewport().getSelectionGroup().getSequenceAt(0),
-                    false);
-    af.hideSelSequences_actionPerformed(null);
-    jpredClient = new JPred301Client(jpredws, af, null, null);
-
-    assertTrue(
-            "Didn't find any default args to check for. Buggy implementation of hardwired arguments in client.",
-            jpredClient.selectDefaultArgs().size() > 0);
-
-    boolean success = false;
-    af.getViewport().getCalcManager().startWorker(jpredClient);
-    do
-    {
-      try
-      {
-        Thread.sleep(500);
-        List<Argument> args = JabaParamStore.getJabafromJwsArgs(af
-                .getViewport()
-                .getCalcIdSettingsFor(jpredClient.getCalcId())
-                .getArgumentSet()), defargs = jpredClient
-                .selectDefaultArgs();
-        for (Argument rg : args)
-        {
-          for (Argument defg : defargs)
-          {
-            if (defg.equals(rg))
-            {
-              success = true;
-            }
-          }
-        }
-        if (!success)
-        {
-          jpredClient.cancelCurrentJob();
-          Assert.fail("Jpred Client didn't run with hardwired default parameters.");
-        }
-
-      } catch (InterruptedException x)
-      {
-      }
-      ;
-    } while (af.getViewport().getCalcManager().isWorking());
-
-  }
-
-  @Test(groups = { "Network" }, enabled = false)
-  public void testJPredStructExport()
-  {
-
-    jpredClient = new JPred301Client(jpredws, af, null, null);
-
-    af.getViewport().getCalcManager().startWorker(jpredClient);
-
-    do
-    {
-      try
-      {
-        Thread.sleep(50);
-      } catch (InterruptedException x)
-      {
-      }
-      ;
-    } while (af.getViewport().getCalcManager().isWorking());
-
-    AlignmentI orig_alig = af.getViewport().getAlignment();
-
-    testAnnotationFileIO("Testing JPredWS Annotation IO", orig_alig);
-
-  }
-
-  public static void testAnnotationFileIO(String testname, AlignmentI al)
-  {
-    try
-    {
-      // what format would be appropriate for RNAalifold annotations?
-      String aligfileout = FileFormat.Pfam.getWriter(null).print(
-              al.getSequencesArray(), true);
-
-      String anfileout = new AnnotationFile()
-              .printAnnotationsForAlignment(al);
-      assertTrue(
-              "Test "
-                      + testname
-                      + "\nAlignment annotation file was not regenerated. Null string",
-              anfileout != null);
-      assertTrue(
-              "Test "
-                      + testname
-                      + "\nAlignment annotation file was not regenerated. Empty string",
-              anfileout.length() > "JALVIEW_ANNOTATION".length());
-
-      System.out.println("Output annotation file:\n" + anfileout
-              + "\n<<EOF\n");
-
-      // again what format would be appropriate?
-      AlignmentI al_new = new FormatAdapter().readFile(aligfileout,
-              DataSourceType.PASTE, FileFormat.Fasta);
-      assertTrue(
-              "Test "
-                      + testname
-                      + "\nregenerated annotation file did not annotate alignment.",
-              new AnnotationFile().readAnnotationFile(al_new, anfileout,
-                      DataSourceType.PASTE));
-
-      // test for consistency in io
-      StockholmFileTest.testAlignmentEquivalence(al, al_new, false, false,
-              false);
-      return;
-    } catch (Exception e)
-    {
-      e.printStackTrace();
-    }
-    Assert.fail("Test "
-            + testname
-            + "\nCouldn't complete Annotation file roundtrip input/output/input test.");
-  }
-
-  @Test(groups = { "Network" }, enabled = false)
-  public void testJpredwsSettingsRecovery()
-  {
-    Assert.fail("not implemnented");
-    List<compbio.metadata.Argument> opts = new ArrayList<compbio.metadata.Argument>();
-    for (compbio.metadata.Argument rg : (List<compbio.metadata.Argument>) jpredws
-            .getRunnerConfig().getArguments())
-    {
-      if (rg.getDescription().contains("emperature"))
-      {
-        try
-        {
-          rg.setValue("292");
-        } catch (WrongParameterException q)
-        {
-          Assert.fail("Couldn't set the temperature parameter "
-                  + q.getStackTrace());
-        }
-        opts.add(rg);
-      }
-      if (rg.getDescription().contains("max"))
-      {
-        opts.add(rg);
-      }
-    }
-    jpredClient = new JPred301Client(jpredws, af, null, opts);
-
-    af.getViewport().getCalcManager().startWorker(jpredClient);
-
-    do
-    {
-      try
-      {
-        Thread.sleep(50);
-      } catch (InterruptedException x)
-      {
-      }
-      ;
-    } while (af.getViewport().getCalcManager().isWorking());
-    AutoCalcSetting oldacs = af.getViewport().getCalcIdSettingsFor(
-            jpredClient.getCalcId());
-    String oldsettings = oldacs.getWsParamFile();
-    // write out parameters
-    jalview.gui.AlignFrame nalf = null;
-    assertTrue("Couldn't write out the Jar file",
-            new Jalview2XML(false).saveAlignment(af,
-                    "testJPredWS_param.jar", "trial parameter writeout"));
-    assertTrue("Couldn't read back the Jar file", (nalf = new Jalview2XML(
-            false).loadJalviewAlign("testJpredWS_param.jar")) != null);
-    if (nalf != null)
-    {
-      AutoCalcSetting acs = af.getViewport().getCalcIdSettingsFor(
-              jpredClient.getCalcId());
-      assertTrue("Calc ID settings not recovered from viewport stash",
-              acs.equals(oldacs));
-      assertTrue(
-              "Serialised Calc ID settings not identical to those recovered from viewport stash",
-              acs.getWsParamFile().equals(oldsettings));
-      JMenu nmenu = new JMenu();
-      new SequenceAnnotationWSClient()
-              .attachWSMenuEntry(nmenu, jpredws, af);
-      assertTrue("Couldn't get menu entry for service",
-              nmenu.getItemCount() > 0);
-      for (Component itm : nmenu.getMenuComponents())
-      {
-        if (itm instanceof JMenuItem)
-        {
-          JMenuItem i = (JMenuItem) itm;
-          if (i.getText().equals(
-                  jpredws.getAlignAnalysisUI().getAAconToggle()))
-          {
-            i.doClick();
-            break;
-          }
-        }
-      }
-      while (af.getViewport().isCalcInProgress())
-      {
-        try
-        {
-          Thread.sleep(200);
-        } catch (Exception x)
-        {
-        }
-        ;
-      }
-      AutoCalcSetting acs2 = af.getViewport().getCalcIdSettingsFor(
-              jpredClient.getCalcId());
-      assertTrue(
-              "Calc ID settings after recalculation has not been recovered.",
-              acs2.getWsParamFile().equals(oldsettings));
-    }
-  }
-}
index 998524a..6af831f 100644 (file)
@@ -66,6 +66,11 @@ public class MinJabawsClientTests
       MsaWS msaservice = null;
       for (Services service : registry.getSupportedServices())
       {
+        if (service == null)
+        {
+          // the 'unsupported service'
+          continue;
+        }
         if (service.equals(Services.ClustalOWS))
         {
           msaservice = (MsaWS) Jws2Client.connect(url, service);
index 5ea97ff..089c29f 100644 (file)
@@ -202,7 +202,9 @@ public class RNAStructExportImport
     } while (af.getViewport().getCalcManager().isWorking());
 
     AlignmentI orig_alig = af.getViewport().getAlignment();
-
+    // JBPNote: this assert fails (2.10.2) because the 'Reference Positions'
+    // annotation is mistakenly recognised as an RNA annotation row when read in
+    // as an annotation file.
     verifyAnnotationFileIO("Testing RNAalifold Annotation IO", orig_alig);
 
   }