JAL-2805 Jalview sequence binding interface expanded
[jalview.git] / src / jalview / ext / archaeopteryx / ArchaeopteryxInit.java
index 8302140..bd7de87 100644 (file)
@@ -1,53 +1,98 @@
 package jalview.ext.archaeopteryx;
 
 import jalview.analysis.TreeBuilder;
+import jalview.datamodel.SequenceI;
 import jalview.gui.Desktop;
+import jalview.viewmodel.AlignmentViewport;
 
 import java.awt.Dimension;
+import java.util.Map;
 
 import org.forester.archaeopteryx.Archaeopteryx;
 import org.forester.archaeopteryx.MainFrame;
 import org.forester.phylogeny.Phylogeny;
-
+import org.forester.phylogeny.PhylogenyNode;
+
+/**
+ * Static class for creating Archaeopteryx tree viewer instances from calculated
+ * trees and letting them be bound to Jalview.
+ * 
+ * @author kjvanderheide
+ *
+ */
 public final class ArchaeopteryxInit
 {
-  public static MainFrame createInstance(Phylogeny[] aptxTrees)
+  /**
+   * Test method, should generally not be used as it does not bind the tree to
+   * its alignment
+   * 
+   * @param aptxTrees
+   * @return
+   */
+  public static MainFrame createUnboundInstance(final Phylogeny aptxTree)
   {
+    Phylogeny[] aptxTrees = { aptxTree };
     return createAptxFrame(aptxTrees);
-
   }
 
-  public static MainFrame createInstance(Phylogeny aptxTree)
-  {
-    Phylogeny[] aptxTrees = { aptxTree }; // future possibility to load in
-    // several trees simultaneously
-    return createAptxFrame(aptxTrees);
-
-  }
+  // public static MainFrame createInstance(final Phylogeny[] aptxTrees,
+  // AlignmentViewport jalviewAlignmentView)
+  // {
+  // return createAptxFrameInJalview(aptxTrees);
+  //
+  // }
+  //
+  // public static MainFrame createInstance(final Phylogeny aptxTree,
+  // final AlignmentViewport jalviewAlignmentView)
+  // {
+  // Phylogeny[] aptxTrees = { aptxTree }; // future possibility to load in
+  // // several trees simultaneously
+  // return createAptxFrameInJalview(aptxTrees);
+  //
+  // }
 
   public static MainFrame createInstance(
-          TreeBuilder calculatedTree)
+          final TreeBuilder calculatedTree) // very dense method, to be split up
   {
-    ArchaeopteryxTreeBuilder aptxTreeBuilder = new ArchaeopteryxTreeBuilder();
-    Phylogeny aptxTree = aptxTreeBuilder.buildAptxTree(calculatedTree);
+    ExternalTreeBuilderI<Phylogeny, PhylogenyNode> aptxTreeBuilder = new ArchaeopteryxTreeBuilder(
+            calculatedTree);
+
+    Phylogeny aptxTree = aptxTreeBuilder.buildTree();
     Phylogeny[] aptxTrees = { aptxTree }; // future possibility to load in
                                           // several trees simultaneously
 
-    return createAptxFrame(aptxTrees);
+    MainFrame aptxApp = createAptxFrame(aptxTrees);
+            
+    bindNodesToJalviewSequences(aptxApp, calculatedTree.getAvport(),
+            aptxTreeBuilder.getAlignmentBoundNodes(),
+            aptxTreeBuilder.getNodesBoundAlignment());
+    return bindFrameToJalview(aptxApp);
 
   }
 
 
-  private static MainFrame createAptxFrame(Phylogeny[] aptxTrees)
+
+
+  public static MainFrame createAptxFrame(
+          final Phylogeny[] aptxTrees)
   {
     MainFrame aptxApp = Archaeopteryx.createApplication(aptxTrees,
             "_aptx_jalview_configuration_file", null);
-    return bindFrameToJalview(aptxApp);
+    return aptxApp;
   }
 
+  public static JalviewTreeViewerBindingI<?> bindNodesToJalviewSequences(
+          final MainFrame aptxApp,
+          final AlignmentViewport jalviewAlignViewport,
+          final Map<SequenceI, PhylogenyNode> alignMappedToNodes,
+          final Map<PhylogenyNode, SequenceI> nodesMappedToAlign)
+  {
+    return new JalviewAptxBinding(aptxApp, jalviewAlignViewport,
+            alignMappedToNodes, nodesMappedToAlign);
+  }
 
 
-  private static MainFrame bindFrameToJalview(MainFrame aptxApp)
+  public static MainFrame bindFrameToJalview(final MainFrame aptxApp)
   {
     int width = 400;
     int height = 550;