2005-01-31 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / System.Security / System.Security.Cryptography.Xml / KeyInfoRetrievalMethod.cs
1 //
2 // KeyInfoRetrievalMethod.cs - KeyInfoRetrievalMethod implementation for XML Signature
3 //
4 // Author:
5 //      Sebastien Pouliot (spouliot@motus.com)
6 //      Tim Coleman (tim@timcoleman.com)
7 //
8 // (C) 2002, 2003 Motus Technologies Inc. (http://www.motus.com)
9 // Copyright (C) Tim Coleman, 2004
10 //
11
12 //
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
20 // 
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
23 // 
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 //
32
33 using System.Xml;
34
35 namespace System.Security.Cryptography.Xml {
36
37         public class KeyInfoRetrievalMethod : KeyInfoClause {
38
39                 private string URI;
40                 private XmlElement element;
41
42 #if NET_2_0
43                 string type;
44 #endif
45
46                 public KeyInfoRetrievalMethod () {}
47
48                 public KeyInfoRetrievalMethod (string strUri) 
49                 {
50                         URI = strUri;
51                 }
52
53 #if NET_2_0
54                 public KeyInfoRetrievalMethod (string strUri, string strType)
55                         : this (strUri)
56                 {
57                         Type = strType;
58                 }
59
60                 public string Type {
61                         get { return type; }
62                         set {
63                                 element = null;
64                                 type = value;
65                         }
66                 }
67 #endif
68
69                 public string Uri {
70                         get { return URI; }
71                         set {
72                                 element = null;
73                                 URI = value;
74                         }
75                 }
76
77
78                 public override XmlElement GetXml () 
79                 {
80                         if (element != null)
81                                 return element;
82
83                         XmlDocument document = new XmlDocument ();
84                         XmlElement xel = document.CreateElement (XmlSignature.ElementNames.RetrievalMethod, XmlSignature.NamespaceURI);
85                         if (URI != null)
86                                 xel.SetAttribute (XmlSignature.AttributeNames.URI, URI);
87 #if NET_2_0
88                         if (Type != null)
89                                 xel.SetAttribute (XmlSignature.AttributeNames.Type, Type);
90 #endif
91                         return xel;
92                 }
93
94                 public override void LoadXml (XmlElement value) 
95                 {
96                         if (value == null)
97                                 throw new ArgumentNullException ();
98
99                         if ((value.LocalName != XmlSignature.ElementNames.RetrievalMethod) || (value.NamespaceURI != XmlSignature.NamespaceURI)) {
100                                 URI = ""; // not null - so we return URI="" as attribute !!!
101                         } else {
102                                 URI = value.Attributes [XmlSignature.AttributeNames.URI].Value;
103 #if NET_2_0
104                                 if (value.HasAttribute (XmlSignature.AttributeNames.Type))
105                                         Type = value.Attributes [XmlSignature.AttributeNames.Type].Value;
106 #endif
107                                 element = value;
108                         }
109                 }
110         }
111 }