private function saveUnit(array $map, array $reportUnits, AbstractUnitObject $unit)
{
$indexNode = $this->index->findUnitNodeByName($unit->getNamespace(), $unit->getLocalName());
if (!$indexNode) {
throw new ProjectException(sprintf("Internal Error: Unit '%s' not found in index (ns: %s, n: %s).", $unit->getName(), $unit->getNamespace(), $unit->getLocalName()), ProjectException::UnitNotFoundInIndex);
}
$name = str_replace('\\', '_', $unit->getName());
$dom = $unit->export();
$dom->formatOutput = TRUE;
$dom->preserveWhiteSpace = FALSE;
$fname = $map[$dom->documentElement->localName] . '/' . $name . '.xml';
try {
$dom->save($this->xmlDir . '/' . $fname);
} catch (fDOMException $e) {
throw new ProjectException(sprintf("Internal Error: Unit '%s' could not be saved (ns: %s, n: %s).", $unit->getName(), $unit->getNamespace(), $unit->getLocalName()), ProjectException::UnitCouldNotBeSaved, $e);
}
if ($indexNode->hasAttribute('xml')) {
$reportUnits = array_merge($reportUnits, $this->findAffectedUnits($fname));
} else {
$indexNode->setAttribute('xml', $fname);
}
return $reportUnits;
}