JAL-2016 FeatureSettingsI now FeatureSettingsModelI
[jalview.git] / src / jalview / gui / SequenceFetcher.java
index 090eab7..784474e 100755 (executable)
  */
 package jalview.gui;
 
+import jalview.api.FeatureSettingsModelI;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.DBRefEntry;
-import jalview.datamodel.DBRefSource;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
-import jalview.io.FormatAdapter;
-import jalview.io.IdentifyFile;
 import jalview.util.DBRefUtils;
 import jalview.util.MessageManager;
 import jalview.ws.dbsources.das.api.DasSourceRegistryI;
@@ -113,6 +111,7 @@ public class SequenceFetcher extends JPanel implements Runnable
   private static Thread initingThread = null;
 
   int debounceTrap = 0;
+
   /**
    * Blocking method that initialises and returns the shared instance of the
    * SequenceFetcher client
@@ -128,9 +127,11 @@ public class SequenceFetcher extends JPanel implements Runnable
     {
       if (guiWindow != null)
       {
-        guiWindow.setProgressBar(
-                MessageManager.getString("status.waiting_sequence_database_fetchers_init"),
-                Thread.currentThread().hashCode());
+        guiWindow
+                .setProgressBar(
+                        MessageManager
+                                .getString("status.waiting_sequence_database_fetchers_init"),
+                        Thread.currentThread().hashCode());
       }
       // initting happening on another thread - so wait around to see if it
       // finishes.
@@ -147,9 +148,11 @@ public class SequenceFetcher extends JPanel implements Runnable
       }
       if (guiWindow != null)
       {
-        guiWindow.setProgressBar(
-                       MessageManager.getString("status.waiting_sequence_database_fetchers_init"),
-                Thread.currentThread().hashCode());
+        guiWindow
+                .setProgressBar(
+                        MessageManager
+                                .getString("status.waiting_sequence_database_fetchers_init"),
+                        Thread.currentThread().hashCode());
       }
     }
     if (sfetch == null
@@ -166,7 +169,8 @@ public class SequenceFetcher extends JPanel implements Runnable
        */
       if (guiWindow != null)
       {
-        guiWindow.setProgressBar(MessageManager.getString("status.init_sequence_database_fetchers"),
+        guiWindow.setProgressBar(MessageManager
+                .getString("status.init_sequence_database_fetchers"),
                 Thread.currentThread().hashCode());
       }
       dasRegistry = jalview.bin.Cache.getDasSourceRegistry();
@@ -187,6 +191,7 @@ public class SequenceFetcher extends JPanel implements Runnable
   }
 
   private IProgressIndicator progressIndicator;
+
   public SequenceFetcher(IProgressIndicator guiIndic)
   {
     this.progressIndicator = guiIndic;
@@ -212,8 +217,10 @@ public class SequenceFetcher extends JPanel implements Runnable
               JOptionPane
                       .showInternalMessageDialog(
                               Desktop.desktop,
-                              MessageManager.getString("warn.couldnt_create_sequence_fetcher_client"),
-                              MessageManager.getString("label.couldnt_create_sequence_fetcher"),
+                              MessageManager
+                                      .getString("warn.couldnt_create_sequence_fetcher_client"),
+                              MessageManager
+                                      .getString("label.couldnt_create_sequence_fetcher"),
                               JOptionPane.ERROR_MESSAGE);
             }
           });
@@ -270,7 +277,9 @@ public class SequenceFetcher extends JPanel implements Runnable
 
   private String getFrameTitle()
   {
-    return ((alignFrame == null) ? MessageManager.getString("label.new_sequence_fetcher") : MessageManager.getString("label.additional_sequence_fetcher"));
+    return ((alignFrame == null) ? MessageManager
+            .getString("label.new_sequence_fetcher") : MessageManager
+            .getString("label.additional_sequence_fetcher"));
   }
 
   private void jbInit() throws Exception
@@ -356,18 +365,19 @@ public class SequenceFetcher extends JPanel implements Runnable
       {
         debounceTrap++;
         String currentSelection = database.getSelectedItem();
-
         if (!currentSelection.equalsIgnoreCase("pdb"))
         {
-            otherSourceAction();
+          otherSourceAction();
         }
-        if (currentSelection.equalsIgnoreCase("pdb") && ((debounceTrap % 2) == 0))
+        if (currentSelection.equalsIgnoreCase("pdb")
+                && (database.action == KeyEvent.VK_ENTER || ((debounceTrap % 2) == 0)))
         {
           pdbSourceAction();
         }
-
+        database.action = -1;
       }
     });
+
     dbeg.setText("");
     jPanel2.add(databaseButt, java.awt.BorderLayout.NORTH);
     jPanel2.add(dbeg, java.awt.BorderLayout.CENTER);
@@ -401,8 +411,7 @@ public class SequenceFetcher extends JPanel implements Runnable
                       : ""));
       String eq = database.getExampleQueries();
       dbeg.setText(MessageManager.formatMessage(
-              "label.example_query_param", new String[]
-              { eq }));
+              "label.example_query_param", new String[] { eq }));
       boolean enablePunct = !(eq != null && eq.indexOf(",") > -1);
       for (DbSourceProxy dbs : database.getSelectedSources())
       {
@@ -440,8 +449,6 @@ public class SequenceFetcher extends JPanel implements Runnable
     jPanel3.repaint();
   }
 
