fix for arrayoutofbounds bug when secondary structure element extends whole width...
[jalview.git] / src / jalview / gui / FeatureSettings.java
index de61be3..ea492e2 100755 (executable)
@@ -752,23 +752,32 @@ public class FeatureSettings
     fetchDAS.setEnabled(false);
     cancelDAS.setEnabled(true);
     Vector selectedSources = dassourceBrowser.getSelectedSources();
-
+    doDasFeatureFetch(selectedSources, true, true);
+  }
+  /**
+   * get the features from selectedSources for all or the current selection
+   * @param selectedSources
+   * @param checkDbRefs
+   * @param promptFetchDbRefs
+   */
+  private void doDasFeatureFetch(Vector selectedSources, boolean checkDbRefs, boolean promptFetchDbRefs)
+  {
     SequenceI[] dataset, seqs;
     int iSize;
-
-    if (af.getViewport().getSelectionGroup() != null
-        && af.getViewport().getSelectionGroup().getSize() > 0)
+    AlignViewport vp = af.getViewport();
+    if (vp.getSelectionGroup() != null
+        && vp.getSelectionGroup().getSize() > 0)
     {
-      iSize = af.getViewport().getSelectionGroup().getSize();
+      iSize = vp.getSelectionGroup().getSize();
       dataset = new SequenceI[iSize];
-      seqs = af.getViewport().getSelectionGroup().
+      seqs = vp.getSelectionGroup().
           getSequencesInOrder(
-              af.getViewport().getAlignment());
+              vp.getAlignment());
     }
     else
     {
-      iSize = af.getViewport().getAlignment().getHeight();
-      seqs = af.getViewport().getAlignment().getSequencesArray();
+      iSize = vp.getAlignment().getHeight();
+      seqs = vp.getAlignment().getSequencesArray();
     }
 
     dataset = new SequenceI[iSize];
@@ -777,15 +786,64 @@ public class FeatureSettings
       dataset[i] = seqs[i].getDatasetSequence();
     }
 
+    cancelDAS.setEnabled(true);
     dasFeatureFetcher =
         new jalview.ws.DasSequenceFeatureFetcher(
             dataset,
             this,
-            selectedSources);
-    cancelDAS.setEnabled(true);
+            selectedSources, checkDbRefs, promptFetchDbRefs);
     af.getViewport().setShowSequenceFeatures(true);
     af.showSeqFeatures.setSelected(true);
   }
+  /**
+   * properly initialise DAS fetcher and then initiate a new thread to fetch features from the named sources (rather than any turned on by default) 
+   * @param sources
+   */
+  public void fetchDasFeatures(Vector sources)
+  {
+    Thread thr = new Thread(new Runnable() {
+      public void run() {
+        // this actually initialises the das source list
+        dassourceBrowser.paintComponent(null); // yuk
+      }
+    });
+    thr.start();
+    while (dassourceBrowser.loadingDasSources || dassourceBrowser.dasSources==null)
+    {
+      try { Thread.sleep(10); } catch (Exception e) {};
+    }
+    Vector resolved = new Vector();
+    if (sources!=null)
+    {
+      for (int i=0;i<dassourceBrowser.dasSources.length; i++)
+      {
+        if (sources.contains(dassourceBrowser.dasSources[i].getNickname()))
+        {
+          if (!resolved.contains(dassourceBrowser.dasSources[i]))
+          {
+            resolved.addElement(dassourceBrowser.dasSources[i]);
+          }
+        }
+      }
+    }
+    if (resolved.size()==0)
+    {
+      resolved = dassourceBrowser.getSelectedSources();
+    }
+    if (resolved.size()>0)
+    {
+      final Vector dassources = resolved;
+      SwingUtilities.invokeLater(new Runnable() {
+
+        public void run()
+        {
+          fetchDAS.setEnabled(false);
+          cancelDAS.setEnabled(true);
+          doDasFeatureFetch(dassources, true, false);
+          
+        }});
+    }
+  }
 
   public void saveDAS_actionPerformed(ActionEvent e)
   {
@@ -800,12 +858,16 @@ public class FeatureSettings
 
   public void cancelDAS_actionPerformed(ActionEvent e)
   {
-    dasFeatureFetcher.cancel();
+    if (dasFeatureFetcher!=null)
+    {
+      dasFeatureFetcher.cancel();
+    }
     fetchDAS.setEnabled(true);
     cancelDAS.setEnabled(false);
   }
   public void noDasSourceActive()
   {
+    complete();
     JOptionPane.showInternalConfirmDialog(Desktop.desktop,
             "No das sources were selected.\n"
             + "Please select some sources and\n"
@@ -813,7 +875,6 @@ public class FeatureSettings
             "No Sources Selected",
             JOptionPane.DEFAULT_OPTION,
             JOptionPane.INFORMATION_MESSAGE);
-    complete();
   }
 
   /////////////////////////////////////////////////////////////////////////
@@ -929,7 +990,6 @@ public class FeatureSettings
       return this;
     }
   }
-
 }
 
 class ColorEditor