/**
  * @return string
  */
 protected function buildTreeNodes()
 {
     if ($this->treeRootNode) {
         $subTreeRootNode = $this->tree->getNodeByUid($this->treeRootNode);
         $this->tree = Tx_PtExtbase_Tree_Tree::getInstanceByRootNode($subTreeRootNode);
     }
     if (isset($this->treeMaxDepth)) {
         $this->tree->setRestrictedDepth($this->treeMaxDepth);
         $this->tree->setRespectRestrictedDepth(TRUE);
     }
     $arrayWriterVisitor = $this->objectManager->get('Tx_PtExtbase_Tree_ExtJsJsonWriterVisitor');
     $arrayWriterVisitor->registerFirstVisitCallback($this, 'alterNodeArrayOnFirstVisit');
     $arrayWriterVisitor->registerLastVisitCallBack($this, 'alterNodeArrayOnLastVisit');
     $arrayWriterVisitor->setMultipleSelect($this->getMultiple());
     $arrayWriterVisitor->setSelection($this->filterValues);
     $jsonTreeWriter = $this->objectManager->get('Tx_PtExtbase_Tree_JsonTreeWriter', array($arrayWriterVisitor), $arrayWriterVisitor);
     return $jsonTreeWriter->writeTree($this->tree);
 }