Merge pull request #4621 from alexanderkyte/strdup_env
[mono.git] / mcs / class / System.DirectoryServices / System.DirectoryServices / DirectoryServicesPermissionEntryCollection.cs
1 /******************************************************************************
2 * The MIT License
3 * Copyright (c) 2003 Novell Inc.,  www.novell.com
4
5 * Permission is hereby granted, free of charge, to any person obtaining  a copy
6 * of this software and associated documentation files (the Software), to deal
7 * in the Software without restriction, including  without limitation the rights
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
9 * copies of the Software, and to  permit persons to whom the Software is 
10 * furnished to do so, subject to the following conditions:
11
12 * The above copyright notice and this permission notice shall be included in 
13 * all copies or substantial portions of the Software.
14
15 * THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 * SOFTWARE.
22 *******************************************************************************/
23
24 //
25 // System.DirectoryServices.DirectoryServicesPermissionEntryCollection.cs
26 //
27 // Copyright (C) 2004  Novell Inc.
28 //
29 // Written by Raja R Harinath <rharinath@novell.com>
30 //
31
32 using System.Collections;
33 using System.Security.Permissions;
34
35 namespace System.DirectoryServices {
36
37         // when deserializing an instance serialized by MS.NET, you get the following 
38         // error : Field "owner" not found in class ....
39         [Serializable]
40         [MonoTODO ("Fix serialization compatibility with MS.NET")]
41         public class DirectoryServicesPermissionEntryCollection : CollectionBase {
42
43                 private DirectoryServicesPermission owner;
44
45                 internal DirectoryServicesPermissionEntryCollection (DirectoryServicesPermission owner)
46                 {
47                         this.owner = owner;
48                         ResourcePermissionBaseEntry[] entries = owner.GetEntries ();
49                         if (entries.Length > 0) {
50                                 foreach (ResourcePermissionBaseEntry entry in entries) {
51                                         DirectoryServicesPermissionAccess dspa = (DirectoryServicesPermissionAccess) entry.PermissionAccess;
52                                         DirectoryServicesPermissionEntry dspe = new DirectoryServicesPermissionEntry (dspa, entry.PermissionAccessPath [0]);
53                                         // we don't want to add them (again) to the base class
54                                         InnerList.Add (dspe);
55                                 }
56                         }
57                 }
58
59                 public DirectoryServicesPermissionEntry this [int index] {
60                         get { return List[index] as DirectoryServicesPermissionEntry; }
61                         set { List[index] = value; }
62                 }
63
64                 public int Add (DirectoryServicesPermissionEntry value)
65                 {
66                         return List.Add (value);
67                 }
68
69                 public void AddRange (DirectoryServicesPermissionEntry[] value)
70                 {
71                         foreach (DirectoryServicesPermissionEntry entry in value)
72                                 Add (entry);
73                 }
74
75                 public void AddRange (DirectoryServicesPermissionEntryCollection value)
76                 {
77                         foreach (DirectoryServicesPermissionEntry entry in value)
78                                 Add (entry);
79                 }
80
81                 public void CopyTo (DirectoryServicesPermissionEntry[] array, int index)
82                 {
83                         foreach (DirectoryServicesPermissionEntry entry in List)
84                                 array[index++] = entry;
85                 }
86
87                 public bool Contains (DirectoryServicesPermissionEntry value)
88                 {
89                         return List.Contains (value);
90                 }
91
92                 public int IndexOf (DirectoryServicesPermissionEntry value)
93                 {
94                         return List.IndexOf (value);
95                 }
96
97                 public void Insert (int index, DirectoryServicesPermissionEntry value)
98                 {
99                         List.Insert (index, value);
100                 }
101
102                 public void Remove (DirectoryServicesPermissionEntry value)
103                 {
104                         List.Remove (value);
105                 }
106
107                 protected override void OnClear ()
108                 {
109                         owner.ClearEntries ();
110                 }
111
112                 protected override void OnInsert (int index, object value)
113                 {
114                         owner.Add (value);
115                 }
116
117                 protected override void OnRemove (int index, object value)
118                 {
119                         owner.Remove (value);
120                 }
121
122                 protected override void OnSet (int index, object oldValue, object newValue)
123                 {
124                         owner.Remove (oldValue);
125                         owner.Add (newValue);
126                 }
127         }
128 }
129