From: Gert D. <dri...@us...> - 2003-10-21 07:26:15
|
Update of /cvsroot/nant/nant/src/NAnt.Core In directory sc8-pr-cvs1:/tmp/cvs-serv23385 Modified Files: ProjectSettingsLoader.cs Log Message: (very) minor refactoring for the processing of framework properties Index: ProjectSettingsLoader.cs =================================================================== RCS file: /cvsroot/nant/nant/src/NAnt.Core/ProjectSettingsLoader.cs,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** ProjectSettingsLoader.cs 10 Oct 2003 21:13:04 -0000 1.3 --- ProjectSettingsLoader.cs 21 Oct 2003 06:19:14 -0000 1.4 *************** *** 224,237 **** } - PropertyDictionary frameworkProperties = null; string name = null; try { - // initialize framework-specific properties - frameworkProperties = new PropertyDictionary(); - - // inject framework-neutral properties - frameworkProperties.Inherit(Project.FrameworkNeutralProperties, (StringCollection)null); - // get framework attributes name = GetXmlAttributeValue(frameworkNode, "name"); --- 224,230 ---- *************** *** 244,299 **** string sdkDir = GetXmlAttributeValue(frameworkNode, "sdkdirectory"); ! // get framework-specific properties XmlNodeList propertyNodes = frameworkNode.SelectNodes("properties/property"); ! foreach (XmlNode propertyNode in propertyNodes) { ! //skip non-nant namespace elements and special elements like comments, pis, text, etc. ! if (!(propertyNode.NodeType == XmlNodeType.Element)) { ! continue; ! } ! ! string propertyName = GetXmlAttributeValue(propertyNode, "name"); ! string propertyValue = null; ! ! if (propertyName == null) { ! throw new ArgumentException("A framework property should at least have a name."); ! } ! ! if (GetXmlAttributeValue(propertyNode, "useregistry") == "true") { ! string regKey = GetXmlAttributeValue(propertyNode, "regkey"); ! ! if (regKey == null) { ! throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Framework property {0} is configured to be read from the registry but has no regkey attribute set.", propertyName)); ! } else { ! // expand properties in regkey ! regKey = frameworkProperties.ExpandProperties(regKey, Location.UnknownLocation); ! } ! ! string regValue = GetXmlAttributeValue(propertyNode, "regvalue"); ! ! if (regValue == null) { ! throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Framework property {0} is configured to be read from the registry but has no regvalue attribute set.", propertyName)); ! } else { ! // expand properties in regvalue ! regValue = frameworkProperties.ExpandProperties(regValue, Location.UnknownLocation); ! } ! ! RegistryKey sdkKey = Registry.LocalMachine.OpenSubKey(regKey); ! ! if (sdkKey != null && sdkKey.GetValue(regValue) != null) { ! propertyValue = sdkKey.GetValue(regValue).ToString(); ! } ! } else { ! propertyValue = GetXmlAttributeValue(propertyNode, "value"); ! } ! ! if (propertyValue != null) { ! // expand properties in property value ! propertyValue = frameworkProperties.ExpandProperties(propertyValue, Location.UnknownLocation); ! ! // add read-only property to collection of framework properties ! frameworkProperties.AddReadOnly(propertyName, propertyValue); ! } ! } // create new FrameworkInfo instance, this will throw an --- 237,245 ---- string sdkDir = GetXmlAttributeValue(frameworkNode, "sdkdirectory"); ! // get framework-specific property nodes XmlNodeList propertyNodes = frameworkNode.SelectNodes("properties/property"); ! // process framework property nodes ! PropertyDictionary frameworkProperties = ProcessFrameworkProperties(propertyNodes); // create new FrameworkInfo instance, this will throw an *************** *** 319,322 **** --- 265,336 ---- } } + } + + /// <summary> + /// Processes the framework properties. + /// </summary> + /// <param name="propertyNodes">An <see cref="XmlNodeList" /> representing framework properties.</param> + private PropertyDictionary ProcessFrameworkProperties(XmlNodeList propertyNodes) { + PropertyDictionary frameworkProperties = null; + + // initialize framework-specific properties + frameworkProperties = new PropertyDictionary(); + + // inject framework-neutral properties + frameworkProperties.Inherit(Project.FrameworkNeutralProperties, (StringCollection)null); + + foreach (XmlNode propertyNode in propertyNodes) { + //skip non-nant namespace elements and special elements like comments, pis, text, etc. + if (!(propertyNode.NodeType == XmlNodeType.Element)) { + continue; + } + + string propertyName = GetXmlAttributeValue(propertyNode, "name"); + + // make sure property has atleast a name + if (propertyName == null) { + throw new ArgumentException("A framework property should at least have a name."); + } + + string propertyValue = null; + + if (GetXmlAttributeValue(propertyNode, "useregistry") == "true") { + string regKey = GetXmlAttributeValue(propertyNode, "regkey"); + + if (regKey == null) { + throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Framework property {0} is configured to be read from the registry but has no regkey attribute set.", propertyName)); + } else { + // expand properties in regkey + regKey = frameworkProperties.ExpandProperties(regKey, Location.UnknownLocation); + } + + string regValue = GetXmlAttributeValue(propertyNode, "regvalue"); + + if (regValue == null) { + throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Framework property {0} is configured to be read from the registry but has no regvalue attribute set.", propertyName)); + } else { + // expand properties in regvalue + regValue = frameworkProperties.ExpandProperties(regValue, Location.UnknownLocation); + } + + RegistryKey sdkKey = Registry.LocalMachine.OpenSubKey(regKey); + + if (sdkKey != null && sdkKey.GetValue(regValue) != null) { + propertyValue = sdkKey.GetValue(regValue).ToString(); + } + } else { + propertyValue = GetXmlAttributeValue(propertyNode, "value"); + } + + if (propertyValue != null) { + // expand properties in property value + propertyValue = frameworkProperties.ExpandProperties(propertyValue, Location.UnknownLocation); + + // add read-only property to collection of framework properties + frameworkProperties.AddReadOnly(propertyName, propertyValue); + } + } + + return frameworkProperties; } |