Merge branch 'develop' into releases/Release_2_11_2_Branch
authorJim Procter <j.procter@dundee.ac.uk>
Fri, 1 Oct 2021 11:32:06 +0000 (12:32 +0100)
committerJim Procter <j.procter@dundee.ac.uk>
Fri, 1 Oct 2021 11:32:06 +0000 (12:32 +0100)
17 files changed:
j11lib/groovy-all-2.4.21-indy.jar [moved from j11lib/groovy-all-2.4.12-indy.jar with 58% similarity]
j8lib/groovy-all-2.4.21-indy.jar [moved from j8lib/groovy-all-2.4.12-indy.jar with 58% similarity]
resources/lang/Messages.properties
src/jalview/fts/service/threedbeacons/TDB_FTSData.java [new file with mode: 0644]
src/jalview/fts/service/threedbeacons/TDBeaconsFTSRestClient.java
src/jalview/gui/OptsAndParamsPage.java
src/jalview/gui/SequenceFetcher.java
src/jalview/gui/Slider.java
src/jalview/gui/StructureChooser.java
src/jalview/gui/structurechooser/ThreeDBStructureChooserQuerySource.java
src/jalview/io/FileFormat.java
src/jalview/jbgui/GStructureChooser.java
src/jalview/ws/DBRefFetcher.java
src/jalview/ws/dbsources/Uniprot.java
utils/install4j/file_associations_auto-Info_plist.xml
utils/install4j/file_associations_auto-install4j8.xml
utils/jalviewjs/classlists/jvexamplefile.txt

similarity index 58%
rename from j11lib/groovy-all-2.4.12-indy.jar
rename to j11lib/groovy-all-2.4.21-indy.jar
index bb246a3..15ee98d 100644 (file)
Binary files a/j11lib/groovy-all-2.4.12-indy.jar and b/j11lib/groovy-all-2.4.21-indy.jar differ
similarity index 58%
rename from j8lib/groovy-all-2.4.12-indy.jar
rename to j8lib/groovy-all-2.4.21-indy.jar
index bb246a3..15ee98d 100644 (file)
Binary files a/j8lib/groovy-all-2.4.12-indy.jar and b/j8lib/groovy-all-2.4.21-indy.jar differ
index fabd577..555bfbf 100644 (file)
@@ -513,7 +513,8 @@ label.retrieve_parse_sequence_database_records_alignment_or_selected_sequences =
 label.standard_databases = Standard Databases
 label.fetch_embl_uniprot = Fetch from EMBL/EMBLCDS or Uniprot/PDB and any selected DAS sources
 label.fetch_uniprot_references = Fetch Uniprot references
-label.search_3dbeacons = Find models with 3D-Beacons
+label.search_3dbeacons = 3D-Beacons Search
+label.find_models_from_3dbeacons = Search 3D-Beacons for 3D structures and models
 label.3dbeacons = 3D-Beacons
 label.fetch_references_for = Fetch database references for {0} sequences ?
 label.fetch_references_for_3dbeacons = 3D Beacons needs Uniprot References. Fetch database references for {0} sequences ?
@@ -1105,6 +1106,8 @@ status.collecting_job_results = Collecting job results.
 status.fetching_db_refs = Fetching db refs
 status.loading_cached_pdb_entries = Loading Cached PDB Entries
 status.searching_for_pdb_structures = Searching for PDB Structures
+status.searching_3d_beacons = Searching 3D Beacons
+status.no_structures_discovered_from_3d_beacons = No models discovered from 3D Beacons
 status.opening_file_for = opening file for
 status.colouring_structures = Colouring structures
 label.font_doesnt_have_letters_defined = Font doesn't have letters defined\nso cannot be used\nwith alignment data
diff --git a/src/jalview/fts/service/threedbeacons/TDB_FTSData.java b/src/jalview/fts/service/threedbeacons/TDB_FTSData.java
new file mode 100644 (file)
index 0000000..6745bb8
--- /dev/null
@@ -0,0 +1,120 @@
+package jalview.fts.service.threedbeacons;
+
+import java.util.Map;
+import java.util.Objects;
+
+import jalview.fts.api.FTSData;
+
+/**
+ * TDB result bean - holds filtered fields for GUI and essential metadata fields
+ * for back end
+ * 
+ * @author jprocter
+ *
+ */
+public class TDB_FTSData implements FTSData
+{
+  String primaryKey;
+
+  Object[] summaryRowData;
+
+  /*
+   * fields in the JSON object 
+   */
+  public static String Uniprot_Id= "id";
+  public static String Uniprot_Start= "uniprot_start";
+  public static String Uniprot_End= "uniprot_end";
+  public static String Provider= "provider";
+  public static String Model_id= "model_identifier";
+  public static String Model_Category= "model_category";
+  public static String Model_Type= "model_type";
+  public static String Model_Title="model_title";
+  public static String Resolution= "resolution";
+  public static String Confidence= "confidence_avg_local_score";
+  public static String Confidence_Score_Type= "confidence_type";
+  public static String Confidence_Score_Version= "confidence_version";
+  public static String Coverage= "coverage";
+  public static String Sequence_Identity= "sequence_identity";
+  public static String Created_Date= "created";
+  public static String UniProt_Accession= "uniprot_accession";
+  public static String Url= "model_url";
+  public static String Page_URL= "model_page_url";
+  public static String Ensemble_Sample_Url= "ensembl_sample_url";
+
+  /**
+   * original response from server
+   */
+  Map<String, Object> tdb_entry;
+
+  public TDB_FTSData(String primaryKey,
+          Map<String, Object> tdbJsonStructure, Object[] summaryData)
+  {
+    this.primaryKey = primaryKey;
+    tdb_entry = tdbJsonStructure;
+    this.summaryRowData = summaryData;
+  }
+
+  public Object getField(String key)
+  {
+    return tdb_entry.get(key);
+  }
+
+  @Override
+  public Object[] getSummaryData()
+  {
+    return summaryRowData;
+  }
+
+  @Override
+  public Object getPrimaryKey()
+  {
+    return primaryKey;
+  }
+
+  /**
+   * Returns a string representation of this object;
+   */
+  @Override
+  public String toString()
+  {
+    StringBuilder summaryFieldValues = new StringBuilder();
+    for (Object summaryField : summaryRowData)
+    {
+      summaryFieldValues
+              .append(summaryField == null ? " " : summaryField.toString())
+              .append("\t");
+    }
+    return summaryFieldValues.toString();
+  }
+
+  /**
+   * Returns hash code value for this object
+   */
+  @Override
+  public int hashCode()
+  {
+    return Objects.hash(primaryKey, this.toString());
+  }
+
+  @Override
+  public boolean equals(Object that)
+  {
+    return this.toString().equals(that.toString());
+  }
+
+  public String getProvider()
+  {
+    return (String) getField(Provider);
+  }
+
+  public String getModelViewUrl()
+  {
+    return (String) getField(Page_URL);
+  }
+
+  public String getModelId()
+  {
+    return (String) getField(Model_id);
+  }
+
+}
index c05306a..ccdc525 100644 (file)
@@ -219,8 +219,6 @@ public class TDBeaconsFTSRestClient extends FTSRestClient
   private static FTSData getFTSData(Map<String, Object> tdbJsonStructure,
           FTSRestRequest tdbRequest)
   {
-    // TODO: consider reusing PDBFTSRestClient.getFTSData ?
-
     String primaryKey = null;
     Object[] summaryRowData;
 
@@ -275,52 +273,7 @@ public class TDBeaconsFTSRestClient extends FTSRestClient
     final String primaryKey1 = primaryKey;
     final Object[] summaryRowData1 = summaryRowData;
 
-    return new FTSData()
-    {
-
-      @Override
-      public Object[] getSummaryData()
-      {
-        return summaryRowData1;
-      }
-
-      @Override
-      public Object getPrimaryKey()
-      {
-        return primaryKey1;
-      }
-
-      /**
-       * Returns a string representation of this object;
-       */
-      @Override
-      public String toString()
-      {
-        StringBuilder summaryFieldValues = new StringBuilder();
-        for (Object summaryField : summaryRowData1)
-        {
-          summaryFieldValues.append(
-                  summaryField == null ? " " : summaryField.toString())
-                  .append("\t");
-        }
-        return summaryFieldValues.toString();
-      }
-
-      /**
-       * Returns hash code value for this object
-       */
-      @Override
-      public int hashCode()
-      {
-        return Objects.hash(primaryKey1, this.toString());
-      }
-
-      @Override
-      public boolean equals(Object that)
-      {
-        return this.toString().equals(that.toString());
-      }
-    };
+    return new TDB_FTSData(primaryKey, tdbJsonStructure, summaryRowData1);
   }
 
   // private static FTSData getFTSData(Map<String, Object> doc,
index ba575ae..53b0305 100644 (file)
@@ -93,7 +93,7 @@ public class OptsAndParamsPage
 
     JLabel optlabel = new JLabel();
 
-    JComboBox val = new JComboBox();
+    JComboBox<String> val = new JComboBox<>();
 
     public OptionBox(OptionI opt)
     {
@@ -127,7 +127,7 @@ public class OptsAndParamsPage
         }
       }
       add(enabled, BorderLayout.NORTH);
-      for (Object str : opt.getPossibleValues())
+      for (String str : opt.getPossibleValues())
       {
         val.addItem(str);
       }
@@ -589,7 +589,7 @@ public class OptsAndParamsPage
       {
         if (choice)
         {
-          choicebox = new JComboBox();
+          choicebox = new JComboBox<>();
           choicebox.addActionListener(this);
           controlPanel.add(choicebox, BorderLayout.CENTER);
         }
@@ -632,7 +632,9 @@ public class OptsAndParamsPage
             
           });
           valueField.setPreferredSize(new Dimension(60, 25));
+          valueField.setText(parm.getValue());
           slider = makeSlider(parm.getValidValue());
+          updateSliderFromValueField();
           slider.addChangeListener(this);
 
           controlPanel.add(slider, BorderLayout.WEST);
index caecbba..54aefc4 100755 (executable)
  */
 package jalview.gui;
 
-import jalview.api.FeatureSettingsModelI;
-import jalview.bin.Cache;
-import jalview.datamodel.AlignmentI;
-import jalview.datamodel.DBRefEntry;
-import jalview.datamodel.SequenceI;
-import jalview.fts.core.GFTSPanel;
-import jalview.fts.service.pdb.PDBFTSPanel;
-import jalview.fts.service.threedbeacons.TDBeaconsFTSPanel;
-import jalview.fts.service.uniprot.UniprotFTSPanel;
-import jalview.io.FileFormatI;
-import jalview.io.gff.SequenceOntologyI;
-import jalview.util.DBRefUtils;
-import jalview.util.MessageManager;
-import jalview.util.Platform;
-import jalview.ws.seqfetcher.DbSourceProxy;
-
 import java.awt.BorderLayout;
 import java.awt.Font;
 import java.awt.event.ActionEvent;
@@ -58,6 +42,22 @@ import javax.swing.JScrollPane;
 import javax.swing.JTextArea;
 import javax.swing.SwingConstants;
 
+import jalview.api.FeatureSettingsModelI;
+import jalview.bin.Cache;
+import jalview.datamodel.AlignmentI;
+import jalview.datamodel.DBRefEntry;
+import jalview.datamodel.SequenceI;
+import jalview.fts.core.GFTSPanel;
+import jalview.fts.service.pdb.PDBFTSPanel;
+import jalview.fts.service.threedbeacons.TDBeaconsFTSPanel;
+import jalview.fts.service.uniprot.UniprotFTSPanel;
+import jalview.io.FileFormatI;
+import jalview.io.gff.SequenceOntologyI;
+import jalview.util.DBRefUtils;
+import jalview.util.MessageManager;
+import jalview.util.Platform;
+import jalview.ws.seqfetcher.DbSourceProxy;
+
 /**
  * A panel where the use may choose a database source, and enter one or more
  * accessions, to retrieve entries from the database.
@@ -67,11 +67,50 @@ import javax.swing.SwingConstants;
  */
 public class SequenceFetcher extends JPanel implements Runnable
 {
+  private class StringPair
+  {
+    private String key;
+
+    private String display;
+
+    public StringPair(String s1, String s2)
+    {
+      key = s1;
+      display = s2;
+    }
+
+    public StringPair(String s)
+    {
+      this(s, s);
+    }
+
+    public String getKey()
+    {
+      return key;
+    }
+
+    public String getDisplay()
+    {
+      return display;
+    }
+
+    @Override
+    public String toString()
+    {
+      return display;
+    }
+
+    public boolean equals(StringPair other)
+    {
+      return other.key == this.key;
+    }
+  }
+
   private static jalview.ws.SequenceFetcher sfetch = null;
 
   JLabel exampleAccession;
 
-  JComboBox<String> database;
+  JComboBox<StringPair> database;
 
   JCheckBox replacePunctuation;
 
@@ -146,8 +185,8 @@ public class SequenceFetcher extends JPanel implements Runnable
 
     frame = new JInternalFrame();
     frame.setContentPane(this);
-    Desktop.addInternalFrame(frame, getFrameTitle(), true, 400, 
-               Platform.isAMacAndNotJS() ? 240 : 180);
+    Desktop.addInternalFrame(frame, getFrameTitle(), true, 400,
+            Platform.isAMacAndNotJS() ? 240 : 180);
   }
 
   private String getFrameTitle()
@@ -164,15 +203,25 @@ public class SequenceFetcher extends JPanel implements Runnable
 
     database = new JComboBox<>();
     database.setFont(JvSwingUtils.getLabelFont());
-    database.setPrototypeDisplayValue("ENSEMBLGENOMES   ");
+    StringPair instructionItem = new StringPair(
+            MessageManager.getString("action.select_ddbb"));
+    database.setPrototypeDisplayValue(instructionItem);
     String[] sources = new jalview.ws.SequenceFetcher().getSupportedDb();
     Arrays.sort(sources, String.CASE_INSENSITIVE_ORDER);
-    database.addItem(MessageManager.getString("action.select_ddbb"));
+    database.addItem(instructionItem);
     for (String source : sources)
     {
-      database.addItem(source);
+      List<DbSourceProxy> slist = sfetch.getSourceProxy(source);
+      if (slist.size() == 1 && slist.get(0) != null)
+      {
+        database.addItem(new StringPair(source, slist.get(0).getDbName()));
+      }
+      else
+      {
+        database.addItem(new StringPair(source));
+      }
     }
-    database.setSelectedItem(selectedDb);
+    setDatabaseSelectedItem(selectedDb);
     if (database.getSelectedIndex() == -1)
     {
       database.setSelectedIndex(0);
@@ -183,7 +232,8 @@ public class SequenceFetcher extends JPanel implements Runnable
       @Override
       public void actionPerformed(ActionEvent e)
       {
-        String currentSelection = (String) database.getSelectedItem();
+        String currentSelection = ((StringPair) database.getSelectedItem())
+                .getKey();
         updateExampleQuery(currentSelection);
 
         if ("pdb".equalsIgnoreCase(currentSelection))
@@ -310,6 +360,19 @@ public class SequenceFetcher extends JPanel implements Runnable
     this.add(databasePanel, BorderLayout.NORTH);
   }
 
+  private void setDatabaseSelectedItem(String db)
+  {
+    for (int i = 0; i < database.getItemCount(); i++)
+    {
+      StringPair sp = database.getItemAt(i);
+      if (sp != null && db != null && db.equals(sp.getKey()))
+      {
+        database.setSelectedIndex(i);
+        return;
+      }
+    }
+  }
+
   /**
    * Answers a semi-colon-delimited string with the example query or queries for
    * the selected database
@@ -381,7 +444,8 @@ public class SequenceFetcher extends JPanel implements Runnable
    */
   protected void example_actionPerformed()
   {
-    String eq = getExampleQueries((String) database.getSelectedItem());
+    String eq = getExampleQueries(
+            ((StringPair) database.getSelectedItem()).getKey());
     textArea.setText(eq);
     repaint();
   }
@@ -430,9 +494,9 @@ public class SequenceFetcher extends JPanel implements Runnable
       text = text.replace(",", ";");
     }
     text = text.replaceAll("(\\s|[; ])+", ";");
