implementing XmlElement.SetAttributeNode(localName, namespaceURI) and
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaEnumerationFacet.cs
1 // Author: Dwivedi, Ajay kumar\r
2 //            Adwiv@Yahoo.com\r
3 using System;\r
4 using System.Xml;\r
5 \r
6 namespace System.Xml.Schema\r
7 {\r
8         /// <summary>\r
9         /// Summary description for XmlSchemaEnumerationFacet.\r
10         /// </summary>\r
11         public class XmlSchemaEnumerationFacet : XmlSchemaFacet\r
12         {\r
13                 private static string xmlname = "enumeration";\r
14                 public XmlSchemaEnumerationFacet()\r
15                 {\r
16                 }\r
17 \r
18                 //<enumeration\r
19                 //  id = ID\r
20                 //  value = anySimpleType\r
21                 //  {any attributes with non-schema namespace . . .}>\r
22                 //  Content: (annotation?)\r
23                 //</enumeration>\r
24                 internal static XmlSchemaEnumerationFacet Read(XmlSchemaReader reader, ValidationEventHandler h)\r
25                 {\r
26                         XmlSchemaEnumerationFacet enumeration = new XmlSchemaEnumerationFacet();\r
27                         reader.MoveToElement();\r
28 \r
29                         if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname)\r
30                         {\r
31                                 error(h,"Should not happen :1: XmlSchemaEnumerationFacet.Read, name="+reader.Name,null);\r
32                                 reader.Skip();\r
33                                 return null;\r
34                         }\r
35 \r
36                         enumeration.LineNumber = reader.LineNumber;\r
37                         enumeration.LinePosition = reader.LinePosition;\r
38                         enumeration.SourceUri = reader.BaseURI;\r
39 \r
40                         while(reader.MoveToNextAttribute())\r
41                         {\r
42                                 if(reader.Name == "id")\r
43                                 {\r
44                                         enumeration.Id = reader.Value;\r
45                                 }\r
46                                 else if(reader.Name == "value")\r
47                                 {\r
48                                         enumeration.Value = reader.Value;\r
49                                 }\r
50                                 else if((reader.NamespaceURI == "" && reader.Name != "xmlns") || reader.NamespaceURI == XmlSchema.Namespace)\r
51                                 {\r
52                                         error(h,reader.Name + " is not a valid attribute for "+xmlname,null);\r
53                                 }\r
54                                 else\r
55                                 {\r
56                                         XmlSchemaUtil.ReadUnhandledAttribute(reader,enumeration);\r
57                                 }\r
58                         }\r
59                         \r
60                         reader.MoveToElement();\r
61                         if(reader.IsEmptyElement)\r
62                                 return enumeration;\r
63 \r
64                         //  Content: (annotation?)\r
65                         int level = 1;\r
66                         while(reader.ReadNextElement())\r
67                         {\r
68                                 if(reader.NodeType == XmlNodeType.EndElement)\r
69                                 {\r
70                                         if(reader.LocalName != xmlname)\r
71                                                 error(h,"Should not happen :2: XmlSchemaEnumerationFacet.Read, name="+reader.Name,null);\r
72                                         break;\r
73                                 }\r
74                                 if(level <= 1 && reader.LocalName == "annotation")\r
75                                 {\r
76                                         level = 2;      //Only one annotation\r
77                                         XmlSchemaAnnotation annotation = XmlSchemaAnnotation.Read(reader,h);\r
78                                         if(annotation != null)\r
79                                                 enumeration.Annotation = annotation;\r
80                                         continue;\r
81                                 }\r
82                                 reader.RaiseInvalidElementError();\r
83                         }                       \r
84                         return enumeration;\r
85                 }\r
86         }\r
87 }\r