2004-05-06 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaException.cs
1 // Author: Dwivedi, Ajay kumar\r
2 //            Adwiv@Yahoo.com\r
3 using System;\r
4 using System.Runtime.Serialization;\r
5 \r
6 \r
7 namespace System.Xml.Schema\r
8 {\r
9         /// <summary>\r
10         /// Summary description for XmlSchemaException.\r
11         /// </summary>\r
12         [Serializable]\r
13         public class XmlSchemaException : System.SystemException\r
14         {\r
15                 //fields\r
16                 private bool hasLineInfo;\r
17                 private int lineNumber;\r
18                 private int linePosition;\r
19                 private XmlSchemaObject sourceObj;\r
20                 private string sourceUri;\r
21 \r
22                 protected XmlSchemaException(SerializationInfo info, StreamingContext context)\r
23                         : base (info, context)\r
24                 {\r
25                         hasLineInfo = true;\r
26                         this.lineNumber = info.GetInt32 ("lineNumber");\r
27                         this.linePosition = info.GetInt32 ("linePosition");\r
28                         this.sourceUri = info.GetString ("sourceUri");\r
29                         this.sourceObj = info.GetValue ("sourceObj", typeof (XmlSchemaObject)) as XmlSchemaObject;\r
30                 }\r
31                 \r
32                 internal XmlSchemaException(string message, int lineNumber, int linePosition,\r
33                         XmlSchemaObject sourceObject, string sourceUri, Exception innerException)\r
34                         : base(message, innerException)\r
35                 {\r
36                         hasLineInfo = true;\r
37                         this.lineNumber         = lineNumber;\r
38                         this.linePosition       = linePosition;\r
39                         this.sourceObj          = sourceObject;\r
40                         this.sourceUri          = sourceUri;\r
41                 }\r
42 \r
43                 internal XmlSchemaException(string message, object sender,\r
44                         string sourceUri, XmlSchemaObject sourceObject, Exception innerException)\r
45                         : base(message, innerException)\r
46                 {\r
47                         IXmlLineInfo li = sender as IXmlLineInfo;\r
48                         if (li != null && li.HasLineInfo ()) {\r
49                                 hasLineInfo = true;\r
50                                 this.lineNumber = li.LineNumber;\r
51                                 this.linePosition = li.LinePosition;\r
52                         }\r
53                         this.sourceObj = sourceObject;\r
54                 }\r
55 \r
56                 internal XmlSchemaException(string message, XmlSchemaObject sourceObject,\r
57                         Exception innerException)\r
58                         : base(message, innerException)\r
59                 {\r
60                         hasLineInfo = true;\r
61                         this.lineNumber = sourceObject.LineNumber;\r
62                         this.linePosition = sourceObject.LinePosition;\r
63                         this.sourceObj  =       sourceObject;\r
64                         this.sourceUri  =       sourceObject.SourceUri;\r
65                 }\r
66 \r
67                 public XmlSchemaException(string message, Exception innerException)\r
68                         : base(message,innerException){}\r
69 \r
70                 // Properties\r
71                 public int LineNumber \r
72                 { \r
73                         get{ return this.lineNumber;} \r
74                 }\r
75                 public int LinePosition \r
76                 { \r
77                         get{ return this.linePosition;} \r
78                 }\r
79                 public XmlSchemaObject SourceSchemaObject \r
80                 {\r
81                         get{ return this.sourceObj; } \r
82                 }\r
83                 public string SourceUri \r
84                 { \r
85                         get{ return this.sourceUri; } \r
86                 }\r
87 \r
88                 public override string Message\r
89                 {\r
90                         get {\r
91                                 string msg = "XmlSchema error: " + base.Message;\r
92                                 if (hasLineInfo)\r
93                                         msg += String.Format (" XML {0} Line {1}, Position {2}.",\r
94                                                 (sourceUri != null && sourceUri != "") ? "URI: " + sourceUri + " ." : "",\r
95                                                 lineNumber,\r
96                                                 linePosition);\r
97                                 if (sourceObj != null)\r
98                                         msg += String.Format (" Related schema item SourceUri: {0}, Line {1}, Position {2}.",\r
99                                                 sourceObj.SourceUri, sourceObj.LineNumber, sourceObj.LinePosition);\r
100                                 return msg;\r
101                         }\r
102                 }\r
103 \r
104                 // Methods\r
105                 public override void GetObjectData(SerializationInfo info, StreamingContext context)\r
106                 {\r
107                         base.GetObjectData (info, context);\r
108                         info.AddValue ("lineNumber", lineNumber);\r
109                         info.AddValue ("linePosition", linePosition);\r
110                         info.AddValue ("sourceUri", sourceUri);\r
111                         info.AddValue ("sourceObj", sourceObj);\r
112                 }\r
113         }\r
114 }\r