Merge branch 'develop' into features/JAL-3010ontologyFeatureSettings features/JAL-3010ontologyFeatureSettings
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Fri, 12 Jul 2019 13:38:34 +0000 (14:38 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Fri, 12 Jul 2019 13:38:34 +0000 (14:38 +0100)
Conflicts:
test/jalview/gui/AlignFrameTest.java

1  2 
resources/lang/Messages.properties
resources/lang/Messages_es.properties
src/jalview/gui/AlignFrame.java
src/jalview/gui/CrossRefAction.java
src/jalview/io/gff/SequenceOntologyLite.java
test/jalview/gui/AlignFrameTest.java

@@@ -801,7 -801,6 +801,7 @@@ label.rest_client_submit = {0} using {1
  label.fetch_retrieve_from =Retrieve from {0}</html>
  label.fetch_retrieve_from_all_sources = Retrieve from all {0} sources in {1}<br>First is :{2}<html> 
  label.feature_settings_click_drag = Drag up or down to change render order.<br/>Double click to select columns containing feature.
 +label.feature_settings_select_columns = Double click to select columns containing feature
  label.transparency_tip = Adjust transparency to 'see through' feature colours.
  label.opt_and_params_further_details = see further details by right-clicking
  label.opt_and_params_show_brief_desc_image_link = <html>Click to show brief description<br><img src="{0}"/> Right click for further information.</html> 
@@@ -1227,9 -1226,6 +1227,6 @@@ label.structure_chooser_filter_time = S
  label.structure_chooser_no_of_structures = Structure Chooser - {0} Found ({1})
  info.no_pdb_entry_found_for = No PDB entry found for {0}
  exception.unable_to_detect_internet_connection = Jalview is unable to detect an internet connection
- exception.fts_rest_service_no_longer_available = {0} rest services no longer available!
- exception.resource_not_be_found = The requested resource could not be found
- exception.fts_server_error = There seems to be an error from the {0} server
  exception.fts_server_unreachable = Jalview is unable to reach the {0} server. \nPlease ensure that you are connected to the internet and try again.
  label.nw_mapping = Needleman & Wunsch Alignment
  label.sifts_mapping = SIFTs Mapping
@@@ -1246,8 -1242,6 +1243,6 @@@ action.next_page= >
  action.prev_page= << 
  label.next_page_tooltip=Next Page
  label.prev_page_tooltip=Previous Page
- exception.bad_request=Bad request. There is a problem with your input.
- exception.service_not_available=Service not available. The server is being updated, try again later.
  status.launching_3d_structure_viewer = Launching 3D Structure viewer...
  status.fetching_3d_structures_for_selected_entries = Fetching 3D Structures for selected entries...
  status.fetching_dbrefs_for_sequences_without_valid_refs = Fetching db refs for {0} sequence(s) without valid db ref required for SIFTS mapping
@@@ -1340,10 -1334,6 +1335,10 @@@ label.most_bound_molecules = Most Boun
  label.most_polymer_residues = Most Polymer Residues
  label.cached_structures = Cached Structures
  label.free_text_search = Free Text Search
 +label.summary_view = Summary View
 +label.group_by_so = Group features by Sequence Ontology
 +label.apply_to_subtypes = Apply to features and sub-types of
 +label.apply_also_to = Apply also to:
  label.backupfiles_confirm_delete = Confirm delete
  label.backupfiles_confirm_delete_old_files = Delete the following older backup files? (see the Backups tab in Preferences for more options)
  label.backupfiles_confirm_save_file = Confirm save file
@@@ -726,8 -726,7 +726,8 @@@ label.services_at = Servicios en {0
  label.rest_client_submit = {0} utilizando {1}
  label.fetch_retrieve_from =Recuperar de {0}
  label.fetch_retrieve_from_all_sources = Recuperar de todas las fuentes {0} en {1}<br>La primera es :{2}
 -label.feature_settings_click_drag = Haga clic o arrastre los tipos de las características hacia arriba o hacia abajo para cambiar el orden de visualización.<br/>Haga doble clic para seleccionar las columnas que contienen las características del alineamiento/selección actual.<br/>
 +label.feature_settings_click_drag = Haga clic o arrastre los tipos de las características hacia arriba o hacia abajo para cambiar el orden de visualización.<br/>Haga doble clic para seleccionar las columnas que contienen las características del alineamiento/selección actual.
 +label.feature_settings_select_columns =Haga doble clic para seleccionar las columnas que contienen las características del alineamiento/selección actual
  label.opt_and_params_further_details = ver los detalles adicionales haciendo clic en el botón derecho
  label.opt_and_params_show_brief_desc_image_link = Haga clic para ver una descripción breve<br><img src="{0}"/>Haga clic en el botón derecho para obtener información adicional.
  label.opt_and_params_show_brief_desc = Haga clic para ver una descripción breve<br>
@@@ -1201,7 -1200,6 +1201,6 @@@ tooltip.rnalifold_settings=Modificar l
  label.show_selected_annotations=Mostrar anotaciones seleccionadas
  status.colouring_chimera=Coloreando Chimera
  label.configure_displayed_columns=Configurar Columnas Mostradas
- exception.resource_not_be_found=El recurso solicitado no se ha encontrado
  label.aacon_calculations=cálculos AACon
  label.pdb_web-service_error=Error de servicio web PDB
  exception.unable_to_detect_internet_connection=Jalview no puede detectar una conexión a Internet
@@@ -1226,13 -1224,10 +1225,10 @@@ exception.fts_server_unreachable=Jalvie
  exception.outofmemory_loading_mmcif_file=Sin memoria al cargar el fichero mmCIF
  label.hide_columns_not_containing=Ocultar las columnas que no contengan
  label.pdb_sequence_fetcher=Recuperador de secuencias PDB
- exception.fts_server_error=Parece que hay un error desde el servidor {0}
- exception.service_not_available=Servicio no disponible. El servidor se está actualizando, vuelva a intentarlo más tarde.
  status.waiting_for_user_to_select_output_file=Esperando que el usuario seleccione el fichero {0}
  action.prev_page=<< 
  status.cancelled_image_export_operation=Operación de exportación {0} cancelada
  label.couldnt_run_groovy_script=No se ha podido ejecutar el script Groovy
- exception.bad_request=Solicitud incorrecta. Hay un problema con su entrada.
  label.run_groovy=Ejecutar script Groovy desde la consola
  action.next_page=>> 
  label.uniprot_sequence_fetcher=Recuperador de secuencias UniProt
@@@ -1248,7 -1243,6 +1244,6 @@@ label.next_page_tooltip=Página siguient
  label.sifts_mapping=Mapeado SIFTs
  label.mapping_method=Método de mapeo de secuencia \u27F7 estructura
  info.error_creating_file=Error al crear fichero {0}
- exception.fts_rest_service_no_longer_available= Servicios Rest {0} ya no están disponibles! 
  status.launching_3d_structure_viewer=Lanzando visualizador de estructura 3D...
  status.obtaining_mapping_with_sifts=Obteniendo mapeo por SIFTS
  status.fetching_3d_structures_for=Buscando la estructura 3D para {0}
@@@ -1341,10 -1335,6 +1336,10 @@@ label.most_bound_molecules = Más Molécu
  label.most_polymer_residues = Más Residuos de Polímeros
  label.cached_structures = Estructuras en Caché
  label.free_text_search = Búsqueda de texto libre
 +label.summary_view = Vista Resumida
 +label.group_by_so = Agrupar por términos de la Sequence Ontology
 +label.apply_to_subtypes = Aplicar también a características y subtipos de
 +label.apply_also_to = Aplicar también a:
  label.backupfiles_confirm_delete = Confirmar borrar
  label.backupfiles_confirm_delete_old_files = ¿Borrar los siguientes archivos? (ver la pestaña 'Copias' de la ventana de Preferencias para más opciones)
  label.backupfiles_confirm_save_file = Confirmar guardar archivo
@@@ -33,6 -33,7 +33,7 @@@ import jalview.api.AlignViewControllerI
  import jalview.api.AlignViewportI;
  import jalview.api.AlignmentViewPanel;
  import jalview.api.FeatureSettingsControllerI;
+ import jalview.api.FeatureSettingsModelI;
  import jalview.api.SplitContainerI;
  import jalview.api.ViewStyleI;
  import jalview.api.analysis.SimilarityParamsI;
@@@ -4935,6 -4936,13 +4936,13 @@@ public class AlignFrame extends GAlignF
                @Override
                public void finished()
                {
+                 for (FeatureSettingsModelI srcSettings : dbRefFetcher
+                         .getFeatureSettingsModels())
+                 {
+                   alignPanel.av.mergeFeaturesStyle(srcSettings);
+                 }
                  AlignFrame.this.setMenusForViewport();
                }
              });
                                    @Override
                                    public void finished()
                                    {
+                                     FeatureSettingsModelI srcSettings = dassource[0]
+                                             .getFeatureColourScheme();
+                                     alignPanel.av.mergeFeaturesStyle(
+                                             srcSettings);
                                      AlignFrame.this.setMenusForViewport();
                                    }
                                  });
    }
  
    /**
 -   * Hides columns containing (or not containing) a specified feature, provided
 -   * that would not leave all columns hidden
 +   * Hides columns containing (or not containing) the specified feature(s),
 +   * provided that would not leave all columns hidden
     * 
 -   * @param featureType
     * @param columnsContaining
 +   * @param featureTypes
 +   * 
     * @return
     */
 -  public boolean hideFeatureColumns(String featureType,
 -          boolean columnsContaining)
 +  public boolean hideFeatureColumns(boolean columnsContaining,
 +          String... featureTypes)
    {
      boolean notForHiding = avc.markColumnsContainingFeatures(
 -            columnsContaining, false, false, featureType);
 +            columnsContaining, false, false, featureTypes);
      if (notForHiding)
      {
        if (avc.markColumnsContainingFeatures(!columnsContaining, false,
 -              false, featureType))
 +              false, featureTypes))
        {
          getViewport().hideSelectedColumns();
          return true;
@@@ -111,6 -111,13 +111,13 @@@ public class CrossRefAction implements 
        FeatureSettingsModelI featureColourScheme = new SequenceFetcher()
                .getFeatureColourScheme(source);
  
+       if (dna && AlignmentUtils.looksLikeEnsembl(alignment))
+       {
+         // override default featureColourScheme so products have Ensembl variant colours
+         featureColourScheme = new SequenceFetcher()
+                 .getFeatureColourScheme(DBRefSource.ENSEMBL);
+       }
        AlignmentI xrefsAlignment = makeCrossReferencesAlignment(dataset,
                xrefs);
        if (!dna)
                AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
        if (Cache.getDefault("HIDE_INTRONS", true))
        {
 -        newFrame.hideFeatureColumns(SequenceOntologyI.EXON, false);
 +        newFrame.hideFeatureColumns(false, SequenceOntologyI.EXON);
        }
        String newtitle = String.format("%s %s %s",
                dna ? MessageManager.getString("label.proteins")
  
        /*
         * apply 'database source' feature configuration
-        * if any was found
+        * if any - first to the new splitframe view about to be displayed
         */
-       // TODO is this the feature colouring for the original
-       // alignment or the fetched xrefs? either could be Ensembl
        newFrame.getViewport().applyFeaturesStyle(featureColourScheme);
        copyThis.getViewport().applyFeaturesStyle(featureColourScheme);
  
+       /*
+        * and for JAL-3330 also to original alignFrame view(s)
+        * this currently trashes any original settings.
+        */
+       for (AlignmentViewPanel origpanel: alignFrame.getAlignPanels()) {
+         origpanel.getAlignViewport()
+                 .mergeFeaturesStyle(featureColourScheme);
+       }
        SplitFrame sf = new SplitFrame(dna ? copyThis : newFrame,
                dna ? newFrame : copyThis);
        newFrame.setVisible(true);
        copyThis.setVisible(true);
        String linkedTitle = MessageManager
              seq.getLength());
      if (geneLoci != null)
      {
-       MapList map = geneLoci.getMap();
+       MapList map = geneLoci.getMapping();
        int mappedFromLength = MappingUtils.getLength(map.getFromRanges());
        if (mappedFromLength == seq.getLength())
        {
          seq.setGeneLoci(geneLoci.getSpeciesId(), geneLoci.getAssemblyId(),
-                 geneLoci.getChromosomeId(), geneLoci.getMap());
+                 geneLoci.getChromosomeId(), map);
          retrievedLoci.put(dbref, geneLoci);
          return true;
        }
              seq.getLength());
      if (geneLoci != null)
      {
-       MapList map = geneLoci.getMap();
+       MapList map = geneLoci.getMapping();
        int mappedFromLength = MappingUtils.getLength(map.getFromRanges());
        if (mappedFromLength == seq.getLength())
        {
          seq.setGeneLoci(geneLoci.getSpeciesId(), geneLoci.getAssemblyId(),
-                 geneLoci.getChromosomeId(), geneLoci.getMap());
+                 geneLoci.getChromosomeId(), map);
          retrievedLoci.put(dbref, geneLoci);
          return true;
        }
