JAL-1953 start on making everything interface based
[jalview.git] / src / jalview / gui / AlignFrame.java
index 8408bcb..184ffeb 100644 (file)
@@ -53,6 +53,7 @@ import jalview.datamodel.AlignmentI;
 import jalview.datamodel.AlignmentOrder;
 import jalview.datamodel.AlignmentView;
 import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.DBRefEntry;
 import jalview.datamodel.HiddenColumns;
 import jalview.datamodel.HiddenSequences;
 import jalview.datamodel.PDBEntry;
@@ -63,6 +64,8 @@ import jalview.datamodel.SequenceI;
 import jalview.ext.archaeopteryx.AptxInit;
 import jalview.ext.forester.io.SupportedTreeFileFilter;
 import jalview.ext.forester.io.TreeParser;
+import jalview.ext.treeviewer.ExternalTreeFrame;
+import jalview.ext.treeviewer.ExternalTreeViewerBindingI;
 import jalview.gui.ColourMenuHelper.ColourChangeListener;
 import jalview.gui.ViewSelectionMenu.ViewSetProvider;
 import jalview.io.AlignmentProperties;
@@ -89,6 +92,7 @@ import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemes;
 import jalview.schemes.ResidueColourScheme;
 import jalview.schemes.TCoffeeColourScheme;
+import jalview.util.DBRefUtils;
 import jalview.util.MessageManager;
 import jalview.viewmodel.AlignmentViewport;
 import jalview.viewmodel.ViewportRanges;
@@ -137,6 +141,8 @@ import java.util.Deque;
 import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 import java.util.StringTokenizer;
 import java.util.Vector;
 
@@ -152,6 +158,9 @@ import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.SwingUtilities;
 
