/* * Generates a ContractRequirement from a configuration node. */ public static ContractRequirement GenerateRequirement(ConfigNode configNode, ContractType contractType) { // Get the type string type = configNode.GetValue("type"); 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 + "'."); return(null); } // Create an instance of the ContractRequirement ContractRequirement requirement = (ContractRequirement)Activator.CreateInstance(requirementTypes[type]); // Set attributes requirement.contractType = contractType; requirement.targetBody = contractType.targetBody; // Load config bool valid = requirement.Load(configNode); // Check for unexpected values - always do this last valid &= ConfigNodeUtil.ValidateUnexpectedValues(configNode, requirement); return(valid ? requirement : null); }
/// <summary> /// Loads a requirement from a ConfigNode. /// </summary> /// <param name="configNode"></param> /// <param name="contract"></param> /// <returns></returns> public static ContractRequirement LoadRequirement(ConfigNode configNode) { // Determine the type string typeName = configNode.GetValue("type"); if (string.IsNullOrEmpty(typeName)) { return(null); } Type type = requirementTypes.ContainsKey(typeName) ? requirementTypes[typeName] : null; if (type == null) { throw new Exception("No ContractRequirement with type = '" + typeName + "'."); } // Instantiate and load ContractRequirement requirement = (ContractRequirement)Activator.CreateInstance(type); requirement.Load(configNode); // Load children foreach (ConfigNode child in configNode.GetNodes("REQUIREMENT")) { ContractRequirement childRequirement = LoadRequirement(child); if (childRequirement != null) { requirement.childNodes.Add(childRequirement); } } return(requirement); }