2002-11-29 Ville Palo <vi64pa@koti.soon.fi>
authorVille Palo <ville@mono-cvs.ximian.com>
Fri, 29 Nov 2002 21:06:20 +0000 (21:06 -0000)
committerVille Palo <ville@mono-cvs.ximian.com>
Fri, 29 Nov 2002 21:06:20 +0000 (21:06 -0000)
* System.Xml/XmlDataDocument.cs: Started to implement.

svn path=/trunk/mcs/; revision=9267

mcs/class/System.Data/ChangeLog
mcs/class/System.Data/System.Xml/XmlDataDocument.cs

index c57383ea7e987efcd68e52bd4c8c55d0383972b0..859b64d040c9d7ae6b880d39ad2d939228db0389 100644 (file)
@@ -1,3 +1,7 @@
+2002-11-29  Ville Palo <vi64pa@koti.soon.fi>
+
+       * System.Xml/XmlDataDocument.cs: Started to implement.
+       
 2002-11-26  Tim Coleman <tim@timcoleman.com>
        * System.Data.SqlClient/SqlCommand.cs:
        * System.Data.SqlClient/SqlConnection.cs:
index 8b028c96e7fa5eda0015be68c230233fe7392740..ba28072894e82b9b9a9c39e5e47b26cf36398122 100644 (file)
@@ -10,6 +10,7 @@
 //
 // Author:
 //     Daniel Morgan <danmorg@sc.rr.com>
+//     Ville Palo <vi64pa@koti.soon.fi>
 //
 // (c)copyright 2002 Daniel Morgan
 //
@@ -21,6 +22,7 @@ using System.Data;
 using System.IO;
 using System.Text;
 using System.Xml.XPath;
