72f4b82ad3a7898e936c5abcfbc59c4f846b461d
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaRedefine.cs
1 // Author: Dwivedi, Ajay kumar\r
2 //            Adwiv@Yahoo.com\r
3
4 //
5 // Permission is hereby granted, free of charge, to any person obtaining
6 // a copy of this software and associated documentation files (the
7 // "Software"), to deal in the Software without restriction, including
8 // without limitation the rights to use, copy, modify, merge, publish,
9 // distribute, sublicense, and/or sell copies of the Software, and to
10 // permit persons to whom the Software is furnished to do so, subject to
11 // the following conditions:
12 // 
13 // The above copyright notice and this permission notice shall be
14 // included in all copies or substantial portions of the Software.
15 // 
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 //
24 using System;\r
25 using System.Xml;\r
26 using System.Xml.Serialization;\r
27 \r
28 namespace System.Xml.Schema\r
29 {\r
30         /// <summary>\r
31         /// Summary description for XmlSchemaRedefine.\r
32         /// </summary>\r
33         public class XmlSchemaRedefine : XmlSchemaExternal\r
34         {\r
35                 private XmlSchemaObjectTable attributeGroups;\r
36                 private XmlSchemaObjectTable groups;\r
37                 private XmlSchemaObjectCollection items;\r
38                 private XmlSchemaObjectTable schemaTypes;\r
39                 const string xmlname = "redefine";\r
40 \r
41                 public XmlSchemaRedefine()\r
42                 {\r
43                         attributeGroups = new XmlSchemaObjectTable();\r
44                         groups = new XmlSchemaObjectTable();\r
45                         items = new XmlSchemaObjectCollection(this);\r
46                         schemaTypes = new XmlSchemaObjectTable();\r
47                 }\r
48                 \r
49                 [XmlElement("annotation",typeof(XmlSchemaAnnotation),Namespace=XmlSchema.Namespace)]\r
50                 [XmlElement("simpleType",typeof(XmlSchemaSimpleType),Namespace=XmlSchema.Namespace)]\r
51                 [XmlElement("complexType",typeof(XmlSchemaComplexType),Namespace=XmlSchema.Namespace)]\r
52                 [XmlElement("group",typeof(XmlSchemaGroup),Namespace=XmlSchema.Namespace)]\r
53                         //NOTE: AttributeGroup and not AttributeGroupRef\r
54                 [XmlElement("attributeGroup",typeof(XmlSchemaAttributeGroup),Namespace=XmlSchema.Namespace)]\r
55                 public XmlSchemaObjectCollection Items \r
56                 {\r
57                         get{ return items; }\r
58                 }\r
59 \r
60                 [XmlIgnore]\r
61                 public XmlSchemaObjectTable AttributeGroups \r
62                 {\r
63                         get{ return attributeGroups; }\r
64                 }\r
65                 \r
66                 [XmlIgnore]\r
67                 public XmlSchemaObjectTable SchemaTypes \r
68                 {\r
69                         get{ return schemaTypes; }\r
70                 }\r
71 \r
72                 [XmlIgnore]\r
73                 public XmlSchemaObjectTable Groups \r
74                 {\r
75                         get{ return groups; }\r
76                 }\r
77 //<redefine \r
78 //  id = ID \r
79 //  schemaLocation = anyURI \r
80 //  {any attributes with non-schema namespace . . .}>\r
81 //  Content: (annotation | (simpleType | complexType | group | attributeGroup))*\r
82 //</redefine>\r
83                 internal static XmlSchemaRedefine Read(XmlSchemaReader reader, ValidationEventHandler h)\r
84                 {\r
85                         XmlSchemaRedefine redefine = new XmlSchemaRedefine();\r
86                         reader.MoveToElement();\r
87 \r
88                         if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname)\r
89                         {\r
90                                 error(h,"Should not happen :1: XmlSchemaRedefine.Read, name="+reader.Name,null);\r
91                                 reader.Skip();\r
92                                 return null;\r
93                         }\r
94 \r
95                         redefine.LineNumber = reader.LineNumber;\r
96                         redefine.LinePosition = reader.LinePosition;\r
97                         redefine.SourceUri = reader.BaseURI;\r
98 \r
99                         while(reader.MoveToNextAttribute())\r
100                         {\r
101                                 if(reader.Name == "id")\r
102                                 {\r
103                                         redefine.Id = reader.Value;\r
104                                 }\r
105                                 else if(reader.Name == "schemaLocation")\r
106                                 {\r
107                                         redefine.SchemaLocation = reader.Value;\r
108                                 }\r
109                                 else if((reader.NamespaceURI == "" && reader.Name != "xmlns") || reader.NamespaceURI == XmlSchema.Namespace)\r
110                                 {\r
111                                         error(h,reader.Name + " is not a valid attribute for redefine",null);\r
112                                 }\r
113                                 else\r
114                                 {\r
115                                         XmlSchemaUtil.ReadUnhandledAttribute(reader,redefine);\r
116                                 }\r
117                         }\r
118 \r
119                         reader.MoveToElement();\r
120                         if(reader.IsEmptyElement)\r
121                                 return redefine;\r
122 \r
123                         //(annotation | (simpleType | complexType | group | attributeGroup))*\r
124                         while(reader.ReadNextElement())\r
125                         {\r
126                                 if(reader.NodeType == XmlNodeType.EndElement)\r
127                                 {\r
128                                         if(reader.LocalName != xmlname)\r
129                                                 error(h,"Should not happen :2: XmlSchemaRedefine.Read, name="+reader.Name,null);\r
130                                         break;\r
131                                 }\r
132                                 if(reader.LocalName == "annotation")\r
133                                 {\r
134                                         XmlSchemaAnnotation annotation = XmlSchemaAnnotation.Read(reader,h);\r
135                                         if(annotation != null)\r
136                                                 redefine.items.Add(annotation);\r
137                                         continue;\r
138                                 }\r
139                                 if(reader.LocalName == "simpleType")\r
140                                 {\r
141                                         XmlSchemaSimpleType simpleType = XmlSchemaSimpleType.Read(reader,h);\r
142                                         if(simpleType != null)\r
143                                                 redefine.items.Add(simpleType);\r
144                                         continue;\r
145                                 }\r
146                                 if(reader.LocalName == "complexType")\r
147                                 {\r
148                                         XmlSchemaComplexType complexType = XmlSchemaComplexType.Read(reader,h);\r
149                                         if(complexType != null)\r
150                                                 redefine.items.Add(complexType);\r
151                                         continue;\r
152                                 }\r
153                                 if(reader.LocalName == "group")\r
154                                 {\r
155                                         XmlSchemaGroup group = XmlSchemaGroup.Read(reader,h);\r
156                                         if(group != null)\r
157                                                 redefine.items.Add(group);\r
158                                         continue;\r
159                                 }\r
160                                 if(reader.LocalName == "attributeGroup")\r
161                                 {\r
162                                         XmlSchemaAttributeGroup attributeGroup = XmlSchemaAttributeGroup.Read(reader,h);\r
163                                         if(attributeGroup != null)\r
164                                                 redefine.items.Add(attributeGroup);\r
165                                         continue;\r
166                                 }\r
167                                 reader.RaiseInvalidElementError();\r
168                         }\r
169                         return redefine;\r
170                 }\r
171         }\r
172 }\r