Initial commit
[mono.git] / mcs / class / referencesource / System.Xml / System / Xml / Serialization / XmlSerializerNamespaces.cs
1 //------------------------------------------------------------------------------
2 // <copyright file="XmlSerializerNamespaces.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.Serialization {
9
10     using System.Reflection;
11     using System.Collections;
12     using System.IO;
13     using System.Xml.Schema;
14     using System;
15
16     /// <include file='doc\XmlSerializerNamespaces.uex' path='docs/doc[@for="XmlSerializerNamespaces"]/*' />
17     /// <devdoc>
18     ///    <para>[To be supplied.]</para>
19     /// </devdoc>
20     public class XmlSerializerNamespaces {
21         Hashtable namespaces = null;
22
23         /// <include file='doc\XmlSerializerNamespaces.uex' path='docs/doc[@for="XmlSerializerNamespaces.XmlSerializerNamespaces"]/*' />
24         /// <devdoc>
25         ///    <para>[To be supplied.]</para>
26         /// </devdoc>
27         public XmlSerializerNamespaces() {
28         }
29
30
31         /// <include file='doc\XmlSerializerNamespaces.uex' path='docs/doc[@for="XmlSerializerNamespaces.XmlSerializerNamespaces1"]/*' />
32         /// <internalonly/>
33         /// <devdoc>
34         ///    <para>[To be supplied.]</para>
35         /// </devdoc>
36         public XmlSerializerNamespaces(XmlSerializerNamespaces namespaces) {
37             this.namespaces = (Hashtable)namespaces.Namespaces.Clone();
38         }
39
40         /// <include file='doc\XmlSerializerNamespaces.uex' path='docs/doc[@for="XmlSerializerNamespaces.XmlSerializerNamespaces2"]/*' />
41         /// <devdoc>
42         ///    <para>[To be supplied.]</para>
43         /// </devdoc>
44         public XmlSerializerNamespaces(XmlQualifiedName[] namespaces) {
45             for (int i = 0; i < namespaces.Length; i++) {
46                 XmlQualifiedName qname = namespaces[i];
47                 Add(qname.Name, qname.Namespace);
48             }
49         }
50         
51         /// <include file='doc\XmlSerializerNamespaces.uex' path='docs/doc[@for="XmlSerializerNamespaces.Add"]/*' />
52         /// <devdoc>
53         ///    <para>[To be supplied.]</para>
54         /// </devdoc>
55         public void Add(string prefix, string ns) {
56             // parameter value check
57             if (prefix != null && prefix.Length > 0)
58                 XmlConvert.VerifyNCName(prefix);
59
60             if (ns != null && ns.Length > 0)
61                 XmlConvert.ToUri(ns);
62             AddInternal(prefix, ns);
63         }
64
65         internal void AddInternal(string prefix, string ns) {
66             Namespaces[prefix] = ns;
67         }
68
69         /// <include file='doc\XmlSerializerNamespaces.uex' path='docs/doc[@for="XmlSerializerNamespaces.ToArray"]/*' />
70         /// <devdoc>
71         ///    <para>[To be supplied.]</para>
72         /// </devdoc>
73         public XmlQualifiedName[] ToArray() {
74             if (NamespaceList == null)
75                 return new XmlQualifiedName[0];
76             return (XmlQualifiedName[])NamespaceList.ToArray(typeof(XmlQualifiedName));
77         }
78
79         /// <include file='doc\XmlSerializerNamespaces.uex' path='docs/doc[@for="XmlSerializerNamespaces.Count"]/*' />
80         /// <devdoc>
81         ///    <para>[To be supplied.]</para>
82         /// </devdoc>
83         public int Count {
84             get { return Namespaces.Count; }
85         }
86
87         internal ArrayList NamespaceList {
88             get {
89                 if (namespaces == null || namespaces.Count == 0)
90                     return null;
91                 ArrayList namespaceList = new ArrayList();
92                 foreach(string key in Namespaces.Keys) {
93                     namespaceList.Add(new XmlQualifiedName(key, (string)Namespaces[key]));
94                 }
95                 return namespaceList;
96             }
97         }
98
99         internal Hashtable Namespaces {
100             get {
101                 if (namespaces == null)
102                     namespaces = new Hashtable();
103                 return namespaces;
104             }
105             set { namespaces = value; }
106         }
107
108         internal string LookupPrefix(string ns) {
109             if (string.IsNullOrEmpty(ns))
110                 return null;
111             if (namespaces == null || namespaces.Count == 0)
112                 return null;
113
114             foreach(string prefix in namespaces.Keys) {
115                 if (!string.IsNullOrEmpty(prefix) && (string)namespaces[prefix] == ns) {
116                     return prefix;
117                 }
118             }
119             return null;
120         }
121     }
122 }
123