improved vamsas treenode node binding support
authorjprocter <Jim Procter>
Thu, 30 Aug 2007 11:41:21 +0000 (11:41 +0000)
committerjprocter <Jim Procter>
Thu, 30 Aug 2007 11:41:21 +0000 (11:41 +0000)
src/jalview/io/vamsas/Tree.java

index de8230c..af4e7b7 100644 (file)
@@ -15,6 +15,7 @@ import jalview.datamodel.SeqCigar;
 import jalview.datamodel.Sequence;\r
 import jalview.datamodel.SequenceI;\r
 import jalview.datamodel.SequenceNode;\r
+import jalview.gui.AlignFrame;\r
 import jalview.gui.AlignViewport;\r
 import jalview.gui.TreePanel;\r
 import jalview.io.NewickFile;\r
@@ -33,33 +34,47 @@ import uk.ac.vamsas.objects.core.Vref;
 public class Tree extends DatastoreItem\r
 {\r
   AlignmentI jal;\r
+\r
   TreePanel tp;\r
+\r
   uk.ac.vamsas.objects.core.Tree tree;\r
+\r
   uk.ac.vamsas.objects.core.Alignment alignment; // may be null => dataset or\r
-                                                  // other kind of tree\r
+\r
+  // other kind of tree\r
   private NewickFile ntree;\r
+\r
   private String title;\r
+\r
   private AlignmentView inputData = null;\r
-  public static void updateFrom(VamsasAppDatastore datastore, jalview.gui.AlignFrame alignFrame, uk.ac.vamsas.objects.core.Tree vtree) {\r
+\r
+  public static void updateFrom(VamsasAppDatastore datastore,\r
+          jalview.gui.AlignFrame alignFrame,\r
+          uk.ac.vamsas.objects.core.Tree vtree)\r
+  {\r
     Tree toTree = new Tree(datastore, alignFrame, vtree);\r
-    \r
+\r
   }\r
-  public Tree(VamsasAppDatastore datastore, jalview.gui.AlignFrame alignFrame, uk.ac.vamsas.objects.core.Tree vtree)\r
+\r
+  public Tree(VamsasAppDatastore datastore,\r
+          jalview.gui.AlignFrame alignFrame,\r
+          uk.ac.vamsas.objects.core.Tree vtree)\r
   {\r
     super(datastore);\r
     tree = vtree;\r
     TreePanel tp = (TreePanel) getvObj2jv(tree);\r
-    if (tp != null) {\r
+    if (tp != null)\r
+    {\r
       if (tree.isUpdated())\r
       {\r
-        Cache.log.info(\r
-                "Update from vamsas document to alignment associated tree not implemented yet.");\r
+        Cache.log\r
+                .info("Update from vamsas document to alignment associated tree not implemented yet.");\r
       }\r
     }\r
     else\r
     {\r
       // make a new tree\r
-      Object[] idata = this.recoverInputData(tree.getProvenance());\r
+      Object[] idata = recoverInputData(tree.getProvenance());\r
       try\r
       {\r
         if (idata != null && idata[0] != null)\r
@@ -68,30 +83,32 @@ public class Tree extends DatastoreItem
         }\r
         ntree = getNtree();\r
         title = tree.getNewick(0).getTitle();\r
-        if (title==null || title.length()==0)\r
+        if (title == null || title.length() == 0)\r
         {\r
           title = tree.getTitle(); // hack!!!!\r
         }\r
-      }\r
-      catch (Exception e)\r
+      } catch (Exception e)\r
       {\r
-        Cache.log.warn("Problems parsing treefile '" +\r
-                       tree.getNewick(0).getContent() + "'", e);\r
+        Cache.log.warn("Problems parsing treefile '"\r
+                + tree.getNewick(0).getContent() + "'", e);\r
       }\r
     }\r
   }\r
+\r
   private NewickFile getNtree() throws IOException\r
   {\r
     return new jalview.io.NewickFile(tree.getNewick(0).getContent());\r
   }\r
-  public Tree(VamsasAppDatastore datastore, TreePanel tp2, AlignmentI jal2, uk.ac.vamsas.objects.core.Alignment alignment2)\r
+\r
+  public Tree(VamsasAppDatastore datastore, TreePanel tp2, AlignmentI jal2,\r
+          uk.ac.vamsas.objects.core.Alignment alignment2)\r
   {\r
     super(datastore);\r
 \r
     jal = jal2;\r
     tp = tp2;\r
     alignment = alignment2;\r
-    \r
+\r
     tree = (uk.ac.vamsas.objects.core.Tree) getjv2vObj(tp);\r
     if (tree == null)\r
     {\r
@@ -108,11 +125,11 @@ public class Tree extends DatastoreItem
       else\r
       {\r
         // handle conflict\r
-        System.out\r
-            .println("Add modified tree as new tree in document.");\r
+        System.out.println("Add modified tree as new tree in document.");\r
       }\r
     }\r
   }\r
+\r
   /**\r
    * correctly creates provenance for trees calculated on an alignment by\r
    * jalview.\r
@@ -123,7 +140,7 @@ public class Tree extends DatastoreItem
    */\r
   private Provenance makeTreeProvenance(AlignmentI jal, TreePanel tp)\r
   {\r
-    Cache.log.debug("Making Tree provenance for "+tp.getTitle());\r
+    Cache.log.debug("Making Tree provenance for " + tp.getTitle());\r
     Provenance prov = new Provenance();\r
     prov.addEntry(new Entry());\r
     prov.getEntry(0).setAction("imported " + tp.getTitle());\r
@@ -137,7 +154,8 @@ public class Tree extends DatastoreItem
       // or just correctly resolve the tree's seqData to the correct alignment\r
       // in\r
       // the document.\r
-      Vector alsqrefs = getjv2vObjs(findAlignmentSequences(jal, tp.getTree().seqData.getSequences()));\r
+      Vector alsqrefs = getjv2vObjs(findAlignmentSequences(jal, tp\r
+              .getTree().seqData.getSequences()));\r
       Object[] alsqs = new Object[alsqrefs.size()];\r
       alsqrefs.copyInto(alsqs);\r
       vInput.setObjRef(alsqs);\r
@@ -149,7 +167,8 @@ public class Tree extends DatastoreItem
       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"); // TODO: type of tree is a general parameter\r
+      prov.getEntry(0).getParam(0).setContent("NJ"); // TODO: type of tree is a\r
+                                                      // general parameter\r
       int ranges[] = tp.getTree().seqData.getVisibleContigs();\r
       // VisibleContigs are with respect to alignment coordinates. Still need\r
       // offsets\r
@@ -163,9 +182,10 @@ public class Tree extends DatastoreItem
         vInput.addSeg(visSeg);\r
       }\r
     }\r
