/// <summary> /// Generates a ContractRequirement from a configuration node. /// </summary> /// <param name="configNode">ConfigNode to use in the generation.</param> /// <param name="contractType">ContractType that this requirement falls under</param> /// <param name="requirement">The ContractRequirement object.</param> /// <returns>Whether the load was successful</returns> public static bool GenerateRequirement(ConfigNode configNode, ContractType contractType, out ContractRequirement requirement, IContractConfiguratorFactory parent = null) { // Logging on LoggingUtil.CaptureLog = true; bool valid = true; // Get the type string type = configNode.GetValue("type"); string name = configNode.HasValue("name") ? configNode.GetValue("name") : type; if (string.IsNullOrEmpty(type)) { LoggingUtil.LogError(typeof(ParameterFactory), "CONTRACT_TYPE '" + contractType.name + "'," + "REQUIREMENT '" + configNode.GetValue("name") + "' does not specify the mandatory 'type' attribute."); requirement = new InvalidContractRequirement(); valid = false; } else if (!requirementTypes.ContainsKey(type)) { LoggingUtil.LogError(typeof(ParameterFactory), "CONTRACT_TYPE '" + contractType.name + "'," + "REQUIREMENT '" + configNode.GetValue("name") + "' of type '" + configNode.GetValue("type") + "': " + "Unknown requirement '" + type + "'."); requirement = new InvalidContractRequirement(); valid = false; } else { // Create an instance of the ContractRequirement requirement = (ContractRequirement)Activator.CreateInstance(requirementTypes[type]); } // Set attributes requirement.contractType = contractType; requirement.dataNode = new DataNode(name, parent != null ? parent.dataNode : contractType.dataNode, requirement); // Load config valid &= requirement.Load(configNode); // Check for unexpected values - always do this last if (requirement.GetType() != typeof(InvalidContractRequirement)) { valid &= ConfigNodeUtil.ValidateUnexpectedValues(configNode, requirement); } // Load child nodes foreach (ConfigNode childNode in ConfigNodeUtil.GetChildNodes(configNode, "REQUIREMENT")) { ContractRequirement child = null; valid &= ContractRequirement.GenerateRequirement(childNode, contractType, out child, requirement); if (child != null) { requirement.childNodes.Add(child); if (child.hasWarnings) { requirement.hasWarnings = true; } } } requirement.enabled = valid; requirement.log = LoggingUtil.capturedLog; LoggingUtil.CaptureLog = false; return valid; }
/// <summary> /// Generates a ContractRequirement from a configuration node. /// </summary> /// <param name="configNode">ConfigNode to use in the generation.</param> /// <param name="contractType">ContractType that this requirement falls under</param> /// <param name="requirement">The ContractRequirement object.</param> /// <returns>Whether the load was successful</returns> public static bool GenerateRequirement(ConfigNode configNode, ContractType contractType, out ContractRequirement requirement, IContractConfiguratorFactory parent = null) { // Logging on LoggingUtil.CaptureLog = true; bool valid = true; // Get the type string type = configNode.GetValue("type"); string name = configNode.HasValue("name") ? configNode.GetValue("name") : type; if (string.IsNullOrEmpty(type)) { LoggingUtil.LogError(typeof(ParameterFactory), "CONTRACT_TYPE '{0}', REQUIREMENT '{1}' does not specify the mandatory 'type' attribute.", contractType.name, configNode.GetValue("name")); requirement = new InvalidContractRequirement(); valid = false; } else if (!requirementTypes.ContainsKey(type)) { LoggingUtil.LogError(typeof(ParameterFactory), "CONTRACT_TYPE '{0}', REQUIREMENT '{1}' of type '{2}': Unknown requirement '{3}'.", contractType.name, configNode.GetValue("name"), configNode.GetValue("type"), type); requirement = new InvalidContractRequirement(); valid = false; } else { // Create an instance of the ContractRequirement requirement = (ContractRequirement)Activator.CreateInstance(requirementTypes[type]); } // Set attributes requirement.contractType = contractType; requirement.dataNode = new DataNode(name, parent != null ? parent.dataNode : contractType.dataNode, requirement); // Load config valid &= requirement.LoadFromConfig(configNode); // Override the needsTitle if we have a parent node with hideChildren ContractRequirement parentRequirement = parent as ContractRequirement; if (parentRequirement != null) { if (parentRequirement.hideChildren) { requirement.hideChildren = true; requirement.needsTitle = false; } } // Check for unexpected values - always do this last if (requirement.GetType() != typeof(InvalidContractRequirement)) { valid &= ConfigNodeUtil.ValidateUnexpectedValues(configNode, requirement); } // Load child nodes foreach (ConfigNode childNode in ConfigNodeUtil.GetChildNodes(configNode, "REQUIREMENT")) { ContractRequirement child = null; valid &= ContractRequirement.GenerateRequirement(childNode, contractType, out child, requirement); if (child != null) { requirement.childNodes.Add(child); if (child.hasWarnings) { requirement.hasWarnings = true; } } } // Error for missing title if (requirement.needsTitle && string.IsNullOrEmpty(requirement.title)) { valid = contractType.minVersion < ContractConfigurator.ENHANCED_UI_VERSION; LoggingUtil.Log(contractType.minVersion >= ContractConfigurator.ENHANCED_UI_VERSION ? LoggingUtil.LogLevel.ERROR : LoggingUtil.LogLevel.WARNING, requirement, "{0}: missing required attribute 'title'.", requirement.ErrorPrefix(configNode)); } requirement.enabled = valid; requirement.log = LoggingUtil.capturedLog; LoggingUtil.CaptureLog = false; return(valid); }
/// <summary> /// Generates a ContractRequirement from a configuration node. /// </summary> /// <param name="configNode">ConfigNode to use in the generation.</param> /// <param name="contractType">ContractType that this requirement falls under</param> /// <param name="requirement">The ContractRequirement object.</param> /// <returns>Whether the load was successful</returns> public static bool GenerateRequirement(ConfigNode configNode, ContractType contractType, out ContractRequirement requirement, IContractConfiguratorFactory parent = null) { // Logging on LoggingUtil.CaptureLog = true; bool valid = true; // Get the type string type = configNode.GetValue("type"); string name = configNode.HasValue("name") ? configNode.GetValue("name") : type; if (string.IsNullOrEmpty(type)) { LoggingUtil.LogError(typeof(ParameterFactory), "CONTRACT_TYPE '" + contractType.name + "'," + "REQUIREMENT '" + configNode.GetValue("name") + "' does not specify the mandatory 'type' attribute."); requirement = new InvalidContractRequirement(); valid = false; } else if (!requirementTypes.ContainsKey(type)) { LoggingUtil.LogError(typeof(ParameterFactory), "CONTRACT_TYPE '" + contractType.name + "'," + "REQUIREMENT '" + configNode.GetValue("name") + "' of type '" + configNode.GetValue("type") + "': " + "Unknown requirement '" + type + "'."); requirement = new InvalidContractRequirement(); valid = false; } else { // Create an instance of the ContractRequirement requirement = (ContractRequirement)Activator.CreateInstance(requirementTypes[type]); } // Set attributes requirement.contractType = contractType; requirement.dataNode = new DataNode(name, parent != null ? parent.dataNode : contractType.dataNode, requirement); // Load config valid &= requirement.LoadFromConfig(configNode); // Override the needsTitle if we have a parent node with hideChildren ContractRequirement parentRequirement = parent as ContractRequirement; if (parentRequirement != null) { if (parentRequirement.hideChildren) { requirement.hideChildren = true; requirement.needsTitle = false; } } // Check for unexpected values - always do this last if (requirement.GetType() != typeof(InvalidContractRequirement)) { valid &= ConfigNodeUtil.ValidateUnexpectedValues(configNode, requirement); } // Load child nodes foreach (ConfigNode childNode in ConfigNodeUtil.GetChildNodes(configNode, "REQUIREMENT")) { ContractRequirement child = null; valid &= ContractRequirement.GenerateRequirement(childNode, contractType, out child, requirement); if (child != null) { requirement.childNodes.Add(child); if (child.hasWarnings) { requirement.hasWarnings = true; } } } // Error for missing title if (requirement.needsTitle && string.IsNullOrEmpty(requirement.title)) { valid = contractType.minVersion < ContractConfigurator.ENHANCED_UI_VERSION; LoggingUtil.Log(contractType.minVersion >= ContractConfigurator.ENHANCED_UI_VERSION ? LoggingUtil.LogLevel.ERROR : LoggingUtil.LogLevel.WARNING, requirement, requirement.ErrorPrefix(configNode) + ": missing required attribute 'title'."); } requirement.enabled = valid; requirement.log = LoggingUtil.capturedLog; LoggingUtil.CaptureLog = false; return valid; }
/// <summary> /// Generates a ContractRequirement from a configuration node. /// </summary> /// <param name="configNode">ConfigNode to use in the generation.</param> /// <param name="contractType">ContractType that this requirement falls under</param> /// <param name="requirement">The ContractRequirement object.</param> /// <returns>Whether the load was successful</returns> public static bool GenerateRequirement(ConfigNode configNode, ContractType contractType, out ContractRequirement requirement, IContractConfiguratorFactory parent = null) { // Logging on LoggingUtil.CaptureLog = true; bool valid = true; // Get the type string type = configNode.GetValue("type"); string name = configNode.HasValue("name") ? configNode.GetValue("name") : type; if (string.IsNullOrEmpty(type)) { LoggingUtil.LogError(typeof(ParameterFactory), "CONTRACT_TYPE '" + contractType.name + "'," + "REQUIREMENT '" + configNode.GetValue("name") + "' does not specify the mandatory 'type' attribute."); requirement = new InvalidContractRequirement(); valid = false; } else if (!requirementTypes.ContainsKey(type)) { LoggingUtil.LogError(typeof(ParameterFactory), "CONTRACT_TYPE '" + contractType.name + "'," + "REQUIREMENT '" + configNode.GetValue("name") + "' of type '" + configNode.GetValue("type") + "': " + "No ContractRequirement has been registered for type '" + type + "'."); requirement = new InvalidContractRequirement(); valid = false; } else { // Create an instance of the ContractRequirement requirement = (ContractRequirement)Activator.CreateInstance(requirementTypes[type]); } // Set attributes requirement.contractType = contractType; requirement.dataNode = new DataNode(name, parent != null ? parent.dataNode : contractType.dataNode, requirement); // Load config valid &= requirement.Load(configNode); // Check for unexpected values - always do this last if (requirement.GetType() != typeof(InvalidContractRequirement)) { valid &= ConfigNodeUtil.ValidateUnexpectedValues(configNode, requirement); } // Load child nodes foreach (ConfigNode childNode in ConfigNodeUtil.GetChildNodes(configNode, "REQUIREMENT")) { ContractRequirement child = null; valid &= ContractRequirement.GenerateRequirement(childNode, contractType, out child, requirement); if (child != null) { requirement.childNodes.Add(child); if (child.hasWarnings) { requirement.hasWarnings = true; } } } requirement.enabled = valid; requirement.log = LoggingUtil.capturedLog; LoggingUtil.CaptureLog = false; return(valid); }