/**
* Run Documentation generation process
*
* @param GeneratorConfig $config
*
* @throws ApplicationException
* @return void
*/
public function runGenerator(GeneratorConfig $config)
{
$this->logger->reset();
$this->logger->log("Starting generator");
$engineFactory = $this->factory->getEngineFactory();
$enricherFactory = $this->factory->getEnricherFactory();
$failed = array_diff($config->getRequiredEngines(), $engineFactory->getEngineList());
if (count($failed)) {
$list = join("', '", $failed);
throw new ApplicationException("The engine(s) '{$list}' is/are not registered", ApplicationException::UnknownEngine);
}
$failed = array_diff($config->getRequiredEnrichers(), $enricherFactory->getEnricherList());
if (count($failed)) {
$list = join("', '", $failed);
throw new ApplicationException("The enricher(s) '{$list}' is/are not registered", ApplicationException::UnknownEnricher);
}
$generator = $this->factory->getGenerator();
foreach ($config->getActiveBuilds() as $buildCfg) {
$generator->addEngine($engineFactory->getInstanceFor($buildCfg));
}
$this->logger->log('Loading enrichers');
foreach ($config->getActiveEnrichSources() as $type => $enrichCfg) {
try {
$enricher = $enricherFactory->getInstanceFor($enrichCfg);
$generator->addEnricher($enricher);
$this->logger->log(sprintf('Enricher %s initialized successfully', $enricher->getName()));
} catch (EnricherException $e) {
$this->logger->log(sprintf("Exception while initializing enricher %s:\n\n %s\n", $type, $e->getMessage()));
}
}
$pconfig = $config->getProjectConfig();
if (!file_exists($pconfig->getWorkDirectory() . '/index.xml')) {
throw new ApplicationException('Workdirectory does not contain an index.xml file. Did you run the collector?', ApplicationException::IndexMissing);
}
if (!file_exists($pconfig->getWorkDirectory() . '/source.xml')) {
throw new ApplicationException('Workdirectory does not contain an source.xml file. Did you run the collector?', ApplicationException::SourceMissing);
}
$srcDir = $pconfig->getSourceDirectory();
if (!file_exists($srcDir) || !is_dir($srcDir)) {
throw new ApplicationException(sprintf('Invalid src directory "%s" specified', $srcDir), ApplicationException::InvalidSrcDirectory);
}
$this->logger->log("Starting event loop.\n");
$generator->run(new \TheSeer\phpDox\Generator\Project($srcDir, $pconfig->getWorkDirectory()));
$this->logger->log("Generator process completed");
}