proper vamsas style binding of alignment sequence objects to newick node labels....
[jalview.git] / src / jalview / io / VamsasAppDatastore.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());
               }