JAL-2050 only hide introns if exons are present! Removed 'hide introns'
[jalview.git] / src / jalview / gui / SequenceFetcher.java
index ad3fcc9..eb33ce7 100755 (executable)
  */
 package jalview.gui;
 
+import jalview.api.FeatureSettingsModelI;
+import jalview.bin.Cache;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.DBRefEntry;
 import jalview.datamodel.SequenceFeature;
 import jalview.datamodel.SequenceI;
-import jalview.io.FormatAdapter;
-import jalview.io.IdentifyFile;
+import jalview.io.gff.SequenceOntologyI;
 import jalview.util.DBRefUtils;
 import jalview.util.MessageManager;
 import jalview.ws.dbsources.das.api.DasSourceRegistryI;
@@ -157,9 +158,9 @@ public class SequenceFetcher extends JPanel implements Runnable
       }
     }
     if (sfetch == null
-            || dasRegistry != jalview.bin.Cache.getDasSourceRegistry()
-            || lastDasSourceRegistry != (jalview.bin.Cache
-                    .getDasSourceRegistry().getDasRegistryURL() + jalview.bin.Cache
+            || dasRegistry != Cache.getDasSourceRegistry()
+            || lastDasSourceRegistry != (Cache.getDasSourceRegistry()
+                    .getDasRegistryURL() + Cache
                     .getDasSourceRegistry().getLocalSourceString())
                     .hashCode())
     {
@@ -174,7 +175,7 @@ public class SequenceFetcher extends JPanel implements Runnable
                 .getString("status.init_sequence_database_fetchers"),
                 Thread.currentThread().hashCode());
       }
-      dasRegistry = jalview.bin.Cache.getDasSourceRegistry();
+      dasRegistry = Cache.getDasSourceRegistry();
       dasRegistry.refreshSources();
 
       jalview.ws.SequenceFetcher sf = new jalview.ws.SequenceFetcher();
@@ -527,6 +528,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)
@@ -551,7 +554,7 @@ public class SequenceFetcher extends JPanel implements Runnable
                             proxy.getDbName() }), Thread.currentThread()
                         .hashCode());
         isAliSource = proxy.isAlignmentSource();
-        if (proxy.getAccessionSeparator() == null)
+        if (proxy.getMaximumQueryCount() == 1)
         {
           while (en.hasNext())
           {
@@ -591,7 +594,8 @@ public class SequenceFetcher extends JPanel implements Runnable
               }
             } catch (Exception e)
             {
-              jalview.bin.Cache.log.info("Error retrieving " + item
+              Cache.log.info(
+                      "Error retrieving " + item
                       + " from " + proxy.getDbName(), e);
               nextfetch.add(item);
             }
@@ -642,14 +646,14 @@ public class SequenceFetcher extends JPanel implements Runnable
                 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)
@@ -693,6 +697,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)
         {
@@ -743,7 +754,8 @@ public class SequenceFetcher extends JPanel implements Runnable
     // 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());
@@ -771,35 +783,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
@@ -811,7 +794,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)
@@ -849,6 +833,16 @@ public class SequenceFetcher extends JPanel implements Runnable
 
           }
         }
+
+        if (preferredFeatureColours != null)
+        {
+          af.getViewport().applyFeaturesStyle(preferredFeatureColours);
+        }
+        if (Cache.getDefault("HIDE_INTRONS", true))
+        {
+          hideIntronsIfPresent(af);
+        }
+
         Desktop.addInternalFrame(af, title, AlignFrame.DEFAULT_WIDTH,
                 AlignFrame.DEFAULT_HEIGHT);
 
@@ -857,7 +851,7 @@ public class SequenceFetcher extends JPanel implements Runnable
 
         try
         {
-          af.setMaximum(jalview.bin.Cache.getDefault("SHOW_FULLSCREEN",
+          af.setMaximum(Cache.getDefault("SHOW_FULLSCREEN",
                   false));
         } catch (Exception ex)
         {
@@ -871,6 +865,25 @@ public class SequenceFetcher extends JPanel implements Runnable
     return al;
   }
 
+  /**
+   * Hide columns not containing 'exon' features, provided there are exon
+   * features on the alignment
+   * 
+   * @param af
+   */
+  public void hideIntronsIfPresent(AlignFrame af)
+  {
+    boolean hasExons = af.avc.markColumnsContainingFeatures(false, false,
+            false,
+            SequenceOntologyI.EXON);
+    if (hasExons)
+    {
+      af.avc.markColumnsContainingFeatures(true, false, true,
+              SequenceOntologyI.EXON);
+      af.getViewport().hideSelectedColumns();
+    }
+  }
+
   void showErrorMessage(final String error)
   {
     resetDialog();