-    if (!t0.equals(text)) 
+    if (!t0.equals(text))
     {
-         textArea.setText(text);
+      textArea.setText(text);
     }
     if (text.isEmpty())
     {
@@ -477,8 +541,8 @@ public class SequenceFetcher extends JPanel implements Runnable
     List<String> presultTitle = new ArrayList<>();
     List<AlignmentI> presult = new ArrayList<>();
     List<AlignmentI> aresult = new ArrayList<>();
-    List<DbSourceProxy> sources = sfetch
-            .getSourceProxy((String) database.getSelectedItem());
+    List<DbSourceProxy> sources = sfetch.getSourceProxy(
+            ((StringPair) database.getSelectedItem()).getKey());
     Iterator<DbSourceProxy> proxies = sources.iterator();
     String[] qries = textArea.getText().trim().split(";");
     List<String> nextFetch = Arrays.asList(qries);
@@ -530,23 +594,25 @@ public class SequenceFetcher extends JPanel implements Runnable
       } catch (Exception e)
       {
         showErrorMessage("Error retrieving " + textArea.getText() + " from "
-                + database.getSelectedItem());
+                + ((StringPair) database.getSelectedItem()).getDisplay());
         // error
         // +="Couldn't retrieve sequences from "+database.getSelectedItem();
         System.err.println("Retrieval failed for source ='"
-                + database.getSelectedItem() + "' and query\n'"
-                + textArea.getText() + "'\n");
+                + ((StringPair) database.getSelectedItem()).getDisplay()
+                + "' and query\n'" + textArea.getText() + "'\n");
         e.printStackTrace();
       } catch (OutOfMemoryError e)
       {
         showErrorMessage("Out of Memory when retrieving "
-                + textArea.getText() + " from " + database.getSelectedItem()
+                + textArea.getText() + " from "
+                + ((StringPair) database.getSelectedItem()).getDisplay()
                 + "\nPlease see the Jalview FAQ for instructions for increasing the memory available to Jalview.\n");
         e.printStackTrace();
       } catch (Error e)
       {
         showErrorMessage("Serious Error retrieving " + textArea.getText()
-                + " from " + database.getSelectedItem());
+                + " from "
+                + ((StringPair) database.getSelectedItem()).getDisplay());
         e.printStackTrace();
       }
 
@@ -693,7 +759,8 @@ public class SequenceFetcher extends JPanel implements Runnable
     } catch (OutOfMemoryError oome)
     {
       new OOMWarning("fetching " + multiacc + " from "
-              + database.getSelectedItem(), oome, this);
+              + ((StringPair) database.getSelectedItem()).getDisplay(),
+              oome, this);
     }
   }
 
@@ -767,12 +834,12 @@ public class SequenceFetcher extends JPanel implements Runnable
 
     for (String q : queries)
     {
-       // BH 2019.01.25 dbr is never used.
-//      DBRefEntry dbr = new DBRefEntry();
-//      dbr.setSource(proxy.getDbSource());
-//      dbr.setVersion(null);
+      // BH 2019.01.25 dbr is never used.
+      // DBRefEntry dbr = new DBRefEntry();
+      // dbr.setSource(proxy.getDbSource());
+      // dbr.setVersion(null);
       String accId = proxy.getAccessionIdFromQuery(q);
-//      dbr.setAccessionId(accId);
+      // dbr.setAccessionId(accId);
       boolean rfound = false;
       for (int r = 0, nr = rs.length; r < nr; r++)
       {
@@ -801,15 +868,18 @@ public class SequenceFetcher extends JPanel implements Runnable
    */
   public String getDefaultRetrievalTitle()
   {
-    return "Retrieved from " + database.getSelectedItem();
+    return "Retrieved from "
+            + ((StringPair) database.getSelectedItem()).getDisplay();
   }
+
   /**
    * constructs an alignment frame given the data and metadata
+   * 
    * @param al
    * @param title
    * @param currentFileFormat
    * @param preferredFeatureColours
-   * @return the alignment 
+   * @return the alignment
    */
   public AlignmentI parseResult(AlignmentI al, String title,
           FileFormatI currentFileFormat,
index 7f18461..714e770 100644 (file)
@@ -16,6 +16,12 @@ import javax.swing.JSlider;
 public class Slider extends JSlider
 {
   /*
+   * the number of nominal positions the slider represents
+   * (higher number = more fine-grained positioning)
+   */
+  private static final int SCALE_TICKS = 1000;
+
+  /*
    * 'true' value corresponding to zero on the slider
    */
   private float trueMin;
@@ -57,7 +63,7 @@ public class Slider extends JSlider
     trueMin = min;
     trueMax = max;
     setMinimum(0);
-    sliderScaleFactor = 100f / (max - min);
+    sliderScaleFactor = SCALE_TICKS / (max - min);
     int sliderMax = (int) ((max - min) * sliderScaleFactor);
     setMaximum(sliderMax);
     setSliderValue(value);
index 9f9de6e..09eb7af 100644 (file)
 
 package jalview.gui;
 
-import java.util.Locale;
-
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
+import java.util.Locale;
 import java.util.concurrent.Executors;
 
 import javax.swing.JCheckBox;
 import javax.swing.JComboBox;
 import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
 import javax.swing.JTable;
 import javax.swing.SwingUtilities;
 import javax.swing.table.AbstractTableModel;
@@ -50,6 +54,7 @@ import jalview.fts.core.FTSDataColumnPreferences;
 import jalview.fts.core.FTSRestRequest;
 import jalview.fts.core.FTSRestResponse;
 import jalview.fts.service.pdb.PDBFTSRestClient;
+import jalview.fts.service.threedbeacons.TDB_FTSData;
 import jalview.gui.structurechooser.PDBStructureChooserQuerySource;
 import jalview.gui.structurechooser.StructureChooserQuerySource;
 import jalview.gui.structurechooser.ThreeDBStructureChooserQuerySource;
@@ -76,11 +81,6 @@ public class StructureChooser extends GStructureChooser
 {
   private static final String AUTOSUPERIMPOSE = "AUTOSUPERIMPOSE";
 
-  /**
-   * transient combo box choice for initiating 3db fetch
-   */
-  private static final String VIEWS_QUERYING_TDB = "QUERY_3DB";
-
   private SequenceI selectedSequence;
 
   private SequenceI[] selectedSequences;
@@ -184,6 +184,15 @@ public class StructureChooser extends GStructureChooser
     }
 
     chk_superpose.setSelected(Cache.getDefault(AUTOSUPERIMPOSE, true));
+    btn_queryTDB.addActionListener(new ActionListener()
+    {
+
+      @Override
+      public void actionPerformed(ActionEvent e)
+      {
+        promptForTDBFetch();
+      }
+    });
 
     Executors.defaultThreadFactory().newThread(new Runnable()
     {
@@ -242,13 +251,26 @@ public class StructureChooser extends GStructureChooser
       @Override
       public void run()
       {
+        mainFrame.setEnabled(false);
+        cmb_filterOption.setEnabled(false);
+        progressBar.setProgressBar(MessageManager.getString("status.searching_3d_beacons"), progressId);
         // TODO: warn if no accessions discovered
         populateSeqsWithoutSourceDBRef();
         // redo initial discovery - this time with 3d beacons
         // Executors.
         previousWantedFields=null;
-        
         initialStructureDiscovery();
+        if (!isStructuresDiscovered())
+        {
+          progressBar.setProgressBar(MessageManager.getString("status.no_structures_discovered_from_3d_beacons"), progressId);
+          btn_queryTDB.setToolTipText(MessageManager.getString("status.no_structures_discovered_from_3d_beacons"));
+          btn_queryTDB.setEnabled(false);
+        } else {
+          btn_queryTDB.setVisible(false);
+          progressBar.setProgressBar(null, progressId);
+        }
+        mainFrame.setEnabled(true);
+        cmb_filterOption.setEnabled(true);
       }
     };
 
@@ -656,10 +678,7 @@ public class StructureChooser extends GStructureChooser
                     "-", VIEWS_FROM_FILE, false, null));
     if (canQueryTDB && notQueriedTDBYet)
     {
-      FilterOption queryTDBOption = new FilterOption(
-              MessageManager.getString("label.search_3dbeacons"), "-",
-              VIEWS_QUERYING_TDB, false, null);
-      cmb_filterOption.addItem(queryTDBOption);
+      btn_queryTDB.setVisible(true);
     }
 
     if (cachedPDBExist)
@@ -688,12 +707,6 @@ public class StructureChooser extends GStructureChooser
     FilterOption selectedFilterOpt = ((FilterOption) cmb_filterOption
             .getSelectedItem());
     
-    // first check if we need to rebuild dialog
-    if (selectedFilterOpt.getView() == VIEWS_QUERYING_TDB)
-    {
-      promptForTDBFetch();
-      return;
-    }
     if (lastSelected == selectedFilterOpt)
     {
       // don't need to do anything, probably
@@ -793,6 +806,38 @@ public class StructureChooser extends GStructureChooser
             .setEnabled(selectedCount > 1 || targetView.getItemCount() > 0);
   }
 
+  @Override
+  protected boolean showPopupFor(int selectedRow, int x, int y)
+  {
+    FilterOption selectedFilterOpt = ((FilterOption) cmb_filterOption
+            .getSelectedItem());
+    String currentView = selectedFilterOpt.getView();
+     
+    if (currentView == VIEWS_FILTER && data instanceof ThreeDBStructureChooserQuerySource)
+    {
+      
+      TDB_FTSData row=((ThreeDBStructureChooserQuerySource)data).getFTSDataFor(getResultTable(), selectedRow, discoveredStructuresSet);
+      String pageUrl = row.getModelViewUrl(); 
+      JPopupMenu popup = new JPopupMenu("3D Beacons");
+      JMenuItem viewUrl = new JMenuItem("View model web page");
+      viewUrl.addActionListener(
+              new ActionListener() {
+                @Override
+                public void actionPerformed(ActionEvent e)
+                {
+                  Desktop.showUrl(pageUrl);
+                }
+              }
+              );
+      popup.add(viewUrl);
+      SwingUtilities.invokeLater(new Runnable()  {
+        public void run() { popup.show(getResultTable(), x, y); }
+      });
+      return true;
+    }
+    // event not handled by us
+    return false;
+  }
   /**
    * Validates inputs from the Manual PDB entry panel
    */
index 7a311f8..cdf456c 100644 (file)
@@ -23,6 +23,7 @@ import jalview.fts.core.FTSDataColumnPreferences;
 import jalview.fts.core.FTSDataColumnPreferences.PreferenceSource;
 import jalview.fts.core.FTSRestRequest;
 import jalview.fts.core.FTSRestResponse;
+import jalview.fts.service.threedbeacons.TDB_FTSData;
 import jalview.fts.service.threedbeacons.TDBeaconsFTSRestClient;
 import jalview.jbgui.FilterOption;
 
@@ -251,9 +252,11 @@ public class ThreeDBStructureChooserQuerySource
     {
       int prov_idx = lastTdbRequest.getFieldIndex("Provider");
       boolean hasPDBe=false;
-      for (FTSData row : tdbEntries)
+      for (FTSData _row : tdbEntries)
       {
-        String provider = (String) row.getSummaryData()[prov_idx];
+        // tdb returns custom object
+        TDB_FTSData row = (TDB_FTSData) _row;
+        String provider = (String) row.getProvider();
         FilterOption providerOpt = new FilterOption(
                 "3DB Provider - " + provider,
                 FILTER_SOURCE_PREFIX + provider, VIEWS_FILTER, false, this);
@@ -547,4 +550,20 @@ public class ThreeDBStructureChooserQuerySource
     return upResponse;
   }
 
+  public TDB_FTSData getFTSDataFor(JTable restable, int selectedRow,
+          Collection<FTSData> discoveredStructuresSet)
+  {
+    int idColumnIndex = restable.getColumn("Model id").getModelIndex();
+    
+    String modelId = (String) restable.getValueAt(selectedRow, idColumnIndex);
+    for (FTSData row:discoveredStructuresSet)
+    {
+      if (row instanceof TDB_FTSData && ((TDB_FTSData)row).getModelId().equals(modelId))
+      {
+        return ((TDB_FTSData)row);
+      }
+    }
+    return null;
+  }
+
 }
\ No newline at end of file
index 1d240b2..a743694 100644 (file)
@@ -244,7 +244,7 @@ public enum FileFormat implements FileFormatI
       return new PhylipFile();
     }
   },
-  GenBank("GenBank Flatfile", "gb", true, false)
+  GenBank("GenBank Flatfile", "gb, gbk", true, false)
   {
     @Override
     public AlignmentFileReaderI getReader(FileParse source)
index 2a6c1f2..ccccfb4 100644 (file)
@@ -39,6 +39,7 @@ import java.awt.Dimension;
 import java.awt.FlowLayout;
 import java.awt.Font;
 import java.awt.GridLayout;
+import java.awt.Point;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.ItemEvent;
@@ -67,6 +68,7 @@ import javax.swing.JTable;
 import javax.swing.JTextField;
 import javax.swing.ListCellRenderer;
 import javax.swing.Timer;
+import javax.swing.UIManager;
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 import javax.swing.event.DocumentEvent;
@@ -119,6 +121,8 @@ public abstract class GStructureChooser extends JPanel
   protected JButton btn_newView;
 
   protected JButton btn_pdbFromFile = new JButton();
+  
+  protected JButton btn_queryTDB = new JButton();
 
   protected JCheckBox chk_superpose = new JCheckBox(
           MessageManager.getString("label.superpose_structures"));
@@ -145,6 +149,9 @@ public abstract class GStructureChooser extends JPanel
   protected ImageIcon warningImage = new ImageIcon(
           getClass().getResource("/images/warning.gif"));
 
+  protected ImageIcon tdbImage = new ImageIcon(
+          getClass().getResource("/images/3d-beacons-logo-transparent.png"));
+
   protected JLabel lbl_loading = new JLabel(loadingImage);
 
   protected JLabel lbl_pdbManualFetchStatus = new JLabel(errorImage);
@@ -244,7 +251,7 @@ public abstract class GStructureChooser extends JPanel
                                       + "...\"")
                       : JvSwingUtils.wrapTooltip(true, toolTipText)));
       return toolTipText;
-    }
+    }    
   };
 
   public GStructureChooser()
@@ -306,15 +313,42 @@ public abstract class GStructureChooser extends JPanel
     tbl_summary.addMouseListener(new MouseAdapter()
     {
       @Override
+      public void mousePressed(MouseEvent e)
+      {
+        if (!popupAction(e))
+        {
+          super.mousePressed(e);
+        }
+      }
+      @Override
       public void mouseClicked(MouseEvent e)
       {
-        validateSelections();
+        if (!popupAction(e))
+        {
+          validateSelections();
+        }
       }
 
       @Override
       public void mouseReleased(MouseEvent e)
       {
+        if (!popupAction(e))
+        {
         validateSelections();
+        }
+      }
+      boolean popupAction(MouseEvent e)
+      {
+       if (e.isPopupTrigger())
+       {
+         Point pt = e.getPoint();
+         int selectedRow = tbl_summary.rowAtPoint(pt);
+         if (showPopupFor(selectedRow,pt.x,pt.y))
+         {
+           return true;
+         }
+       }
+       return false;
       }
     });
     tbl_summary.addKeyListener(new KeyAdapter()
@@ -547,6 +581,12 @@ public abstract class GStructureChooser extends JPanel
     });
 
     chk_invertFilter.addItemListener(this);
+    btn_queryTDB.setFont(VERDANA_12);
+    //btn_queryTDB.setPreferredSize(new Dimension(200,22));
+    btn_queryTDB.setText(MessageManager.getString("label.search_3dbeacons"));
+    btn_queryTDB.setToolTipText(MessageManager.getString("label.find_models_from_3dbeacons"));
+    btn_queryTDB.setIcon(tdbImage);
+    btn_queryTDB.setVisible(false);
 
     targetView.setVisible(false);
 
