Removal of NET_1_1 defines and some NET_2_0; Both defines are true these days in...
[mono.git] / mcs / class / System.XML / System.Xml.Schema / XmlSchemaSimpleTypeUnion.cs
index dfe50c1d0c905ea1736279e01381c6aa0c4277d4..f4d1c20759f7b5bc295b2e58cc0a9df5404121e0 100644 (file)
@@ -1,5 +1,5 @@
-// Author: Dwivedi, Ajay kumar\r
-//            Adwiv@Yahoo.com\r
+// Author: Dwivedi, Ajay kumar
+//            Adwiv@Yahoo.com
 
 //
 // Permission is hereby granted, free of charge, to any person obtaining
 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
-using System;\r
-using System.Collections;\r
-using System.Xml;\r
-using System.Xml.Serialization;\r
-\r
-namespace System.Xml.Schema\r
-{\r
-       /// <summary>\r
-       /// Summary description for XmlSchemaSimpleTypeUnion.\r
-       /// </summary>\r
-       public class XmlSchemaSimpleTypeUnion : XmlSchemaSimpleTypeContent\r
-       {\r
-               private XmlSchemaObjectCollection baseTypes;\r
-               private XmlQualifiedName[] memberTypes;\r
-               const string xmlname = "union";\r
-               private object [] validatedTypes;\r
-#if NET_2_0\r
-               private XmlSchemaSimpleType [] validatedSchemaTypes;\r
-#endif\r
-\r
-               public XmlSchemaSimpleTypeUnion()\r
-               {\r
-                       baseTypes = new XmlSchemaObjectCollection();\r
-               }\r
-\r
-               [XmlElement("simpleType",typeof(XmlSchemaSimpleType))]\r
-               public XmlSchemaObjectCollection BaseTypes \r
-               {\r
-                       get{ return baseTypes; }\r
-               }\r
-\r
-               [System.Xml.Serialization.XmlAttribute("memberTypes")]\r
-               public XmlQualifiedName[] MemberTypes\r
-               {\r
-                       get{ return  memberTypes; } \r
-                       set{ memberTypes = value; }\r
-               }\r
-\r
-#if NET_2_0\r
-               [XmlIgnore]\r
-               public XmlSchemaSimpleType [] BaseMemberTypes {\r
-                       get { return validatedSchemaTypes; }\r
-               }\r
-#endif\r
-\r
-               internal object [] ValidatedTypes\r
-               {\r
-                       get { return validatedTypes; }\r
-               }\r
-\r
-               /// <remarks>\r
-               /// 1. Circular union type definition is disallowed. (WTH is this?)\r
-               /// 2. id must be a valid ID\r
-               /// </remarks>\r
-               internal override int Compile(ValidationEventHandler h, XmlSchema schema)\r
-               {\r
-                       // If this is already compiled this time, simply skip.\r
-                       if (CompilationId == schema.CompilationId)\r
-                               return 0;\r
-\r
-#if NET_2_0\r
-                       foreach (XmlSchemaObject obj in BaseTypes)\r
-                               obj.Parent = this;\r
-#endif\r
-\r
-                       errorCount = 0;\r
-\r
-                       int count = BaseTypes.Count;\r
-\r
-                       foreach(XmlSchemaObject obj in baseTypes)\r
-                       {\r
-                               if(obj != null && obj is XmlSchemaSimpleType)\r
-                               {\r
-                                       XmlSchemaSimpleType stype = (XmlSchemaSimpleType) obj;\r
-                                       errorCount += stype.Compile(h, schema);\r
-                               }\r
-                               else\r
-                               {\r
-                                       error(h, "baseTypes can't have objects other than a simpletype");\r
-                               }\r
-                       }\r
-                       \r
-                       if(memberTypes!=null)\r
-                       {\r
-                               for(int i=0; i< memberTypes.Length; i++)\r
-                               {\r
-                                       if(memberTypes[i] == null || !XmlSchemaUtil.CheckQName(MemberTypes[i]))\r
-                                       {\r
-                                               error (h,"Invalid membertype");\r
-                                               memberTypes[i] = XmlQualifiedName.Empty;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               count += MemberTypes.Length;\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       if(count == 0)\r
-                               error(h, "Atleast one simpletype or membertype must be present");\r
-\r
-                       XmlSchemaUtil.CompileID(Id,this,schema.IDCollection,h);\r
-\r
-                       \r
-\r
-                       this.CompilationId = schema.CompilationId;\r
-                       return errorCount;\r
-               }\r
-               \r
-               internal override int Validate(ValidationEventHandler h, XmlSchema schema)\r
-               {\r
-                       if (IsValidated (schema.ValidationId))\r
-                               return errorCount;\r
-\r
-                       ArrayList al = new ArrayList ();\r
-                       // Validate MemberTypes\r
-                       if (MemberTypes != null) {\r
-                               foreach (XmlQualifiedName memberTypeName in MemberTypes) {\r
-                                       object type = null;\r
-                                       XmlSchemaType xstype = schema.FindSchemaType (memberTypeName) as XmlSchemaSimpleType;\r
-                                       if (xstype != null) {\r
-                                               errorCount += xstype.Validate (h, schema);\r
-                                               type = xstype;\r
-                                       } else if (memberTypeName == XmlSchemaComplexType.AnyTypeName) {\r
+using System;
+using System.Collections;
+using System.Xml;
+using System.Xml.Serialization;
+
+namespace System.Xml.Schema
+{
+       /// <summary>
+       /// Summary description for XmlSchemaSimpleTypeUnion.
+       /// </summary>
+       public class XmlSchemaSimpleTypeUnion : XmlSchemaSimpleTypeContent
+       {
+               private XmlSchemaObjectCollection baseTypes;
+               private XmlQualifiedName[] memberTypes;
+               const string xmlname = "union";
+               private object [] validatedTypes;
+#if NET_2_0
+               private XmlSchemaSimpleType [] validatedSchemaTypes;
+#endif
+
+               public XmlSchemaSimpleTypeUnion()
+               {
+                       baseTypes = new XmlSchemaObjectCollection();
+               }
+
+               [XmlElement("simpleType",typeof(XmlSchemaSimpleType))]
+               public XmlSchemaObjectCollection BaseTypes 
+               {
+                       get{ return baseTypes; }
+               }
+
+               [System.Xml.Serialization.XmlAttribute("memberTypes")]
+               public XmlQualifiedName[] MemberTypes
+               {
+                       get{ return  memberTypes; } 
+                       set{ memberTypes = value; }
+               }
+
+#if NET_2_0
+               [XmlIgnore]
+               public XmlSchemaSimpleType [] BaseMemberTypes {
+                       get { return validatedSchemaTypes; }
+               }
+#endif
+
+               internal object [] ValidatedTypes
+               {
+                       get { return validatedTypes; }
+               }
+
+               internal override void SetParent (XmlSchemaObject parent)
+               {
+                       base.SetParent (parent);
+                       foreach (XmlSchemaObject obj in BaseTypes)
+                               obj.SetParent (this);
+               }
+
+               /// <remarks>
+               /// 1. Circular union type definition is disallowed. (WTH is this?)
+               /// 2. id must be a valid ID
+               /// </remarks>
+               internal override int Compile(ValidationEventHandler h, XmlSchema schema)
+               {
+                       // If this is already compiled this time, simply skip.
+                       if (CompilationId == schema.CompilationId)
+                               return 0;
+
+                       errorCount = 0;
+
+                       int count = BaseTypes.Count;
+
+                       foreach(XmlSchemaObject obj in baseTypes)
+                       {
+                               if(obj != null && obj is XmlSchemaSimpleType)
+                               {
+                                       XmlSchemaSimpleType stype = (XmlSchemaSimpleType) obj;
+                                       errorCount += stype.Compile(h, schema);
+                               }
+                               else
+                               {
+                                       error(h, "baseTypes can't have objects other than a simpletype");
+                               }
+                       }
+                       
+                       if(memberTypes!=null)
+                       {
+                               for(int i=0; i< memberTypes.Length; i++)
+                               {
+                                       if(memberTypes[i] == null || !XmlSchemaUtil.CheckQName(MemberTypes[i]))
+                                       {
+                                               error (h,"Invalid membertype");
+                                               memberTypes[i] = XmlQualifiedName.Empty;
+                                       }
+                                       else
+                                       {
+                                               count += MemberTypes.Length;
+                                       }
+                               }
+                       }
+
+                       if(count == 0)
+                               error(h, "Atleast one simpletype or membertype must be present");
+
+                       XmlSchemaUtil.CompileID(Id,this,schema.IDCollection,h);
+
+                       
+
+                       this.CompilationId = schema.CompilationId;
+                       return errorCount;
+               }
+               
+               internal override int Validate(ValidationEventHandler h, XmlSchema schema)
+               {
+                       if (IsValidated (schema.ValidationId))
+                               return errorCount;
+
+                       ArrayList al = new ArrayList ();
+                       // Validate MemberTypes
+                       if (MemberTypes != null) {
+                               foreach (XmlQualifiedName memberTypeName in MemberTypes) {
+                                       object type = null;
+                                       XmlSchemaType xstype = schema.FindSchemaType (memberTypeName) as XmlSchemaSimpleType;
+                                       if (xstype != null) {
+                                               errorCount += xstype.Validate (h, schema);
+                                               type = xstype;
+                                       } else if (memberTypeName == XmlSchemaComplexType.AnyTypeName) {
                                                type = XmlSchemaSimpleType.AnySimpleType;
-                                       } else if (memberTypeName.Namespace == XmlSchema.Namespace ||\r
-                                               memberTypeName.Namespace == XmlSchema.XdtNamespace) {\r
-                                               type = XmlSchemaDatatype.FromName (memberTypeName);\r
-                                               if (type == null)\r
-                                                       error (h, "Invalid schema type name was specified: " + memberTypeName);\r
-                                       }\r
-                                       // otherwise, it might be missing sub components.\r
-                                       else if (!schema.IsNamespaceAbsent (memberTypeName.Namespace))\r
-                                               error (h, "Referenced base schema type " + memberTypeName + " was not found in the corresponding schema.");\r
-\r
-                                       al.Add (type);\r
-                               }\r
-                       }\r
-                       if (BaseTypes != null) {\r
-                               foreach (XmlSchemaSimpleType st in BaseTypes) {\r
-                                       st.Validate (h, schema);\r
-                                       al.Add (st);\r
-                               }\r
-                       }\r
-                       this.validatedTypes = al.ToArray ();\r
-\r
-#if NET_2_0\r
-                       if (validatedTypes != null) {\r
-                               validatedSchemaTypes = new XmlSchemaSimpleType [validatedTypes.Length];\r
-                               for (int i = 0; i < validatedTypes.Length; i++) {\r
-                                       object t = validatedTypes [i];\r
-                                       XmlSchemaSimpleType st = t as XmlSchemaSimpleType;\r
-                                       if (st == null && t != null)\r
-                                               st = XmlSchemaType.GetBuiltInSimpleType (((XmlSchemaDatatype) t).TypeCode);\r
-                                       validatedSchemaTypes [i] = st;\r
-                               }\r
-                       }\r
-#endif\r
-\r
-                       ValidationId = schema.ValidationId;\r
-                       return errorCount;\r
-               }\r
-\r
-               //<union \r
-               //  id = ID \r
-               //  memberTypes = List of QName \r
-               //  {any attributes with non-schema namespace . . .}>\r
-               //  Content: (annotation?, (simpleType*))\r
-               //</union>\r
-               internal static XmlSchemaSimpleTypeUnion Read(XmlSchemaReader reader, ValidationEventHandler h)\r
-               {\r
-                       XmlSchemaSimpleTypeUnion union = new XmlSchemaSimpleTypeUnion();\r
-                       reader.MoveToElement();\r
-\r
-                       if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname)\r
-                       {\r
-                               error(h,"Should not happen :1: XmlSchemaSimpleTypeUnion.Read, name="+reader.Name,null);\r
-                               reader.Skip();\r
-                               return null;\r
-                       }\r
-\r
-                       union.LineNumber = reader.LineNumber;\r
-                       union.LinePosition = reader.LinePosition;\r
-                       union.SourceUri = reader.BaseURI;\r
-\r
-                       //Read Attributes\r
-                       while(reader.MoveToNextAttribute())\r
-                       {\r
-                               if(reader.Name == "id")\r
-                               {\r
-                                       union.Id = reader.Value;\r
-                               }\r
-                               else if(reader.Name == "memberTypes")\r
-                               {\r
-                                       Exception innerEx;\r
-                                       string[] names = XmlSchemaUtil.SplitList(reader.Value);\r
-                                       union.memberTypes = new XmlQualifiedName[names.Length];\r
-                                       for(int i=0;i<names.Length;i++)\r
-                                       {\r
-                                               union.memberTypes[i] = XmlSchemaUtil.ToQName(reader,names[i],out innerEx);\r
-                                               if(innerEx != null)\r
-                                                       error(h,"'"+names[i] + "' is not a valid memberType",innerEx);\r
-                                       }\r
-                               }\r
-                               else if((reader.NamespaceURI == "" && reader.Name != "xmlns") || reader.NamespaceURI == XmlSchema.Namespace)\r
-                               {\r
-                                       error(h,reader.Name + " is not a valid attribute for union",null);\r
-                               }\r
-                               else\r
-                               {\r
-                                       XmlSchemaUtil.ReadUnhandledAttribute(reader,union);\r
-                               }\r
-                       }\r
-                       \r
-                       reader.MoveToElement();\r
-                       if(reader.IsEmptyElement)\r
-                               return union;\r
-\r
-                       //  Content: annotation?, simpleType*\r
-                       int level = 1;\r
-                       while(reader.ReadNextElement())\r
-                       {\r
-                               if(reader.NodeType == XmlNodeType.EndElement)\r
-                               {\r
-                                       if(reader.LocalName != xmlname)\r
-                                               error(h,"Should not happen :2: XmlSchemaSimpleTypeUnion.Read, name="+reader.Name,null);\r
-                                       break;\r
-                               }\r
-                               if(level <= 1 && reader.LocalName == "annotation")\r
-                               {\r
-                                       level = 2; //Only one annotation\r
-                                       XmlSchemaAnnotation annotation = XmlSchemaAnnotation.Read(reader,h);\r
-                                       if(annotation != null)\r
-                                               union.Annotation = annotation;\r
-                                       continue;\r
-                               }\r
-                               if(level <=2 && reader.LocalName == "simpleType")\r
-                               {\r
-                                       level = 2;\r
-                                       XmlSchemaSimpleType stype = XmlSchemaSimpleType.Read(reader,h);\r
-                                       if(stype != null)\r
-                                               union.baseTypes.Add(stype);\r
-                                       continue;\r
-                               }\r
-                               reader.RaiseInvalidElementError();\r
-                       }\r
-                       return union;\r
-               }\r
-\r
-       }\r
-}\r
+                                       } else if (memberTypeName.Namespace == XmlSchema.Namespace ||
+                                               memberTypeName.Namespace == XmlSchema.XdtNamespace) {
+                                               type = XmlSchemaDatatype.FromName (memberTypeName);
+                                               if (type == null)
+                                                       error (h, "Invalid schema type name was specified: " + memberTypeName);
+                                       }
+                                       // otherwise, it might be missing sub components.
+                                       else if (!schema.IsNamespaceAbsent (memberTypeName.Namespace))
+                                               error (h, "Referenced base schema type " + memberTypeName + " was not found in the corresponding schema.");
+
+                                       al.Add (type);
+                               }
+                       }
+                       if (BaseTypes != null) {
+                               foreach (XmlSchemaSimpleType st in BaseTypes) {
+                                       st.Validate (h, schema);
+                                       al.Add (st);
+                               }
+                       }
+                       this.validatedTypes = al.ToArray ();
+
+#if NET_2_0
+                       if (validatedTypes != null) {
+                               validatedSchemaTypes = new XmlSchemaSimpleType [validatedTypes.Length];
+                               for (int i = 0; i < validatedTypes.Length; i++) {
+                                       object t = validatedTypes [i];
+                                       XmlSchemaSimpleType st = t as XmlSchemaSimpleType;
+                                       if (st == null && t != null)
+                                               st = XmlSchemaType.GetBuiltInSimpleType (((XmlSchemaDatatype) t).TypeCode);
+                                       validatedSchemaTypes [i] = st;
+                               }
+                       }
+#endif
+
+                       ValidationId = schema.ValidationId;
+                       return errorCount;
+               }
+
+               //<union 
+               //  id = ID 
+               //  memberTypes = List of QName 
+               //  {any attributes with non-schema namespace . . .}>
+               //  Content: (annotation?, (simpleType*))
+               //</union>
+               internal static XmlSchemaSimpleTypeUnion Read(XmlSchemaReader reader, ValidationEventHandler h)
+               {
+                       XmlSchemaSimpleTypeUnion union = new XmlSchemaSimpleTypeUnion();
+                       reader.MoveToElement();
+
+                       if(reader.NamespaceURI != XmlSchema.Namespace || reader.LocalName != xmlname)
+                       {
+                               error(h,"Should not happen :1: XmlSchemaSimpleTypeUnion.Read, name="+reader.Name,null);
+                               reader.Skip();
+                               return null;
+                       }
+
+                       union.LineNumber = reader.LineNumber;
+                       union.LinePosition = reader.LinePosition;
+                       union.SourceUri = reader.BaseURI;
+
+                       //Read Attributes
+                       while(reader.MoveToNextAttribute())
+                       {
+                               if(reader.Name == "id")
+                               {
+                                       union.Id = reader.Value;
+                               }
+                               else if(reader.Name == "memberTypes")
+                               {
+                                       Exception innerEx;
+                                       string[] names = XmlSchemaUtil.SplitList(reader.Value);
+                                       union.memberTypes = new XmlQualifiedName[names.Length];
+                                       for(int i=0;i<names.Length;i++)
+                                       {
+                                               union.memberTypes[i] = XmlSchemaUtil.ToQName(reader,names[i],out innerEx);
+                                               if(innerEx != null)
+                                                       error(h,"'"+names[i] + "' is not a valid memberType",innerEx);
+                                       }
+                               }
+                               else if((reader.NamespaceURI == "" && reader.Name != "xmlns") || reader.NamespaceURI == XmlSchema.Namespace)
+                               {
+                                       error(h,reader.Name + " is not a valid attribute for union",null);
+                               }
+                               else
+                               {
+                                       XmlSchemaUtil.ReadUnhandledAttribute(reader,union);
+                               }
+                       }
+                       
+                       reader.MoveToElement();
+                       if(reader.IsEmptyElement)
+                               return union;
+
+                       //  Content: annotation?, simpleType*
+                       int level = 1;
+                       while(reader.ReadNextElement())
+                       {
+                               if(reader.NodeType == XmlNodeType.EndElement)
+                               {
+                                       if(reader.LocalName != xmlname)
+                                               error(h,"Should not happen :2: XmlSchemaSimpleTypeUnion.Read, name="+reader.Name,null);
+                                       break;
+                               }
+                               if(level <= 1 && reader.LocalName == "annotation")
+                               {
+                                       level = 2; //Only one annotation
+                                       XmlSchemaAnnotation annotation = XmlSchemaAnnotation.Read(reader,h);
+                                       if(annotation != null)
+                                               union.Annotation = annotation;
+                                       continue;
+                               }
+                               if(level <=2 && reader.LocalName == "simpleType")
+                               {
+                                       level = 2;
+                                       XmlSchemaSimpleType stype = XmlSchemaSimpleType.Read(reader,h);
+                                       if(stype != null)
+                                               union.baseTypes.Add(stype);
+                                       continue;
+                               }
+                               reader.RaiseInvalidElementError();
+                       }
+                       return union;
+               }
+
+       }
+}