-
-
   public void close_actionPerformed(ActionEvent e)
   {
     try
@@ -519,6 +526,8 @@ public class SequenceFetcher extends JPanel implements Runnable
             .split(";"));
     Iterator<String> en = Arrays.asList(new String[0]).iterator();
     int nqueries = qries.length;
+
+    FeatureSettingsModelI preferredFeatureColours = null;
     while (proxies.hasNext() && (en.hasNext() || nextfetch.size() > 0))
     {
       if (!en.hasNext() && nextfetch.size() > 0)
@@ -535,9 +544,14 @@ public class SequenceFetcher extends JPanel implements Runnable
       try
       {
         // update status
-        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);
+        guiWindow
+                .setProgressBar(MessageManager.formatMessage(
+                        "status.fetching_sequence_queries_from",
+                        new String[] {
+                            Integer.valueOf(nqueries).toString(),
+                            proxy.getDbName() }), Thread.currentThread()
+                        .hashCode());
+        isAliSource = proxy.isAlignmentSource();
         if (proxy.getAccessionSeparator() == null)
         {
           while (en.hasNext())
@@ -624,20 +638,19 @@ public class SequenceFetcher extends JPanel implements Runnable
                 DBRefEntry dbr = new DBRefEntry(), found[] = null;
                 dbr.setSource(proxy.getDbSource());
                 dbr.setVersion(null);
-                String accId = DBRefUtils.processQueryToAccessionFor(proxy,
-                        q);
+                String accId = proxy.getAccessionIdFromQuery(q);
                 dbr.setAccessionId(accId);
                 boolean rfound = false;
                 for (int r = 0; r < rs.length; r++)
                 {
-                  if (rs[r] != null
-                          && (found = DBRefUtils.searchRefs(
-                                  rs[r].getDBRef(), dbr)) != null
-                          && found.length > 0)
+                  if (rs[r] != null)
                   {
-                    rfound = true;
-                    rs[r] = null;
-                    continue;
+                    found = DBRefUtils.searchRefs(rs[r].getDBRefs(), accId);
+                    if (found != null && found.length > 0)
+                    {
+                      rfound = true;
+                      rs[r] = null;
+                    }
                   }
                 }
                 if (!rfound)
@@ -681,6 +694,13 @@ public class SequenceFetcher extends JPanel implements Runnable
       // Stack results ready for opening in alignment windows
       if (aresult != null && aresult.size() > 0)
       {
+        FeatureSettingsModelI proxyColourScheme = proxy
+                .getFeatureColourScheme();
+        if (proxyColourScheme != null)
+        {
+          preferredFeatureColours = proxyColourScheme;
+        }
+
         AlignmentI ar = null;
         if (isAliSource)
         {
@@ -719,15 +739,20 @@ public class SequenceFetcher extends JPanel implements Runnable
           presultTitle.add(titl);
         }
       }
-      guiWindow.setProgressBar(MessageManager.getString("status.finshed_querying"), Thread.currentThread()
+      guiWindow.setProgressBar(MessageManager
+              .getString("status.finshed_querying"), Thread.currentThread()
               .hashCode());
     }
-    guiWindow.setProgressBar((presult.size() > 0) ? MessageManager.getString("status.parsing_results")
-            : MessageManager.getString("status.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)
     {
-      parseResult(presult.remove(0), presultTitle.remove(0), null);
+      parseResult(presult.remove(0), presultTitle.remove(0), null,
+              preferredFeatureColours);
     }
     // only remove visual delay after we finished parsing.
     guiWindow.setProgressBar(null, Thread.currentThread().hashCode());
@@ -755,35 +780,6 @@ public class SequenceFetcher extends JPanel implements Runnable
     resetDialog();
   }
 
-  AlignmentI parseResult(String result, String title)
-  {
-    String format = new IdentifyFile().Identify(result, "Paste");
-    AlignmentI sequences = null;
-    if (FormatAdapter.isValidFormat(format))
-    {
-      sequences = null;
-      try
-      {
-        sequences = new FormatAdapter().readFile(result.toString(),
-                "Paste", format);
-      } catch (Exception ex)
-      {
-      }
-
-      if (sequences != null)
-      {
-        return parseResult(sequences, title, format);
-      }
-    }
-    else
-    {
-      showErrorMessage("Error retrieving " + textArea.getText() + " from "
-              + database.getSelectedItem());
-    }
-
-    return null;
-  }
-
   /**
    * 
    * @return a standard title for any results retrieved using the currently
@@ -795,7 +791,8 @@ public class SequenceFetcher extends JPanel implements Runnable
   }
 
   AlignmentI parseResult(AlignmentI al, String title,
-          String currentFileFormat)
+          String currentFileFormat,
+          FeatureSettingsModelI preferredFeatureColours)
   {
 
     if (al != null && al.getHeight() > 0)
@@ -833,6 +830,11 @@ public class SequenceFetcher extends JPanel implements Runnable
 
           }
         }
+
+        if (preferredFeatureColours != null)
+        {
+          af.viewport.applyFeaturesStyle(preferredFeatureColours);
+        }
         Desktop.addInternalFrame(af, title, AlignFrame.DEFAULT_WIDTH,
                 AlignFrame.DEFAULT_HEIGHT);