2004-05-06 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / System.XML / System.Xml.Xsl / XsltException.cs
1 //
2 // System.Xml.Xsl.XsltException.cs
3 //
4 // Authors:
5 //  Tim Coleman (tim@timcoleman.com)
6 //  Andreas Nahr (ClassDevelopment@A-SoftTech.com)
7 //
8 // (C) Copyright 2002 Tim Coleman
9 // (C) 2003 Andreas Nahr
10 //
11 \r
12 using System;\r
13 using System.Runtime.Serialization;\r
14 using System.Xml.XPath;\r
15 \r
16 namespace System.Xml.Xsl\r
17 {\r
18         [Serializable]\r
19         public class XsltException : SystemException\r
20         {\r
21                 #region Fields\r
22 \r
23                 int lineNumber;\r
24                 int linePosition;\r
25                 string sourceUri;\r
26 \r
27                 #endregion\r
28 \r
29                 #region Constructors\r
30 \r
31                 public XsltException (string message, Exception innerException)\r
32                         : base (message, innerException)\r
33                 {\r
34 //                      this.message = message;\r
35                 }\r
36 \r
37                 protected XsltException (SerializationInfo info, StreamingContext context)\r
38                 {\r
39                         lineNumber = info.GetInt32 ("lineNumber");\r
40                         linePosition = info.GetInt32 ("linePosition");\r
41                         sourceUri = info.GetString ("sourceUri");\r
42                 }
43
44                 internal XsltException (string message, Exception innerException, int lineNumber, int linePosition, string sourceUri)
45                         : base (message, innerException)\r
46                 {\r
47                         this.lineNumber = lineNumber;\r
48                         this.linePosition = linePosition;\r
49                         this.sourceUri = sourceUri;\r
50                 }\r
51 \r
52                 internal XsltException (string message, Exception innerException, XPathNavigator nav)
53                         : base (message, innerException)\r
54                 {\r
55                         IXmlLineInfo li = nav as IXmlLineInfo;\r
56                         this.lineNumber = li != null ? li.LineNumber : 0;\r
57                         this.linePosition = li != null ? li.LinePosition : 0;\r
58                         this.sourceUri = nav != null ? nav.BaseURI : String.Empty;\r
59                 }\r
60 \r
61                 #endregion\r
62 \r
63                 #region Properties\r
64 \r
65                 public int LineNumber {\r
66                         get { return lineNumber; }\r
67                 }\r
68 \r
69                 public int LinePosition {\r
70                         get { return linePosition; }\r
71                 }\r
72 \r
73                 public override string Message {\r
74                         get {\r
75                                 string msg = base.Message;\r
76                                 if (sourceUri != null)\r
77                                         msg += " " + sourceUri;\r
78                                 if (lineNumber != 0)\r
79                                         msg += " line " + lineNumber;\r
80                                 if (linePosition != 0)\r
81                                         msg += ", position " + linePosition;\r
82                                 return msg;\r
83                         }\r
84                 }\r
85 \r
86                 public string SourceUri {\r
87                         get { return sourceUri; }\r
88                 }\r
89 \r
90                 #endregion\r
91 \r
92                 #region Methods\r
93 \r
94                 public override void GetObjectData (SerializationInfo info, StreamingContext context)\r
95                 {\r
96                         base.GetObjectData (info, context);\r
97                         info.AddValue ("lineNumber", lineNumber);\r
98                         info.AddValue ("linePosition", linePosition);\r
99                         info.AddValue ("sourceUri", sourceUri);\r
100                 }\r
101 \r
102                 #endregion\r
103         }\r
104 }\r