From: Gert D. <dri...@us...> - 2003-10-26 15:45:40
|
Update of /cvsroot/nant/nant/src/NAnt.Core In directory sc8-pr-cvs1:/tmp/cvs-serv17221 Modified Files: Element.cs FrameworkInfo.cs ProjectSettingsLoader.cs Task.cs Log Message: Refactored Element initialization (a little bit, anyway) in order to be able to support initialization of elements in the NAnt configuration file Added support for framework-specific environment variables Index: Element.cs =================================================================== RCS file: /cvsroot/nant/nant/src/NAnt.Core/Element.cs,v retrieving revision 1.47 retrieving revision 1.48 diff -C2 -d -r1.47 -r1.48 *** Element.cs 25 Oct 2003 15:37:01 -0000 1.47 --- Element.cs 26 Oct 2003 15:41:15 -0000 1.48 *************** *** 30,33 **** --- 30,34 ---- using NAnt.Core.Attributes; + using NAnt.Core.Types; using NAnt.Core.Util; *************** *** 174,178 **** } [...1790 lines suppressed...] ! public void Set(XmlNode attributeNode, Element parent, PropertyInfo property, string value) { ! try { ! object propertyValue = Convert.ChangeType(value, property.PropertyType, CultureInfo.InvariantCulture); ! property.SetValue(parent, propertyValue, BindingFlags.Public | BindingFlags.Instance, null, null, CultureInfo.InvariantCulture); ! } catch (Exception ex) { ! throw new BuildException(string.Format(CultureInfo.InvariantCulture, ! "'{0}' is not a valid value for attribute '{1}' of <{2} ... />.", ! value, attributeNode.Name, parent.Name), parent.Location, ex); ! } } } ! /// <summary> ! /// Internal interface used for setting element attributes. ! /// </summary> ! private interface IAttributeSetter { ! void Set(XmlNode attributeNode, Element parent, PropertyInfo property, string value); } } } Index: FrameworkInfo.cs =================================================================== RCS file: /cvsroot/nant/nant/src/NAnt.Core/FrameworkInfo.cs,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** FrameworkInfo.cs 12 Oct 2003 17:49:44 -0000 1.11 --- FrameworkInfo.cs 26 Oct 2003 15:41:15 -0000 1.12 *************** *** 22,25 **** --- 22,26 ---- using System.IO; + using NAnt.Core.Types; using NAnt.Core.Util; *************** *** 33,44 **** #region Private Instance Fields ! private string _name; ! private string _description; ! private string _version; ! private DirectoryInfo _frameworkDirectory; ! private DirectoryInfo _sdkDirectory; ! private DirectoryInfo _frameworkAssemblyDirectory; ! private FileInfo _runtimEngine; ! private PropertyDictionary _properties = new PropertyDictionary(); #endregion Private Instance Fields --- 34,46 ---- #region Private Instance Fields ! private readonly string _name; ! private readonly string _description; ! private readonly string _version; ! private readonly DirectoryInfo _frameworkDirectory; ! private readonly DirectoryInfo _sdkDirectory; ! private readonly DirectoryInfo _frameworkAssemblyDirectory; ! private readonly FileInfo _runtimEngine; ! private readonly PropertyDictionary _properties; ! private EnvironmentVariableCollection _environmentVariables; #endregion Private Instance Fields *************** *** 218,221 **** --- 220,238 ---- public PropertyDictionary Properties { get { return _properties; } + } + + /// <summary> + /// Gets or sets the collection of environment variables that should be + /// passed to external programs that are launched in the runtime engine + /// of the current framework. + /// </summary> + /// <value> + /// The collection of environment variables that should be passed to + /// external programs that are launched in the runtime engine of the + /// current framework. + /// </value> + public EnvironmentVariableCollection EnvironmentVariables { + get { return _environmentVariables; } + set { _environmentVariables = value; } } Index: ProjectSettingsLoader.cs =================================================================== RCS file: /cvsroot/nant/nant/src/NAnt.Core/ProjectSettingsLoader.cs,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** ProjectSettingsLoader.cs 21 Oct 2003 06:19:14 -0000 1.4 --- ProjectSettingsLoader.cs 26 Oct 2003 15:41:15 -0000 1.5 *************** *** 33,36 **** --- 33,37 ---- using Microsoft.Win32; + using NAnt.Core.Types; using NAnt.Core.Util; *************** *** 254,258 **** frameworkProperties); ! // framework is valid, so add it for framework dictionary Project.FrameworkInfoDictionary.Add(info.Name, info); } catch (Exception ex) { --- 255,266 ---- frameworkProperties); ! // get framework-specific environment nodes ! XmlNodeList environmentNodes = frameworkNode.SelectNodes("environment/env"); ! ! // process framework environment nodes ! info.EnvironmentVariables = ProcessFrameworkEnvironmentVariables( ! environmentNodes, info); ! ! // framework is valid, so add it to framework dictionary Project.FrameworkInfoDictionary.Add(info.Name, info); } catch (Exception ex) { *************** *** 333,336 **** --- 341,375 ---- return frameworkProperties; + } + + /// <summary> + /// Processes the framework environment variables. + /// </summary> + /// <param name="environmentNodes">An <see cref="XmlNodeList" /> representing framework environment variables.</param> + /// <param name="framework">The <see cref="FrameworkInfo" /> to obtain framework-specific information from.</param> + private EnvironmentVariableCollection ProcessFrameworkEnvironmentVariables(XmlNodeList environmentNodes, FrameworkInfo framework) { + EnvironmentVariableCollection frameworkEnvironment = null; + + // initialize framework-specific environment variables + frameworkEnvironment = new EnvironmentVariableCollection(); + + foreach (XmlNode environmentNode in environmentNodes) { + //skip non-nant namespace elements and special elements like comments, pis, text, etc. + if (!(environmentNode.NodeType == XmlNodeType.Element)) { + continue; + } + + // initialize element + EnvironmentVariable environmentVariable = new EnvironmentVariable(); + environmentVariable.Project = Project; + + // configure using xml node + environmentVariable.Initialize(environmentNode, framework.Properties, framework); + + // add to collection of environment variables + frameworkEnvironment.Add(environmentVariable); + } + + return frameworkEnvironment; } Index: Task.cs =================================================================== RCS file: /cvsroot/nant/nant/src/NAnt.Core/Task.cs,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** Task.cs 12 Oct 2003 17:49:44 -0000 1.21 --- Task.cs 26 Oct 2003 15:41:15 -0000 1.22 *************** *** 254,258 **** if (frameworkAttribute != null) { // locate XML configuration node for current attribute ! attributeNode = GetAttributeConfigurationNode(frameworkAttribute.Name); if (attributeNode != null) { --- 254,259 ---- if (frameworkAttribute != null) { // locate XML configuration node for current attribute ! attributeNode = GetAttributeConfigurationNode( ! Project.CurrentFramework, frameworkAttribute.Name); if (attributeNode != null) { |