public ConfigFileLoaderTest() { fileLoader = ConfigFileLoaderFactory.Make(); arguments = new CompilerArguments(); }
public int Compile() { events.AddEvent(new ComplilationStartedEvent()); CompilerArgumentsValidator.Validate(events, arguments); if (events.HasFatalError()) { events.AddEvent(new CompilationFinishedEvent(false)); return(1); } // Parse all the config files OutputGroupRepository outputGroups = new OutputGroupRepository(); ConfigInclusionRules config; try { events.AddEvent(new CompilationMessage("Loading config files")); config = ConfigFileLoaderFactory.Make().LoadConfigFiles(arguments.ConfigFiles, arguments); } catch (ConfigFileInvalidException e) { events.AddEvent(new CompilationMessage(e.Message)); events.AddEvent(new CompilationFinishedEvent(false)); return(1); } // Parse all the input files and create elements SectorElementCollection sectorElements = new SectorElementCollection(); DataParserFactory parserFactory = new DataParserFactory(sectorElements, events); InputFileList fileList; try { events.AddEvent(new CompilationMessage("Building input file list")); fileList = InputFileListFactory.CreateFromInclusionRules( new SectorDataFileFactory(new InputFileStreamFactory()), config, outputGroups ); } catch (System.Exception exception) { events.AddEvent(new CompilationMessage(exception.Message)); events.AddEvent(new CompilationFinishedEvent(false)); return(1); } events.AddEvent(new CompilationMessage("Injecting pre-parse static data")); RunwayCentrelineInjector.InjectRunwayCentrelineData(sectorElements); events.AddEvent(new CompilationMessage("Parsing input files")); foreach (AbstractSectorDataFile dataFile in fileList) { parserFactory.GetParserForFile(dataFile).ParseData(dataFile); } if (events.HasFatalError()) { events.AddEvent(new CompilationFinishedEvent(false)); return(1); } // There's some static data we need to inject to the collection for adjacent airports... events.AddEvent(new CompilationMessage("Injecting post-parse static data")); AdjacentAirportsInjector.InjectAdjacentAirportsData(sectorElements); // Now all the data is loaded, validate that there are no broken references etc. if (arguments.ValidateOutput) { events.AddEvent(new CompilationMessage("Validating data")); OutputValidator.Validate(sectorElements, arguments, events); if (events.HasFatalError()) { events.AddEvent(new CompilationFinishedEvent(false)); return(1); } } else { events.AddEvent(new CompilationMessage("Skipping output validation")); } // Generate the output OutputGenerator generator = new OutputGenerator( sectorElements, outputGroups, new CompilableElementCollectorFactory(sectorElements, outputGroups) ); foreach (AbstractOutputFile output in arguments.OutputFiles) { events.AddEvent(new CompilationMessage($"Generating {output.GetFileDescriptor()} output")); generator.GenerateOutput(output); } events.AddEvent(new CompilationFinishedEvent(true)); return(0); }