This commit was manufactured by cvs2svn to create branch 'mono-1-0'.
[mono.git] / mcs / class / corlib / System.Security.Policy / UrlMembershipCondition.cs
1 //
2 // System.Security.Policy.UrlMembershipCondition.cs
3 //
4 // Authors:
5 //      Duncan Mak (duncan@ximian.com)
6 //      Sebastien Pouliot (spouliot@motus.com)
7 //
8 // (C) 2003, Ximian Inc.
9 // (C) 2004 Motus Technologies Inc. (http://www.motus.com)
10 //
11
12 //
13 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
14 //
15 // Permission is hereby granted, free of charge, to any person obtaining
16 // a copy of this software and associated documentation files (the
17 // "Software"), to deal in the Software without restriction, including
18 // without limitation the rights to use, copy, modify, merge, publish,
19 // distribute, sublicense, and/or sell copies of the Software, and to
20 // permit persons to whom the Software is furnished to do so, subject to
21 // the following conditions:
22 // 
23 // The above copyright notice and this permission notice shall be
24 // included in all copies or substantial portions of the Software.
25 // 
26 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
27 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
28 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
29 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
30 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
31 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
32 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 //
34
35 using System;
36 using System.Globalization;
37
38 namespace System.Security.Policy {
39
40         [Serializable]
41         public sealed class UrlMembershipCondition
42                 : IMembershipCondition, ISecurityEncodable, ISecurityPolicyEncodable, IConstantMembershipCondition
43         {
44                 string url;
45                 
46                 public UrlMembershipCondition (string url)
47                 {
48                         this.url = System.Security.Policy.Url.Prepare (url);
49                 }
50
51                 public string Url {
52                         get { return url; }
53                         set { url = System.Security.Policy.Url.Prepare (value); }
54                 }
55
56                 public bool Check (Evidence evidence)
57                 {
58                         if (evidence == null)
59                                 return false;
60
61                         foreach (object o in evidence) {
62                                 Url u = (o as Url);
63                                 if (u != null) {
64                                         // note: there shouldn't be more than one Url evidence
65                                         if (System.Security.Policy.Url.Compare (url, u.Value))
66                                                 return true;
67                                 }
68                         }
69                         return false;
70                 }
71
72                 public IMembershipCondition Copy ()
73                 {
74                         return new UrlMembershipCondition (url);
75                 }
76
77                 public override bool Equals (Object o)
78                 {
79                         if (o is UrlMembershipCondition) {
80                                 return System.Security.Policy.Url.Compare (url, ((UrlMembershipCondition) o).Url);
81                         }
82                         return false;
83                 }
84
85                 public void FromXml (SecurityElement element)
86                 {
87                         FromXml (element, null);
88                 }
89
90                 public void FromXml (SecurityElement element, PolicyLevel level)
91                 {
92                         if (element == null)
93                                 throw new ArgumentNullException ("element");
94                         
95                         if (element.Tag != "IMembershipCondition")
96                                 throw new ArgumentException (
97                                         Locale.GetText ("Invalid tag - expected IMembershipCondition"));
98
99                         if (element.Attribute ("class") != GetType ().AssemblyQualifiedName)
100                                 throw new ArgumentException (
101                                         Locale.GetText ("Invalid class attribute"));
102
103                         if (element.Attribute ("version") != "1")
104                                 throw new ArgumentException (
105                                         Locale.GetText ("Invalid version"));
106                         
107                         url = element.Attribute ("Url");
108                 }
109
110                 public override int GetHashCode ()
111                 {
112                         return url.GetHashCode ();
113                 }
114
115                 public override string ToString ()
116                 {
117                         return "Url - " + url;
118                 }
119
120                 public SecurityElement ToXml ()
121                 {
122                         return ToXml (null);
123                 }
124
125                 public SecurityElement ToXml (PolicyLevel level)
126                 {
127                         SecurityElement element = new SecurityElement ("IMembershipCondition");
128                         element.AddAttribute ("class", this.GetType ().AssemblyQualifiedName);
129                         element.AddAttribute ("version", "1");
130                         element.AddAttribute ("Url", url);
131                         return element;
132                 }
133         }
134 }