JAL-1683 replace year/version strings with tokens in source
[jalview.git] / src / jalview / gui / SequenceFetcher.java
index e43f82c..af4aa67 100755 (executable)
@@ -1,19 +1,22 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
- * Copyright (C) 2011 J Procter, AM Waterhouse, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  * Jalview is free software: you can redistribute it and/or
  * modify it under the terms of the GNU General Public License 
- * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
- * 
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *  
  * Jalview is distributed in the hope that it will be useful, but 
  * WITHOUT ANY WARRANTY; without even the implied warranty 
  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
  * PURPOSE.  See the GNU General Public License for more details.
  * 
- * You should have received a copy of the GNU General Public License along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview.  If not, see <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
  */
 package jalview.gui;
 
@@ -25,16 +28,15 @@ import java.awt.event.*;
 
 import javax.swing.*;
 import javax.swing.tree.DefaultMutableTreeNode;
-import javax.swing.tree.MutableTreeNode;
-import javax.swing.tree.TreeModel;
+
+import com.stevesoft.pat.Regex;
 
 import jalview.datamodel.*;
 import jalview.io.*;
 import jalview.util.DBRefUtils;
+import jalview.util.MessageManager;
 import jalview.ws.dbsources.das.api.DasSourceRegistryI;
 import jalview.ws.seqfetcher.DbSourceProxy;
-import jalview.ws.seqfetcher.DbSourceProxyImpl;
-
 import java.awt.BorderLayout;
 
 public class SequenceFetcher extends JPanel implements Runnable
@@ -76,7 +78,7 @@ public class SequenceFetcher extends JPanel implements Runnable
       if (guiWindow != null)
       {
         guiWindow.setProgressBar(
-                "Waiting for Sequence Database Fetchers to initialise",
+                MessageManager.getString("status.waiting_sequence_database_fetchers_init"),
                 Thread.currentThread().hashCode());
       }
       // initting happening on another thread - so wait around to see if it
@@ -95,7 +97,7 @@ public class SequenceFetcher extends JPanel implements Runnable
       if (guiWindow != null)
       {
         guiWindow.setProgressBar(
-                "Waiting for Sequence Database Fetchers to initialise",
+                       MessageManager.getString("status.waiting_sequence_database_fetchers_init"),
                 Thread.currentThread().hashCode());
       }
     }
@@ -113,7 +115,7 @@ public class SequenceFetcher extends JPanel implements Runnable
        */
       if (guiWindow != null)
       {
-        guiWindow.setProgressBar("Initialising Sequence Database Fetchers",
+        guiWindow.setProgressBar(MessageManager.getString("status.init_sequence_database_fetchers"),
                 Thread.currentThread().hashCode());
       }
       dasRegistry = jalview.bin.Cache.getDasSourceRegistry();
@@ -122,7 +124,7 @@ public class SequenceFetcher extends JPanel implements Runnable
       jalview.ws.SequenceFetcher sf = new jalview.ws.SequenceFetcher();
       if (guiWindow != null)
       {
-        guiWindow.setProgressBar("Initialising Sequence Database Fetchers",
+        guiWindow.setProgressBar(MessageManager.getString("status.init_sequence_database_fetchers"),
                 Thread.currentThread().hashCode());
       }
       lastDasSourceRegistry = (dasRegistry.getDasRegistryURL() + dasRegistry
@@ -142,6 +144,7 @@ public class SequenceFetcher extends JPanel implements Runnable
     Thread sf = new Thread(new Runnable()
     {
 
+      @Override
       public void run()
       {
         if (getSequenceFetcherSingleton(guiWindow) != null)
@@ -152,13 +155,14 @@ public class SequenceFetcher extends JPanel implements Runnable
         {
           javax.swing.SwingUtilities.invokeLater(new Runnable()
           {
+            @Override
             public void run()
             {
               JOptionPane
                       .showInternalMessageDialog(
                               Desktop.desktop,
-                              "Could not create the sequence fetcher client. Check error logs for details.",
-                              "Couldn't create SequenceFetcher",
+                              MessageManager.getString("warn.couldnt_create_sequence_fetcher_client"),
+                              MessageManager.getString("label.couldnt_create_sequence_fetcher"),
                               JOptionPane.ERROR_MESSAGE);
             }
           });
@@ -215,8 +219,7 @@ public class SequenceFetcher extends JPanel implements Runnable
 
   private String getFrameTitle()
   {
-    return ((alignFrame == null) ? "New " : "Additional ")
-            + "Sequence Fetcher";
+    return ((alignFrame == null) ? MessageManager.getString("label.new_sequence_fetcher") : MessageManager.getString("label.additional_sequence_fetcher"));
   }
 
   private void jbInit() throws Exception
@@ -227,40 +230,46 @@ public class SequenceFetcher extends JPanel implements Runnable
     dbeg.setFont(new java.awt.Font("Verdana", Font.BOLD, 11));
     jLabel1.setFont(new java.awt.Font("Verdana", Font.ITALIC, 11));
     jLabel1.setHorizontalAlignment(SwingConstants.CENTER);
-    jLabel1.setText("Separate multiple accession ids with semi colon \";\"");
+    jLabel1.setText(MessageManager
+            .getString("label.separate_multiple_accession_ids"));
 
     replacePunctuation.setHorizontalAlignment(SwingConstants.CENTER);
     replacePunctuation
             .setFont(new java.awt.Font("Verdana", Font.ITALIC, 11));
-    replacePunctuation.setText("Replace commas with semi-colons");
-    ok.setText("OK");
+    replacePunctuation.setText(MessageManager
+            .getString("label.replace_commas_semicolons"));
+    ok.setText(MessageManager.getString("action.ok"));
     ok.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         ok_actionPerformed();
       }
     });
-    clear.setText("Clear");
+    clear.setText(MessageManager.getString("action.clear"));
     clear.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         clear_actionPerformed();
       }
     });
 
-    example.setText("Example");
+    example.setText(MessageManager.getString("label.example"));
     example.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         example_actionPerformed();
       }
     });