+import org.forester.archaeopteryx.webservices.PhylogeniesWebserviceClient;
+import org.forester.archaeopteryx.webservices.WebservicesManager;
+
 /**
  * DOCUMENT ME!
  * 
@@ -3739,6 +3748,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     }
   }
 
+
   /**
    * Maintain the Order by->Displayed Tree menu. Creates a new menu item for a
    * TreePanel with an appropriate <code>jalview.analysis.AlignmentSorter</code>
@@ -3754,15 +3764,21 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     List<Component> comps = PaintRefresher.components
             .get(viewport.getSequenceSetId());
     List<TreePanel> treePanels = new ArrayList<>();
+
+    Map<ExternalTreeFrame, ExternalTreeViewerBindingI> aptxFrames = AptxInit
+            .getAllAptxFrames();
+
     for (Component comp : comps)
     {
+      // old treepanels
       if (comp instanceof TreePanel)
       {
         treePanels.add((TreePanel) comp);
       }
+
     }
 
-    if (treePanels.size() < 1)
+    if (treePanels.isEmpty() && aptxFrames.isEmpty())
     {
       sortByTreeMenu.setVisible(false);
       return;
@@ -3770,6 +3786,42 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     sortByTreeMenu.setVisible(true);
 
+    for (Entry<ExternalTreeFrame, ExternalTreeViewerBindingI> aptxFrameWithBinding : aptxFrames
+            .entrySet())
+    {
+      ExternalTreeFrame aptxFrame = aptxFrameWithBinding.getKey();
+      ExternalTreeViewerBindingI binding = aptxFrameWithBinding.getValue();
+
+      // future support for multiple tabs
+      // for (org.forester.archaeopteryx.TreePanel aptxTree : aptxFrame
+      // .getMainPanel().getTreePanels())
+      {
+        final JMenuItem item = new JMenuItem(
+                aptxFrame.getTree().getTreeName());
+
+          item.addActionListener(new ActionListener()
+          {
+
+            @Override
+            public void actionPerformed(ActionEvent e)
+            {
+            binding.sortByTree_actionPerformed();
+            addHistoryItem(binding.sortAlignmentIn(alignPanel));
+            }
+
+          });
+        sortByTreeMenu.add(item);
+      }
+
+
+
+      }
+       
+
+           
+
+
+    // old treepanels
     for (final TreePanel tp : treePanels)
     {
       final JMenuItem item = new JMenuItem(tp.getTitle());
@@ -3778,7 +3830,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         @Override
         public void actionPerformed(ActionEvent e)
         {
-          // adapt to Aptx
           tp.sortByTree_actionPerformed();
           addHistoryItem(tp.sortAlignmentIn(alignPanel));
 
@@ -3898,10 +3949,55 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   }
 
   @Override
-  protected void loadTreeDbItem_actionPerformed(ActionEvent e)
+  protected void loadTreeBaseStudy_actionPerformed(ActionEvent e)
   {
-    chooseTreeDb();
+    chooseTreeDb(0, null);
+
+  }
+
+  @Override
+  protected void loadTreeBase_actionPerformed(ActionEvent e)
+  {
+    chooseTreeDb(1, null);
+
   }
+  @Override
+  protected void loadTreePfam_actionPerformed(ActionEvent e)
+  {
+
+    // only DBRefs of first sequence are checked for matching DB for now,
+    // iterating through them all seems excessive
+    SequenceI seq = viewport.getAlignment().getSequenceAt(0);
+    String dbId = null;
+    for (DBRefEntry pfamRef : DBRefUtils
+            .searchRefsForSource(seq.getDBRefs(), "pfam"))
+    {
+      if (pfamRef.getAccessionId().startsWith("PF"))
+      {
+        dbId = pfamRef.getAccessionId().replaceAll("[A-Za-z]", "");
+      }
+
+    }
+    chooseTreeDb(2, dbId);
+
+  }
+  @Override
+  protected void loadTreeFam_actionPerformed(ActionEvent e)
+  {
+    chooseTreeDb(3, null);
+
+  }
+
+  @Override
+  protected void loadTreeOfLife_actionPerformed(ActionEvent e)
+  {
+    chooseTreeDb(4, null);
+
+  }
+
+
+
+
 
   public void chooseTreeFile()
   {
@@ -3925,7 +4021,8 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     {
       String filePath = chooser.getSelectedFile().getPath();
       Cache.setProperty("LAST_DIRECTORY", filePath);
-
+      
+      
       TreeParser treeParser = new TreeParser(filePath);
       treeParser.loadTree(viewport);
 
@@ -3938,7 +4035,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   public void chooseTreeUrl()
   {
 
-
     JLabel label = new JLabel(
             MessageManager.getString("label.tree_url_example"));
     // add "example" button
@@ -3982,7 +4078,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         format = new IdentifyFile().identify(urlString, DataSourceType.URL);
         // add actual use for the format identification (jalview .jar files)
         treeUrl = new URL(urlString);
-        AptxInit.createInstanceFromUrl(treeUrl, viewport);
+        AptxInit.createInstancesFromUrl(treeUrl, viewport);
 
       } catch (IOException | RuntimeException e)
       {
@@ -4000,10 +4096,26 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     }
   }
 
-  public void chooseTreeDb()
+  /**
+   * Disgustingly hardcoded atm.
+   * 
+   * @param databaseIndex
+   */
+  public void chooseTreeDb(int databaseIndex, String defaultIdentifier)
   {
+    final WebservicesManager webservices_manager = WebservicesManager
+            .getInstance();
+    final PhylogeniesWebserviceClient client = webservices_manager
+            .getAvailablePhylogeniesWebserviceClient(databaseIndex);
+    String identifier = JvOptionPane
+            .showInternalInputDialog(Desktop.desktop,
+                    client.getInstructions() + "\n(Reference: "
+                            + client.getReference() + ")",
+                    client.getDescription(), JvOptionPane.QUESTION_MESSAGE,
+                    null, null, defaultIdentifier)
+            .toString();
 
-
+    AptxInit.createInstancesFromDb(client, identifier, viewport);
   }
 
   public TreePanel showNewickTree(NewickFile nf, String treeTitle)
@@ -4069,6 +4181,10 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
   private boolean buildingMenu = false;
 
+  public void BuildTreeDbMenu()
+  {
+
+  }
   /**
    * Generates menu items and listener event actions for web service clients
    *