/**
  * Parse an array of headers and an array of visible header names into multiple
  * TableHeaderCellModels, stored in the tableHeaders property of this object.
  *
  * @param array $headerData
  * @param array $visibleHeaders
  * @param array $columnWidths
  */
 public function addHeaders(array $headerData, array $visibleHeaders = array(), $columnWidths = array())
 {
     if (!empty($visibleHeaders)) {
         $visibleHeaders = $this->flattenHeadersArray($visibleHeaders);
     }
     foreach ($headerData as $header) {
         $newHeader = new TableHeaderCellModel($header, '');
         if (!empty($visibleHeaders)) {
             $newHeader->setVisible(in_array($header, $visibleHeaders));
         }
         if (!empty($columnWidths) && array_key_exists($header, $columnWidths)) {
             $newHeader->setWidth($columnWidths[$header]);
         }
         if (!empty($this->dataTypes) && isset($this->dataTypes[$header])) {
             $newHeader->setDataType($this->dataTypes[$header]);
         }
         $this->tableHeaders[$newHeader->getSafeName()] = $newHeader;
     }
 }