-    close.setText("Close");
+    close.setText(MessageManager.getString("action.close"));
     close.addActionListener(new ActionListener()
     {
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         close_actionPerformed(e);
@@ -270,6 +279,7 @@ public class SequenceFetcher extends JPanel implements Runnable
     textArea.setLineWrap(true);
     textArea.addKeyListener(new KeyAdapter()
     {
+      @Override
       public void keyPressed(KeyEvent e)
       {
         if (e.getKeyCode() == KeyEvent.VK_ENTER)
@@ -289,6 +299,7 @@ public class SequenceFetcher extends JPanel implements Runnable
     database.addActionListener(new ActionListener()
     {
 
+      @Override
       public void actionPerformed(ActionEvent e)
       {
         try
@@ -298,9 +309,12 @@ public class SequenceFetcher extends JPanel implements Runnable
                           + database.getSelectedSources().size()
                           + " others)" : ""));
           String eq = database.getExampleQueries();
-          dbeg.setText("Example query: " + eq);
-          boolean enablePunct=!(eq != null && eq.indexOf(",") > -1);
-          for (DbSourceProxy dbs:database.getSelectedSources()) {
+          dbeg.setText(MessageManager.formatMessage(
+                  "label.example_query_param", new String[]
+                  { eq }));
+          boolean enablePunct = !(eq != null && eq.indexOf(",") > -1);
+          for (DbSourceProxy dbs : database.getSelectedSources())
+          {
             if (dbs instanceof jalview.ws.dbsources.das.datamodel.DasSequenceSource)
             {
               enablePunct = false;
@@ -399,7 +413,8 @@ public class SequenceFetcher extends JPanel implements Runnable
 
   public void ok_actionPerformed()
   {
-    database.setEnabled(false);
+    databaseButt.setEnabled(false);
+    example.setEnabled(false);
     textArea.setEnabled(false);
     ok.setEnabled(false);
     close.setEnabled(false);
@@ -410,12 +425,14 @@ public class SequenceFetcher extends JPanel implements Runnable
 
   private void resetDialog()
   {
-    database.setEnabled(true);
+    databaseButt.setEnabled(true);
+    example.setEnabled(true);
     textArea.setEnabled(true);
     ok.setEnabled(true);
     close.setEnabled(true);
   }
 
+  @Override
   public void run()
   {
     String error = "";
@@ -450,7 +467,7 @@ public class SequenceFetcher extends JPanel implements Runnable
       return;
     }
     // indicate if successive sources should be merged into one alignment.
-    boolean addToLast=false;
+    boolean addToLast = false;
     ArrayList<String> aresultq = new ArrayList<String>(), presultTitle = new ArrayList<String>();
     ArrayList<AlignmentI> presult = new ArrayList<AlignmentI>(), aresult = new ArrayList<AlignmentI>();
     Iterator<DbSourceProxy> proxies = database.getSelectedSources()
@@ -476,8 +493,7 @@ public class SequenceFetcher extends JPanel implements Runnable
       try
       {
         // update status
-        guiWindow.setProgressBar("Fetching " + nqueries
-                + " sequence queries from " + proxy.getDbName(), Thread
+        guiWindow.setProgressBar(MessageManager.formatMessage("status.fetching_sequence_queries_from", new String[]{Integer.valueOf(nqueries).toString(),proxy.getDbName()}), Thread
                 .currentThread().hashCode());
         isAliSource = proxy.isA(DBRefSource.ALIGNMENTDB);
         if (proxy.getAccessionSeparator() == null)
@@ -565,6 +581,24 @@ public class SequenceFetcher extends JPanel implements Runnable
               {
                 DBRefEntry dbr = new DBRefEntry(), found[] = null;
                 dbr.setSource(proxy.getDbSource());
+                dbr.setVersion(null);
+                if (proxy.getAccessionValidator() != null)
+                {
+                  Regex vgr = proxy.getAccessionValidator();
+                  vgr.search(q);
+                  if (vgr.numSubs() > 0)
+                  {
+                    dbr.setAccessionId(vgr.stringMatched(1));
+                  }
+                  else
+                  {
+                    dbr.setAccessionId(vgr.stringMatched());
+                  }
+                }
+                else
+                {
+                  dbr.setAccessionId(q);
+                }
                 boolean rfound = false;
                 for (int r = 0; r < rs.length; r++)
                 {
@@ -622,7 +656,7 @@ public class SequenceFetcher extends JPanel implements Runnable
         AlignmentI ar = null;
         if (isAliSource)
         {
-          addToLast=false;
+          addToLast = false;
           // new window for each result
           while (aresult.size() > 0)
           {
@@ -633,11 +667,11 @@ public class SequenceFetcher extends JPanel implements Runnable
         }
         else
         {
-          String titl=null;
-          if (addToLast && presult.size()>0)
+          String titl = null;
+          if (addToLast && presult.size() > 0)
           {
-            ar=presult.remove(presult.size()-1);
-            titl=presultTitle.remove(presultTitle.size()-1);
+            ar = presult.remove(presult.size() - 1);
+            titl = presultTitle.remove(presultTitle.size() - 1);
           }
           // concatenate all results in one window
           while (aresult.size() > 0)
@@ -652,14 +686,16 @@ public class SequenceFetcher extends JPanel implements Runnable
             }
             ;
           }
-          addToLast=true;
+          addToLast = true;
           presult.add(ar);
           presultTitle.add(titl);
         }
       }
-      guiWindow.setProgressBar("Finished querying", Thread.currentThread().hashCode());
+      guiWindow.setProgressBar(MessageManager.getString("status.finshed_querying"), Thread.currentThread()
+              .hashCode());
     }
-    guiWindow.setProgressBar((presult.size()>0) ? "Parsing results.":"Processing ..", Thread.currentThread().hashCode());
+    guiWindow.setProgressBar((presult.size() > 0) ? MessageManager.getString("status.parsing_results")
+            : MessageManager.getString("status.processing"), Thread.currentThread().hashCode());
     // process results
     while (presult.size() > 0)
     {
@@ -673,14 +709,14 @@ public class SequenceFetcher extends JPanel implements Runnable
       sb.append("Didn't retrieve the following "
               + (nextfetch.size() == 1 ? "query" : nextfetch.size()
                       + " queries") + ": \n");
-      int l = sb.length(),lr=0;
+      int l = sb.length(), lr = 0;
       for (String s : nextfetch)
       {
         if (l != sb.length())
         {
           sb.append("; ");
         }
-        if (lr-sb.length()>40)
+        if (lr - sb.length() > 40)
         {
           sb.append("\n");
         }
@@ -772,7 +808,8 @@ public class SequenceFetcher extends JPanel implements Runnable
         Desktop.addInternalFrame(af, title, AlignFrame.DEFAULT_WIDTH,
                 AlignFrame.DEFAULT_HEIGHT);
 
-        af.statusBar.setText("Successfully pasted alignment file");
+        af.statusBar.setText(MessageManager
+                .getString("label.successfully_pasted_alignment_file"));
 
         try
         {
@@ -809,10 +846,12 @@ public class SequenceFetcher extends JPanel implements Runnable
     resetDialog();
     javax.swing.SwingUtilities.invokeLater(new Runnable()
     {
+      @Override
       public void run()
       {
         JOptionPane.showInternalMessageDialog(Desktop.desktop, error,
-                "Error Retrieving Data", JOptionPane.WARNING_MESSAGE);
+                MessageManager.getString("label.error_retrieving_data"),
+                JOptionPane.WARNING_MESSAGE);
       }
     });
   }