/**
  * @param TableElement $treeTableModel
  * 
  * @return FlatGrid
  */
 private function buildGridBasedOn(TableElement $treeTableModel)
 {
     //get builders based on prototypes
     $sizeAwareTreeBuilder = clone $this->sizeAwareTreeBuilderPrototype;
     $flatGridBuilder = clone $this->flatGridBuilderPrototype;
     //build size aware tree
     $treeTableModel->accept($sizeAwareTreeBuilder);
     $sizeAwareTree = $sizeAwareTreeBuilder->getBuiltSizeAwareTree();
     //build and return flat grid
     $sizeAwareTree->accept($flatGridBuilder);
     return $flatGridBuilder->getBuiltGrid();
 }
 /**
  * @param TableElement $tableElement
  * @return Element
  */
 private function getSizeAwareTreeOf(TableElement $tableElement)
 {
     $builder = clone $this;
     $tableElement->accept($builder);
     return $builder->getBuiltSizeAwareTree(false);
 }