2004-01-26 Sebastien Pouliot <spouliot@videotron.ca>
[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 using System;
13 using System.Globalization;
14
15 namespace System.Security.Policy {
16
17         [Serializable]
18         public sealed class UrlMembershipCondition
19                 : IMembershipCondition, ISecurityEncodable, ISecurityPolicyEncodable, IConstantMembershipCondition
20         {
21                 string url;
22                 
23                 public UrlMembershipCondition (string url)
24                 {
25                         this.url = System.Security.Policy.Url.Prepare (url);
26                 }
27
28                 public string Url {
29                         get { return url; }
30                         set { url = System.Security.Policy.Url.Prepare (value); }
31                 }
32
33                 public bool Check (Evidence evidence)
34                 {
35                         if (evidence == null)
36                                 return false;
37
38                         foreach (object o in evidence) {
39                                 Url u = (o as Url);
40                                 if (u != null) {
41                                         // note: there shouldn't be more than one Url evidence
42                                         if (System.Security.Policy.Url.Compare (url, u.Value))
43                                                 return true;
44                                 }
45                         }
46                         return false;
47                 }
48
49                 public IMembershipCondition Copy ()
50                 {
51                         return new UrlMembershipCondition (url);
52                 }
53
54                 public override bool Equals (Object o)
55                 {
56                         if (o is UrlMembershipCondition) {
57                                 return System.Security.Policy.Url.Compare (url, ((UrlMembershipCondition) o).Url);
58                         }
59                         return false;
60                 }
61
62                 public void FromXml (SecurityElement element)
63                 {
64                         FromXml (element, null);
65                 }
66
67                 public void FromXml (SecurityElement element, PolicyLevel level)
68                 {
69                         if (element == null)
70                                 throw new ArgumentNullException ("element");
71                         
72                         if (element.Tag != "IMembershipCondition")
73                                 throw new ArgumentException (
74                                         Locale.GetText ("Invalid tag - expected IMembershipCondition"));
75
76                         if (element.Attribute ("class") != GetType ().AssemblyQualifiedName)
77                                 throw new ArgumentException (
78                                         Locale.GetText ("Invalid class attribute"));
79
80                         if (element.Attribute ("version") != "1")
81                                 throw new ArgumentException (
82                                         Locale.GetText ("Invalid version"));
83                         
84                         url = element.Attribute ("Url");
85                 }
86
87                 public override int GetHashCode ()
88                 {
89                         return url.GetHashCode ();
90                 }
91
92                 public override string ToString ()
93                 {
94                         return "Url - " + url;
95                 }
96
97                 public SecurityElement ToXml ()
98                 {
99                         return ToXml (null);
100                 }
101
102                 public SecurityElement ToXml (PolicyLevel level)
103                 {
104                         SecurityElement element = new SecurityElement ("IMembershipCondition");
105                         element.AddAttribute ("class", this.GetType ().AssemblyQualifiedName);
106                         element.AddAttribute ("version", "1");
107                         element.AddAttribute ("Url", url);
108                         return element;
109                 }
110         }
111 }