/**
  * Saves a tree to storage
  *
  * @param Tx_PtExtbase_Tree_TreeInterface $tree
  * @throws Exception
  */
 public function saveTree(Tx_PtExtbase_Tree_TreeInterface $tree)
 {
     if (!is_a($tree, Tx_PtExtbase_Tree_NestedSetTreeInterface)) {
         throw new Exception('Tx_PtExtbase_Tree_NestedSetTreeStorage can only persist trees that implement Tx_PtExtbase_Tree_NestedSetTreeInterface! 1327695444');
     }
     $this->removeDeletedNodesOfGivenTree($tree);
     $nodes = $this->nestedSetTreeWalker->traverseTreeAndGetNodes($tree);
     foreach ($nodes as $node) {
         /* @var $node Tx_PtExtbase_Tree_NodeInterface */
         $this->setTreeNamespaceOnNode($tree, $node);
         $this->nodeRepository->updateOrAdd($node);
     }
     $this->setTreeNamespaceOnNode($tree, $tree->getRoot());
     $this->nodeRepository->updateOrAdd($tree->getRoot());
 }