-    Cache.log.debug("Finished Tree provenance for "+tp.getTitle());\r
+    Cache.log.debug("Finished Tree provenance for " + tp.getTitle());\r
     return prov;\r
   }\r
+\r
   /**\r
    * look up SeqCigars in an existing alignment.\r
    * \r
@@ -183,81 +203,96 @@ public class Tree extends DatastoreItem
     while (as.hasMoreElements())\r
     {\r
       SequenceI asq = (SequenceI) as.nextElement();\r
-      for (int t = 0; t<sequences.length; t++)\r
+      for (int t = 0; t < sequences.length; t++)\r
       {\r
-        if (tseqs[t]!=null \r
-                && (tseqs[t].getRefSeq()==asq || tseqs[t].getRefSeq() == asq.getDatasetSequence()))\r
-                // && tseqs[t].getStart()>=asq.getStart() && tseqs[t].getEnd()<=asq.getEnd())\r
+        if (tseqs[t] != null\r
+                && (tseqs[t].getRefSeq() == asq || tseqs[t].getRefSeq() == asq\r
+                        .getDatasetSequence()))\r
+        // && tseqs[t].getStart()>=asq.getStart() &&\r
+        // tseqs[t].getEnd()<=asq.getEnd())\r
         {\r
           tseqs[t] = null;\r
           alsq.add(asq);\r
         }\r
       }\r
     }\r
-    if (alsq.size()<sequences.length)\r
-      Cache.log.warn("Not recovered all alignment sequences for given set of input sequence CIGARS");\r
+    if (alsq.size() < sequences.length)\r
+      Cache.log\r
+              .warn("Not recovered all alignment sequences for given set of input sequence CIGARS");\r
     return alsq;\r
   }\r
+\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
+   * @param tp\r
+   *                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
+  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\r
+                                        // 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
+      {\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
+          }\r
+          else\r
+          {\r
+            refv = 0;\r
+            vrf++;\r
+          }\r
+        }\r
+        if (jvseq instanceof SequenceI)\r
+        {\r
+          leaf.setElement(jvseq);\r
+          leaf.setPlaceholder(false);\r
+        }\r
+        else\r
+        {\r
+          leaf.setPlaceholder(true);\r
+          leaf\r
+                  .setElement(new Sequence(leaf.getName(),\r
+                          "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
+   * @param newick \r
    * @return\r
    */\r
