2002-06-10 Dwivedi, Ajay kumar <adwiv@yahoo.com>
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaAnnotation.cs
1 // Author: Dwivedi, Ajay kumar\r
2 //            Adwiv@Yahoo.com\r
3 using System;\r
4 using System.Xml;\r
5 using System.Xml.Serialization;\r
6 \r
7 namespace System.Xml.Schema\r
8 {\r
9         /// <summary>\r
10         /// Summary description for XmlSchemaAnnotation.\r
11         /// </summary>\r
12         public class XmlSchemaAnnotation : XmlSchemaObject\r
13         {\r
14                 private string id;\r
15                 private XmlSchemaObjectCollection items;\r
16                 private XmlAttribute[] unhandledAttributes;\r
17                 private static string xmlname = "annotation";\r
18                 public XmlSchemaAnnotation()\r
19                 {\r
20                         items = new XmlSchemaObjectCollection();\r
21                 }\r
22 \r
23                 [System.Xml.Serialization.XmlAttribute("id")]\r
24                 public string Id \r
25                 {\r
26                         get{ return  id; } \r
27                         set{ id = value; }\r
28                 }\r
29                 \r
30                 [XmlElement("appinfo",typeof(XmlSchemaAppInfo),Namespace="http://www.w3.org/2001/XMLSchema")]\r
31                 [XmlElement("documentation",typeof(XmlSchemaDocumentation),Namespace="http://www.w3.org/2001/XMLSchema")]\r
32                 public XmlSchemaObjectCollection Items\r
33                 {\r
34                         get{ return items; }\r
35                 }\r
36                 \r
37                 [XmlAnyAttribute]\r
38                 public XmlAttribute[] UnhandledAttributes \r
39                 {\r
40                         get{ return  unhandledAttributes; } \r
41                         set{ unhandledAttributes = value; }\r
42                 }\r
43 \r
44                 [MonoTODO]\r
45                 internal int Compile(ValidationEventHandler h, XmlSchemaInfo info)\r
46                 {\r
47                         return 1;\r
48                 }\r
49                 \r
50                 [MonoTODO]\r
51                 internal int Validate(ValidationEventHandler h)\r
52                 {\r
53                         return 1;\r
54                 }\r
55 \r
56                 //<annotation\r
57                 //  id = ID\r
58                 //  {any attributes with non-schema namespace . . .}>\r
59                 //  Content: (appinfo | documentation)*\r
60                 //</annotation>\r
61                 internal static XmlSchemaAnnotation Read(XmlSchemaReader reader, ValidationEventHandler h)\r
62                 {\r
63                         XmlSchemaAnnotation annotation = new XmlSchemaAnnotation();\r
64                         reader.MoveToElement();\r
65 \r
66                         if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname)\r
67                         {\r
68                                 error(h,"Should not happen :1: XmlSchemaAnnotation.Read, name="+reader.Name,null);\r
69                                 reader.SkipToEnd();\r
70                                 return null;\r
71                         }\r
72 \r
73                         annotation.LineNumber = reader.LineNumber;\r
74                         annotation.LinePosition = reader.LinePosition;\r
75                         annotation.SourceUri = reader.BaseURI;\r
76 \r
77                         //Read Attributes\r
78                         while(reader.MoveToNextAttribute())\r
79                         {\r
80                                 if(reader.Name == "id")\r
81                                 {\r
82                                         annotation.Id = reader.Value;\r
83                                 }\r
84                                 else if(reader.NamespaceURI == "" || reader.NamespaceURI == XmlSchema.Namespace)\r
85                                 {\r
86                                         error(h,reader.Name + " is not a valid attribute for annotation",null);\r
87                                 }\r
88                                 else\r
89                                 {\r
90                                         //TODO: Add to Unhandled attributes\r
91                                 }\r
92                         }\r
93                         \r
94                         reader.MoveToElement();\r
95                         if(reader.IsEmptyElement)\r
96                                 return annotation;\r
97 \r
98                         //Content: (appinfo | documentation)*\r
99                         while(reader.ReadNextElement())\r
100                         {\r
101                                 if(reader.NodeType == XmlNodeType.EndElement)\r
102                                 {\r
103                                         if(reader.LocalName != xmlname)\r
104                                                 error(h,"Should not happen :2: XmlSchemaAnnotation.Read, name="+reader.Name,null);\r
105                                         break;\r
106                                 }\r
107                                 if(reader.LocalName == "appinfo")\r
108                                 {\r
109                                         XmlSchemaAppInfo appinfo = XmlSchemaAppInfo.Read(reader,h);\r
110                                         if(appinfo != null)\r
111                                                 annotation.items.Add(appinfo);\r
112                                         continue;\r
113                                 }\r
114                                 if(reader.LocalName == "documentation")\r
115                                 {\r
116                                         XmlSchemaDocumentation documentation = XmlSchemaDocumentation.Read(reader,h);\r
117                                         if(documentation != null)\r
118                                                 annotation.items.Add(documentation);\r
119                                         continue;\r
120                                 }\r
121                                 reader.RaiseInvalidElementError();\r
122                         }\r
123                         return annotation;\r
124                 }\r
125         }\r
126 }\r