Implement incomplete methods - .ctors, get_Value and CreateReader
[mono.git] / mcs / class / System.Data / System.Data.SqlTypes / SqlXml.cs
1 //
2 // System.Data.SqlTypes.SqlXml
3 //
4 // Author:
5 //      Umadevi S (sumadevi@novell.com)
6 //
7 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 // 
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 // 
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28
29 using System;
30 using System.IO;
31 using System.Xml;
32 using System.Xml.Schema;
33 using System.Globalization;
34 using System.Threading;
35 using System.Xml.Serialization;
36 using System.Text;
37
38 #if NET_2_0
39
40 namespace System.Data.SqlTypes
41 {
42         [SerializableAttribute]
43         [XmlSchemaProvider ("GetXsdType")]
44         public sealed class SqlXml : INullable, IXmlSerializable
45         {
46                 bool notNull;
47                 string xmlValue;
48                 
49                 public SqlXml ()
50                 {
51                         notNull = false;
52                         xmlValue = null;
53                 }
54
55                 public SqlXml (Stream value)
56                 {
57                         if (value == null) {
58                                 notNull = false;
59                                 xmlValue = null;
60                         } else {
61                                 int len = (int) value.Length;
62                                 int bufSize = 8192;     
63                                 StringBuilder sb = new StringBuilder (len);
64                         
65                                 value.Position = 0;
66                                 // Now read value into a byte buffer.
67                                 byte [] bytes = null;
68                                 
69                                 if (len < bufSize)
70                                         bufSize = len;
71                                 bytes = new byte [bufSize];
72
73                                 while (len > 0) {
74                                     // Read may return anything from 0 to numBytesToRead.
75                                     int n = value.Read(bytes, 0, bufSize);
76                                         sb.Append (Encoding.Unicode.GetString (bytes, 0, n));
77                                         
78                                     // The end of the file is reached.
79                                     if (n==0)
80                                         break;
81                                     len -= n;
82                                 }
83                                 xmlValue = sb.ToString ();
84                                 notNull = true;
85                         }
86                 }
87
88                 public SqlXml (XmlReader value)
89                 {
90                         if (value == null) {
91                                 notNull = false;
92                                 xmlValue = null;
93                         } else {
94                                 value.MoveToContent ();
95                                 xmlValue = value.ReadOuterXml();
96                                 notNull = true;
97                         }
98                 }
99
100                 public bool IsNull {
101                         get { return !notNull; }
102                 }
103
104                 public static SqlXml Null {
105                         get {
106                                 return new SqlXml ();
107                         }
108                 }
109
110                 public string Value {
111                         get {
112                                 return xmlValue;
113                         }
114                 }
115
116                 public static XmlQualifiedName GetXsdType (XmlSchemaSet schemaSet)
117                 {
118                         XmlQualifiedName qualifiedName = new XmlQualifiedName ("anyType", "http://www.w3.org/2001/XMLSchema");
119                         return qualifiedName;
120                 }
121
122                 public XmlReader CreateReader ()
123                 {
124                         if (notNull)
125                                 return XmlTextReader.Create (new StringReader (xmlValue));
126                         else
127                                 return null; 
128                 }
129
130                 [MonoTODO]
131                 XmlSchema IXmlSerializable.GetSchema ()
132                 {
133                         throw new NotImplementedException ();
134                 }
135                 
136                 [MonoTODO]
137                 void IXmlSerializable.ReadXml (XmlReader r)
138                 {
139                         throw new NotImplementedException ();
140                 }
141                 
142                 [MonoTODO]
143                 void IXmlSerializable.WriteXml (XmlWriter writer) 
144                 {
145                         throw new NotImplementedException ();
146                 }
147         }
148 }
149
150 #endif