proper vamsas style binding of alignment sequence objects to newick node labels....
authorjprocter <Jim Procter>
Thu, 23 Aug 2007 11:52:32 +0000 (11:52 +0000)
committerjprocter <Jim Procter>
Thu, 23 Aug 2007 11:52:32 +0000 (11:52 +0000)
src/jalview/io/VamsasAppDatastore.java
src/jalview/io/vamsas/DatastoreItem.java
src/jalview/io/vamsas/Tree.java

index 379982a..aaaf589 100644 (file)
@@ -331,13 +331,13 @@ public class VamsasAppDatastore
       // ////////////////////////////////////////////
       // Save the Alignments
 
-      Alignment alignment = (Alignment) getjv2vObj(av); // this is so we can get
+      Alignment alignment = (Alignment) getjv2vObj(av.getSequenceSetId()); // this is so we can get
                                                         // the alignviewport
                                                         // back
       if (alignment == null)
       {
         alignment = new Alignment();
-        bindjvvobj(av, alignment);
+        bindjvvobj(av.getSequenceSetId(), alignment);
         if (alignment.getProvenance() == null)
         {
           alignment.setProvenance(new Provenance());
@@ -1107,7 +1107,8 @@ public class VamsasAppDatastore
           {
             uk.ac.vamsas.objects.core.Alignment alignment = dataset
                     .getAlignment(al);
-            AlignViewport av = (AlignViewport) getvObj2jv(alignment);
+            AlignViewport av=findViewport(alignment);
+            
             jalview.datamodel.AlignmentI jal = null;
             if (av != null)
             {
@@ -1335,7 +1336,7 @@ public class VamsasAppDatastore
               jalview.gui.Desktop.addInternalFrame(alignFrame, title 
                       ,
                       AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
-              bindjvvobj(av, alignment);
+              bindjvvobj(av.getSequenceSetId(), alignment);
             }
             else
             {
@@ -1360,9 +1361,19 @@ public class VamsasAppDatastore
                         .ShowNewickTree(vstree.getNewickTree(), vstree
                                 .getTitle(), vstree.getInputData(), 600,
                                 500, t * 20 + 50, t * 20 + 50);
+                  
                 }
                 if (tp!=null)
+                { 
                   bindjvvobj(tp, alignment.getTree(t));
+                  try
+                  {
+                    vstree.UpdateSequenceTreeMap(tp);
+                  } catch (RuntimeException e)
+                  {
+                    Cache.log.warn("update of labels failed.",e);
+                  }
+                }
                 else
                 {
                   Cache.log.warn("Cannot create tree for tree "+t+" in document ("+alignment.getTree(t).getVorbaId());
@@ -1390,6 +1401,44 @@ public class VamsasAppDatastore
     }
   }
 
+  public AlignViewport findViewport(Alignment alignment)
+  {
+    AlignViewport av=null;
+    AlignViewport[] avs = findViewportForSequenceSetId((String)getvObj2jv(alignment));
+    if (avs!=null)
+    {
+      av = avs[0];
+    }
+    return av;
+  }
+
+  private AlignViewport[] findViewportForSequenceSetId(String sequenceSetId)
+  {
+    Vector viewp = new Vector();
+    if (Desktop.desktop != null)
+    {
+      javax.swing.JInternalFrame[] frames = Desktop.instance.getAllFrames();
+
+      for (int t = 0; t < frames.length; t++)
+      {
+        if (frames[t] instanceof AlignFrame)
+        {
+          if (((AlignFrame) frames[t]).getViewport().getSequenceSetId().equals(sequenceSetId))
+          {
+            viewp.addElement(((AlignFrame) frames[t]).getViewport());
+          }
+        }
+      }
+      if (viewp.size()>0)
+      {
+        AlignViewport[] vp = new AlignViewport[viewp.size()];
+        viewp.copyInto(vp);
+        return vp;
+      }
+    }
+    return null;
+  }
+
   // bitfields - should be a template in j1.5
   private static int HASSECSTR = 0;
 
@@ -2132,7 +2181,7 @@ public class VamsasAppDatastore
               {
                 Cache.log
                         .warn("NO Vamsas Binding for local sequence! NOT CREATING MAPPING FOR "
-                                + mfrom.getName()
+                                + dmps[smp].getDisplayId(true)
                                 + " to "
                                 + mps[smp].getTo().getName());
               }
index c0464ff..1a57dc3 100644 (file)
@@ -119,9 +119,10 @@ public class DatastoreItem
     initDatastoreItem(datastore);\r
     // TODO Auto-generated constructor stub\r
   }\r
-\r
+  VamsasAppDatastore datastore = null;\r
   public void initDatastoreItem(VamsasAppDatastore ds)\r
   {\r
+    datastore = ds;\r
     initDatastoreItem(ds.getProvEntry(), ds.getClientDocument(), ds.getVamsasObjectBinding(), ds.getJvObjectBinding());\r
   }\r
   public void initDatastoreItem(Entry provEntry, IClientDocument cdoc, Hashtable vobj2jv, IdentityHashMap jv2vobj)\r
index 82f4f07..de8230c 100644 (file)
@@ -6,16 +6,21 @@ import java.util.Hashtable;
 import java.util.Vector;\r
 \r
 import jalview.analysis.NJTree;\r
+import jalview.analysis.SequenceIdMatcher;\r
 import jalview.bin.Cache;\r
 import jalview.datamodel.AlignmentI;\r
 import jalview.datamodel.AlignmentView;\r
+import jalview.datamodel.BinaryNode;\r
 import jalview.datamodel.SeqCigar;\r
+import jalview.datamodel.Sequence;\r
 import jalview.datamodel.SequenceI;\r
+import jalview.datamodel.SequenceNode;\r
 import jalview.gui.AlignViewport;\r
 import jalview.gui.TreePanel;\r
 import jalview.io.NewickFile;\r
 import jalview.io.VamsasAppDatastore;\r
 import uk.ac.vamsas.client.Vobject;\r
+import uk.ac.vamsas.objects.core.AlignmentSequence;\r
 import uk.ac.vamsas.objects.core.Entry;\r
 import uk.ac.vamsas.objects.core.Input;\r
 import uk.ac.vamsas.objects.core.Newick;\r
@@ -140,11 +145,11 @@ public class Tree extends DatastoreItem
       prov.getEntry(0).setAction("created " + tp.getTitle());\r
       prov.getEntry(0).addInput(vInput);\r
       // jalview's special input parameter for distance matrix calculations\r
-      vInput.setName("jalview:seqdist");\r
+      vInput.setName("jalview:seqdist"); // TODO: settle on appropriate name.\r
       prov.getEntry(0).addParam(new Param());\r
       prov.getEntry(0).getParam(0).setName("treeType");\r
       prov.getEntry(0).getParam(0).setType("utf8");\r
-      prov.getEntry(0).getParam(0).setContent("NJ");\r
+      prov.getEntry(0).getParam(0).setContent("NJ"); // TODO: type of tree is a general parameter\r
       int ranges[] = tp.getTree().seqData.getVisibleContigs();\r
       // VisibleContigs are with respect to alignment coordinates. Still need\r
       // offsets\r
@@ -194,6 +199,59 @@ public class Tree extends DatastoreItem
     return alsq;\r
   }\r
   /**\r
+   *\r
+   * Update jalview newick representation with TreeNode map\r
+\r
+   * @param tp the treepanel that this tree is bound to.\r
+   */\r
+ public void UpdateSequenceTreeMap(TreePanel tp)\r
+ {\r
+   if (tp==null || tree!=null)\r
+     return;\r
+   Vector leaves = new Vector();\r
+   tp.getTree().findLeaves(tp.getTree().getTopNode(), leaves);\r
+   Treenode[] tn = tree.getTreenode(); // todo: select nodes for this particular tree\r
+   int sz = tn.length;\r
+   int i = 0;\r
+   \r
+   while (i < sz)\r
+   {\r
+     Treenode node = tn[i++];\r
+     BinaryNode mappednode = findNodeSpec(node.getNodespec(),leaves);\r
+     if (mappednode!=null && mappednode instanceof SequenceNode) {\r
+       SequenceNode leaf = (SequenceNode) leaves.elementAt(i++);\r
+       // check if we can make the specified association\r
+       Object jvseq = null;\r
+       int vrf=0,refv=0;\r
+       while (jvseq==null && vrf<node.getVrefCount())\r
+       {\r
+         if (refv<node.getVref(vrf).getRefsCount())\r
+         {\r
+           Object noderef = node.getVref(vrf).getRefs(refv++);\r
+           if (noderef instanceof AlignmentSequence)\r
+           {\r
+             // we only make these kind of associations\r
+             jvseq = getvObj2jv((Vobject) noderef);\r
+           }\r
+         } else {\r
+           refv=0;\r
+           vrf++;\r
+         }\r
+       }\r
+       if (jvseq instanceof SequenceI)\r
+       {\r
+         leaf.setElement(jvseq);\r
+         leaf.setPlaceholder(false);\r
+       } else {\r
+         leaf.setPlaceholder(true);\r
+         leaf.setElement(new Sequence(leaf.getName(), "THISISAPLACEHLDER"));\r
+       }\r
+     }\r
+   }\r
+ }\r
+\r
+  /// TODO: refactor to vamsas :start \r
+  /**\r
    * construct treenode mappings for mapped sequences\r
    * \r
    * @param ntree\r
@@ -204,7 +262,6 @@ public class Tree extends DatastoreItem
     ntree.findLeaves(ntree.getTopNode(), leaves);\r
     Vector tnv = new Vector();\r
     Enumeration l = leaves.elements();\r
-    int i=0;\r
     Hashtable nodespecs = new Hashtable();\r
     while (l.hasMoreElements())\r
     {\r
@@ -291,6 +348,7 @@ public class Tree extends DatastoreItem
     }\r
     return bn;\r
   }\r
+  // todo: end refactor to vamsas library\r
   /**\r
    * add jalview object to vamsas document\r
    * \r
@@ -348,7 +406,7 @@ public class Tree extends DatastoreItem
         } else \r
           if (vInput.getObjRef(0) instanceof uk.ac.vamsas.objects.core.AlignmentSequence) {\r
             // recover an AlignmentView for the input data\r
-            javport = (AlignViewport) getvObj2jv(((Vobject)vInput.getObjRef(0)).getV_parent());\r
+            javport = getViewport(((Vobject)vInput.getObjRef(0)).getV_parent());\r
             jal = javport.getAlignment();\r
             jalview.datamodel.SequenceI[] seqs = new jalview.datamodel.SequenceI[vInput.getObjRefCount()];\r
             for (int i=0,iSize=vInput.getObjRefCount(); i<iSize; i++)\r
@@ -395,6 +453,16 @@ public class Tree extends DatastoreItem
     Cache.log.debug("Returning null for input data recovery from provenance.");\r
     return null;\r
   }\r
+  \r
+  private AlignViewport getViewport(Vobject v_parent)\r
+  {\r
+    if (v_parent instanceof uk.ac.vamsas.objects.core.Alignment)\r
+    {\r
+      return datastore.findViewport((uk.ac.vamsas.objects.core.Alignment) v_parent);\r
+    }\r
+    return null;\r
+  }\r
+  \r
   public NewickFile getNewickTree()\r
   {\r
     return ntree;\r
@@ -423,5 +491,4 @@ public class Tree extends DatastoreItem
     }\r
     return false;\r
   }\r
-\r
 }\r