@@ -557,10 +597,13 @@ public abstract class GStructureChooser extends JPanel
     actionsPanel.add(btn_newView);
     actionsPanel.add(btn_cancel, "right");
 
-    JPanel pnl_main = new JPanel();
-    pnl_main.add(cmb_filterOption);
-    pnl_main.add(lbl_loading);
-    pnl_main.add(chk_invertFilter);
+    JPanel pnl_main = new JPanel(new BorderLayout());
+    JPanel pnl_controls = new JPanel();
+    pnl_main.add(btn_queryTDB,BorderLayout.NORTH);
+    pnl_controls.add(cmb_filterOption);
+    pnl_controls.add(lbl_loading);
+    pnl_controls.add(chk_invertFilter);
+    pnl_main.add(pnl_controls,BorderLayout.CENTER);
     lbl_loading.setVisible(false);
 
     JPanel pnl_fileChooser = new JPanel(new FlowLayout());
@@ -666,6 +709,7 @@ public abstract class GStructureChooser extends JPanel
   }
 
 
+protected abstract boolean showPopupFor(int selectedRow, int x, int y);
 protected void closeAction(int preferredHeight)
   {
     // System.out.println(">>>>>>>>>> closing internal frame!!!");
index 9420465..67b44d7 100644 (file)
@@ -31,6 +31,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
 import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import jalview.analysis.AlignSeq;
 import jalview.api.FeatureSettingsModelI;
@@ -404,12 +406,14 @@ public class DBRefFetcher implements Runnable
             }
             else
             {
+              Pattern possibleIds = Pattern.compile("[A-Za-z0-9_]+"); 
               // generate queries from sequence ID string
-              StringTokenizer st = new StringTokenizer(sequence.getName(),
-                      "|");
-              while (st.hasMoreTokens())
+              Matcher tokens = possibleIds.matcher(sequence.getName());
+              int p=0;
+              while (tokens.find(p))
               {
-                String token = st.nextToken();
+                String token = tokens.group();
+                p = tokens.end();
                 UPEntry[] presp = null;
                 if (picrClient != null)
                 {
index a80a530..b9fe52f 100644 (file)
@@ -34,7 +34,6 @@ import jalview.datamodel.SequenceI;
 import jalview.schemes.ResidueProperties;
 import jalview.util.StringUtils;
 import jalview.ws.seqfetcher.DbSourceProxyImpl;
-import jalview.xml.binding.embl.ROOT;
 import jalview.xml.binding.uniprot.DbReferenceType;
 import jalview.xml.binding.uniprot.Entry;
 import jalview.xml.binding.uniprot.FeatureType;
@@ -43,8 +42,8 @@ import jalview.xml.binding.uniprot.PositionType;
 import jalview.xml.binding.uniprot.PropertyType;
 
 import java.io.InputStream;
+import java.net.HttpURLConnection;
 import java.net.URL;
-import java.net.URLConnection;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Vector;
@@ -149,21 +148,27 @@ public class Uniprot extends DbSourceProxyImpl
               + ".xml";
 
       URL url = new URL(downloadstring);
-      URLConnection urlconn = url.openConnection();
-      InputStream istr = urlconn.getInputStream();
-      List<Entry> entries = getUniprotEntries(istr);
-      if (entries != null)
+      HttpURLConnection urlconn = (HttpURLConnection)url.openConnection();
+      // anything other than 200 means we don't have data
+      // TODO: JAL-3882 reuse the EnsemblRestClient's fair 
+      // use/backoff logic to retry when the server tells us to go away
+      if (urlconn.getResponseCode() == 200)
       {
-        List<SequenceI> seqs = new ArrayList<>();
-        for (Entry entry : entries)
+        InputStream istr = urlconn.getInputStream();
+        List<Entry> entries = getUniprotEntries(istr);
+        if (entries != null)
         {
-          seqs.add(uniprotEntryToSequence(entry));
+          List<SequenceI> seqs = new ArrayList<>();
+          for (Entry entry : entries)
+          {
+            seqs.add(uniprotEntryToSequence(entry));
+          }
+          al = new Alignment(seqs.toArray(new SequenceI[seqs.size()]));
         }
-        al = new Alignment(seqs.toArray(new SequenceI[seqs.size()]));
       }
-
       stopQuery();
       return al;
+      
     } catch (Exception e)
     {
       throw (e);
@@ -518,6 +523,11 @@ public class Uniprot extends DbSourceProxyImpl
     } catch (JAXBException | XMLStreamException
             | FactoryConfigurationError e)
     {
+      if (e instanceof javax.xml.bind.UnmarshalException && e.getCause()!=null && e.getCause() instanceof XMLStreamException && e.getCause().getMessage().contains("[row,col]:[1,1]"))
+      {
+        // trying to parse an empty stream
+        return null;
+      }
       e.printStackTrace();
     }
     return entries;
index fac86a3..2196a6a 100644 (file)
 <dict>
 <key>CFBundleTypeExtensions</key>
 <array>
+<string>txt</string>
+</array>
+<key>CFBundleTypeName</key>
+<string>ENA Flatfile File</string>
+<key>CFBundleTypeIconFile</key>
+<string>Jalview-File.icns</string>
+<key>CFBundleTypeRole</key>
+<string>Editor</string>
+<key>CFBundleTypeMIMETypes</key>
+<array>
+<string>application/x-embl+txt</string>
+</array>
+<key>LSIsAppleDefaultForType</key>
+<true/>
+</dict>
+
+<dict>
+<key>CFBundleTypeExtensions</key>
+<array>
 <string>fa</string>
 <string>fasta</string>
 </array>
 <dict>
 <key>CFBundleTypeExtensions</key>
 <array>
+<string>gb</string>
+<string>gbk</string>
+</array>
+<key>CFBundleTypeName</key>
+<string>GenBank Flatfile File</string>
+<key>CFBundleTypeIconFile</key>
+<string>Jalview-File.icns</string>
+<key>CFBundleTypeRole</key>
+<string>Editor</string>
+<key>CFBundleTypeMIMETypes</key>
+<array>
+<string>application/x-genbank+txt</string>
+</array>
+<key>LSIsAppleDefaultForType</key>
+<true/>
+</dict>
+
+<dict>
+<key>CFBundleTypeExtensions</key>
+<array>
 <string>gff2</string>
 </array>
 <key>CFBundleTypeName</key>
index b14d32a..0d80644 100644 (file)
                     </serializedBean>
                   </action>
 
-                  <action name="mmCIF (.mcif, .mmcif) progress bar 13" id="10010" customizedId="mmCIF-mcif,mmcif-10010-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="mmCIF (.mcif, .mmcif) progress bar 12" id="10010" customizedId="mmCIF-mcif,mmcif-10010-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="13" />
+                      <property name="percentValue" type="int" value="12" />
                     </serializedBean>
                   </action>
 
                     </serializedBean>
                   </action>
 
-                  <action name="PDB (.ent, .pdb) progress bar 17" id="10013" customizedId="PDB-ent,pdb-10013-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="PDB (.ent, .pdb) progress bar 16" id="10013" customizedId="PDB-ent,pdb-10013-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="17" />
+                      <property name="percentValue" type="int" value="16" />
                     </serializedBean>
                   </action>
 
                     </serializedBean>
                   </action>
 
-                  <action name="AMSA (.amsa) progress bar 21" id="10016" customizedId="AMSA-amsa-10016-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="AMSA (.amsa) progress bar 20" id="10016" customizedId="AMSA-amsa-10016-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="21" />
+                      <property name="percentValue" type="int" value="20" />
                     </serializedBean>
                   </action>
 
                     </serializedBean>
                   </action>
 
-                  <action name="Jalview Annotations (.annotations, .jvannotations) progress bar 26" id="10019" customizedId="Jalview Annotations-annotations,jvannotations-10019-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="Jalview Annotations (.annotations, .jvannotations) progress bar 24" id="10019" customizedId="Jalview Annotations-annotations,jvannotations-10019-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="26" />
+                      <property name="percentValue" type="int" value="24" />
                     </serializedBean>
                   </action>
 
                     </serializedBean>
                   </action>
 
-                  <action name="BioJSON (.biojson) progress bar 30" id="10022" customizedId="BioJSON-biojson-10022-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="BioJSON (.biojson) progress bar 28" id="10022" customizedId="BioJSON-biojson-10022-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="30" />
+                      <property name="percentValue" type="int" value="28" />
                     </serializedBean>
                   </action>
 
                     </serializedBean>
                   </action>
 
-                  <action name="BLC (.blc) progress bar 34" id="10025" customizedId="BLC-blc-10025-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="BLC (.blc) progress bar 32" id="10025" customizedId="BLC-blc-10025-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="34" />
+                      <property name="percentValue" type="int" value="32" />
                     </serializedBean>
                   </action>
 
                     </serializedBean>
                   </action>
 
-                  <action name="Clustal (.aln) progress bar 39" id="10028" customizedId="Clustal-aln-10028-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="Clustal (.aln) progress bar 36" id="10028" customizedId="Clustal-aln-10028-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="39" />
+                      <property name="percentValue" type="int" value="36" />
                     </serializedBean>
                   </action>
 
                   </action>
 <!-- END -->
 
+<!-- ENA Flatfile (.txt) BEGIN -->
+                  <action name="ENA Flatfile (.txt) message" id="10030" customizedId="ENA Flatfile-txt-10030-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                    <serializedBean>
+                      <property name="detailMessage" type="string">ENA Flatfile (.txt)</property>
+                      <property name="statusMessage" type="string">Creating file associations...</property>
+                      <property name="useDetail" type="boolean" value="true" />
+                      <property name="useStatus" type="boolean" value="true" />
+                    </serializedBean>
+                  </action>
+
+                  <action name="ENA Flatfile (.txt) progress bar 40" id="10031" customizedId="ENA Flatfile-txt-10031-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                    <serializedBean>
+                      <property name="percentValue" type="int" value="40" />
+                    </serializedBean>
+                  </action>
+
+                  <action name="ENA Flatfile (.txt) file association" id="10032" customizedId="ENA Flatfile-txt-10032-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .txt file association">
+                    <serializedBean>
+                      <property name="description" type="string">ENA Flatfile File</property>
+                      <property name="extension" type="string">txt</property>
+                      <property name="launcherId" type="string">737</property>
+                      <property name="macIconFile">
+                        <object class="com.install4j.api.beans.ExternalFile">
+                          <string>Jalview-File.icns</string>
+                        </object>
+                      </property>
+                      <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                      <property name="restartFinder" type="boolean" value="true" />
+                      <property name="selected" type="boolean" value="true" />
+                      <property name="unix" type="boolean" value="true" />
+                      <property name="unixIconFile">
+                        <object class="com.install4j.api.beans.ExternalFile">
+                          <string>Jalview-File.png</string>
+                        </object>
+                      </property>
+                      <property name="unixMimeType" type="string">application/x-embl+txt</property>
+                      <property name="windowsIconFile">
+                        <object class="com.install4j.api.beans.ExternalFile">
+                          <string>Jalview-File.ico</string>
+                        </object>
+                      </property>
+                    </serializedBean>
+                  </action>
+<!-- END -->
+
 <!-- Fasta (.fa, .fasta) BEGIN -->
-                  <action name="Fasta (.fa, .fasta) message" id="10030" customizedId="Fasta-fa,fasta-10030-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="Fasta (.fa, .fasta) message" id="10033" customizedId="Fasta-fa,fasta-10033-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
                       <property name="detailMessage" type="string">Fasta (.fa, .fasta)</property>
                       <property name="statusMessage" type="string">Creating file associations...</property>
                     </serializedBean>
                   </action>
 
-                  <action name="Fasta (.fa, .fasta) progress bar 43" id="10031" customizedId="Fasta-fa,fasta-10031-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="Fasta (.fa, .fasta) progress bar 44" id="10034" customizedId="Fasta-fa,fasta-10034-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="43" />
+                      <property name="percentValue" type="int" value="44" />
                     </serializedBean>
                   </action>
 
-                  <action name="Fasta (.fa, .fasta) file association" id="10032" customizedId="Fasta-fa,fasta-10032-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .fa,fasta file association">
+                  <action name="Fasta (.fa, .fasta) file association" id="10035" customizedId="Fasta-fa,fasta-10035-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .fa,fasta file association">
                     <serializedBean>
                       <property name="description" type="string">Fasta File</property>
                       <property name="extension" type="string">fa,fasta</property>
 <!-- END -->
 
 <!-- Jalview Features (.features, .jvfeatures) BEGIN -->
-                  <action name="Jalview Features (.features, .jvfeatures) message" id="10033" customizedId="Jalview Features-features,jvfeatures-10033-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="Jalview Features (.features, .jvfeatures) message" id="10036" customizedId="Jalview Features-features,jvfeatures-10036-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
                       <property name="detailMessage" type="string">Jalview Features (.features, .jvfeatures)</property>
                       <property name="statusMessage" type="string">Creating file associations...</property>
                     </serializedBean>
                   </action>
 
-                  <action name="Jalview Features (.features, .jvfeatures) progress bar 47" id="10034" customizedId="Jalview Features-features,jvfeatures-10034-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="Jalview Features (.features, .jvfeatures) progress bar 48" id="10037" customizedId="Jalview Features-features,jvfeatures-10037-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="47" />
+                      <property name="percentValue" type="int" value="48" />
                     </serializedBean>
                   </action>
 
-                  <action name="Jalview Features (.features, .jvfeatures) file association" id="10035" customizedId="Jalview Features-features,jvfeatures-10035-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .features,jvfeatures file association">
+                  <action name="Jalview Features (.features, .jvfeatures) file association" id="10038" customizedId="Jalview Features-features,jvfeatures-10038-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .features,jvfeatures file association">
                     <serializedBean>
                       <property name="description" type="string">Jalview Features File</property>
                       <property name="extension" type="string">features,jvfeatures</property>
                   </action>
 <!-- END -->
 
+<!-- GenBank Flatfile (.gb, .gbk) BEGIN -->
+                  <action name="GenBank Flatfile (.gb, .gbk) message" id="10039" customizedId="GenBank Flatfile-gb,gbk-10039-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                    <serializedBean>
+                      <property name="detailMessage" type="string">GenBank Flatfile (.gb, .gbk)</property>
+                      <property name="statusMessage" type="string">Creating file associations...</property>
+                      <property name="useDetail" type="boolean" value="true" />
+                      <property name="useStatus" type="boolean" value="true" />
+                    </serializedBean>
+                  </action>
+
+                  <action name="GenBank Flatfile (.gb, .gbk) progress bar 52" id="10040" customizedId="GenBank Flatfile-gb,gbk-10040-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                    <serializedBean>
+                      <property name="percentValue" type="int" value="52" />
+                    </serializedBean>
+                  </action>
+
+                  <action name="GenBank Flatfile (.gb, .gbk) file association" id="10041" customizedId="GenBank Flatfile-gb,gbk-10041-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .gb,gbk file association">
+                    <serializedBean>
+                      <property name="description" type="string">GenBank Flatfile File</property>
+                      <property name="extension" type="string">gb,gbk</property>
+                      <property name="launcherId" type="string">737</property>
+                      <property name="macIconFile">
+                        <object class="com.install4j.api.beans.ExternalFile">
+                          <string>Jalview-File.icns</string>
+                        </object>
+                      </property>
+                      <property name="macRole" type="enum" class="com.install4j.runtime.beans.actions.desktop.MacAssociationRole" value="EDITOR" />
+                      <property name="restartFinder" type="boolean" value="true" />
+                      <property name="selected" type="boolean" value="true" />
+                      <property name="unix" type="boolean" value="true" />
+                      <property name="unixIconFile">
+                        <object class="com.install4j.api.beans.ExternalFile">
+                          <string>Jalview-File.png</string>
+                        </object>
+                      </property>
+                      <property name="unixMimeType" type="string">application/x-genbank+txt</property>
+                      <property name="windowsIconFile">
+                        <object class="com.install4j.api.beans.ExternalFile">
+                          <string>Jalview-File.ico</string>
+                        </object>
+                      </property>
+                    </serializedBean>
+                  </action>
+<!-- END -->
+
 <!-- Generic Features Format v2 (.gff2) BEGIN -->
-                  <action name="Generic Features Format v2 (.gff2) message" id="10036" customizedId="Generic Features Format v2-gff2-10036-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="Generic Features Format v2 (.gff2) message" id="10042" customizedId="Generic Features Format v2-gff2-10042-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
                       <property name="detailMessage" type="string">Generic Features Format v2 (.gff2)</property>
                       <property name="statusMessage" type="string">Creating file associations...</property>
                     </serializedBean>
                   </action>
 
-                  <action name="Generic Features Format v2 (.gff2) progress bar 52" id="10037" customizedId="Generic Features Format v2-gff2-10037-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="Generic Features Format v2 (.gff2) progress bar 56" id="10043" customizedId="Generic Features Format v2-gff2-10043-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="52" />
+                      <property name="percentValue" type="int" value="56" />
                     </serializedBean>
                   </action>
 
-                  <action name="Generic Features Format v2 (.gff2) file association" id="10038" customizedId="Generic Features Format v2-gff2-10038-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .gff2 file association">
+                  <action name="Generic Features Format v2 (.gff2) file association" id="10044" customizedId="Generic Features Format v2-gff2-10044-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .gff2 file association">
                     <serializedBean>
                       <property name="description" type="string">Generic Features Format v2 File</property>
                       <property name="extension" type="string">gff2</property>
 <!-- END -->
 
 <!-- Generic Features Format v3 (.gff3) BEGIN -->
-                  <action name="Generic Features Format v3 (.gff3) message" id="10039" customizedId="Generic Features Format v3-gff3-10039-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="Generic Features Format v3 (.gff3) message" id="10045" customizedId="Generic Features Format v3-gff3-10045-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
                       <property name="detailMessage" type="string">Generic Features Format v3 (.gff3)</property>
                       <property name="statusMessage" type="string">Creating file associations...</property>
                     </serializedBean>
                   </action>
 
-                  <action name="Generic Features Format v3 (.gff3) progress bar 56" id="10040" customizedId="Generic Features Format v3-gff3-10040-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="Generic Features Format v3 (.gff3) progress bar 60" id="10046" customizedId="Generic Features Format v3-gff3-10046-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="56" />
+                      <property name="percentValue" type="int" value="60" />
                     </serializedBean>
                   </action>
 
-                  <action name="Generic Features Format v3 (.gff3) file association" id="10041" customizedId="Generic Features Format v3-gff3-10041-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .gff3 file association">
+                  <action name="Generic Features Format v3 (.gff3) file association" id="10047" customizedId="Generic Features Format v3-gff3-10047-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .gff3 file association">
                     <serializedBean>
                       <property name="description" type="string">Generic Features Format v3 File</property>
                       <property name="extension" type="string">gff3</property>
 <!-- END -->
 
 <!-- JnetFile (.concise, .jnet) BEGIN -->
-                  <action name="JnetFile (.concise, .jnet) message" id="10042" customizedId="JnetFile-concise,jnet-10042-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="JnetFile (.concise, .jnet) message" id="10048" customizedId="JnetFile-concise,jnet-10048-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
                       <property name="detailMessage" type="string">JnetFile (.concise, .jnet)</property>
                       <property name="statusMessage" type="string">Creating file associations...</property>
                     </serializedBean>
                   </action>
 
-                  <action name="JnetFile (.concise, .jnet) progress bar 60" id="10043" customizedId="JnetFile-concise,jnet-10043-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="JnetFile (.concise, .jnet) progress bar 64" id="10049" customizedId="JnetFile-concise,jnet-10049-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="60" />
+                      <property name="percentValue" type="int" value="64" />
                     </serializedBean>
                   </action>
 
-                  <action name="JnetFile (.concise, .jnet) file association" id="10044" customizedId="JnetFile-concise,jnet-10044-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .concise,jnet file association">
+                  <action name="JnetFile (.concise, .jnet) file association" id="10050" customizedId="JnetFile-concise,jnet-10050-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .concise,jnet file association">
                     <serializedBean>
                       <property name="description" type="string">JnetFile File</property>
                       <property name="extension" type="string">concise,jnet</property>
 <!-- END -->
 
 <!-- MSF (.msf) BEGIN -->
-                  <action name="MSF (.msf) message" id="10045" customizedId="MSF-msf-10045-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="MSF (.msf) message" id="10051" customizedId="MSF-msf-10051-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
                       <property name="detailMessage" type="string">MSF (.msf)</property>
                       <property name="statusMessage" type="string">Creating file associations...</property>
                     </serializedBean>
                   </action>
 
-                  <action name="MSF (.msf) progress bar 65" id="10046" customizedId="MSF-msf-10046-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="MSF (.msf) progress bar 68" id="10052" customizedId="MSF-msf-10052-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="65" />
+                      <property name="percentValue" type="int" value="68" />
                     </serializedBean>
                   </action>
 
-                  <action name="MSF (.msf) file association" id="10047" customizedId="MSF-msf-10047-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .msf file association">
+                  <action name="MSF (.msf) file association" id="10053" customizedId="MSF-msf-10053-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .msf file association">
                     <serializedBean>
                       <property name="description" type="string">MSF File</property>
                       <property name="extension" type="string">msf</property>
 <!-- END -->
 
 <!-- PFAM (.pfam) BEGIN -->
-                  <action name="PFAM (.pfam) message" id="10048" customizedId="PFAM-pfam-10048-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="PFAM (.pfam) message" id="10054" customizedId="PFAM-pfam-10054-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
                       <property name="detailMessage" type="string">PFAM (.pfam)</property>
                       <property name="statusMessage" type="string">Creating file associations...</property>
                     </serializedBean>
                   </action>
 
-                  <action name="PFAM (.pfam) progress bar 69" id="10049" customizedId="PFAM-pfam-10049-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="PFAM (.pfam) progress bar 72" id="10055" customizedId="PFAM-pfam-10055-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="69" />
+                      <property name="percentValue" type="int" value="72" />
                     </serializedBean>
                   </action>
 
-                  <action name="PFAM (.pfam) file association" id="10050" customizedId="PFAM-pfam-10050-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .pfam file association">
+                  <action name="PFAM (.pfam) file association" id="10056" customizedId="PFAM-pfam-10056-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .pfam file association">
                     <serializedBean>
                       <property name="description" type="string">PFAM File</property>
                       <property name="extension" type="string">pfam</property>
 <!-- END -->
 
 <!-- PHYLIP (.phy) BEGIN -->
-                  <action name="PHYLIP (.phy) message" id="10051" customizedId="PHYLIP-phy-10051-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="PHYLIP (.phy) message" id="10057" customizedId="PHYLIP-phy-10057-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
                       <property name="detailMessage" type="string">PHYLIP (.phy)</property>
                       <property name="statusMessage" type="string">Creating file associations...</property>
                     </serializedBean>
                   </action>
 
-                  <action name="PHYLIP (.phy) progress bar 73" id="10052" customizedId="PHYLIP-phy-10052-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="PHYLIP (.phy) progress bar 76" id="10058" customizedId="PHYLIP-phy-10058-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="73" />
+                      <property name="percentValue" type="int" value="76" />
                     </serializedBean>
                   </action>
 
-                  <action name="PHYLIP (.phy) file association" id="10053" customizedId="PHYLIP-phy-10053-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .phy file association">
+                  <action name="PHYLIP (.phy) file association" id="10059" customizedId="PHYLIP-phy-10059-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .phy file association">
                     <serializedBean>
                       <property name="description" type="string">PHYLIP File</property>
                       <property name="extension" type="string">phy</property>
 <!-- END -->
 
 <!-- PileUp (.pileup) BEGIN -->
-                  <action name="PileUp (.pileup) message" id="10054" customizedId="PileUp-pileup-10054-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="PileUp (.pileup) message" id="10060" customizedId="PileUp-pileup-10060-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
                       <property name="detailMessage" type="string">PileUp (.pileup)</property>
                       <property name="statusMessage" type="string">Creating file associations...</property>
                     </serializedBean>
                   </action>
 
-                  <action name="PileUp (.pileup) progress bar 78" id="10055" customizedId="PileUp-pileup-10055-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="PileUp (.pileup) progress bar 80" id="10061" customizedId="PileUp-pileup-10061-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="78" />
+                      <property name="percentValue" type="int" value="80" />
                     </serializedBean>
                   </action>
 
-                  <action name="PileUp (.pileup) file association" id="10056" customizedId="PileUp-pileup-10056-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .pileup file association">
+                  <action name="PileUp (.pileup) file association" id="10062" customizedId="PileUp-pileup-10062-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .pileup file association">
                     <serializedBean>
                       <property name="description" type="string">PileUp File</property>
                       <property name="extension" type="string">pileup</property>
 <!-- END -->
 
 <!-- PIR (.pir) BEGIN -->
-                  <action name="PIR (.pir) message" id="10057" customizedId="PIR-pir-10057-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="PIR (.pir) message" id="10063" customizedId="PIR-pir-10063-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
                       <property name="detailMessage" type="string">PIR (.pir)</property>
                       <property name="statusMessage" type="string">Creating file associations...</property>
                     </serializedBean>
                   </action>
 
-                  <action name="PIR (.pir) progress bar 82" id="10058" customizedId="PIR-pir-10058-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="PIR (.pir) progress bar 84" id="10064" customizedId="PIR-pir-10064-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="82" />
+                      <property name="percentValue" type="int" value="84" />
                     </serializedBean>
                   </action>
 
-                  <action name="PIR (.pir) file association" id="10059" customizedId="PIR-pir-10059-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .pir file association">
+                  <action name="PIR (.pir) file association" id="10065" customizedId="PIR-pir-10065-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .pir file association">
                     <serializedBean>
                       <property name="description" type="string">PIR File</property>
                       <property name="extension" type="string">pir</property>
 <!-- END -->
 
 <!-- RNAML (.rnaml) BEGIN -->
-                  <action name="RNAML (.rnaml) message" id="10060" customizedId="RNAML-rnaml-10060-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="RNAML (.rnaml) message" id="10066" customizedId="RNAML-rnaml-10066-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
                       <property name="detailMessage" type="string">RNAML (.rnaml)</property>
                       <property name="statusMessage" type="string">Creating file associations...</property>
                     </serializedBean>
                   </action>
 
-                  <action name="RNAML (.rnaml) progress bar 86" id="10061" customizedId="RNAML-rnaml-10061-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="RNAML (.rnaml) progress bar 88" id="10067" customizedId="RNAML-rnaml-10067-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="86" />
+                      <property name="percentValue" type="int" value="88" />
                     </serializedBean>
                   </action>
 
-                  <action name="RNAML (.rnaml) file association" id="10062" customizedId="RNAML-rnaml-10062-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .rnaml file association">
+                  <action name="RNAML (.rnaml) file association" id="10068" customizedId="RNAML-rnaml-10068-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .rnaml file association">
                     <serializedBean>
                       <property name="description" type="string">RNAML File</property>
                       <property name="extension" type="string">rnaml</property>
 <!-- END -->
 
 <!-- Substitution Matrix (.mat) BEGIN -->
-                  <action name="Substitution Matrix (.mat) message" id="10063" customizedId="Substitution Matrix-mat-10063-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="Substitution Matrix (.mat) message" id="10069" customizedId="Substitution Matrix-mat-10069-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
                       <property name="detailMessage" type="string">Substitution Matrix (.mat)</property>
                       <property name="statusMessage" type="string">Creating file associations...</property>
                     </serializedBean>
                   </action>
 
-                  <action name="Substitution Matrix (.mat) progress bar 91" id="10064" customizedId="Substitution Matrix-mat-10064-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="Substitution Matrix (.mat) progress bar 92" id="10070" customizedId="Substitution Matrix-mat-10070-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="91" />
+                      <property name="percentValue" type="int" value="92" />
                     </serializedBean>
                   </action>
 
-                  <action name="Substitution Matrix (.mat) file association" id="10065" customizedId="Substitution Matrix-mat-10065-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .mat file association">
+                  <action name="Substitution Matrix (.mat) file association" id="10071" customizedId="Substitution Matrix-mat-10071-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .mat file association">
                     <serializedBean>
                       <property name="description" type="string">Substitution Matrix File</property>
                       <property name="extension" type="string">mat</property>
 <!-- END -->
 
 <!-- Stockholm (.stk, .sto) BEGIN -->
-                  <action name="Stockholm (.stk, .sto) message" id="10066" customizedId="Stockholm-stk,sto-10066-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="Stockholm (.stk, .sto) message" id="10072" customizedId="Stockholm-stk,sto-10072-message" beanClass="com.install4j.runtime.beans.actions.control.SetMessageAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
                       <property name="detailMessage" type="string">Stockholm (.stk, .sto)</property>
                       <property name="statusMessage" type="string">Creating file associations...</property>
                     </serializedBean>
                   </action>
 
-                  <action name="Stockholm (.stk, .sto) progress bar 95" id="10067" customizedId="Stockholm-stk,sto-10067-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
+                  <action name="Stockholm (.stk, .sto) progress bar 96" id="10073" customizedId="Stockholm-stk,sto-10073-progressbar" beanClass="com.install4j.runtime.beans.actions.control.SetProgressAction" actionElevationType="none" rollbackBarrierExitCode="0">
                     <serializedBean>
-                      <property name="percentValue" type="int" value="95" />
+                      <property name="percentValue" type="int" value="96" />
                     </serializedBean>
                   </action>
 
-                  <action name="Stockholm (.stk, .sto) file association" id="10068" customizedId="Stockholm-stk,sto-10068-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .stk,sto file association">
+                  <action name="Stockholm (.stk, .sto) file association" id="10074" customizedId="Stockholm-stk,sto-10074-fileassociation" beanClass="com.install4j.runtime.beans.actions.desktop.CreateFileAssociationAction" actionElevationType="elevated" rollbackBarrierExitCode="0" errorMessage="Could not make .stk,sto file association">
                     <serializedBean>
                       <property name="description" type="string">Stockholm File</property>
                       <property name="extension" type="string">stk,sto</property>
index ae01fe1..fd38213 100644 (file)
-
-com/stevesoft/pat/Any.js
-com/stevesoft/pat/Bracket.js
-com/stevesoft/pat/Branch.js
-com/stevesoft/pat/CaseMgr.js
-com/stevesoft/pat/DotMulti.js
-com/stevesoft/pat/End.js
-com/stevesoft/pat/FastBracket.js
-com/stevesoft/pat/FastChar.js
-com/stevesoft/pat/FastMulti.js
-com/stevesoft/pat/NUnicodeAlpha.js
-com/stevesoft/pat/NUnicodeCurrency.js
-com/stevesoft/pat/NUnicodeDigit.js
-com/stevesoft/pat/NUnicodeMath.js
-com/stevesoft/pat/NUnicodePunct.js
-com/stevesoft/pat/NUnicodeW.js
-com/stevesoft/pat/NUnicodeWhite.js
-com/stevesoft/pat/NoPattern.js
-com/stevesoft/pat/NullPattern.js
-com/stevesoft/pat/Or.js
-com/stevesoft/pat/OrMark.js
-com/stevesoft/pat/Pattern.js
-com/stevesoft/pat/PatternSub.js
-com/stevesoft/pat/Pthings.js
-com/stevesoft/pat/Range.js
-com/stevesoft/pat/RegHolder.js
-com/stevesoft/pat/RegOpt.js
-com/stevesoft/pat/RegRes.js
-com/stevesoft/pat/Regex.js
-com/stevesoft/pat/ReplaceRule.js
-com/stevesoft/pat/Replacer.js
-com/stevesoft/pat/Rthings.js
-com/stevesoft/pat/Skip.js
-com/stevesoft/pat/StrPos.js
-com/stevesoft/pat/StringLike.js
-com/stevesoft/pat/StringRule.js
-com/stevesoft/pat/SubMark.js
-com/stevesoft/pat/UniValidator.js
-com/stevesoft/pat/UnicodeAlpha.js
-com/stevesoft/pat/UnicodeCurrency.js
-com/stevesoft/pat/UnicodeDigit.js
-com/stevesoft/pat/UnicodeLower.js
-com/stevesoft/pat/UnicodeMath.js
-com/stevesoft/pat/UnicodePunct.js
-com/stevesoft/pat/UnicodeUpper.js
-com/stevesoft/pat/UnicodeW.js
-com/stevesoft/pat/UnicodeWhite.js
-com/stevesoft/pat/Validator.js
-com/stevesoft/pat/oneChar.js
-com/stevesoft/pat/parsePerl.js
-com/stevesoft/pat/patInf.js
-com/stevesoft/pat/patInt.js
-com/stevesoft/pat/wrap/StringWrap.js
+com/stevesoft/pat/Boundary.js
+com/stevesoft/pat/Start.js
 intervalstore/api/IntervalI.js
 intervalstore/api/IntervalStoreI.js
 intervalstore/impl/BinarySearcher.js
 intervalstore/impl/IntervalStore.js
 intervalstore/impl/NCList.js
 intervalstore/impl/NCNode.js
-jalview/analysis/AAFrequency.js
-jalview/analysis/AlignSeq.js
-jalview/analysis/AlignmentAnnotationUtils.js
-jalview/analysis/AlignmentUtils.js
-jalview/analysis/AnnotationSorter.js
-jalview/analysis/AverageDistanceTree.js
-jalview/analysis/Conservation.js
-jalview/analysis/CrossRef.js
-jalview/analysis/GeneticCodeI.js
-jalview/analysis/GeneticCodes.js
-jalview/analysis/Grouping.js
-jalview/analysis/NJTree.js
-jalview/analysis/SeqsetUtils.js
-jalview/analysis/SequenceIdMatcher.js
-jalview/analysis/TreeBuilder.js
-jalview/analysis/TreeModel.js
-jalview/analysis/scoremodels/DistanceScoreModel.js
-jalview/analysis/scoremodels/FeatureDistanceModel.js
-jalview/analysis/scoremodels/PIDModel.js
-jalview/analysis/scoremodels/ScoreMatrix.js
-jalview/analysis/scoremodels/ScoreModels.js
-jalview/analysis/scoremodels/SimilarityParams.js
-jalview/analysis/scoremodels/SimilarityScoreModel.js
-jalview/api/AlignCalcManagerI.js
-jalview/api/AlignCalcWorkerI.js
-jalview/api/AlignViewControllerGuiI.js
-jalview/api/AlignViewControllerI.js
-jalview/api/AlignViewportI.js
-jalview/api/AlignmentColsCollectionI.js
-jalview/api/AlignmentRowsCollectionI.js
-jalview/api/AlignmentViewPanel.js
-jalview/api/BuildDetailsI.js
-jalview/api/DBRefEntryI.js
-jalview/api/FeatureColourI.js
-jalview/api/FeatureRenderer.js
-jalview/api/FeatureSettingsControllerI.js
-jalview/api/FeatureSettingsModelI.js
-jalview/api/FeaturesDisplayedI.js
-jalview/api/OOMHandlerI.js
-jalview/api/RendererListenerI.js
-jalview/api/SequenceRenderer.js
-jalview/api/SequenceStructureBinding.js
-jalview/api/StructureSelectionManagerProvider.js
-jalview/api/ViewStyleI.js
-jalview/api/analysis/PairwiseScoreModelI.js
-jalview/api/analysis/ScoreModelI.js
-jalview/api/analysis/SimilarityParamsI.js
-jalview/api/structures/JalviewStructureDisplayI.js
-jalview/bin/ArgsParser.js
-jalview/bin/BuildDetails.js
-jalview/bin/Cache.js
-jalview/bin/Jalview.js
-jalview/controller/AlignViewController.js
-jalview/datamodel/ASequence.js
-jalview/datamodel/ASequenceI.js
-jalview/datamodel/Alignment.js
-jalview/datamodel/AlignmentAnnotation.js
-jalview/datamodel/AlignmentI.js
-jalview/datamodel/AlignmentView.js
-jalview/datamodel/AnnotatedCollectionI.js
-jalview/datamodel/Annotation.js
-jalview/datamodel/BinaryNode.js
-jalview/datamodel/CigarArray.js
-jalview/datamodel/CigarBase.js
-jalview/datamodel/CigarSimple.js
-jalview/datamodel/ColumnSelection.js
-jalview/datamodel/ContiguousI.js
-jalview/datamodel/DBRefEntry.js
-jalview/datamodel/DBRefSource.js
-jalview/datamodel/GraphLine.js
-jalview/datamodel/HiddenColumns.js
-jalview/datamodel/HiddenColumnsCursor.js
-jalview/datamodel/HiddenCursorPosition.js
-jalview/datamodel/HiddenSequences.js
-jalview/datamodel/Mapping.js
-jalview/datamodel/PDBEntry.js
-jalview/datamodel/Profile.js
-jalview/datamodel/ProfileI.js
-jalview/datamodel/Profiles.js
-jalview/datamodel/ProfilesI.js
-jalview/datamodel/Range.js
-jalview/datamodel/RangeElementsIterator.js
-jalview/datamodel/RangeIterator.js
-jalview/datamodel/ResidueCount.js
-jalview/datamodel/SearchResultMatchI.js
-jalview/datamodel/SearchResults.js
-jalview/datamodel/SearchResultsI.js
-jalview/datamodel/SeqCigar.js
-jalview/datamodel/Sequence.js
-jalview/datamodel/SequenceCollectionI.js
-jalview/datamodel/SequenceCursor.js
-jalview/datamodel/SequenceFeature.js
-jalview/datamodel/SequenceGroup.js
-jalview/datamodel/SequenceI.js
-jalview/datamodel/SequenceNode.js
-jalview/datamodel/StartRegionIterator.js
-jalview/datamodel/StructureViewerModel.js
-jalview/datamodel/VisibleColsCollection.js
-jalview/datamodel/VisibleContigsIterator.js
-jalview/datamodel/VisibleRowsCollection.js
-jalview/datamodel/VisibleRowsIterator.js
-jalview/datamodel/features/FeatureAttributes.js
-jalview/datamodel/features/FeatureLocationI.js
-jalview/datamodel/features/FeatureMatcherSet.js
-jalview/datamodel/features/FeatureMatcherSetI.js
-jalview/datamodel/features/FeatureSources.js
-jalview/datamodel/features/FeatureStore.js
-jalview/datamodel/features/SequenceFeatures.js
-jalview/datamodel/features/SequenceFeaturesI.js
-jalview/ext/ensembl/EnsemblData.js
-jalview/ext/ensembl/EnsemblGene.js
-jalview/ext/ensembl/EnsemblGenomes.js
-jalview/ext/ensembl/EnsemblRestClient.js
-jalview/ext/ensembl/EnsemblSeqProxy.js
-jalview/ext/ensembl/EnsemblSequenceFetcher.js
-jalview/ext/jmol/JalviewJmolBinding.js
-jalview/ext/jmol/JmolCommands.js
-jalview/ext/jmol/JmolParser.js
-jalview/fts/api/FTSData.js
-jalview/fts/api/FTSDataColumnI.js
-jalview/fts/api/FTSRestClientI.js
-jalview/fts/api/GFTSPanelI.js
-jalview/fts/core/DecimalFormatTableCellRenderer.js
-jalview/fts/core/FTSDataColumnPreferences.js
-jalview/fts/core/FTSRestClient.js
-jalview/fts/core/FTSRestRequest.js
-jalview/fts/core/FTSRestResponse.js
-jalview/fts/core/GFTSPanel.js
-jalview/fts/service/pdb/PDBFTSPanel.js
-jalview/fts/service/pdb/PDBFTSRestClient.js
-jalview/fts/service/uniprot/UniProtFTSRestClient.js
-jalview/fts/service/uniprot/UniprotFTSPanel.js
-jalview/gui/AlignFrame.js
-jalview/gui/AlignViewport.js
-jalview/gui/AlignmentPanel.js
-jalview/gui/AnnotationColumnChooser.js
-jalview/gui/AnnotationLabels.js
-jalview/gui/AnnotationPanel.js
-jalview/gui/AnnotationRowFilter.js
-jalview/gui/AppJmol.js
-jalview/gui/AppJmolBinding.js
-jalview/gui/CalculationChooser.js
-jalview/gui/ColourMenuHelper.js
-jalview/gui/ComboBoxTooltipRenderer.js
-jalview/gui/Desktop.js
-jalview/gui/FeatureRenderer.js
-jalview/gui/FeatureSettings.js
-jalview/gui/FeatureTypeSettings.js
-jalview/gui/FontChooser.js
-jalview/gui/IProgressIndicator.js
-jalview/gui/IdCanvas.js
-jalview/gui/IdPanel.js
-jalview/gui/IdwidthAdjuster.js
-jalview/gui/JalviewBooleanRadioButtons.js
-jalview/gui/JalviewChangeSupport.js
-jalview/gui/JalviewColourChooser.js
-jalview/gui/JalviewDialog.js
-jalview/gui/JvSwingUtils.js
-jalview/gui/OverviewCanvas.js
-jalview/gui/OverviewPanel.js
-jalview/gui/PaintRefresher.js
-jalview/gui/PopupMenu.js
-jalview/gui/Preferences.js
-jalview/gui/ProgressBar.js
-jalview/gui/ProgressPanel.js
-jalview/gui/ScalePanel.js
-jalview/gui/SeqCanvas.js
-jalview/gui/SeqPanel.js
-jalview/gui/SequenceFetcher.js
-jalview/gui/SequenceRenderer.js
-jalview/gui/SliderPanel.js
-jalview/gui/StructureChooser.js
-jalview/gui/StructureViewer.js
-jalview/gui/StructureViewerBase.js
-jalview/gui/TreeCanvas.js
-jalview/gui/TreePanel.js
-jalview/gui/ViewSelectionMenu.js
-jalview/io/AlignFile.js
-jalview/io/AlignmentFileReaderI.js
-jalview/io/AlignmentFileWriterI.js
-jalview/io/AnnotationFile.js
-jalview/io/AppletFormatAdapter.js
-jalview/io/DataSourceType.js
-jalview/io/FastaFile.js
-jalview/io/FileFormat.js
-jalview/io/FileFormatI.js
-jalview/io/FileFormats.js
-jalview/io/FileLoader.js
-jalview/io/FileParse.js
-jalview/io/FormatAdapter.js
-jalview/io/IdentifyFile.js
-jalview/io/JPredFile.js
-jalview/io/JalviewFileChooser.js
-jalview/io/JalviewFileFilter.js
-jalview/io/JalviewFileView.js
-jalview/io/JnetAnnotationMaker.js
-jalview/io/NewickFile.js
-jalview/io/PDBFeatureSettings.js
-jalview/io/PIRFile.js
-jalview/io/ScoreMatrixFile.js
-jalview/io/SequenceAnnotationReport.js
-jalview/io/StructureFile.js
-jalview/io/TCoffeeScoreFile.js
-jalview/io/cache/JvCacheableInputBox.js
-jalview/javascript/json/JSON.js
-jalview/javascript/log4j/ConsoleAppender.js
-jalview/javascript/log4j/Layout.js
-jalview/javascript/log4j/Level.js
-jalview/javascript/log4j/Logger.js
-jalview/javascript/log4j/Priority.js
-jalview/javascript/log4j/SimpleLayout.js
-jalview/javascript/log4j/spi/OptionHandler.js
-jalview/javascript/web/Client.js
-jalview/javascript/web/ClientResponse.js
-jalview/javascript/web/WebResource.js
-jalview/jbgui/BackupFilesPresetEntry.js
-jalview/jbgui/GAlignFrame.js
-jalview/jbgui/GAlignmentPanel.js
-jalview/jbgui/GDesktop.js
-jalview/jbgui/GFontChooser.js
-jalview/jbgui/GPreferences.js
-jalview/jbgui/GSliderPanel.js
-jalview/jbgui/GStructureChooser.js
-jalview/jbgui/GStructureViewer.js
-jalview/jbgui/GTreePanel.js
-jalview/jbgui/IntKeyStringValueEntry.js
-jalview/math/Matrix.js
-jalview/math/MatrixI.js
-jalview/project/Jalview2XML.js
-jalview/renderer/AnnotationRenderer.js
-jalview/renderer/AwtRenderPanelI.js
-jalview/renderer/OverviewRenderer.js
-jalview/renderer/OverviewResColourFinder.js
-jalview/renderer/ResidueColourFinder.js
-jalview/renderer/ResidueShader.js
-jalview/renderer/ResidueShaderI.js
-jalview/renderer/ScaleRenderer.js
-jalview/renderer/seqfeatures/FeatureColourFinder.js
-jalview/renderer/seqfeatures/FeatureRenderer.js
-jalview/schemes/Blosum62ColourScheme.js
-jalview/schemes/BuriedColourScheme.js
-jalview/schemes/ClustalxColourScheme.js
-jalview/schemes/ColourSchemeI.js
-jalview/schemes/ColourSchemeProperty.js
-jalview/schemes/ColourSchemes.js
-jalview/schemes/Consensus.js
-jalview/schemes/FeatureColour.js
-jalview/schemes/FeatureSettingsAdapter.js
-jalview/schemes/HelixColourScheme.js
-jalview/schemes/HydrophobicColourScheme.js
-jalview/schemes/IdColourScheme.js
-jalview/schemes/JalviewColourScheme.js
-jalview/schemes/NucleotideColourScheme.js
-jalview/schemes/PIDColourScheme.js
-jalview/schemes/PurinePyrimidineColourScheme.js
-jalview/schemes/RNAHelicesColour.js
-jalview/schemes/ResidueColourScheme.js
-jalview/schemes/ResidueProperties.js
-jalview/schemes/ScoreColourScheme.js
-jalview/schemes/StrandColourScheme.js
-jalview/schemes/TCoffeeColourScheme.js
-jalview/schemes/TaylorColourScheme.js
-jalview/schemes/TurnColourScheme.js
-jalview/schemes/ZappoColourScheme.js
-jalview/structure/AtomSpec.js
-jalview/structure/CommandListener.js
-jalview/structure/SelectionListener.js
-jalview/structure/SelectionSource.js
-jalview/structure/SequenceListener.js
-jalview/structure/StructureImportSettings.js
-jalview/structure/StructureListener.js
-jalview/structure/StructureMapping.js
-jalview/structure/StructureMappingcommandSet.js
-jalview/structure/StructureSelectionManager.js
-jalview/structure/VamsasSource.js
-jalview/structures/models/AAStructureBindingModel.js
-jalview/structures/models/SequenceStructureBindingModel.js
-jalview/urls/CustomUrlProvider.js
-jalview/urls/IdOrgSettings.js
-jalview/urls/IdentifiersUrlProvider.js
-jalview/urls/UrlLinkDisplay.js
-jalview/urls/UrlLinkTableModel.js
-jalview/urls/UrlProvider.js
-jalview/urls/UrlProviderImpl.js
-jalview/urls/api/UrlProviderFactoryI.js
-jalview/urls/api/UrlProviderI.js
-jalview/urls/desktop/DesktopUrlProviderFactory.js
-jalview/util/CaseInsensitiveString.js
-jalview/util/ColorUtils.js
-jalview/util/Comparison.js
-jalview/util/DBRefUtils.js
-jalview/util/Format.js
-jalview/util/LinkedIdentityHashSet.js
-jalview/util/MapList.js
-jalview/util/MessageManager.js
-jalview/util/Platform.js
-jalview/util/QuickSort.js
-jalview/util/SetUtils.js
-jalview/util/StringUtils.js
-jalview/util/UrlLink.js
-jalview/util/dialogrunner/DialogRunnerI.js
-jalview/util/jarInputStreamProvider.js
-jalview/viewmodel/AlignmentViewport.js
-jalview/viewmodel/OverviewDimensions.js
-jalview/viewmodel/OverviewDimensionsHideHidden.js
-jalview/viewmodel/ViewportListenerI.js
-jalview/viewmodel/ViewportProperties.js
-jalview/viewmodel/ViewportRanges.js
-jalview/viewmodel/annotationfilter/AnnotationFilterParameter.js
-jalview/viewmodel/seqfeatures/FeatureRendererModel.js
-jalview/viewmodel/seqfeatures/FeatureRendererSettings.js
-jalview/viewmodel/seqfeatures/FeaturesDisplayed.js
-jalview/viewmodel/styles/ViewStyle.js
-jalview/workers/AlignCalcManager.js
-jalview/workers/AlignCalcWorker.js
-jalview/workers/ComplementConsensusThread.js
-jalview/workers/ConsensusThread.js
-jalview/workers/ConservationThread.js
-jalview/workers/StrucConsensusThread.js
-jalview/ws/SequenceFetcher.js
-jalview/ws/dbsources/EbiFileRetrievedProxy.js
-jalview/ws/dbsources/EmblCdsSource.js
-jalview/ws/dbsources/EmblSource.js
-jalview/ws/dbsources/EmblXmlSource.js
-jalview/ws/dbsources/Pdb.js
-jalview/ws/dbsources/Pfam.js
-jalview/ws/dbsources/PfamFull.js
-jalview/ws/dbsources/PfamSeed.js
-jalview/ws/dbsources/Rfam.js
-jalview/ws/dbsources/RfamSeed.js
-jalview/ws/dbsources/Uniprot.js
-jalview/ws/dbsources/Xfam.js
-jalview/ws/ebi/EBIFetchClient.js
-jalview/ws/seqfetcher/ASequenceFetcher.js
-jalview/ws/seqfetcher/DbSourceProxy.js
-jalview/ws/seqfetcher/DbSourceProxyImpl.js
-jalview/ws/sifts/SiftsSettings.js
-jalview/xml/binding/jalview/Annotation.js
-jalview/xml/binding/jalview/AnnotationElement.js
-jalview/xml/binding/jalview/Feature.js
-jalview/xml/binding/jalview/JalviewModel.js
-jalview/xml/binding/jalview/ObjectFactory.js
-jalview/xml/binding/jalview/Pdbentry.js
-jalview/xml/binding/jalview/Sequence.js
-jalview/xml/binding/jalview/SequenceSet.js
-jalview/xml/binding/jalview/SequenceType.js
-jalview/xml/binding/jalview/VAMSAS.js
-jalview/xml/binding/jalview/WebServiceParameterSet.js
-jalview/xml/binding/uniprot/CitationType.js
-jalview/xml/binding/uniprot/CommentType.js
-jalview/xml/binding/uniprot/ConsortiumType.js
-jalview/xml/binding/uniprot/DbReferenceType.js
-jalview/xml/binding/uniprot/Entry.js
-jalview/xml/binding/uniprot/EventType.js
-jalview/xml/binding/uniprot/EvidenceType.js
-jalview/xml/binding/uniprot/EvidencedStringType.js
-jalview/xml/binding/uniprot/FeatureType.js
-jalview/xml/binding/uniprot/GeneNameType.js
-jalview/xml/binding/uniprot/GeneType.js
-jalview/xml/binding/uniprot/IsoformType.js
-jalview/xml/binding/uniprot/KeywordType.js
-jalview/xml/binding/uniprot/LocationType.js
-jalview/xml/binding/uniprot/NameListType.js
-jalview/xml/binding/uniprot/OrganismNameType.js
-jalview/xml/binding/uniprot/OrganismType.js
-jalview/xml/binding/uniprot/PersonType.js
-jalview/xml/binding/uniprot/PositionType.js
-jalview/xml/binding/uniprot/PropertyType.js
-jalview/xml/binding/uniprot/ProteinExistenceType.js
-jalview/xml/binding/uniprot/ProteinType.js
-jalview/xml/binding/uniprot/ReferenceType.js
-jalview/xml/binding/uniprot/SequenceType.js
-jalview/xml/binding/uniprot/SourceDataType.js
-jalview/xml/binding/uniprot/SourceType.js
-jalview/xml/binding/uniprot/SubcellularLocationType.js
-jalview/xml/binding/uniprot/Uniprot.js
+jalview/bin/JalviewTaskbar.js
+jalview/datamodel/AlignedCodonFrame.js
+jalview/ext/ensembl/EnsemblFeatures.js
+jalview/ext/ensembl/EnsemblLookup.js
+jalview/ext/ensembl/EnsemblSymbol.js
+jalview/ext/ensembl/EnsemblXref.js
+jalview/ext/ensembl/Species.js
+jalview/fts/api/StructureFTSRestClientI.js
+jalview/fts/service/threedbeacons/TDBeaconsFTSRestClient.js
+jalview/gui/APQHandlers.js
+jalview/gui/CrossRefAction.js
+jalview/gui/CutAndPasteTransfer.js
+jalview/gui/JvOptionPane.js
+jalview/gui/SplashScreen.js
+jalview/gui/structurechooser/PDBStructureChooserQuerySource.js
+jalview/gui/structurechooser/StructureChooserQuerySource.js
+jalview/gui/structurechooser/TDBResultAnalyser.js
+jalview/gui/structurechooser/ThreeDBStructureChooserQuerySource.js
+jalview/io/gff/SequenceOntologyFactory.js
+jalview/io/gff/SequenceOntologyI.js
+jalview/io/gff/SequenceOntologyLite.js
+jalview/jbgui/FilterOption.js
+jalview/jbgui/GCutAndPasteTransfer.js
+jalview/structure/AtomSpecModel.js
+jalview/structure/StructureCommand.js
+jalview/structure/StructureCommandI.js
+jalview/structure/StructureCommandsBase.js
+jalview/structure/StructureCommandsI.js
+jalview/util/ChannelProperties.js
+jalview/util/HttpUtils.js
+jalview/util/IntRangeComparator.js
+jalview/util/JSONUtils.js
+jalview/util/ShortcutKeyMaskExWrapper.js
+jalview/util/ShortcutKeyMaskExWrapper8.js
+jalview/util/ShortcutKeyMaskExWrapperI.js
+jalview/ws/SequenceFetcherFactory.js
+jalview/ws/dbsources/EBIAlfaFold.js
+jalview/ws/dbsources/EmblFlatfileSource.js
+jalview/ws/utils/UrlDownloadClient.js
+jalview/xml/binding/uniprot/InteractantType.js
+jalview/xml/binding/uniprot/MoleculeType.js
+jalview/xml/binding/uniprot/ReactionType.js
+java/applet/AppletContext.js
+java/applet/AppletStub.js
+java/applet/JSApplet.js
+java/awt/AWTEvent.js
+java/awt/AWTEventMulticaster.js
 java/awt/AWTKeyStroke.js
+java/awt/ActiveEvent.js
+java/awt/Adjustable.js
 java/awt/AlphaComposite.js
+java/awt/BasicStroke.js
+java/awt/BorderLayout.js
 java/awt/CardLayout.js
+java/awt/Color.js
+java/awt/Component.js
+java/awt/ComponentOrientation.js
 java/awt/Composite.js
+java/awt/Container.js
 java/awt/ContainerOrderFocusTraversalPolicy.js
+java/awt/Cursor.js
 java/awt/DefaultFocusTraversalPolicy.js
 java/awt/DefaultKeyboardFocusManager.js
+java/awt/Desktop.js
+java/awt/Dialog.js
+java/awt/Dimension.js
+java/awt/EventDispatchThread.js
+java/awt/EventFilter.js
+java/awt/EventQueue.js
+java/awt/EventQueueItem.js
+java/awt/FlowLayout.js
 java/awt/FocusTraversalPolicy.js
+java/awt/Font.js
+java/awt/FontMetrics.js
+java/awt/GraphicsCallback.js
+java/awt/GraphicsConfiguration.js
+java/awt/GraphicsDevice.js
+java/awt/GraphicsEnvironment.js
 java/awt/GridBagConstraints.js
 java/awt/GridBagLayout.js
 java/awt/GridBagLayoutInfo.js
 java/awt/GridLayout.js
 java/awt/Image.js
+java/awt/Insets.js
+java/awt/ItemSelectable.js
+java/awt/JSComponent.js
+java/awt/JSDialog.js
+java/awt/JSFrame.js
+java/awt/JSPanel.js
 java/awt/KeyEventDispatcher.js
 java/awt/KeyEventPostProcessor.js
 java/awt/KeyboardFocusManager.js
+java/awt/LayoutManager.js
+java/awt/LayoutManager2.js
+java/awt/LightweightDispatcher.js
+java/awt/Paint.js
+java/awt/Point.js
+java/awt/Queue.js
+java/awt/Rectangle.js
+java/awt/RenderingHints.js
 java/awt/SentEvent.js
+java/awt/Shape.js
+java/awt/Stroke.js
+java/awt/Taskbar.js
 java/awt/TextComponent.js
+java/awt/Toolkit.js
+java/awt/Transparency.js
 java/awt/VKCollection.js
+java/awt/Window.js
+java/awt/color/ColorSpace.js
 java/awt/datatransfer/ClipboardOwner.js
-java/awt/datatransfer/DataFlavor.js
 java/awt/datatransfer/FlavorMap.js
 java/awt/datatransfer/FlavorTable.js
-java/awt/datatransfer/MimeType.js
-java/awt/datatransfer/MimeTypeParameterList.js
 java/awt/datatransfer/SystemFlavorMap.js
-java/awt/datatransfer/Transferable.js
 java/awt/dnd/DropTarget.js
 java/awt/dnd/DropTargetContext.js
-java/awt/dnd/DropTargetDropEvent.js
-java/awt/dnd/DropTargetEvent.js
 java/awt/dnd/DropTargetListener.js
-java/awt/dnd/peer/DropTargetContextPeer.js
 java/awt/dnd/peer/DropTargetPeer.js
+java/awt/event/AWTEventListener.js
 java/awt/event/ActionEvent.js
+java/awt/event/ActionListener.js
+java/awt/event/AdjustmentEvent.js
+java/awt/event/AdjustmentListener.js
 java/awt/event/ComponentAdapter.js
+java/awt/event/ComponentEvent.js
+java/awt/event/ComponentListener.js
 java/awt/event/ContainerEvent.js
+java/awt/event/ContainerListener.js
 java/awt/event/FocusAdapter.js
+java/awt/event/FocusEvent.js
+java/awt/event/FocusListener.js
+java/awt/event/HierarchyBoundsListener.js
+java/awt/event/HierarchyEvent.js
+java/awt/event/HierarchyListener.js
+java/awt/event/InputEvent.js
+java/awt/event/InputMethodListener.js
+java/awt/event/InvocationEvent.js
+java/awt/event/ItemEvent.js
+java/awt/event/ItemListener.js
 java/awt/event/KeyAdapter.js
 java/awt/event/KeyEvent.js
+java/awt/event/KeyListener.js
 java/awt/event/MouseAdapter.js
+java/awt/event/MouseEvent.js
+java/awt/event/MouseListener.js
 java/awt/event/MouseMotionAdapter.js
+java/awt/event/MouseMotionListener.js
 java/awt/event/MouseWheelEvent.js
+java/awt/event/MouseWheelListener.js
+java/awt/event/TextListener.js
+java/awt/event/WindowAdapter.js
+java/awt/event/WindowEvent.js
+java/awt/event/WindowFocusListener.js
+java/awt/event/WindowListener.js
+java/awt/event/WindowStateListener.js
+java/awt/font/FontRenderContext.js
 java/awt/font/TextAttribute.js
+java/awt/geom/AffineTransform.js
+java/awt/geom/Dimension2D.js
 java/awt/geom/Path2D.js
 java/awt/geom/PathIterator.js
+java/awt/geom/Point2D.js
 java/awt/geom/RectIterator.js
+java/awt/geom/Rectangle2D.js
+java/awt/geom/RectangularShape.js
 java/awt/image/BufferedImage.js
 java/awt/image/ColorModel.js
 java/awt/image/DataBuffer.js
 java/awt/image/DataBufferInt.js
 java/awt/image/DirectColorModel.js
 java/awt/image/ImageConsumer.js
+java/awt/image/ImageObserver.js
 java/awt/image/ImageProducer.js
 java/awt/image/PackedColorModel.js
 java/awt/image/PixelGrabber.js
@@ -494,15 +186,26 @@ java/awt/image/RenderedImage.js
 java/awt/image/SampleModel.js
 java/awt/image/SinglePixelPackedSampleModel.js
 java/awt/image/WritableRaster.js
+java/awt/peer/ComponentPeer.js
+java/awt/peer/ContainerPeer.js
 java/awt/peer/DialogPeer.js
+java/awt/peer/FramePeer.js
 java/awt/peer/KeyboardFocusManagerPeer.js
+java/awt/peer/LightweightPeer.js
+java/awt/peer/WindowPeer.js
 java/awt/print/Printable.js
+java/beans/ChangeListenerMap.js
+java/beans/PropertyChangeEvent.js
+java/beans/PropertyChangeListener.js
+java/beans/PropertyChangeSupport.js
 java/io/BufferedInputStream.js
 java/io/BufferedReader.js
 java/io/BufferedWriter.js
 java/io/ByteArrayInputStream.js
 java/io/ByteArrayOutputStream.js
 java/io/Closeable.js
+java/io/DataInput.js
+java/io/DataInputStream.js
 java/io/File.js
 java/io/FileDescriptor.js
 java/io/FileInputStream.js
@@ -518,41 +221,44 @@ java/io/ObjectStreamField.js
 java/io/OutputStream.js
 java/io/OutputStreamWriter.js
 java/io/PrintStream.js
-java/io/PrintWriter.js
-java/io/PushbackInputStream.js
 java/io/Reader.js
 java/io/StringReader.js
 java/io/StringWriter.js
 java/io/Writer.js
+java/lang/AbstractStringBuilder.js
 java/lang/AutoCloseable.js
+java/lang/Class.js
+java/lang/Enum.js
 java/lang/Iterable.js
 java/lang/Readable.js
 java/lang/Runtime.js
+java/lang/StringBuffer.js
 java/lang/StringBuilder.js
+java/lang/Thread.js
+java/lang/ThreadGroup.js
+java/lang/ThreadLocal.js
+java/lang/ref/ReferenceQueue.js
+java/lang/reflect/AccessibleObject.js
+java/lang/reflect/AnnotatedElement.js
 java/lang/reflect/Constructor.js
 java/lang/reflect/Method.js
 java/math/BigDecimal.js
 java/math/BigInteger.js
 java/math/MathContext.js
 java/math/RoundingMode.js
+java/net/ContentHandler.js
 java/net/HttpURLConnection.js
-java/net/HttpsURLConnection.js
 java/net/URI.js
+java/net/URL.js
 java/net/URLConnection.js
-java/net/URLDecoder.js
 java/net/URLStreamHandler.js
-java/nio/Bits.js
-java/nio/Buffer.js
-java/nio/ByteBuffer.js
-java/nio/ByteOrder.js
-java/nio/CharBuffer.js
-java/nio/HeapByteBuffer.js
-java/nio/HeapCharBuffer.js
-java/nio/charset/Charset.js
-java/nio/charset/CharsetDecoder.js
-java/nio/charset/CoderResult.js
-java/nio/charset/CodingErrorAction.js
-java/security/AccessControlContext.js
+java/net/URLStreamHandlerFactory.js
+java/net/UnknownHostException.js
+java/nio/file/FileSystem.js
+java/nio/file/FileSystems.js
+java/nio/file/Path.js
+java/nio/file/Watchable.js
+java/nio/file/spi/FileSystemProvider.js
 java/security/AccessController.js
 java/security/PrivilegedAction.js
 java/security/PrivilegedExceptionAction.js
@@ -568,26 +274,46 @@ java/text/Format.js
 java/text/MessageFormat.js
 java/text/NumberFormat.js
 java/text/SimpleDateFormat.js
+java/text/spi/BreakIteratorProvider.js
+java/text/spi/CollatorProvider.js
+java/text/spi/DateFormatProvider.js
+java/text/spi/DateFormatSymbolsProvider.js
+java/text/spi/DecimalFormatSymbolsProvider.js
+java/text/spi/NumberFormatProvider.js
+java/util/AbstractCollection.js
+java/util/AbstractList.js
+java/util/AbstractMap.js
 java/util/AbstractQueue.js
 java/util/AbstractSequentialList.js
+java/util/AbstractSet.js
 java/util/ArrayDeque.js
+java/util/ArrayList.js
+java/util/Arrays.js
 java/util/BitSet.js
 java/util/Calendar.js
 java/util/Collection.js
+java/util/Collections.js
 java/util/ComparableTimSort.js
 java/util/Comparator.js
 java/util/Deque.js
+java/util/Dictionary.js
 java/util/DualPivotQuicksort.js
 java/util/Enumeration.js
+java/util/EventListener.js
+java/util/EventObject.js
 java/util/Formatter.js
 java/util/GregorianCalendar.js
+java/util/HashMap.js
+java/util/HashSet.js
+java/util/Hashtable.js
+java/util/IdentityHashMap.js
 java/util/Iterator.js
 java/util/LinkedHashMap.js
 java/util/LinkedHashSet.js
 java/util/LinkedList.js
 java/util/List.js
 java/util/ListIterator.js
-java/util/ListResourceBundle.js
+java/util/Locale.js
 java/util/Map.js
 java/util/NavigableMap.js
 java/util/NavigableSet.js
@@ -595,16 +321,22 @@ java/util/Objects.js
 java/util/Properties.js
 java/util/PropertyResourceBundle.js
 java/util/Queue.js
+java/util/Random.js
 java/util/RandomAccess.js
+java/util/RandomAccessSubList.js
 java/util/ResourceBundle.js
+java/util/ServiceLoader.js
 java/util/Set.js
 java/util/SortedMap.js
 java/util/SortedSet.js
+java/util/Stack.js
 java/util/StringTokenizer.js
+java/util/SubList.js
 java/util/TimSort.js
 java/util/TimeZone.js
 java/util/TreeMap.js
 java/util/TreeSet.js
+java/util/Vector.js
 java/util/WeakHashMap.js
 java/util/concurrent/AbstractExecutorService.js
 java/util/concurrent/BlockingQueue.js
@@ -619,7 +351,6 @@ java/util/concurrent/Semaphore.js
 java/util/concurrent/ThreadFactory.js
 java/util/concurrent/ThreadPoolExecutor.js
 java/util/concurrent/TimeUnit.js
-java/util/concurrent/atomic/AtomicBoolean.js
 java/util/concurrent/atomic/AtomicInteger.js
 java/util/concurrent/locks/AbstractOwnableSynchronizer.js
 java/util/concurrent/locks/AbstractQueuedSynchronizer.js
@@ -628,14 +359,16 @@ java/util/concurrent/locks/Lock.js
 java/util/concurrent/locks/ReadWriteLock.js
 java/util/concurrent/locks/ReentrantLock.js
 java/util/concurrent/locks/ReentrantReadWriteLock.js
-java/util/function/Function.js
 java/util/jar/JarEntry.js
 java/util/jar/JarInputStream.js
-java/util/logging/Level.js
-java/util/logging/Logger.js
 java/util/regex/MatchResult.js
 java/util/regex/Matcher.js
 java/util/regex/Pattern.js
+java/util/spi/CalendarDataProvider.js
+java/util/spi/CurrencyNameProvider.js
+java/util/spi/LocaleNameProvider.js
+java/util/spi/LocaleServiceProvider.js
+java/util/spi/TimeZoneNameProvider.js
 java/util/zip/CRC32.js
 java/util/zip/Inflater.js
 java/util/zip/InflaterInputStream.js
@@ -647,17 +380,20 @@ javajs/api/GenericCifDataParser.js
 javajs/api/GenericLineReader.js
 javajs/api/GenericOutputChannel.js
 javajs/api/JSONEncodable.js
-javajs/awt/Font.js
-javajs/awt/FontManager.js
 javajs/util/A4.js
+javajs/util/AU.js
+javajs/util/AjaxURLConnection.js
 javajs/util/AjaxURLStreamHandler.js
+javajs/util/AjaxURLStreamHandlerFactory.js
 javajs/util/BS.js
 javajs/util/Base64.js
 javajs/util/CU.js
 javajs/util/CifDataParser.js
 javajs/util/DF.js
 javajs/util/Encoding.js
+javajs/util/JSThread.js
 javajs/util/LimitedLineReader.js
+javajs/util/Lst.js
 javajs/util/M3.js
 javajs/util/M34.js
 javajs/util/M4.js
@@ -665,96 +401,141 @@ javajs/util/OC.js
 javajs/util/P3.js
 javajs/util/P3i.js
 javajs/util/P4.js
+javajs/util/PT.js
 javajs/util/Rdr.js
 javajs/util/SB.js
 javajs/util/T3.js
 javajs/util/T3i.js
 javajs/util/T4.js
 javajs/util/V3.js
+javax/net/ssl/HttpsURLConnection.js
 javax/swing/AbstractAction.js
-javax/swing/AbstractCellEditor.js
-javax/swing/AbstractSpinnerModel.js
+javax/swing/AbstractButton.js
+javax/swing/AbstractListModel.js
 javax/swing/Action.js
+javax/swing/ActionMap.js
+javax/swing/AncestorNotifier.js
+javax/swing/ArrayTable.js
 javax/swing/Autoscroller.js
-javax/swing/CellEditor.js
+javax/swing/BorderFactory.js
+javax/swing/BoundedRangeModel.js
+javax/swing/BoxLayout.js
+javax/swing/ButtonGroup.js
+javax/swing/ButtonModel.js
 javax/swing/CellRendererPane.js
-javax/swing/ColorChooserDialog.js
+javax/swing/ClientPropertyKey.js
+javax/swing/ComboBoxEditor.js
+javax/swing/ComboBoxModel.js
 javax/swing/ComponentInputMap.js
-javax/swing/DefaultCellEditor.js
+javax/swing/DefaultBoundedRangeModel.js
+javax/swing/DefaultButtonModel.js
+javax/swing/DefaultComboBoxModel.js
 javax/swing/DefaultDesktopManager.js
 javax/swing/DefaultListCellRenderer.js
 javax/swing/DefaultListSelectionModel.js
 javax/swing/DefaultRowSorter.js
+javax/swing/DefaultSingleSelectionModel.js
 javax/swing/DesktopManager.js
 javax/swing/DropMode.js
+javax/swing/FocusManager.js
 javax/swing/Icon.js
 javax/swing/ImageIcon.js
 javax/swing/InputMap.js
-javax/swing/JColorChooser.js
+javax/swing/InternalFrameFocusTraversalPolicy.js
+javax/swing/JApplet.js
+javax/swing/JButton.js
+javax/swing/JCheckBox.js
+javax/swing/JCheckBoxMenuItem.js
+javax/swing/JComboBox.js
+javax/swing/JComponent.js
 javax/swing/JDesktopPane.js
 javax/swing/JDialog.js
-javax/swing/JFileChooser.js
-javax/swing/JFormattedTextField.js
+javax/swing/JFrame.js
 javax/swing/JInternalFrame.js
+javax/swing/JLabel.js
+javax/swing/JLayeredPane.js
 javax/swing/JList.js
+javax/swing/JMenu.js
+javax/swing/JMenuBar.js
+javax/swing/JMenuItem.js
 javax/swing/JOptionPane.js
+javax/swing/JPanel.js
+javax/swing/JPopupMenu.js
 javax/swing/JProgressBar.js
-javax/swing/JRadioButton.js
+javax/swing/JRadioButtonMenuItem.js
+javax/swing/JRootPane.js
+javax/swing/JScrollBar.js
 javax/swing/JScrollPane.js
-javax/swing/JSlider.js
-javax/swing/JSpinner.js
+javax/swing/JSeparator.js
 javax/swing/JTabbedPane.js
 javax/swing/JTable.js
 javax/swing/JTextArea.js
 javax/swing/JTextField.js
+javax/swing/JToggleButton.js
 javax/swing/JToolTip.js
 javax/swing/JViewport.js
 javax/swing/JWindow.js
 javax/swing/KeyStroke.js
+javax/swing/KeyboardManager.js
+javax/swing/LayoutComparator.js
+javax/swing/LayoutFocusTraversalPolicy.js
 javax/swing/ListCellRenderer.js
+javax/swing/ListModel.js
 javax/swing/ListSelectionModel.js
+javax/swing/LookAndFeel.js
+javax/swing/MenuElement.js
 javax/swing/MenuSelectionManager.js
+javax/swing/MutableComboBoxModel.js
 javax/swing/Popup.js
 javax/swing/PopupFactory.js
-javax/swing/RowFilter.js
+javax/swing/RepaintManager.js
+javax/swing/RootPaneContainer.js
 javax/swing/RowSorter.js
 javax/swing/ScrollPaneConstants.js
 javax/swing/ScrollPaneLayout.js
 javax/swing/Scrollable.js
+javax/swing/SingleSelectionModel.js
+javax/swing/SizeRequirements.js
 javax/swing/SortOrder.js
-javax/swing/SpinnerModel.js
-javax/swing/SpinnerNumberModel.js
-javax/swing/Spring.js
-javax/swing/SpringLayout.js
+javax/swing/SortingFocusTraversalPolicy.js
+javax/swing/SwingConstants.js
+javax/swing/SwingContainerOrderFocusTraversalPolicy.js
+javax/swing/SwingDefaultFocusTraversalPolicy.js
+javax/swing/SwingPaintEventDispatcher.js
+javax/swing/SwingUtilities.js
 javax/swing/Timer.js
 javax/swing/ToolTipManager.js
+javax/swing/TransferHandler.js
+javax/swing/UIDefaults.js
+javax/swing/UIManager.js
 javax/swing/ViewportLayout.js
+javax/swing/WindowConstants.js
+javax/swing/border/AbstractBorder.js
+javax/swing/border/BevelBorder.js
+javax/swing/border/Border.js
 javax/swing/border/CompoundBorder.js
+javax/swing/border/EmptyBorder.js
+javax/swing/border/EtchedBorder.js
 javax/swing/border/LineBorder.js
-javax/swing/border/MatteBorder.js
-javax/swing/border/TitledBorder.js
-javax/swing/colorchooser/AbstractColorChooserPanel.js
-javax/swing/colorchooser/CenterLayout.js
-javax/swing/colorchooser/ColorChooserComponentFactory.js
-javax/swing/colorchooser/ColorSelectionModel.js
-javax/swing/colorchooser/DefaultColorSelectionModel.js
-javax/swing/colorchooser/DefaultPreviewPanel.js
-javax/swing/colorchooser/DefaultRGBChooserPanel.js
-javax/swing/colorchooser/DefaultSwatchChooserPanel.js
-javax/swing/colorchooser/MainSwatchPanel.js
-javax/swing/colorchooser/RecentSwatchPanel.js
-javax/swing/colorchooser/SmartGridLayout.js
-javax/swing/colorchooser/SwatchPanel.js
+javax/swing/event/AncestorEvent.js
+javax/swing/event/AncestorListener.js
 javax/swing/event/CaretEvent.js
 javax/swing/event/CaretListener.js
 javax/swing/event/CellEditorListener.js
+javax/swing/event/ChangeEvent.js
+javax/swing/event/ChangeListener.js
 javax/swing/event/DocumentEvent.js
 javax/swing/event/DocumentListener.js
+javax/swing/event/EventListenerList.js
+javax/swing/event/HyperlinkListener.js
 javax/swing/event/InternalFrameAdapter.js
 javax/swing/event/InternalFrameEvent.js
 javax/swing/event/InternalFrameListener.js
+javax/swing/event/ListDataEvent.js
+javax/swing/event/ListDataListener.js
 javax/swing/event/ListSelectionEvent.js
 javax/swing/event/ListSelectionListener.js
+javax/swing/event/MenuEvent.js
 javax/swing/event/MenuKeyListener.js
 javax/swing/event/MenuListener.js
 javax/swing/event/MouseInputListener.js
@@ -767,17 +548,23 @@ javax/swing/event/TableModelEvent.js
 javax/swing/event/TableModelListener.js
 javax/swing/event/UndoableEditEvent.js
 javax/swing/event/UndoableEditListener.js
-javax/swing/filechooser/FileFilter.js
-javax/swing/filechooser/FileView.js
+javax/swing/plaf/ActionMapUIResource.js
+javax/swing/plaf/BorderUIResource.js
+javax/swing/plaf/ColorUIResource.js
 javax/swing/plaf/ComponentInputMapUIResource.js
+javax/swing/plaf/ComponentUI.js
+javax/swing/plaf/DimensionUIResource.js
+javax/swing/plaf/FontUIResource.js
 javax/swing/plaf/InputMapUIResource.js
+javax/swing/plaf/InsetsUIResource.js
+javax/swing/plaf/UIResource.js
 javax/swing/plaf/basic/BasicBorders.js
+javax/swing/plaf/basic/BasicGraphicsUtils.js
 javax/swing/table/AbstractTableModel.js
 javax/swing/table/DefaultTableCellRenderer.js
 javax/swing/table/DefaultTableColumnModel.js
 javax/swing/table/DefaultTableModel.js
 javax/swing/table/JTableHeader.js
-javax/swing/table/TableCellEditor.js
 javax/swing/table/TableCellRenderer.js
 javax/swing/table/TableColumn.js
 javax/swing/table/TableColumnModel.js
@@ -785,21 +572,18 @@ javax/swing/table/TableModel.js
 javax/swing/table/TableRowSorter.js
 javax/swing/text/AbstractDocument.js
 javax/swing/text/AttributeSet.js
+javax/swing/text/BoxView.js
 javax/swing/text/Caret.js
+javax/swing/text/CompositeView.js
 javax/swing/text/DefaultCaret.js
 javax/swing/text/DefaultEditorKit.js
-javax/swing/text/DefaultFormatter.js
-javax/swing/text/DefaultFormatterFactory.js
 javax/swing/text/Document.js
-javax/swing/text/DocumentFilter.js
 javax/swing/text/EditorKit.js
 javax/swing/text/Element.js
 javax/swing/text/GapContent.js
 javax/swing/text/GapVector.js
-javax/swing/text/InternationalFormatter.js
 javax/swing/text/JTextComponent.js
 javax/swing/text/MutableAttributeSet.js
-javax/swing/text/NumberFormatter.js
 javax/swing/text/PlainDocument.js
 javax/swing/text/PlainView.js
 javax/swing/text/Position.js
@@ -813,7 +597,7 @@ javax/swing/text/TabExpander.js
 javax/swing/text/TextAction.js
 javax/swing/text/Utilities.js
 javax/swing/text/View.js
-javax/swing/tree/TreeCellEditor.js
+javax/swing/text/WrappedPlainView.js
 javax/swing/tree/TreeNode.js
 javax/swing/undo/AbstractUndoableEdit.js
 javax/swing/undo/CompoundEdit.js
@@ -831,15 +615,11 @@ javax/xml/bind/annotation/adapters/CollapsedStringAdapter.js
 javax/xml/bind/annotation/adapters/XmlAdapter.js
 javax/xml/bind/helpers/AbstractUnmarshallerImpl.js
 javax/xml/bind/helpers/DefaultValidationEventHandler.js
-javax/xml/datatype/DatatypeFactory.js
 javax/xml/datatype/XMLGregorianCalendar.js
 javax/xml/namespace/QName.js
 javax/xml/stream/XMLInputFactory.js
+javax/xml/stream/XMLStreamConstants.js
 javax/xml/stream/XMLStreamReader.js
-mc_view/Atom.js
-mc_view/Bond.js
-mc_view/PDBChain.js
-mc_view/Residue.js
 net/miginfocom/layout/AC.js
 net/miginfocom/layout/AnimSpec.js
 net/miginfocom/layout/BoundSize.js
@@ -858,7 +638,6 @@ net/miginfocom/layout/UnitValue.js
 net/miginfocom/swing/MigLayout.js
 net/miginfocom/swing/SwingComponentWrapper.js
 net/miginfocom/swing/SwingContainerWrapper.js
-org/apache/xerces/jaxp/datatype/DatatypeFactoryImpl.js
 org/apache/xerces/jaxp/datatype/XMLGregorianCalendarImpl.js
 org/jmol/adapter/readers/cif/CifReader.js
 org/jmol/adapter/readers/cif/MMCifReader.js
@@ -874,9 +653,9 @@ org/jmol/adapter/smarter/Resolver.js
 org/jmol/adapter/smarter/SmarterJmolAdapter.js
 org/jmol/adapter/smarter/Structure.js
 org/jmol/adapter/smarter/StructureIterator.js
-org/jmol/adapter/smarter/XtalSymmetry.js
 org/jmol/api/AtomIndexIterator.js
 org/jmol/api/EventManager.js
+org/jmol/api/FontManager.js
 org/jmol/api/GenericFileInterface.js
 org/jmol/api/GenericMouseInterface.js
 org/jmol/api/GenericPlatform.js
@@ -886,9 +665,9 @@ org/jmol/api/JmolAdapterAtomIterator.js
 org/jmol/api/JmolAdapterBondIterator.js
 org/jmol/api/JmolAdapterStructureIterator.js
 org/jmol/api/JmolCallbackListener.js
+org/jmol/api/JmolFilesReaderInterface.js
 org/jmol/api/JmolGraphicsInterface.js
 org/jmol/api/JmolMeasurementClient.js
-org/jmol/api/JmolPropertyManager.js
 org/jmol/api/JmolRendererInterface.js
 org/jmol/api/JmolRepaintManager.js
 org/jmol/api/JmolScriptEvaluator.js
@@ -920,6 +699,8 @@ org/jmol/c/PAL.js
 org/jmol/c/STER.js
 org/jmol/c/STR.js
 org/jmol/c/VDW.js
+org/jmol/dssx/Bridge.js
+org/jmol/dssx/DSSP.js
 org/jmol/g3d/CylinderRenderer.js
 org/jmol/g3d/G3DRenderer.js
 org/jmol/g3d/Graphics3D.js
@@ -936,6 +717,7 @@ org/jmol/i18n/GT.js
 org/jmol/i18n/Language.js
 org/jmol/i18n/Resource.js
 org/jmol/io/FileReader.js
+org/jmol/io/FilesReader.js
 org/jmol/modelset/Atom.js
 org/jmol/modelset/AtomCollection.js
 org/jmol/modelset/AtomIteratorWithinModel.js
@@ -945,9 +727,11 @@ org/jmol/modelset/BondIterator.js
 org/jmol/modelset/BondIteratorSelected.js
 org/jmol/modelset/Chain.js
 org/jmol/modelset/Group.js
+org/jmol/modelset/HBond.js
 org/jmol/modelset/LabelToken.js
 org/jmol/modelset/Measurement.js
 org/jmol/modelset/MeasurementData.js
+org/jmol/modelset/MeasurementPending.js
 org/jmol/modelset/Model.js
 org/jmol/modelset/ModelLoader.js
 org/jmol/modelset/ModelSet.js
@@ -965,12 +749,9 @@ org/jmol/modelsetbio/BioPolymer.js
 org/jmol/modelsetbio/BioResolver.js
 org/jmol/modelsetbio/Helix.js
 org/jmol/modelsetbio/Monomer.js
-org/jmol/modelsetbio/NucleicMonomer.js
-org/jmol/modelsetbio/NucleicPolymer.js
-org/jmol/modelsetbio/PhosphorusMonomer.js
-org/jmol/modelsetbio/PhosphorusPolymer.js
 org/jmol/modelsetbio/ProteinStructure.js
 org/jmol/modelsetbio/Sheet.js
+org/jmol/modelsetbio/Turn.js
 org/jmol/render/BallsRenderer.js
 org/jmol/render/BbcageRenderer.js
 org/jmol/render/CageRenderer.js
@@ -1000,6 +781,7 @@ org/jmol/script/ScriptFunction.js
 org/jmol/script/ScriptManager.js
 org/jmol/script/ScriptMathProcessor.js
 org/jmol/script/ScriptParam.js
+org/jmol/script/ScriptQueueThread.js
 org/jmol/script/ScriptTokenParser.js
 org/jmol/script/T.js
 org/jmol/scriptext/CmdExt.js
@@ -1008,6 +790,7 @@ org/jmol/scriptext/ScriptExt.js
 org/jmol/shape/AtomShape.js
 org/jmol/shape/Balls.js
 org/jmol/shape/Bbcage.js
+org/jmol/shape/Echo.js
 org/jmol/shape/FontLineShape.js
 org/jmol/shape/Frank.js
 org/jmol/shape/Hover.js
@@ -1027,6 +810,7 @@ org/jmol/symmetry/SymmetryInfo.js
 org/jmol/symmetry/UnitCell.js
 org/jmol/thread/HoverWatcherThread.js
 org/jmol/thread/JmolThread.js
+org/jmol/thread/TimeoutThread.js
 org/jmol/util/BSUtil.js
 org/jmol/util/BoxInfo.js
 org/jmol/util/C.js
@@ -1036,6 +820,7 @@ org/jmol/util/DefaultLogger.js
 org/jmol/util/Edge.js
 org/jmol/util/Elements.js
 org/jmol/util/Escape.js
+org/jmol/util/Font.js
 org/jmol/util/GData.js
 org/jmol/util/Geodesic.js
 org/jmol/util/Int2IntHash.js
@@ -1063,7 +848,6 @@ org/jmol/viewer/JC.js
 org/jmol/viewer/ModelManager.js
 org/jmol/viewer/MotionPoint.js
 org/jmol/viewer/MouseState.js
-org/jmol/viewer/PropertyManager.js
 org/jmol/viewer/SelectionManager.js
 org/jmol/viewer/ShapeManager.js
 org/jmol/viewer/StateManager.js
@@ -1072,6 +856,7 @@ org/jmol/viewer/TransformManager.js
 org/jmol/viewer/Viewer.js
 org/jmol/viewer/binding/Binding.js
 org/jmol/viewer/binding/JmolBinding.js
+org/json/simple/parser/ParseException.js
 org/xml/sax/AttributeList.js
 org/xml/sax/Attributes.js
 org/xml/sax/ContentHandler.js
@@ -1079,11 +864,18 @@ org/xml/sax/InputSource.js
 org/xml/sax/Parser.js
 org/xml/sax/XMLReader.js
 org/xml/sax/ext/Attributes2.js
-sun/awt/AWTAccessor.js
+sun/awt/AWTAutoShutdown.js
+sun/awt/AppContext.js
 sun/awt/CausedFocusEvent.js
+sun/awt/ComponentFactory.js
 sun/awt/EventQueueItem.js
-sun/awt/KeyboardFocusManagerPeerProvider.js
+sun/awt/MostRecentKeyValue.js
+sun/awt/MostRecentThreadAppContext.js
+sun/awt/PaintEventDispatcher.js
+sun/awt/PostEventQueue.js
+sun/awt/RequestFocusController.js
 sun/awt/SunGraphicsCallback.js
+sun/awt/SunToolkit.js
 sun/awt/image/DataStealer.js
 sun/awt/image/IntegerComponentRaster.js
 sun/awt/image/IntegerInterleavedRaster.js
@@ -1094,20 +886,18 @@ sun/font/EAttribute.js
 sun/font/FontDesignMetrics.js
 sun/java2d/StateTrackable.js
 sun/java2d/StateTrackableDelegate.js
-sun/nio/cs/ArrayDecoder.js
-sun/nio/cs/HistoricallyNamedCharset.js
-sun/nio/cs/StandardCharsets.js
-sun/nio/cs/ThreadLocalCoders.js
-sun/nio/cs/UTF_8.js
-sun/nio/cs/Unicode.js
+sun/net/www/MessageHeader.js
 sun/swing/DefaultLookup.js
 sun/swing/StringUIClientPropertyKey.js
+sun/swing/SwingLazyValue.js
 sun/swing/SwingUtilities2.js
 sun/swing/UIAction.js
 sun/swing/UIClientPropertyKey.js
 sun/swing/table/DefaultTableCellHeaderRenderer.js
 sun/text/resources/FormatData.js
-sun/text/resources/FormatData_en.js
+sun/text/resources/en/FormatData_en.js
+sun/text/resources/en/FormatData_en_GB.js
+sun/text/resources/en/FormatData_en_US.js
 sun/util/calendar/AbstractCalendar.js
 sun/util/calendar/BaseCalendar.js
 sun/util/calendar/CalendarDate.js
@@ -1115,22 +905,56 @@ sun/util/calendar/CalendarSystem.js
 sun/util/calendar/CalendarUtils.js
 sun/util/calendar/Gregorian.js
 sun/util/calendar/ZoneInfo.js
+sun/util/calendar/ZoneInfoFile.js
+sun/util/locale/BaseLocale.js
+sun/util/locale/LanguageTag.js
+sun/util/locale/LocaleUtils.js
+sun/util/locale/provider/AuxLocaleProviderAdapter.js
+sun/util/locale/provider/AvailableLanguageTags.js
+sun/util/locale/provider/CalendarDataProviderImpl.js
+sun/util/locale/provider/CalendarDataUtility.js
+sun/util/locale/provider/CalendarProviderImpl.js
+sun/util/locale/provider/DateFormatProviderImpl.js
+sun/util/locale/provider/JRELocaleProviderAdapter.js
+sun/util/locale/provider/LocaleDataMetaInfo.js
+sun/util/locale/provider/LocaleProviderAdapter.js
+sun/util/locale/provider/LocaleResources.js
+sun/util/locale/provider/LocaleServiceProviderPool.js
+sun/util/locale/provider/ResourceBundleBasedAdapter.js
+sun/util/locale/provider/SPILocaleProviderAdapter.js
 sun/util/resources/LocaleData.js
-swingjs/JSAbstractDocument.js
-swingjs/JSCharSet.js
-swingjs/JSDnD.js
-swingjs/JSDocumentEvent.js
+sun/util/resources/ParallelListResourceBundle.js
+sun/util/spi/CalendarProvider.js
+swingjs/JSApp.js
+swingjs/JSAppletThread.js
+swingjs/JSAppletViewer.js
+swingjs/JSDummyApplet.js
+swingjs/JSFileSystem.js
 swingjs/JSFocusPeer.js
-swingjs/JSGraphicsCompositor.js
+swingjs/JSFontMetrics.js
+swingjs/JSFrameViewer.js
+swingjs/JSGraphics2D.js
+swingjs/JSGraphicsConfiguration.js
+swingjs/JSGraphicsEnvironment.js
 swingjs/JSImage.js
 swingjs/JSImagekit.js
 swingjs/JSKeyEvent.js
 swingjs/JSMenuManager.js
-swingjs/JSPlainDocument.js
-swingjs/JSTempFile.js
+swingjs/JSMouse.js
+swingjs/JSScreenDevice.js
+swingjs/JSThreadGroup.js
+swingjs/JSToolkit.js
+swingjs/JSUtil.js
 swingjs/a2s/A2SContainer.js
 swingjs/a2s/Dialog.js
-swingjs/api/JSMinimalAbstractDocument.js
+swingjs/api/Interface.js
+swingjs/api/JSUtilI.js
+swingjs/api/js/DOMNode.js
+swingjs/api/js/HTML5Canvas.js
+swingjs/api/js/HTML5CanvasContext2D.js
+swingjs/api/js/JSFunction.js
+swingjs/api/js/JSInterface.js
+swingjs/jquery/JQueryUI.js
 swingjs/json/JSON.js
 swingjs/jzlib/Adler32.js
 swingjs/jzlib/CRC32.js
@@ -1142,42 +966,66 @@ swingjs/jzlib/Inflate.js
 swingjs/jzlib/Inflater.js
 swingjs/jzlib/InflaterInputStream.js
 swingjs/jzlib/ZStream.js
-swingjs/plaf/BasicArrowButton.js
+swingjs/plaf/BasicComboBoxEditor.js
+swingjs/plaf/BasicComboBoxRenderer.js
 swingjs/plaf/BasicHTML.js
+swingjs/plaf/ButtonListener.js
 swingjs/plaf/CellHolder.js
-swingjs/plaf/CenterLayout.js
+swingjs/plaf/DefaultMenuLayout.js
+swingjs/plaf/HTML5LookAndFeel.js
 swingjs/plaf/JSAppletUI.js
-swingjs/plaf/JSColorChooserUI.js
+swingjs/plaf/JSButtonUI.js
+swingjs/plaf/JSCheckBoxMenuItemUI.js
+swingjs/plaf/JSCheckBoxUI.js
+swingjs/plaf/JSComboBoxUI.js
+swingjs/plaf/JSComboPopupList.js
+swingjs/plaf/JSComponentUI.js
 swingjs/plaf/JSDesktopIconUI.js
 swingjs/plaf/JSDesktopPaneUI.js
 swingjs/plaf/JSDialogUI.js
-swingjs/plaf/JSFormattedTextFieldUI.js
+swingjs/plaf/JSEventHandler.js
+swingjs/plaf/JSFrameUI.js
 swingjs/plaf/JSGraphicsUtils.js
 swingjs/plaf/JSInternalFrameUI.js
+swingjs/plaf/JSLabelUI.js
+swingjs/plaf/JSLayeredPaneUI.js
+swingjs/plaf/JSLightweightUI.js
 swingjs/plaf/JSListUI.js
+swingjs/plaf/JSMenuBarUI.js
+swingjs/plaf/JSMenuItemUI.js
+swingjs/plaf/JSMenuUI.js
+swingjs/plaf/JSOptionPaneUI.js
+swingjs/plaf/JSPanelUI.js
+swingjs/plaf/JSPopupMenuSeparatorUI.js
+swingjs/plaf/JSPopupMenuUI.js
 swingjs/plaf/JSPopupUI.js
 swingjs/plaf/JSProgressBarUI.js
+swingjs/plaf/JSRadioButtonMenuItemUI.js
+swingjs/plaf/JSRadioButtonUI.js
+swingjs/plaf/JSRootPaneUI.js
+swingjs/plaf/JSScrollBarUI.js
 swingjs/plaf/JSScrollPaneUI.js
-swingjs/plaf/JSSpinnerUI.js
+swingjs/plaf/JSSeparatorUI.js
+swingjs/plaf/JSSliderUI.js
 swingjs/plaf/JSTabbedPaneUI.js
 swingjs/plaf/JSTableHeaderUI.js
 swingjs/plaf/JSTableUI.js
 swingjs/plaf/JSTextAreaUI.js
 swingjs/plaf/JSTextFieldUI.js
 swingjs/plaf/JSTextUI.js
-swingjs/plaf/JSTextViewUI.js
 swingjs/plaf/JSToolTipUI.js
 swingjs/plaf/JSViewportUI.js
+swingjs/plaf/JSWindowUI.js
+swingjs/plaf/LazyActionMap.js
+swingjs/plaf/Resizer.js
 swingjs/plaf/TextListener.js
 swingjs/xml/JSJAXBClass.js
 swingjs/xml/JSJAXBContext.js
 swingjs/xml/JSJAXBContextFactory.js
-swingjs/xml/JSJAXBDatatypeFactory.js
 swingjs/xml/JSJAXBField.js
 swingjs/xml/JSJAXBUnmarshaller.js
 swingjs/xml/JSSAXAttributes.js
 swingjs/xml/JSSAXParser.js
 swingjs/xml/JSXMLGregorianCalendarImpl.js
 swingjs/xml/JSXMLInputFactory.js
-swingjs/xml/JSXMLStreamReader.jscom/stevesoft/pat/Any.js
-swingjs/xml/JSXMLStreamReader.jscom/stevesoft/pat/Boundary.js
+swingjs/xml/JSXMLStreamReader.js