/// <summary> /// Generates all the ContractParameter objects required for the array of ConfigNodes, and /// adds them to the host object. /// </summary> /// <param name="contract">Contract to generate for</param> /// <param name="contractParamHost">The object to use as a parent for ContractParameters</param> /// <param name="paramFactories">The ParameterFactory objects to use to generate parameters.</param> /// <returns>Whether the generation was successful.</returns> public static bool GenerateParameters(ConfiguredContract contract, IContractParameterHost contractParamHost, List <ParameterFactory> paramFactories) { foreach (ParameterFactory paramFactory in paramFactories) { if (paramFactory.enabled) { ContractParameter parameter = paramFactory.Generate(contract, contractParamHost); // Get the child parameters if (parameter != null) { if (!GenerateParameters(contract, parameter, paramFactory.childNodes)) { return(false); } } ContractConfiguratorParameter ccParam = parameter as ContractConfiguratorParameter; if (ccParam != null && ccParam.hideChildren) { foreach (ContractParameter child in ccParam.GetChildren()) { ContractConfiguratorParameter ccChild = child as ContractConfiguratorParameter; if (ccChild != null) { ccChild.Hide(); } } } } } return(true); }
/// <summary> /// Generates all the ContractParameter objects required for the array of ConfigNodes, and /// adds them to the host object. /// </summary> /// <param name="contract">Contract to generate for</param> /// <param name="contractParamHost">The object to use as a parent for ContractParameters</param> /// <param name="paramFactories">The ParameterFactory objects to use to generate parameters.</param> /// <returns>Whether the generation was successful.</returns> public static bool GenerateParameters(ConfiguredContract contract, IContractParameterHost contractParamHost, List <ParameterFactory> paramFactories) { foreach (ParameterFactory paramFactory in paramFactories) { if (paramFactory.enabled) { // Set up the iterator int count = 1; int current = 0; if (paramFactory.iteratorType != null) { count = (int)paramFactory.dataNode["iteratorCount"]; } // Loop through the iterator, or do a single parameter for non-iterated parameters while (current++ < count) { // Refresh the deterministic values int oldValue = DataNode.IteratorCurrentIndex; if (paramFactory.iteratorType != null) { DataNode.IteratorCurrentIndex = current - 1; ConfigNodeUtil.UpdateNonDeterministicValues(paramFactory.dataNode, paramFactory.dataNode); } ContractParameter parameter = paramFactory.Generate(contract, contractParamHost); // Get the child parameters if (parameter != null) { if (!GenerateParameters(contract, parameter, paramFactory.childNodes)) { return(false); } } ContractConfiguratorParameter ccParam = parameter as ContractConfiguratorParameter; if (ccParam != null && ccParam.hideChildren) { foreach (ContractParameter child in ccParam.GetChildren()) { ContractConfiguratorParameter ccChild = child as ContractConfiguratorParameter; if (ccChild != null) { ccChild.Hide(); } } } // Restore the old value for the iterator list (for recursive iterations) DataNode.IteratorCurrentIndex = oldValue; } } } return(true); }