Updates referencesource to .NET 4.7
[mono.git] / mcs / class / referencesource / System.Xml / System / Xml / Xslt / XsltArgumentList.cs
1 //------------------------------------------------------------------------------
2 // <copyright file="XsltArgumentList.cs" company="Microsoft">
3 //     Copyright (c) Microsoft Corporation.  All rights reserved.
4 // </copyright>
5 // <owner current="true" primary="true">Microsoft</owner>
6 //------------------------------------------------------------------------------
7
8 using System.Collections;
9 using System.Security.Permissions;
10
11 namespace System.Xml.Xsl {
12
13     public abstract class XsltMessageEncounteredEventArgs : EventArgs {
14         public abstract string Message { get; }
15     }
16
17     public delegate void XsltMessageEncounteredEventHandler(object sender, XsltMessageEncounteredEventArgs e);
18
19     public class XsltArgumentList {
20         private Hashtable parameters = new Hashtable();
21         private Hashtable extensions = new Hashtable();
22
23         // Used for reporting xsl:message's during execution
24         internal XsltMessageEncounteredEventHandler xsltMessageEncountered = null;
25
26         public XsltArgumentList() {}
27
28         public object GetParam(string name, string namespaceUri) {
29             return this.parameters[new XmlQualifiedName(name, namespaceUri)];
30         }
31
32         public object GetExtensionObject(string namespaceUri) {
33             return this.extensions[namespaceUri];
34         }
35
36         public void AddParam(string name, string namespaceUri, object parameter) {
37             CheckArgumentNull(name        , "name"        );
38             CheckArgumentNull(namespaceUri, "namespaceUri");
39             CheckArgumentNull(parameter   , "parameter"   );
40
41             XmlQualifiedName qname = new XmlQualifiedName(name, namespaceUri);
42             qname.Verify();
43             this.parameters.Add(qname, parameter);
44         }
45
46         public void AddExtensionObject(string namespaceUri, object extension) {
47             CheckArgumentNull(namespaceUri, "namespaceUri");
48             CheckArgumentNull(extension   , "extension"   );
49             this.extensions.Add(namespaceUri, extension);
50         }
51
52         public object RemoveParam(string name, string namespaceUri) {
53             XmlQualifiedName qname = new XmlQualifiedName(name, namespaceUri);
54             object parameter = this.parameters[qname];
55             this.parameters.Remove(qname);
56             return parameter;
57         }
58
59         public object RemoveExtensionObject(string namespaceUri) {
60             object extension = this.extensions[namespaceUri];
61             this.extensions.Remove(namespaceUri);
62             return extension;
63         }
64
65         public event XsltMessageEncounteredEventHandler XsltMessageEncountered {
66             add {
67                 xsltMessageEncountered += value;
68             }
69             remove {
70                 xsltMessageEncountered -= value;
71             }
72         }
73
74         public void Clear() {
75             this.parameters.Clear();
76             this.extensions.Clear();
77             xsltMessageEncountered = null;
78         }
79
80         private static void CheckArgumentNull(object param, string paramName) {
81             if (param == null) {
82                 throw new ArgumentNullException(paramName);
83             }
84         }
85     }
86 }