+using System.Collections;
 
 namespace System.Xml {
 
@@ -29,13 +31,17 @@ namespace System.Xml {
                #region Fields
 
                private DataSet dataSet;
+               private bool isReadOnly = false;
+
+               private int dataRowID = 1;
+               private ArrayList dataRowIDList = new ArrayList ();
 
                #endregion // Fields
 
                #region Constructors
 
                public XmlDataDocument() {
-                       dataSet = new DataSet();
+                       dataSet = new DataSet();                        
                }
 
                public XmlDataDocument(DataSet dataset) {
@@ -77,7 +83,7 @@ namespace System.Xml {
                public override bool IsReadOnly {
                        [MonoTODO]
                        get {
-                               throw new NotImplementedException();
+                               return isReadOnly;
                        }
 
                }
@@ -173,60 +179,163 @@ namespace System.Xml {
 
                // get the DataRow associated with the XmlElement
                [MonoTODO]
-               public DataRow GetRowFromElement(XmlElement e) \r
-               {\r
-                       throw new NotImplementedException();\r
-               }\r
-\r
-               #region overload Load methods\r
-\r
-               [MonoTODO]\r
-               public override void Load(Stream inStream) {\r
-                       throw new NotImplementedException();\r
-               }\r
-\r
-               [MonoTODO]\r
-               public override void Load(string filename) {\r
-                       throw new NotImplementedException();\r
-               }\r
-\r
-               [MonoTODO]\r
-               public override void Load(TextReader txtReader) {\r
-                       throw new NotImplementedException();\r
-               }\r
-\r
-               [MonoTODO]\r
-               public override void Load(XmlReader reader) {\r
-                       throw new NotImplementedException();\r
-               }\r
-\r
-               #endregion // overloaded Load methods\r
-\r
-               [MonoTODO]\r
-               public override void WriteContentTo(XmlWriter xw) {\r
-                       throw new NotImplementedException();\r
-               }\r
-\r
-               [MonoTODO]\r
-               public override void WriteTo(XmlWriter w) {\r
-                       throw new NotImplementedException();\r
-               }\r
+               public DataRow GetRowFromElement(XmlElement e)
+               {
+                       throw new NotImplementedException();
+               }
+
+               #region overload Load methods
+
+               [MonoTODO]
+               public override void Load(Stream inStream) {
+                       
+               }
+
+               [MonoTODO]
+               public override void Load(string filename) {
+                       throw new NotImplementedException();
+               }
+
+               [MonoTODO]
+               public override void Load(TextReader txtReader) {
+                       throw new NotImplementedException();
+               }
+
+               [MonoTODO]
+               public override void Load(XmlReader reader) {
+                       
+                       DataTable dt = null;
+
+                       // For reading xml to XmlDocument
+                       XmlTextReader textReader = new XmlTextReader (
+                               reader.BaseURI);
+
+                       if (reader.NodeType != XmlNodeType.Element)
+                               reader.MoveToContent ();
+
+                       // TODO: Findout which exception should be throwen
+                       if (reader.NodeType != XmlNodeType.Element)
+                               throw new Exception ();
+
+                       if (dataSet.DataSetName != reader.Name)
+                               throw new Exception ();
+
+                       // read to next element
+                       while (reader.Read () && reader.NodeType != XmlNodeType.Element);
+
+                       do {
+
+                               // Find right table from tablecollection
+                               for (int i = 0; i < DataSet.Tables.Count && dt == null; i++) {
+                                       if (reader.Name == DataSet.Tables [i].TableName) {
+                                               dt = DataSet.Tables [i];
+                                               dt.ColumnChanged += new DataColumnChangeEventHandler (OnDataTableColumnChanged);
+
+                                       }
+                               }
+                               
+                               // TODO: Findout what kind of exception 
+                               if (dt == null) 
+                                       throw new Exception (); // there were no correct table
+                               
+                               while ((reader.NodeType != XmlNodeType.EndElement ||
+                                       reader.Name != dt.TableName) && reader.Read()) {
+                                       
+                                       switch (reader.NodeType) {
+                                               
+                                       case XmlNodeType.Element:
+                                               dt.Rows.Add (LoadRow (reader, dt.NewRow ()));
+                                               
+                                               break;
+                                       default:
+                                               break;
+                                       }                       
+                               }               
+                       } while (reader.Read ());
+
+                       base.Load (textReader);
+               }
+               
+               #endregion // overloaded Load methods
+
+               [MonoTODO]
+               public override void WriteContentTo(XmlWriter xw) {
+                       base.WriteContentTo (xw);
+               }
+
+               [MonoTODO]
+               public override void WriteTo(XmlWriter w) {
+                       base.WriteTo (w);
+               }
 
                #endregion // Public Methods
 
                #region Protected Methods
 
                [MonoTODO]
-               protected override XPathNavigator CreateNavigator(XmlNode node) {\r
-                       throw new NotImplementedException();\r
-               }\r
+               protected internal override XPathNavigator CreateNavigator(XmlNode node) {
+                       throw new NotImplementedException();
+               }
 
                [MonoTODO]
-               public new XPathNavigator CreateNavigator() {\r
-                       throw new NotImplementedException();\r
-               }\r
+               public new XPathNavigator CreateNavigator() {
+                       throw new NotImplementedException();
+               }
 
                #endregion // Protected Methods
+               
+               #region Private Methods
+
+               [MonoTODO]
+               private void OnDataTableColumnChanged(object sender, 
+                                                            DataColumnChangeEventArgs eventArgs)
+               {
+                       // row is not yet in datatable
+                       if (eventArgs.Row.XmlRowID == 0)
+                               return;
+
+                       // TODO: Here should be some kind of error checking.
+                       GetElementsByTagName (eventArgs.Column.ToString ()) [dataRowIDList.IndexOf (
+                               eventArgs.Row.XmlRowID)].InnerText = newValue;
+                       
+                       
+               }
+       
+               [MonoTODO]
+               private static void OnDataTableRowDeleted(object sender,
+                                                         DataRowChangeEventArgs eventArgs)
+               {
+                       throw new NotImplementedException();
+               }
+               
+               [MonoTODO]
+               private DataRow LoadRow (XmlReader reader, DataRow row)
+               {
+                       // This method returns DataRow filled by values
+                       // from xmldocument
+                       string rowname = reader.Name;
+                       string column = "";
+                                       
+                       if (reader.NodeType == XmlNodeType.Element)
+                               column = reader.Name;
+
+                       reader.Read ();
+
+                       if (reader.NodeType == XmlNodeType.Text) {
+
+                                       string val = reader.Value;
+                                       if (row.Table.Columns.Contains (column))
+                                               row [column] = val;
+                       }
+
+                       // Every row must have unique id.
+                       row.XmlRowID = dataRowID;
+                       dataRowIDList.Add (dataRowID);
+                       dataRowID++;                                    
+
+                       return row;
+               }
 
+               #endregion
        }
 }