private void marchTree(List<PermissibleObject> comments, PermissibleObjectTreeNode node) {
    if (node.getObject() != null) {
      comments.add(node.getObject());
    }

    // let's sort the children so the list makes sense
    List<PermissibleObject> permissibleObjects =
        new ArrayList<PermissibleObject>(node.getChildren().keySet());
    Collections.sort(permissibleObjects);

    for (PermissibleObject object : permissibleObjects) {
      marchTree(comments, node.getChildren().get(object));
    }
  }
 private PermissibleObjectTreeNode findParentCommentNode(
     PermissibleObjectTreeNode rootNode, PermissibleObjectTreeNode node) {
   if (node.getObject().equals(rootNode.getObject())) {
     return rootNode;
   }
   for (PermissibleObject obj : rootNode.getChildren().keySet()) {
     if (obj.equals(((Comment) node.getObject()).getParentComment())) {
       return rootNode.getChildren().get(obj);
     }
     PermissibleObjectTreeNode possibleParent =
         findParentCommentNode(rootNode.getChildren().get(obj), node);
     if (possibleParent != null) {
       return possibleParent;
     }
   }
   return null;
 }