From: Gert D. <dri...@us...> - 2003-12-07 08:52:23
|
Update of /cvsroot/nant/nant/src/NAnt.Core/Tasks In directory sc8-pr-cvs1:/tmp/cvs-serv31280 Modified Files: Tag: BRANCH-084 XmlPeekTask.cs XmlPokeTask.cs Log Message: fixed example, resolved filename to full path, minor code formatting updates, improved error reporting Index: XmlPeekTask.cs =================================================================== RCS file: /cvsroot/nant/nant/src/NAnt.Core/Tasks/XmlPeekTask.cs,v retrieving revision 1.2 retrieving revision 1.2.2.1 diff -C2 -d -r1.2 -r1.2.2.1 *** XmlPeekTask.cs 4 Dec 2003 07:57:03 -0000 1.2 --- XmlPeekTask.cs 7 Dec 2003 08:52:20 -0000 1.2.2.1 *************** *** 19,26 **** // Mitch Denny (mit...@mo...) - using NAnt; - using NAnt.Core; - using NAnt.Core.Attributes; - using NAnt.Core.Types; using System; using System.Globalization; --- 19,22 ---- *************** *** 28,33 **** using System.Xml; ! namespace NAnt.Core.Tasks { /// <summary> /// Extracts text from an XML file at the location specified by an XPath --- 24,31 ---- using System.Xml; ! using NAnt.Core; ! using NAnt.Core.Attributes; + namespace NAnt.Core.Tasks { /// <summary> /// Extracts text from an XML file at the location specified by an XPath *************** *** 48,52 **** /// <![CDATA[ /// <?xml version="1.0" encoding="utf-8" ?> - /// /// <configuration> /// <appSettings> --- 46,49 ---- *************** *** 62,67 **** /// <code> /// <![CDATA[ ! /// <xmlpoke ! /// file="App.config" /// xpath="/configuration/appSettings/add[@key = 'server']/@value" /// property="server" /> --- 59,64 ---- /// <code> /// <![CDATA[ ! /// <xmlpeek ! /// filename="App.config" /// xpath="/configuration/appSettings/add[@key = 'server']/@value" /// property="server" /> *************** *** 71,75 **** [TaskName("xmlpeek")] public class XmlPeekTask : Task { - #region Private Instance Fields --- 68,71 ---- *************** *** 87,102 **** /// that is going to be peeked at. /// </summary> ! [TaskAttribute("filename", Required = true)] [StringValidator(AllowEmpty=false)] public string FileName { ! get { return _fileName; } set { _fileName = value; } } /// <summary> ! /// The the index of the node that gets its text returned when the query returns ! /// multiple nodes. /// </summary> ! [TaskAttribute("nodeindex", Required = false)] [Int32Validator(0, Int32.MaxValue)] public int NodeIndex { --- 83,98 ---- /// that is going to be peeked at. /// </summary> ! [TaskAttribute("filename", Required=true)] [StringValidator(AllowEmpty=false)] public string FileName { ! get { return (_fileName != null) ? Project.GetFullPath(_fileName) : null; } set { _fileName = value; } } /// <summary> ! /// The index of the node that gets its text returned when the query ! /// returns multiple nodes. /// </summary> ! [TaskAttribute("nodeindex", Required=false)] [Int32Validator(0, Int32.MaxValue)] public int NodeIndex { *************** *** 106,113 **** /// <summary> ! /// The property that receives the text representation of the XML inside the ! /// node returned from the XPath expression. /// </summary> ! [TaskAttribute("property", Required = true)] [StringValidator(AllowEmpty=false)] public string Property { --- 102,109 ---- /// <summary> ! /// The property that receives the text representation of the XML inside ! /// the node returned from the XPath expression. /// </summary> ! [TaskAttribute("property", Required=true)] [StringValidator(AllowEmpty=false)] public string Property { *************** *** 119,123 **** /// The XPath expression used to select which node to read. /// </summary> ! [TaskAttribute("xpath", Required = true)] [StringValidator(AllowEmpty=false)] public string XPath { --- 115,119 ---- /// The XPath expression used to select which node to read. /// </summary> ! [TaskAttribute("xpath", Required=true)] [StringValidator(AllowEmpty=false)] public string XPath { *************** *** 129,163 **** #region Override implementation of Task ! /// <summary> /// Executes the XML peek task. /// </summary> protected override void ExecuteTask() { - string xmlFile = Project.GetFullPath(FileName); - Log( Level.Info, "{0}Peeking at file '{1}' with the XPath expression '{2}'.", LogPrefix, xmlFile, XPath ); try { ! ! XmlDocument document = LoadDocument(xmlFile); string contents = GetNodeContents(XPath, document, NodeIndex); Properties[Property] = contents; ! ! } ! catch (BuildException ex) { throw ex; // Just re-throw the build exceptions. } catch (Exception ex) { - string unhandledExceptionMessage = string.Format( CultureInfo.InvariantCulture, ! "Could not peek at XML file because an unhandled" + ! " exception was thrown. The underlying exception" + ! " message was '{0}'.", ! ex.Message ! ); ! throw new BuildException( ! unhandledExceptionMessage, ! Location, ! ex ! ); } } --- 125,149 ---- #region Override implementation of Task ! ! /// <summary> /// Executes the XML peek task. /// </summary> protected override void ExecuteTask() { + Log(Level.Info, LogPrefix + "Peeking at '{1}' with XPath expression '{2}'.", + FileName, XPath); try { ! XmlDocument document = LoadDocument(FileName); string contents = GetNodeContents(XPath, document, NodeIndex); Properties[Property] = contents; ! } catch (BuildException ex) { throw ex; // Just re-throw the build exceptions. } catch (Exception ex) { string unhandledExceptionMessage = string.Format( CultureInfo.InvariantCulture, ! "Could not peek at XML file '{0}'.", FileName); ! throw new BuildException(unhandledExceptionMessage, Location, ! ex); } } *************** *** 166,169 **** --- 152,156 ---- #region private Instance Methods + /// <summary> /// Loads an XML document from a file on disk. *************** *** 177,203 **** /// </returns> private XmlDocument LoadDocument(string fileName) { - XmlDocument document = null; try { - document = new XmlDocument(); document.Load(FileName); ! } catch (Exception ex) { - string unhandledExceptionMessage = string.Format( CultureInfo.InvariantCulture, ! "Failed to load the XML document '{0}' because of the" + ! " following reason '{1}'.", ! fileName, ! ex.Message ! ); ! throw new BuildException( ! unhandledExceptionMessage, ! Location, ! ex ! ); } - return document; } --- 164,181 ---- /// </returns> private XmlDocument LoadDocument(string fileName) { XmlDocument document = null; + try { document = new XmlDocument(); document.Load(FileName); ! return document; } catch (Exception ex) { string unhandledExceptionMessage = string.Format( CultureInfo.InvariantCulture, ! "Failed to load the XML document '{0}'.", fileName); ! ! throw new BuildException(unhandledExceptionMessage, Location, ! ex); } } *************** *** 216,252 **** /// <returns></returns> private string GetNodeContents(string xpath, XmlDocument document, int nodeIndex ) { - string contents = null; XmlNodeList nodes; try { nodes = document.SelectNodes(xpath); - } catch (Exception ex) { string unhandledExceptionMessage = string.Format( CultureInfo.InvariantCulture, ! "Failed to select node with the XPath expression '{0}'", ! xpath ! ); ! throw new BuildException( ! unhandledExceptionMessage, ! Location, ! ex ! ); } ! if (nodes == null || nodes.Count == 0){ ! string message = string.Format("No matching nodes found for xpath: '{0}'", xpath ); ! throw new BuildException( message, Location ); } ! Log( Level.Info, ! "{0}Found '{1}' nodes with the XPath expression '{2}'.", ! LogPrefix, ! nodes.Count, ! xpath ! ); ! if ( nodeIndex >= nodes.Count ){ ! string message = string.Format("nodeindex '{0}' is out of range ", nodeIndex ); ! throw new BuildException( message, Location ); } --- 194,224 ---- /// <returns></returns> private string GetNodeContents(string xpath, XmlDocument document, int nodeIndex ) { string contents = null; XmlNodeList nodes; + try { nodes = document.SelectNodes(xpath); } catch (Exception ex) { string unhandledExceptionMessage = string.Format( CultureInfo.InvariantCulture, ! "Failed to select node with XPath expression '{0}'", ! xpath); ! throw new BuildException(unhandledExceptionMessage, Location, ! ex); } ! ! if (nodes == null || nodes.Count == 0) { ! throw new BuildException(string.Format(CultureInfo.InvariantCulture, ! "No matching nodes found for XPath expression '{0}'.", xpath), ! Location); } ! ! Log(Level.Info, LogPrefix + "Found '{1}' nodes with the XPath expression '{2}'.", ! nodes.Count, xpath); ! if (nodeIndex >= nodes.Count){ ! throw new BuildException(string.Format(CultureInfo.InvariantCulture, ! "nodeindex '{0}' is out of range.", nodeIndex), Location); } *************** *** 255,258 **** --- 227,231 ---- return contents; } + #endregion private Instance Methods } Index: XmlPokeTask.cs =================================================================== RCS file: /cvsroot/nant/nant/src/NAnt.Core/Tasks/XmlPokeTask.cs,v retrieving revision 1.3 retrieving revision 1.3.2.1 diff -C2 -d -r1.3 -r1.3.2.1 *** XmlPokeTask.cs 4 Dec 2003 07:57:03 -0000 1.3 --- XmlPokeTask.cs 7 Dec 2003 08:52:20 -0000 1.3.2.1 *************** *** 19,26 **** // Mitch Denny (mit...@mo...) - using NAnt; - using NAnt.Core; - using NAnt.Core.Attributes; - using NAnt.Core.Types; using System; using System.Globalization; --- 19,22 ---- *************** *** 28,33 **** using System.Xml; ! namespace NAnt.Core.Tasks { /// <summary> /// Replaces text in an XML file at the location specified by an XPath --- 24,31 ---- using System.Xml; ! using NAnt.Core; ! using NAnt.Core.Attributes; + namespace NAnt.Core.Tasks { /// <summary> /// Replaces text in an XML file at the location specified by an XPath *************** *** 50,54 **** /// <![CDATA[ /// <?xml version="1.0" encoding="utf-8" ?> - /// /// <configuration> /// <appSettings> --- 48,51 ---- *************** *** 59,70 **** /// </code> /// <para> ! /// The example will change the server setting in the ! /// above configuration from testhost.somecompany.com to ! /// productionhost.somecompany.com. /// </para> /// <code> /// <![CDATA[ /// <xmlpoke ! /// file="App.config" /// xpath="/configuration/appSettings/add[@key = 'server']/@value" /// value="productionhost.somecompany.com" /> --- 56,67 ---- /// </code> /// <para> ! /// The example will change the <c>server</c> setting in the above ! /// configuration from <c>testhost.somecompany.com</c> to ! /// <c>productionhost.somecompany.com</c>. /// </para> /// <code> /// <![CDATA[ /// <xmlpoke ! /// filename="App.config" /// xpath="/configuration/appSettings/add[@key = 'server']/@value" /// value="productionhost.somecompany.com" /> *************** *** 83,94 **** #region Public Instance Properties /// <summary> /// The file name of the file that contains the XML document that is /// going to be poked. /// </summary> ! [TaskAttribute("filename", Required = true)] [StringValidator(AllowEmpty=false)] public string FileName { ! get { return _fileName; } set { _fileName = value; } } --- 80,92 ---- #region Public Instance Properties + /// <summary> /// The file name of the file that contains the XML document that is /// going to be poked. /// </summary> ! [TaskAttribute("filename", Required=true)] [StringValidator(AllowEmpty=false)] public string FileName { ! get { return (_fileName != null) ? Project.GetFullPath(_fileName) : null; } set { _fileName = value; } } *************** *** 97,101 **** /// The XPath expression used to select which nodes are to be modified. /// </summary> ! [TaskAttribute("xpath", Required = true)] [StringValidator(AllowEmpty=false)] public string XPath { --- 95,99 ---- /// The XPath expression used to select which nodes are to be modified. /// </summary> ! [TaskAttribute("xpath", Required=true)] [StringValidator(AllowEmpty=false)] public string XPath { *************** *** 107,111 **** /// The value that replaces the contents of the selected nodes. /// </summary> ! [TaskAttribute("value", Required = true)] [StringValidator(AllowEmpty=false)] public string Value { --- 105,109 ---- /// The value that replaces the contents of the selected nodes. /// </summary> ! [TaskAttribute("value", Required=true)] [StringValidator(AllowEmpty=false)] public string Value { *************** *** 113,116 **** --- 111,115 ---- set { _value = value; } } + #endregion Public Instance Properties *************** *** 121,125 **** /// </summary> protected override void ExecuteTask() { - try { XmlDocument document = LoadDocument(FileName); --- 120,123 ---- *************** *** 132,153 **** SaveDocument(document, FileName); } ! } ! catch (BuildException ex) { throw ex; ! } ! catch (Exception ex) { ! string unhandledExceptionMessage = string.Format( CultureInfo.InvariantCulture, ! "Could not poke at XML file because an unhandled" + ! " exception was thrown. The underlying exception" + ! " message was '{0}'.", ! ex.Message ! ); ! throw new BuildException( ! unhandledExceptionMessage, ! Location, ! ex ! ); } } --- 130,142 ---- SaveDocument(document, FileName); } ! } catch (BuildException ex) { throw ex; ! } catch (Exception ex) { string unhandledExceptionMessage = string.Format( CultureInfo.InvariantCulture, ! "Could not poke at XML file '{0}'.", FileName); ! ! throw new BuildException(unhandledExceptionMessage, Location, ! ex); } } *************** *** 155,158 **** --- 144,148 ---- #region Private Instance Methods + /// <summary> /// Loads an XML document from a file on disk. *************** *** 162,205 **** /// </param> /// <returns> ! /// A <see cref="System.Xml.XmlDocument">document</see> containing ! /// the document object modem representing the file. /// </returns> private XmlDocument LoadDocument(string fileName) { - XmlDocument document = null; try { ! Log( Level.Verbose, "{0}Attempting to load XML document in the file '{1}'.", LogPrefix, ! FileName ); document = new XmlDocument(); ! document.Load(FileName); ! Log( Level.Verbose, "{0}XML document in file '{1}' loaded successfully.", LogPrefix, ! FileName ); ! } catch (Exception ex) { - string unhandledExceptionMessage = string.Format( CultureInfo.InvariantCulture, ! "Failed to load the XML document '{0}' because of the" + ! " following reason '{1}'.", ! fileName, ! ex.Message ! ); ! throw new BuildException( ! unhandledExceptionMessage, ! Location, ! ex ! ); } - return document; } --- 152,186 ---- /// </param> /// <returns> ! /// An <see cref="System.Xml.XmlDocument" /> containing ! /// the document object model representing the file. /// </returns> private XmlDocument LoadDocument(string fileName) { XmlDocument document = null; try { ! Log(Level.Verbose, "{0}Attempting to load XML document in the file '{1}'.", LogPrefix, ! fileName ); document = new XmlDocument(); ! document.Load(fileName); ! Log(Level.Verbose, "{0}XML document in file '{1}' loaded successfully.", LogPrefix, ! fileName ); ! return document; } catch (Exception ex) { string unhandledExceptionMessage = string.Format( CultureInfo.InvariantCulture, ! "Failed to load the XML document '{0}'.", ! fileName); ! throw new BuildException(unhandledExceptionMessage, Location, ! ex); } } *************** *** 215,227 **** /// </param> /// <returns> ! /// A <see cref="System.Xml.XmlNodeList">node list</see> containing /// references to the nodes that matched the XPath expression. /// </returns> private XmlNodeList SelectNodes(string xpath, XmlDocument document) { - XmlNodeList nodes = null; try { ! Log( Level.Verbose, "{0}Selecting nodes with the XPath expression '{1}'.", LogPrefix, --- 196,207 ---- /// </param> /// <returns> ! /// An <see cref="System.Xml.XmlNodeList" /> containing /// references to the nodes that matched the XPath expression. /// </returns> private XmlNodeList SelectNodes(string xpath, XmlDocument document) { XmlNodeList nodes = null; try { ! Log(Level.Verbose, "{0}Selecting nodes with the XPath expression '{1}'.", LogPrefix, *************** *** 249,268 **** } } catch (Exception ex) { string unhandledExceptionMessage = string.Format( CultureInfo.InvariantCulture, ! "Failed to select nodes with the XPath expression '{0}'" + ! " because of the following reason '{1}'.", ! xpath, ! ex.Message ! ); ! throw new BuildException( ! unhandledExceptionMessage, ! Location, ! ex ! ); } - return nodes; } --- 229,242 ---- } + return nodes; } catch (Exception ex) { string unhandledExceptionMessage = string.Format( CultureInfo.InvariantCulture, ! "Failed to select nodes with the XPath expression '{0}'.", ! xpath); ! throw new BuildException(unhandledExceptionMessage, Location, ! ex); } } *************** *** 277,281 **** /// </param> private void UpdateNodes(XmlNodeList nodes, string value) { - Log( Level.Verbose, "{0}Updating nodes with the value '{1}'.", --- 251,254 ---- *************** *** 285,290 **** int index = 0; ! foreach ( XmlNode node in nodes) { ! Log( Level.Verbose, "{0}Updating node '{1}'.", LogPrefix, --- 258,263 ---- int index = 0; ! foreach (XmlNode node in nodes) { ! Log(Level.Verbose, "{0}Updating node '{1}'.", LogPrefix, *************** *** 312,351 **** /// </param> private void SaveDocument(XmlDocument document, string fileName) { - try { ! Log( Level.Verbose, ! "{0}Attempting to save XML document to the file '{1}'.", LogPrefix, ! FileName ); document.Save(fileName); ! Log( Level.Verbose, ! "{0}XML document saved to the file '{1}' successfully.", LogPrefix, ! FileName ); - } catch (Exception ex) { - string unhandledExceptionMessage = string.Format( CultureInfo.InvariantCulture, ! "Failed to save the XML document in to the file '{0}'" + ! " because of the following reason '{0}'.", ! fileName, ! ex.Message ! ); ! throw new BuildException( ! unhandledExceptionMessage, ! Location, ! ex ! ); } } - #endregion Private Instance Methods - } } --- 285,314 ---- /// </param> private void SaveDocument(XmlDocument document, string fileName) { try { ! Log(Level.Verbose, ! "{0}Attempting to save XML document to '{1}'.", LogPrefix, ! fileName ); document.Save(fileName); ! Log(Level.Verbose, ! "{0}XML document successfully saved to '{1}'.", LogPrefix, ! fileName ); } catch (Exception ex) { string unhandledExceptionMessage = string.Format( CultureInfo.InvariantCulture, ! "Failed to save the XML document to '{0}'.", ! fileName); ! throw new BuildException(unhandledExceptionMessage, Location, ! ex); } } + #endregion Private Instance Methods } } |