2004-01-26 Sebastien Pouliot <spouliot@videotron.ca>
[mono.git] / mcs / class / corlib / System.Security.Policy / ZoneMembershipCondition.cs
1 //
2 // System.Security.Policy.ZoneMembershipCondition.cs
3 //
4 // Author:
5 //   Duncan Mak (duncan@ximian.com)
6 //
7 // (C) 2003, Ximian Inc.
8 //
9
10 using System;
11 using System.Globalization;
12
13 namespace System.Security.Policy {
14
15         public sealed class ZoneMembershipCondition
16                 : IMembershipCondition, ISecurityEncodable, ISecurityPolicyEncodable, IConstantMembershipCondition
17         {
18                 SecurityZone zone;
19                 
20                 public ZoneMembershipCondition (SecurityZone zone)
21                 {
22                         this.zone = zone;
23                 }
24
25                 public SecurityZone SecurityZone {
26                         set { zone = value; }
27                         get { return zone; }
28                 }
29
30                 public bool Check (Evidence evidence)
31                 {
32                         if (evidence == null)
33                                 return false;
34
35                         foreach (object o in evidence) {
36                                 if (o is Zone) {
37                                         Zone z = (o as Zone);
38                                         if (z.SecurityZone == zone)
39                                                 return true;
40                                 }
41                         }
42                         return false;
43                 }
44
45                 public IMembershipCondition Copy ()
46                 {
47                         return new ZoneMembershipCondition (zone);
48                 }
49
50                 public override bool Equals (Object o)
51                 {
52                         if (o is ZoneMembershipCondition == false)
53                                 return false;
54                         else
55                                 return ((ZoneMembershipCondition) o).SecurityZone == zone;
56                 }
57
58                 public void FromXml (SecurityElement element)
59                 {
60                         FromXml (element, null);
61                 }
62
63                 public void FromXml (SecurityElement element, PolicyLevel level)
64                 {
65                         if (element == null)
66                                 throw new ArgumentNullException (
67                                         Locale.GetText ("The argument is null."));
68
69                         if (element.Attribute ("class") != GetType ().AssemblyQualifiedName)
70                                 throw new ArgumentException (
71                                         Locale.GetText ("The argument is invalid."));
72
73                         if (element.Attribute ("version") != "1")
74                                 throw new ArgumentException (
75                                         Locale.GetText ("The argument is invalid."));
76
77                         zone = (SecurityZone) Enum.Parse (
78                                 typeof (SecurityZone), element.Attribute ("Zone"));
79                 }
80
81                 public override int GetHashCode ()
82                 {
83                         return zone.GetHashCode ();
84                 }
85
86                 public override string ToString ()
87                 {
88                         return "Zone - " + zone;
89                 }
90
91                 public SecurityElement ToXml ()
92                 {
93                         return ToXml (null);
94                 }
95
96                 public SecurityElement ToXml (PolicyLevel level)
97                 {
98                         SecurityElement element = new SecurityElement ("IMembershipCondition");
99                         element.AddAttribute ("version", "1");
100
101                         element.AddAttribute ("Zone", zone.ToString ());
102
103                         return element;
104                 }
105         }
106 }