Update Reference Sources to .NET Framework 4.6.1
[mono.git] / mcs / class / referencesource / System.Xml / System / Xml / Schema / AutoValidator.cs
1 //------------------------------------------------------------------------------
2 // <copyright file="AutoValidator.cs" company="Microsoft">
3 //     Copyright (c) Microsoft Corporation.  All rights reserved.
4 // </copyright>
5 // <owner current="true" primary="true">[....]</owner>
6 //------------------------------------------------------------------------------
7
8 namespace System.Xml.Schema {
9
10     using System.Diagnostics;
11     using System.Globalization;
12
13 #pragma warning disable 618
14
15     internal class AutoValidator : BaseValidator {
16         const string x_schema = "x-schema";
17
18         public AutoValidator(XmlValidatingReaderImpl reader, XmlSchemaCollection schemaCollection, IValidationEventHandling eventHandling) : base(reader, schemaCollection, eventHandling) {
19             schemaInfo = new SchemaInfo();
20         } 
21         
22         public override bool PreserveWhitespace { 
23             get { return false; }
24         }
25         
26         public override void Validate() {
27             ValidationType valType = DetectValidationType();
28             switch(valType) {
29                 case ValidationType.XDR:
30                     reader.Validator = new XdrValidator(this);
31                     reader.Validator.Validate();
32                     break;
33
34                 case ValidationType.Schema:
35                     reader.Validator = new XsdValidator(this);
36                     reader.Validator.Validate();
37                     break;
38
39                 case ValidationType.Auto:
40                     break;
41             }
42         } 
43         
44         public override void CompleteValidation() {} 
45
46         public override object  FindId(string name) {
47             return null;
48         } 
49
50         private ValidationType DetectValidationType() {
51             //Type not yet detected : Check in Schema Collection
52             if (reader.Schemas != null && reader.Schemas.Count > 0) {
53                  XmlSchemaCollectionEnumerator enumerator = reader.Schemas.GetEnumerator();
54                  while (enumerator.MoveNext()) {
55                     XmlSchemaCollectionNode node = enumerator.CurrentNode;
56                     SchemaInfo schemaInfo = node.SchemaInfo;
57                     if(schemaInfo.SchemaType == SchemaType.XSD)
58                         return ValidationType.Schema;
59                     else if(schemaInfo.SchemaType == SchemaType.XDR)
60                         return ValidationType.XDR;
61                  }
62             }
63
64             if (reader.NodeType == XmlNodeType.Element) {
65                 SchemaType schemaType = SchemaNames.SchemaTypeFromRoot(reader.LocalName, reader.NamespaceURI);
66                 if (schemaType == SchemaType.XSD) {
67                     return ValidationType.Schema;
68                 }
69                 else if (schemaType == SchemaType.XDR) {
70                     return ValidationType.XDR;
71                 }
72                 else {
73                     int count = reader.AttributeCount;
74                     for (int i = 0; i < count ; i++) {
75                         reader.MoveToAttribute(i);
76                         string objectNs = reader.NamespaceURI;
77                         string objectName = reader.LocalName;
78                         if (Ref.Equal(objectNs, SchemaNames.NsXmlNs)) {
79                             if(XdrBuilder.IsXdrSchema(reader.Value)) {
80                                 reader.MoveToElement();
81                                 return ValidationType.XDR;
82                             }
83                         }
84                         else if (Ref.Equal(objectNs, SchemaNames.NsXsi)) {
85                             reader.MoveToElement();
86                             return ValidationType.Schema;
87                         }
88                         else if (Ref.Equal(objectNs, SchemaNames.QnDtDt.Namespace) && Ref.Equal(objectName, SchemaNames.QnDtDt.Name)) {
89                             reader.SchemaTypeObject = XmlSchemaDatatype.FromXdrName(reader.Value);
90                             reader.MoveToElement();
91                             return ValidationType.XDR;
92                         }
93                     } //end of for
94                     if(count > 0) {
95                         reader.MoveToElement();
96                     }
97                 }
98             }
99             return ValidationType.Auto;
100         }    
101         
102     }
103 #pragma warning restore 618
104
105 }
106
107