-  public Treenode[] makeTreeNodes(NJTree ntree) {\r
+  public Treenode[] makeTreeNodes(NJTree ntree, Newick newick)\r
+  {\r
     Vector leaves = new Vector();\r
     ntree.findLeaves(ntree.getTopNode(), leaves);\r
     Vector tnv = new Vector();\r
@@ -265,18 +300,25 @@ public class Tree extends DatastoreItem
     Hashtable nodespecs = new Hashtable();\r
     while (l.hasMoreElements())\r
     {\r
-      jalview.datamodel.BinaryNode tnode = (jalview.datamodel.BinaryNode) l.nextElement();\r
+      jalview.datamodel.BinaryNode tnode = (jalview.datamodel.BinaryNode) l\r
+              .nextElement();\r
       if (tnode instanceof jalview.datamodel.SequenceNode)\r
       {\r
         if (!((jalview.datamodel.SequenceNode) tnode).isPlaceholder())\r
         {\r
-          Object assocseq = ((jalview.datamodel.SequenceNode) tnode).element();\r
+          Object assocseq = ((jalview.datamodel.SequenceNode) tnode)\r
+                  .element();\r
           if (assocseq instanceof SequenceI)\r
           {\r
             Vobject vobj = this.getjv2vObj(assocseq);\r
-            if (vobj!=null)\r
+            if (vobj != null)\r
             {\r
               Treenode node = new Treenode();\r
+              if (newick.isRegisterable())\r
+              {\r
+                this.cdoc.registerObject(newick);\r
+                node.addTreeId(newick);\r
+              }\r
               node.setNodespec(makeNodeSpec(nodespecs, tnode));\r
               node.setName(tnode.getName());\r
               Vref vr = new Vref();\r
@@ -286,74 +328,86 @@ public class Tree extends DatastoreItem
             }\r
             else\r
             {\r
-              System.err.println("WARNING: Unassociated treeNode "+tnode.element().toString()+" "\r
-                      +((tnode.getName()!=null) ? " label "+tnode.getName() : ""));\r
+              System.err.println("WARNING: Unassociated treeNode "\r
+                      + tnode.element().toString()\r
+                      + " "\r
+                      + ((tnode.getName() != null) ? " label "\r
+                              + tnode.getName() : ""));\r
             }\r
           }\r
         }\r
       }\r
     }\r
-    if (tnv.size()>0)\r
+    if (tnv.size() > 0)\r
     {\r
       Treenode[] tn = new Treenode[tnv.size()];\r
-      tnv.copyInto(tn);  \r
+      tnv.copyInto(tn);\r
       return tn;\r
     }\r
-    return new Treenode[] {};\r
+    return new Treenode[]\r
+    {};\r
   }\r
-  private String makeNodeSpec(Hashtable nodespecs, jalview.datamodel.BinaryNode tnode)\r
-  { \r
+\r
+  private String makeNodeSpec(Hashtable nodespecs,\r
+          jalview.datamodel.BinaryNode tnode)\r
+  {\r
     String nname = new String(tnode.getName());\r
     Integer nindx = (Integer) nodespecs.get(nname);\r
-    if (nindx==null)\r
+    if (nindx == null)\r
     {\r
       nindx = new Integer(1);\r
     }\r
-    nname = nindx.toString()+" "+nname;\r
+    nname = nindx.toString() + " " + nname;\r
     return nname;\r
   }\r
+\r
   /**\r
    * call to match up Treenode specs to NJTree parsed from document object.\r
    * \r
    * @param nodespec\r
    * @param leaves\r
-   *          as returned from NJTree.findLeaves( .., ..) ..\r
+   *                as returned from NJTree.findLeaves( .., ..) ..\r
    * @return\r
    */\r
-  private jalview.datamodel.BinaryNode findNodeSpec(String nodespec, Vector leaves)\r
+  private jalview.datamodel.BinaryNode findNodeSpec(String nodespec,\r
+          Vector leaves)\r
   {\r
-    int occurence=-1;\r
-    String nspec = nodespec.substring(nodespec.indexOf(' ')+1);\r
+    int occurence = -1;\r
+    String nspec = nodespec.substring(nodespec.indexOf(' ') + 1);\r
     String oval = nodespec.substring(0, nodespec.indexOf(' '));\r
-    try {\r
+    try\r
+    {\r
       occurence = new Integer(oval).intValue();\r
-    }\r
-    catch (Exception e)\r
+    } catch (Exception e)\r
     {\r
-      System.err.println("Invalid nodespec '"+nodespec+"'");\r
+      System.err.println("Invalid nodespec '" + nodespec + "'");\r
       return null;\r
     }\r
     jalview.datamodel.BinaryNode bn = null;\r
-    \r
+\r
     int nocc = 0;\r
     Enumeration en = leaves.elements();\r
-    while (en.hasMoreElements() && nocc<occurence)\r
+    while (en.hasMoreElements() && nocc < occurence)\r
     {\r
       bn = (jalview.datamodel.BinaryNode) en.nextElement();\r
-      if (bn instanceof jalview.datamodel.SequenceNode && bn.getName().equals(nspec))\r
+      if (bn instanceof jalview.datamodel.SequenceNode\r
+              && bn.getName().equals(nspec))\r
       {\r
-         --occurence;\r
-      } else \r
-        bn=null;\r
+        --occurence;\r
+      }\r
+      else\r
+        bn = null;\r
     }\r
     return bn;\r
   }\r
+\r
   // todo: end refactor to vamsas library\r
   /**\r
    * add jalview object to vamsas document\r
    * \r
    */\r
-  public void add() {\r
+  public void add()\r
+  {\r
     tree = new uk.ac.vamsas.objects.core.Tree();\r
     bindjvvobj(tp, tree);\r
     tree.setTitle(tp.getTitle());\r
@@ -362,8 +416,8 @@ public class Tree extends DatastoreItem
     newick.setTitle(tp.getTitle());\r
     tree.addNewick(newick);\r
     tree.setProvenance(makeTreeProvenance(jal, tp));\r
-    tree.setTreenode(makeTreeNodes(tp.getTree()));\r
-    \r
+    tree.setTreenode(makeTreeNodes(tp.getTree(), newick));\r
+\r
     alignment.addTree(tree);\r
   }\r
 \r
@@ -372,51 +426,65 @@ public class Tree extends DatastoreItem
    * referenced in input data has already been associated with jalview objects.\r
    * \r
    * @param tp\r
+   * @param alignFrame \r
    * @return Object[] { AlignmentView, AlignmentI - reference alignment for\r
    *         input }\r
    */\r
   public Object[] recoverInputData(Provenance tp)\r
   {\r
-    AlignViewport javport=null;\r
-    jalview.datamodel.AlignmentI jal=null;\r
-    jalview.datamodel.CigarArray view=null;\r
+    AlignViewport javport = null;\r
+    jalview.datamodel.AlignmentI jal = null;\r
+    jalview.datamodel.CigarArray view = null;\r
     for (int pe = 0; pe < tp.getEntryCount(); pe++)\r
     {\r
       if (tp.getEntry(pe).getInputCount() > 0)\r
       {\r
         if (tp.getEntry(pe).getInputCount() > 1)\r
         {\r
-          Cache.log.warn("Ignoring additional input spec in provenance entry "\r
-                         + tp.getEntry(pe).toString());\r
+          Cache.log\r
+                  .warn("Ignoring additional input spec in provenance entry "\r
+                          + tp.getEntry(pe).toString());\r
         }\r
         // LATER: deal sensibly with multiple inputs\r
         Input vInput = tp.getEntry(pe).getInput(0);\r
         // is this the whole alignment or a specific set of sequences ?\r
-        if (vInput.getObjRefCount()==0)\r
-          continue;\r
-        if (vInput.getObjRefCount()==1 && vInput.getObjRef(0) instanceof uk.ac.vamsas.objects.core.Alignment)\r
+        if (vInput.getObjRefCount() == 0)\r
         {\r
-          // recover an AlignmentView for the input data\r
-          javport = (AlignViewport) getvObj2jv( (uk.ac.vamsas.\r
-              client.Vobject) vInput\r
-              .getObjRef(0));\r
-          jal = javport.getAlignment();\r
-          view = javport.getAlignment().\r
-              getCompactAlignment();\r
-        } else \r
-          if (vInput.getObjRef(0) instanceof uk.ac.vamsas.objects.core.AlignmentSequence) {\r
+          if (tree.getV_parent()!=null && tree.getV_parent() instanceof uk.ac.vamsas.objects.core.Alignment)\r
+          {\r
+            javport = getViewport(tree.getV_parent());\r
+            jal = javport.getAlignment();\r
+            view = javport.getAlignment().getCompactAlignment();\r
+          }\r
+        }\r
+        else\r
+        {\r
+          // Explicit reference - to alignment, sequences or what.\r
+          if (vInput.getObjRefCount() == 1\r
+                  && vInput.getObjRef(0) instanceof uk.ac.vamsas.objects.core.Alignment)\r
+          {\r
             // recover an AlignmentView for the input data\r
-            javport = getViewport(((Vobject)vInput.getObjRef(0)).getV_parent());\r
+            javport = getViewport((Vobject) vInput.getObjRef(0));\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
+            view = javport.getAlignment().getCompactAlignment();\r
+          }\r
+          else if (vInput.getObjRef(0) instanceof uk.ac.vamsas.objects.core.AlignmentSequence)\r
+          {\r
+            // recover an AlignmentView for the input data\r
+            javport = getViewport(((Vobject) vInput.getObjRef(0)).getV_parent());\r
+            jal = javport.getAlignment();\r
+            jalview.datamodel.SequenceI[] seqs = new jalview.datamodel.SequenceI[vInput\r
+                    .getObjRefCount()];\r
+            for (int i = 0, iSize = vInput.getObjRefCount(); i < iSize; i++)\r
             {\r
-              SequenceI seq = (SequenceI) getvObj2jv((Vobject) vInput.getObjRef(i));\r
+              SequenceI seq = (SequenceI) getvObj2jv((Vobject) vInput\r
+                      .getObjRef(i));\r
               seqs[i] = seq;\r
             }\r
-            view = new jalview.datamodel.Alignment(seqs).getCompactAlignment();\r
-              \r
-            \r
+            view = new jalview.datamodel.Alignment(seqs)\r
+                    .getCompactAlignment();\r
+\r
+          }\r
         }\r
         int from = 1, to = jal.getWidth();\r
         int offset = 0; // deleteRange modifies its frame of reference\r
@@ -424,70 +492,76 @@ public class Tree extends DatastoreItem
         {\r
           Seg visSeg = vInput.getSeg(r);\r
           int se[] = getSegRange(visSeg, true); // jalview doesn't do\r
-                                                // bidirection alignments yet.\r
+          // bidirection alignments yet.\r
           if (to < se[1])\r
           {\r
             Cache.log.warn("Ignoring invalid segment in InputData spec.");\r
-              }\r
-            else\r
-            {\r
-              if (se[0] > from)\r
-              {\r
-                view.deleteRange(offset + from - 1, offset + se[0] - 2);\r
-                offset -= se[0] - from;\r
-              }\r
-              from = se[1] + 1;\r
-            }\r
           }\r
-          if (from < to)\r
+          else\r
           {\r
-            view.deleteRange(offset + from - 1, offset + to - 1); // final\r
-                                                                  // deletion -\r
-                                                                  // TODO: check\r
-                                                                  // off by\r
-            // one for to\r
+            if (se[0] > from)\r
+            {\r
+              view.deleteRange(offset + from - 1, offset + se[0] - 2);\r
+              offset -= se[0] - from;\r
+            }\r
+            from = se[1] + 1;\r
           }\r
-          return new Object[]{new AlignmentView(view), jal};\r
         }\r
+        if (from < to)\r
+        {\r
+          view.deleteRange(offset + from - 1, offset + to - 1); // final\r
+          // deletion -\r
+          // TODO: check\r
+          // off by\r
+          // one for to\r
+        }\r
+        return new Object[]\r
+        { new AlignmentView(view), jal };\r
+      }\r
     }\r
-    Cache.log.debug("Returning null for input data recovery from provenance.");\r
+    Cache.log\r
+            .debug("Returning null for input data recovery from provenance.");\r
     return null;\r
   }\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
+      return datastore\r
+              .findViewport((uk.ac.vamsas.objects.core.Alignment) v_parent);\r
     }\r
     return null;\r
   }\r
-  \r
+\r
   public NewickFile getNewickTree()\r
   {\r
     return ntree;\r
   }\r
+\r
   public String getTitle()\r
   {\r
     return title;\r
   }\r
+\r
   public AlignmentView getInputData()\r
   {\r
     return inputData;\r
   }\r
+\r
   public boolean isValidTree()\r
   {\r
-    try {\r
+    try\r
+    {\r
       ntree.parse();\r
-      if (ntree.getTree()!=null)\r
+      if (ntree.getTree() != null)\r
       {\r
         ntree = getNtree();\r
       }\r
-        return true;\r
-    }\r
-    catch (Exception e)\r
+      return true;\r
+    } catch (Exception e)\r
     {\r
-      Cache.log.debug("Failed to parse newick tree string",e);\r
+      Cache.log.debug("Failed to parse newick tree string", e);\r
     }\r
     return false;\r
   }\r