1 // System.Xml.Xsl.XsltArgumentList
\r
3 // Author: Tim Coleman <tim@timcoleman.com>
\r
4 // (C) Copyright 2002 Tim Coleman
\r
7 // Permission is hereby granted, free of charge, to any person obtaining
8 // a copy of this software and associated documentation files (the
9 // "Software"), to deal in the Software without restriction, including
10 // without limitation the rights to use, copy, modify, merge, publish,
11 // distribute, sublicense, and/or sell copies of the Software, and to
12 // permit persons to whom the Software is furnished to do so, subject to
13 // the following conditions:
15 // The above copyright notice and this permission notice shall be
16 // included in all copies or substantial portions of the Software.
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28 using System.Collections;
\r
30 using System.Xml.XPath;
\r
32 namespace System.Xml.Xsl
\r
34 public sealed class XsltArgumentList
\r
38 internal Hashtable extensionObjects;
\r
39 internal Hashtable parameters;
\r
43 #region Constructors
\r
45 public XsltArgumentList ()
\r
47 extensionObjects = new Hashtable ();
\r
48 parameters = new Hashtable ();
\r
55 public void AddExtensionObject (string namespaceUri, object extension)
\r
57 if (namespaceUri == null)
\r
58 throw new ArgumentException ("The namespaceUri is a null reference.");
\r
59 if (namespaceUri == "http://www.w3.org/1999/XSL/Transform")
\r
60 throw new ArgumentException ("The namespaceUri is http://www.w3.org/1999/XSL/Transform.");
\r
61 if (extensionObjects.Contains (namespaceUri))
\r
62 throw new ArgumentException ("The namespaceUri already has an extension object associated with it.");
\r
64 extensionObjects [namespaceUri] = extension;
\r
67 public void AddParam (string name, string namespaceUri, object parameter)
\r
70 if (namespaceUri == null)
\r
71 throw new ArgumentException ("The namespaceUri is a null reference.");
\r
73 if (namespaceUri == "http://www.w3.org/1999/XSL/Transform")
\r
74 throw new ArgumentException ("The namespaceUri is http://www.w3.org/1999/XSL/Transform.");
\r
77 throw new ArgumentException ("The parameter name is a null reference.");
\r
81 // verify that the name is a valid name according to
\r
82 // the W3C XML specification
\r
84 XmlQualifiedName qName = new XmlQualifiedName (name, namespaceUri);
\r
86 if (parameters.Contains (qName))
\r
87 throw new ArgumentException ("The namespaceUri already has a parameter associated with it.");
\r
89 parameter = ValidateParam (parameter);
\r
91 parameters [qName] = parameter;
\r
94 public void Clear ()
\r
96 extensionObjects.Clear ();
\r
97 parameters.Clear ();
\r
100 public object GetExtensionObject (string namespaceUri)
\r
102 return extensionObjects [namespaceUri];
\r
105 public object GetParam (string name, string namespaceUri)
\r
108 throw (new ArgumentException ("The parameter name is a null reference."));
\r
110 XmlQualifiedName qName = new XmlQualifiedName (name, namespaceUri);
\r
111 return parameters [qName];
\r
114 public object RemoveExtensionObject (string namespaceUri)
\r
116 object extensionObject = this.GetExtensionObject (namespaceUri);
\r
117 extensionObjects.Remove (namespaceUri);
\r
118 return extensionObject;
\r
121 public object RemoveParam (string name, string namespaceUri)
\r
123 XmlQualifiedName qName = new XmlQualifiedName (name, namespaceUri);
\r
124 object parameter = this.GetParam (name, namespaceUri);
\r
125 parameters.Remove (qName);
\r
129 private object ValidateParam (object parameter)
\r
131 if (parameter is string) return parameter;
\r
132 if (parameter is bool) return parameter;
\r
133 if (parameter is double) return parameter;
\r
134 if (parameter is XPathNavigator) return parameter;
\r
135 if (parameter is XPathNodeIterator) return parameter;
\r
137 if (parameter is Int16) return (double) (Int16) parameter;
\r
138 if (parameter is UInt16) return (double) (UInt16) parameter;
\r
139 if (parameter is Int32) return (double) (Int32) parameter;
\r
140 if (parameter is Int64) return (double) (Int64) parameter;
\r
141 if (parameter is UInt64) return (double) (UInt64) parameter;
\r
142 if (parameter is Single) return (double) (Single) parameter;
\r
143 if (parameter is decimal) return (double) (decimal) parameter;
\r
145 return parameter.ToString ();
\r