* IsolatedStorageFilePermission.cs:
[mono.git] / mcs / class / corlib / System.Security.Permissions / UIPermission.cs
1 //
2 // System.Security.Permissions.UIPermission.cs
3 //
4 // Author
5 //      Sebastien Pouliot  <spouliot@motus.com>
6 //
7 // Copyright (C) 2003 Motus Technologies. http://www.motus.com
8 //
9
10 using System;
11 using System.Globalization;
12
13 namespace System.Security.Permissions {
14
15         [Serializable]
16         public sealed class UIPermission : CodeAccessPermission, IUnrestrictedPermission, IBuiltInPermission {
17
18                 private UIPermissionWindow _window;
19                 private UIPermissionClipboard _clipboard;
20
21                 // Constructors
22
23                 public UIPermission (PermissionState state) 
24                 {
25                 }
26
27                 public UIPermission (UIPermissionClipboard clipboardFlag) 
28                 {
29                         _clipboard = clipboardFlag;
30                 }
31
32                 public UIPermission (UIPermissionWindow windowFlag) 
33                 {
34                         _window = windowFlag;
35                 }
36
37                 public UIPermission (UIPermissionWindow windowFlag, UIPermissionClipboard clipboardFlag) 
38                 {
39                         _clipboard = clipboardFlag;
40                         _window = windowFlag;
41                 }
42
43                 // Properties
44
45                 public UIPermissionClipboard Clipboard {
46                         get { return _clipboard; }
47                         set { _clipboard = value; }
48                 }
49
50                 public UIPermissionWindow Window { 
51                         get { return _window; }
52                         set { _window = value; }
53                 }
54
55                 // Methods
56
57                 public override IPermission Copy () 
58                 {
59                         return new UIPermission (_window, _clipboard);
60                 }
61
62                 public override void FromXml (SecurityElement esd) 
63                 {
64                         if (esd == null)
65                                 throw new ArgumentNullException (
66                                         Locale.GetText ("The argument is null."));
67                         
68                         if (esd.Attribute ("class") != GetType ().AssemblyQualifiedName)
69                                 throw new ArgumentException (
70                                         Locale.GetText ("The argument is not valid"));
71
72                         if (esd.Attribute ("version") != "1")
73                                 throw new ArgumentException (
74                                         Locale.GetText ("The argument is not valid"));
75                         
76                         if (esd.Attribute ("Unrestricted") == "true") {
77                                 _window = UIPermissionWindow.AllWindows;
78                                 _clipboard = UIPermissionClipboard.AllClipboard;
79
80                         // only 2 attributes: class and version
81                         } else if (esd.Attributes.Count == 2) {
82                                 _window = UIPermissionWindow.NoWindows;
83                                 _clipboard = UIPermissionClipboard.NoClipboard;
84
85                         } else {
86                                 _window = (UIPermissionWindow) Enum.Parse (
87                                         typeof (UIPermissionWindow), esd.Attribute ("Window"));
88
89                                 _clipboard = (UIPermissionClipboard) Enum.Parse (
90                                         typeof (UIPermissionClipboard), esd.Attribute ("Clipboard"));
91                         }
92                 }
93
94                 [MonoTODO]
95                 public override IPermission Intersect (IPermission target) 
96                 {
97                         return null;
98                 }
99
100                 [MonoTODO]
101                 public override bool IsSubsetOf (IPermission target) 
102                 {
103                         return false;
104                 }
105
106                 public bool IsUnrestricted () 
107                 {
108                         return ((_window == UIPermissionWindow.AllWindows) &&
109                                 (_clipboard == UIPermissionClipboard.AllClipboard));
110                 }
111
112                 public override SecurityElement ToXml () 
113                 {
114                         SecurityElement e = new SecurityElement ("IPermission");
115                         e.AddAttribute ("class", GetType ().AssemblyQualifiedName);
116                         e.AddAttribute ("version", "1");
117
118                         if (_window == UIPermissionWindow.NoWindows && _clipboard == UIPermissionClipboard.NoClipboard)
119                                 return e;
120
121                         if (_window == UIPermissionWindow.AllWindows && _clipboard == UIPermissionClipboard.AllClipboard) {
122                                 e.AddAttribute ("Unrestricted", "true");
123                                 return e;
124                         }
125
126                         if (_window != UIPermissionWindow.NoWindows)
127                                 e.AddAttribute ("Window", _window.ToString ());
128
129                         if (_clipboard != UIPermissionClipboard.NoClipboard)
130                                 e.AddAttribute ("Clipboard", _clipboard.ToString ());
131
132                         return e;
133                 }
134
135                 [MonoTODO]
136                 public override IPermission Union (IPermission target)
137                 {
138                         return null;
139                 }
140
141                 // IBuiltInPermission
142                 int IBuiltInPermission.GetTokenIndex ()
143                 {
144                         return 7;
145                 }
146         }
147 }