JAL-1953 2.11.2 with Archeopteryx!
[jalview.git] / src / jalview / gui / AlignFrame.java
index 89f4036..f8bce9d 100644 (file)
@@ -60,6 +60,8 @@ import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
+import java.util.Map.Entry;
 import java.util.StringTokenizer;
 import java.util.Vector;
 
@@ -77,6 +79,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;
+
 import ext.vamsas.ServiceHandle;
 import jalview.analysis.AlignmentSorter;
 import jalview.analysis.AlignmentUtils;
@@ -115,6 +120,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.PDBEntry;
 import jalview.datamodel.SeqCigar;
@@ -123,7 +129,9 @@ import jalview.datamodel.SequenceGroup;
 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.TreeFrameI;
+import jalview.ext.treeviewer.TreeViewerBindingI;
+import jalview.ext.treeviewer.TreeViewerUtils;
 import jalview.gui.ColourMenuHelper.ColourChangeListener;
 import jalview.gui.ViewSelectionMenu.ViewSetProvider;
 import jalview.io.AlignmentProperties;
@@ -153,6 +161,7 @@ import jalview.schemes.ColourSchemeI;
 import jalview.schemes.ColourSchemes;
 import jalview.schemes.ResidueColourScheme;
 import jalview.schemes.TCoffeeColourScheme;
+import jalview.util.DBRefUtils;
 import jalview.util.HttpUtils;
 import jalview.util.ImageMaker.TYPE;
 import jalview.util.MessageManager;
@@ -1643,7 +1652,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   /**
    * DOCUMENT ME!
    */
-  void updateEditMenuBar()
+  public void updateEditMenuBar()
   {
 
     if (viewport.getHistoryList().size() > 0)
@@ -3925,6 +3934,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>
@@ -3940,15 +3950,21 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     List<Component> comps = PaintRefresher.components
             .get(viewport.getSequenceSetId());
     List<TreePanel> treePanels = new ArrayList<>();
+
+    Map<TreeFrameI, TreeViewerBindingI> aptxFrames = TreeViewerUtils
+            .getActiveTreeViews();
+
     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;
@@ -3956,6 +3972,42 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
 
     sortByTreeMenu.setVisible(true);
 
+    for (Entry<TreeFrameI, TreeViewerBindingI> aptxFrameWithBinding : aptxFrames
+            .entrySet())
+    {
+      TreeFrameI aptxFrame = aptxFrameWithBinding.getKey();
+      TreeViewerBindingI 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(); // redundant here??
+            addHistoryItem(binding.sortAlignmentIn(alignPanel));
+            }
+
+          });
+        sortByTreeMenu.add(item);
+      }
+
+
+
+      }
+       
+
+           
+
+
+    // old treepanels
     for (final TreePanel tp : treePanels)
     {
       final JMenuItem item = new JMenuItem(tp.getTitle());
@@ -3964,7 +4016,6 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         @Override
         public void actionPerformed(ActionEvent e)
         {
-          // adapt to Aptx
           tp.sortByTree_actionPerformed();
           addHistoryItem(tp.sortAlignmentIn(alignPanel));
 
@@ -4086,39 +4137,54 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
   @Override
   protected void loadTreeBaseStudy_actionPerformed(ActionEvent e)
   {
-    chooseTreeDb();
+    chooseTreeDb(0, null);
 
   }
 
   @Override
-  protected void loadTreeOfLife_actionPerformed(ActionEvent e)
+  protected void loadTreeBase_actionPerformed(ActionEvent e)
   {
-    chooseTreeDb();
+    chooseTreeDb(1, null);
 
   }
-
   @Override
-  protected void loadTreeFam_actionPerformed(ActionEvent e)
+  protected void loadTreePfam_actionPerformed(ActionEvent e)
   {
-    chooseTreeDb();
 
-  }
+    // 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 loadTreePfam_actionPerformed(ActionEvent e)
+  protected void loadTreeFam_actionPerformed(ActionEvent e)
   {
-    chooseTreeDb();
+    chooseTreeDb(3, null);
 
   }
 
   @Override
-  protected void loadTreeBase_actionPerformed(ActionEvent e)
+  protected void loadTreeOfLife_actionPerformed(ActionEvent e)
   {
-    chooseTreeDb();
+    chooseTreeDb(4, null);
 
   }
 
 
+
+
+
   public void chooseTreeFile()
   {
     // Pick the tree file
@@ -4134,35 +4200,32 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     {
       chooser.setFileFilter(treeFormat.getTreeFilter());
     }
-
+    final AlignFrame us=this;
     chooser.setResponseHandler(0, new Runnable()
     {
       @Override
       public void run()
       {
-        String filePath = chooser.getSelectedFile().getPath();
-        Cache.setProperty("LAST_DIRECTORY", filePath);
-       TreeParser treeParser = null;
-       try {
-         treeParser = new TreeParser(filePath);
-         treeParser.loadTree(viewport);        
-        } catch (Exception ex)
-        {
-          JvOptionPane.showMessageDialog(Desktop.desktop, ex.getMessage(),
-                  MessageManager
-                          .getString("label.problem_reading_tree_file"),
-                  JvOptionPane.WARNING_MESSAGE);
-          ex.printStackTrace();
-        }
-// TODO: handle any other warnings from treeParser ?
-       //        if (treeParser != null && treeParser.fin.hasWarningMessage())
-//        {
-//          JvOptionPane.showMessageDialog(Desktop.desktop,
-//                  fin.getWarningMessage(),
-//                  MessageManager.getString(
-//                          "label.possible_problem_with_tree_file"),
-//                  JvOptionPane.WARNING_MESSAGE);
-//        }
+      String filePath = chooser.getSelectedFile().getPath();
+      Cache.setProperty("LAST_DIRECTORY", filePath);
+      
+      
+      NewickFile fin = null; // old tree
+      try
+      {
+        AptxInit.createInstancesFromFile(filePath, viewport);
+
+        // fin = new NewickFile(filePath, DataSourceType.FILE);
+        // viewport.setCurrentTree(viewport.getAlignPanel().alignFrame
+        // .showNewickTree(fin, filePath).getTree());
+
+      } catch (Exception ex)
+      {
+        JvOptionPane.showMessageDialog(us, ex.getMessage(),
+                MessageManager.getString("label.problem_reading_tree_file"),
+                JvOptionPane.WARNING_MESSAGE);
+        ex.printStackTrace();
+      }
       }
     });
     chooser.showOpenDialog(this);
@@ -4217,7 +4280,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)
       {
@@ -4235,8 +4298,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)
@@ -4302,6 +4383,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
    * 
@@ -4503,7 +4588,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
         }
         buildingMenu = false;
       }
-    }, "BuildWebServiceThread").start();
+    }, "BuildWebService").start();
 
   }
 
@@ -4612,7 +4697,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
           final String source)
   {
     new Thread(CrossRefAction.getHandlerFor(sel, _odna, source, this),
-            "CrossReferencesThread")
+            "CrossReferences")
             .start();
   }
 
@@ -4921,7 +5006,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
             ex.printStackTrace();
           }
         }
-      }, "DropFileThread").start();
+      }, "DropFile").start();
     }
   }
 
@@ -5320,7 +5405,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
             });
             dbRefFetcher.fetchDBRefs(false);
           }
-        }, "BuildFetchDBMenuThread").start();
+        }, "BuildFetchDBMenu").start();
 
       }