2004-06-03 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mcs / class / corlib / System.Security.Policy / PolicyStatement.cs
1 //\r
2 // System.Security.Policy.PolicyStatement\r
3 //\r
4 // Author:\r
5 //   Dan Lewis (dihlewis@yahoo.co.uk)\r
6 //\r
7 // (C) 2002\r
8 //\r
9 \r
10 using System.Security.Permissions;\r
11 \r
12 namespace System.Security.Policy {\r
13 \r
14         [Serializable]\r
15         public sealed class PolicyStatement : ISecurityEncodable, ISecurityPolicyEncodable {\r
16                 public PolicyStatement (PermissionSet perms) :\r
17                         this (perms, PolicyStatementAttribute.Nothing)\r
18                 {\r
19                 }\r
20 \r
21                 public PolicyStatement (PermissionSet perms, PolicyStatementAttribute attrs) {\r
22                         this.perms = perms;\r
23                         this.attrs = attrs;\r
24                 }\r
25                 \r
26                 public PermissionSet PermissionSet {\r
27                         get { return perms; }\r
28                         set { perms = value; }\r
29                 }\r
30                 \r
31                 public PolicyStatementAttribute Attributes {\r
32                         get { return attrs; }\r
33                         set { attrs = value; }\r
34                 }\r
35 \r
36                 public string AttributeString {\r
37                         get { return attrs.ToString ("F"); }\r
38                 }\r
39 \r
40                 public PolicyStatement Copy ()\r
41                 {\r
42                         return new PolicyStatement (perms, attrs);\r
43                 }\r
44 \r
45                 // ISecurityEncodable\r
46 \r
47                 public void FromXml (SecurityElement e)\r
48                 {\r
49                         FromXml (e, null);\r
50                 }\r
51 \r
52                 public void FromXml (SecurityElement e, PolicyLevel level)\r
53                 {\r
54                         SecurityElement permissions = e.SearchForChildByTag ("PermissionSet");\r
55 \r
56                         string attributes = e.Attribute ("Attributes");\r
57 \r
58                         if (attributes != null)\r
59                                 attrs = (PolicyStatementAttribute) Enum.Parse (\r
60                                         typeof (PolicyStatementAttribute), attributes);\r
61                                 \r
62                         perms = new PermissionSet (PermissionState.None);\r
63                         perms.FromXml (permissions);\r
64                 }\r
65                 \r
66                 public SecurityElement ToXml ()\r
67                 {\r
68                         return ToXml (null);\r
69                 }\r
70 \r
71                 public SecurityElement ToXml (PolicyLevel level)\r
72                 {\r
73                         SecurityElement element = new SecurityElement ("PolicyStatement");\r
74                         element.AddAttribute ("version", "1");\r
75 \r
76                         if (attrs != PolicyStatementAttribute.Nothing)\r
77                                 element.AddAttribute ("Attributes", attrs.ToString ());\r
78                         \r
79                         element.AddChild (perms.ToXml ());\r
80 \r
81                         return element;\r
82                 }\r
83 \r
84                 private PermissionSet perms;\r
85                 private PolicyStatementAttribute attrs;\r
86         }\r
87 }\r