/** * Load config files and append roots as required. */ public ConfigInclusionRules LoadConfigFiles(List <string> files, CompilerArguments arguments) { ConfigInclusionRules config = new ConfigInclusionRules(); foreach (string file in files) { // Get the full path to the config file string fullPath = Path.GetFullPath(file); // Parse the config file as JSON JObject jsonConfig; try { jsonConfig = JObject.Parse(File.ReadAllText(fullPath)); } catch (Newtonsoft.Json.JsonReaderException e) { throw new ConfigFileInvalidException("Invalid JSON in " + fullPath + ": " + e.Message); } catch (FileNotFoundException) { throw new ConfigFileInvalidException("Config file not found"); } includeLoader.LoadConfig(config, jsonConfig, fullPath); optionsLoader.LoadOptions(arguments, jsonConfig, fullPath); } return(config); }
public void LoadConfig( ConfigInclusionRules inclusionRules, JObject jsonConfig, string fileName ) { // Load airport data JToken airportData = jsonConfig.SelectToken("includes.airports"); if (airportData != null) { IterateAirportConfig(airportData, inclusionRules, fileName); } // Load enroute data JToken enrouteData = jsonConfig.SelectToken("includes.enroute"); if (enrouteData != null) { IterateConfigFileSections( enrouteData, EnrouteConfigFileSections.ConfigFileSections, OutputGroupFactory.CreateEnroute, x => inclusionRules.AddEnrouteInclusionRule(x), GetFolderForConfigFile(fileName), "enroute" ); } // Load misc data JToken miscData = jsonConfig.SelectToken("includes.misc"); if (miscData != null) { IterateConfigFileSections( miscData, MiscConfigFileSections.ConfigFileSections, OutputGroupFactory.CreateMisc, x => inclusionRules.AddMiscInclusionRule(x), GetFolderForConfigFile(fileName), "misc" ); } }
/** * Airports are special as there are many folders to go through for things and in some * cases we might want to exclude certain files from airports. So iterate through * each configuration of airports. */ private void IterateAirportConfig( JToken airportConfig, ConfigInclusionRules config, string configFilePath ) { if (airportConfig.Type != JTokenType.Object) { throw new ConfigFileInvalidException( $"Invalid airport config in {configFilePath} must be an object" ); } foreach (KeyValuePair <string, JToken> configItem in (JObject)airportConfig) { if (configItem.Value.Type != JTokenType.Object) { throw new ConfigFileInvalidException( $"Invalid airport config[{configItem.Key}] in {configFilePath} must be an object" ); } // Get the airport folders string configFileFolder = GetFolderForConfigFile(configFilePath); string[] directories = Directory.GetDirectories(configFileFolder + Path.DirectorySeparatorChar + configItem.Key); // For each airport, iterate the config file sections foreach (string directory in directories) { IterateConfigFileSections( configItem.Value, AirfieldConfigFileSections.ConfigFileSections, x => OutputGroupFactory.CreateAirport(x, Path.GetFileName(directory)), config.AddAirportInclusionRule, directory, "airport" ); } } }