@@@ -20,8 -20,6 +20,8 @@@
   */
  package jalview.io.gff;
  
 +import jalview.datamodel.ontology.OntologyBase;
 +
  import java.util.ArrayList;
  import java.util.Collections;
  import java.util.HashMap;
@@@ -40,8 -38,7 +40,8 @@@ import java.util.Map
   * @author gmcarstairs
   *
   */
 -public class SequenceOntologyLite implements SequenceOntologyI
 +public class SequenceOntologyLite extends OntologyBase
 +        implements SequenceOntologyI
  {
    /*
     * initial selection of types of interest when processing Ensembl features
@@@ -73,6 -70,7 +73,7 @@@
      { "snRNA", "transcript" },
      { "miRNA", "transcript" },
      { "lincRNA", "transcript" },
+     { "lnc_RNA", "transcript" },
      { "rRNA", "transcript" },
      { "mRNA", "transcript" },
      // there are many more sub-types of ncRNA...
      { "sequence_variant", "sequence_variant" },
      { "structural_variant", "sequence_variant" },
      { "feature_variant", "sequence_variant" },
 +    { "upstream_gene_variant", "sequence_variant" },
      { "gene_variant", "sequence_variant" },
      { "transcript_variant", "sequence_variant" },
 +    { "non_coding_transcript_variant", "sequence_variant" },
 +    { "non_coding_transcript_exon_variant", "sequence_variant" },
      // NB Ensembl uses NMD_transcript_variant as if a 'transcript'
      // but we model it here correctly as per the SO
      { "NMD_transcript_variant", "sequence_variant" },
        return termsNotFound;
      }
    }
 +
 +  @Override
 +  public List<String> getRootParents(final String term)
 +  {
 +    /*
 +     * check in cache first
 +     */
 +    if (rootParents.containsKey(term))
 +    {
 +      return rootParents.get(term);
 +    }
 +
 +    List<String> top = new ArrayList<>();
 +    List<String> query = new ArrayList<>();
 +    query.add(term);
 +
 +    while (!query.isEmpty())
 +    {
 +      List<String> nextQuery = new ArrayList<>();
 +      for (String q : query)
 +      {
 +        List<String> theParents = parents.get(q);
 +        if (theParents != null)
 +        {
 +          if (theParents.size() == 1 && theParents.get(0).equals(q))
 +          {
 +            /*
 +             * top-level term
 +             */
 +            if (!top.contains(q))
 +            {
 +              top.add(q);
 +            }
 +          }
 +          else
 +          {
 +            for (String p : theParents)
 +            {
 +              if (!p.equals(q))
 +              {
 +                nextQuery.add(p);
 +              }
 +            }
 +          }
 +        }
 +      }
 +      query = nextQuery;
 +    }
 +
 +    rootParents.put(term, top);
 +
 +    return top.isEmpty() ? null : top;
 +  }
 +
 +  @Override
 +  public List<String> getParents(String term)
 +  {
 +    List<String> result = parents.get(term);
 +    return result == null ? new ArrayList<>() : result;
 +  }
 +
 +  @Override
 +  public boolean isValidTerm(String term)
 +  {
 +    return parents.containsKey(term);
 +  }
  }
