/*
         * 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);
        }
Exemple #2
0
        /// <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);
        }