@@@ -62,7 -62,53 +62,53 @@@ public class AlignFrameTes
    AlignFrame af;
  
    @BeforeClass(alwaysRun = true)
-   public void setUpJvOptionPane()
+   public static void setUpBeforeClass() throws Exception
+   {
+     setUpJvOptionPane();
+     /*
+      * use read-only test properties file
+      */
+     Cache.loadProperties("test/jalview/io/testProps.jvprops");
+     Jalview.main(new String[] { "-nonews" });
+   }
+   @AfterMethod(alwaysRun = true)
+   public void tearDown()
+   {
+     Desktop.instance.closeAll_actionPerformed(null);
+   }
+   /**
+    * configure (read-only) properties for test to ensure Consensus is computed for
+    * colour Above PID testing
+    */
+   @BeforeMethod(alwaysRun = true)
+   public void setUp()
+   {
+     Cache.loadProperties("test/jalview/io/testProps.jvprops");
+     Cache.applicationProperties.setProperty("SHOW_IDENTITY",
+             Boolean.TRUE.toString());
+     af = new FileLoader().LoadFileWaitTillLoaded("examples/uniref50.fa",
+             DataSourceType.FILE);
+     /*
+      * wait for Consensus thread to complete
+      */
+     synchronized (this)
+     {
+       while (af.getViewport().getConsensusSeq() == null)
+       {
+         try
+         {
+           wait(50);
+         } catch (InterruptedException e)
+         {
+         }
+       }
+     }
+   }
+   public static void setUpJvOptionPane()
    {
      JvOptionPane.setInteractiveMode(false);
      JvOptionPane.setMockResponse(JvOptionPane.CANCEL_OPTION);
    @Test(groups = "Functional")
    public void testHideFeatureColumns()
    {
 -    SequenceI seq1 = new Sequence("Seq1", "ABCDEFGHIJ");
 -    SequenceI seq2 = new Sequence("Seq2", "ABCDEFGHIJ");
 -    seq1.addSequenceFeature(new SequenceFeature("Metal", "", 1, 5, 0f, null));
 -    seq2.addSequenceFeature(new SequenceFeature("Metal", "", 6, 10, 10f,
 -            null));
 -    seq1.addSequenceFeature(new SequenceFeature("Turn", "", 2, 4,
 -            Float.NaN, null));
 -    seq2.addSequenceFeature(new SequenceFeature("Turn", "", 7, 9,
 -            Float.NaN, null));
 +    SequenceI seq1 = new Sequence("Seq1/01-10", "A---BCDEFG-HIJ");
 +    SequenceI seq2 = new Sequence("Seq2/11-20", "-AB-CDEF--GHIJ");
 +    String METAL = "Metal";
 +    String TURN = "Turn";
 +    seq1.addSequenceFeature(
 +            new SequenceFeature(METAL, "", 1, 5, 0f, null));
 +    seq2.addSequenceFeature(
 +            new SequenceFeature(METAL, "", 16, 20, 10f, null));
 +    seq1.addSequenceFeature(
 +            new SequenceFeature(TURN, "", 2, 4, Float.NaN, null));
 +    seq2.addSequenceFeature(
 +            new SequenceFeature(TURN, "", 17, 19, Float.NaN, null));
      AlignmentI al = new Alignment(new SequenceI[] { seq1, seq2 });
      AlignFrame alignFrame = new AlignFrame(al, al.getWidth(),
              al.getHeight());
      /*
       * hiding a feature not present does nothing
       */
 -    assertFalse(alignFrame.hideFeatureColumns("exon", true));
 +    assertFalse(alignFrame.hideFeatureColumns(true, "exon"));
      assertTrue(alignFrame.getViewport().getColumnSelection().isEmpty());
      assertEquals(alignFrame.getViewport().getAlignment().getHiddenColumns()
              .getNumberOfRegions(), 0);
  
 -    assertFalse(alignFrame.hideFeatureColumns("exon", false));
 +    assertFalse(alignFrame.hideFeatureColumns(false, "exon"));
      assertTrue(alignFrame.getViewport().getColumnSelection().isEmpty());
 -
      assertEquals(alignFrame.getViewport().getAlignment().getHiddenColumns()
              .getNumberOfRegions(), 0);
  
      /*
       * hiding a feature in all columns does nothing
       */
 -    assertFalse(alignFrame.hideFeatureColumns("Metal", true));
 +    assertFalse(alignFrame.hideFeatureColumns(true, METAL));
      assertTrue(alignFrame.getViewport().getColumnSelection().isEmpty());
 -
      assertEquals(alignFrame.getViewport().getAlignment().getHiddenColumns()
              .getNumberOfRegions(), 0);
  
  
      /*
       * threshold Metal to hide features where score < 5
 -     * seq1 feature in columns 1-5 is hidden
 -     * seq2 feature in columns 6-10 is shown
 +     * seq1 feature in columns 1-8 is hidden
 +     * seq2 feature in columns 8-14 is shown
 +     * result: columns 8-14 are hidden
 +     * note this includes gapped columns spanned by the feature
       */
      FeatureColourI fc = new FeatureColour(null, Color.red, Color.blue, null,
              0f, 10f);
      fc.setAboveThreshold(true);
      fc.setThreshold(5f);
 -    alignFrame.getFeatureRenderer().setColour("Metal", fc);
 -    assertTrue(alignFrame.hideFeatureColumns("Metal", true));
 +    alignFrame.getFeatureRenderer().setColour(METAL, fc);
 +    assertTrue(alignFrame.hideFeatureColumns(true, METAL));
      HiddenColumns hidden = alignFrame.getViewport().getAlignment().getHiddenColumns();
      assertEquals(hidden.getNumberOfRegions(), 1);
      Iterator<int[]> regions = hidden.iterator();
 -    int[] next = regions.next();
 -    assertEquals(next[0], 5);
 -    assertEquals(next[1], 9);
 +    assertEquals(regions.next(), new int[] { 7, 13 }); // base 0
 +    assertFalse(regions.hasNext());
  
      /*
       * hide a feature present in some columns
 -     * sequence positions [2-4], [7-9] are column positions
 -     * [1-3], [6-8] base zero
 +     * seq1 positions [2-4] are column positions [4-6] base zero
 +     * seq2 positions [17-19] are column positions [10-12] base zero
       */
      alignFrame.getViewport().showAllHiddenColumns();
 -    assertTrue(alignFrame.hideFeatureColumns("Turn", true));
 +    assertTrue(alignFrame.hideFeatureColumns(true, TURN));
      regions = alignFrame.getViewport().getAlignment()
              .getHiddenColumns().iterator();
      assertEquals(alignFrame.getViewport().getAlignment().getHiddenColumns()
              .getNumberOfRegions(), 2);
 -    next = regions.next();
 -    assertEquals(next[0], 1);
 -    assertEquals(next[1], 3);
 -    next = regions.next();
 -    assertEquals(next[0], 6);
 -    assertEquals(next[1], 8);
 +    assertEquals(regions.next(), new int[] { 4, 6 });
 +    assertEquals(regions.next(), new int[] { 10, 12 });
 +    assertFalse(regions.hasNext());
 +    
 +    /*
 +     * hiding a contact feature should only hide start and end positions,
 +     * not the intermediate columns
 +     */
 +    String DISULFIDE = "Disulfide Bond";
 +    seq1.addSequenceFeature(
 +            new SequenceFeature(DISULFIDE, "", 1, 5, 0f, null));
 +    alignFrame.getViewport().showAllHiddenColumns();
 +    assertTrue(alignFrame.hideFeatureColumns(true, DISULFIDE));
 +    regions = alignFrame.getViewport().getAlignment().getHiddenColumns()
 +            .iterator();
 +    assertEquals(alignFrame.getViewport().getAlignment().getHiddenColumns()
 +            .getNumberOfRegions(), 2);
 +    assertEquals(regions.next(), new int[] { 0, 0 });
 +    assertEquals(regions.next(), new int[] { 7, 7 });
 +    assertFalse(regions.hasNext());
 +
 +    /*
 +     * hide multiple feature types:
 +     * TURN columns hides 4-6, 10-12
 +     * DISULFIDE columns hides 0, 7
 +     * combined is { 0-0, 4-7, 10-12 }
 +     */
 +    alignFrame.getViewport().showAllHiddenColumns();
 +    assertTrue(alignFrame.hideFeatureColumns(true, TURN, DISULFIDE));
 +    regions = alignFrame.getViewport().getAlignment().getHiddenColumns()
 +            .iterator();
 +    assertEquals(alignFrame.getViewport().getAlignment().getHiddenColumns()
 +            .getNumberOfRegions(), 3);
 +    assertEquals(regions.next(), new int[] { 0, 0 });
 +    assertEquals(regions.next(), new int[] { 4, 7 });
 +    assertEquals(regions.next(), new int[] { 10, 12 });
 +    assertFalse(regions.hasNext());
    }
  
-   @BeforeClass(alwaysRun = true)
-   public static void setUpBeforeClass() throws Exception
-   {
-     /*
-      * use read-only test properties file
-      */
-     Jalview.main(
-             new String[]
-             { "-nonews", "-props", "test/jalview/io/testProps.jvprops" });
-   }
-   @AfterMethod(alwaysRun = true)
-   public void tearDown()
-   {
-     Desktop.instance.closeAll_actionPerformed(null);
-   }
-   /**
-    * configure (read-only) properties for test to ensure Consensus is computed
-    * for colour Above PID testing
-    */
-   @BeforeMethod(alwaysRun = true)
-   public void setUp()
-   {
-     Cache.loadProperties("test/jalview/io/testProps.jvprops");
-     Cache.applicationProperties.setProperty("SHOW_IDENTITY",
-             Boolean.TRUE.toString());
-     af = new FileLoader().LoadFileWaitTillLoaded("examples/uniref50.fa",
-             DataSourceType.FILE);
-     /*
-      * wait for Consensus thread to complete
-      */
-     synchronized (this)
-     {
-       while (af.getViewport().getConsensusSeq() == null)
-       {
-         try
-         {
-           wait(50);
-         } catch (InterruptedException e)
-         {
-         }
-       }
-     }
-   }
    /**
     * Test that changing background (alignment) colour scheme
     * <ul>