2006-05-05 Chris Toshok <toshok@ximian.com>
[mono.git] / mcs / class / System / System.Configuration / SettingsBase.cs
1 //
2 // System.Web.UI.WebControls.SettingsBase.cs
3 //
4 // Authors:
5 //      Chris Toshok (toshok@ximian.com)
6 //
7 // (C) 2005 Novell, Inc (http://www.novell.com)
8 //
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
16 // 
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
19 // 
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 //
28
29 #if NET_2_0
30 using System;
31 using System.ComponentModel;
32
33 namespace System.Configuration
34 {
35
36         public abstract class SettingsBase
37         {
38                 protected SettingsBase ()
39                 {
40                 }
41
42                 public void Initialize (SettingsContext context,
43                                         SettingsPropertyCollection properties,
44                                         SettingsProviderCollection providers)
45                 {
46                         this.context = context;
47                         this.properties = properties;
48                         this.providers = providers;
49                 }
50
51                 public virtual void Save ()
52                 {
53                         throw new NotImplementedException ();
54                 }
55
56                 [MonoTODO]
57                 public static SettingsBase Synchronized (SettingsBase settingsBase)
58                 {
59                         return new SyncSettingsBase (settingsBase);
60                 }
61
62                 public virtual SettingsContext Context {
63                         get { return context; }
64                 }
65
66                 [Browsable (false)]
67                 public bool IsSynchronized {
68                         get { return false; }
69                 }
70
71                 public virtual object this [ string propertyName ] {
72                         get { throw new NotImplementedException (); }
73                         set { throw new NotImplementedException (); }
74                 }
75
76                 public virtual SettingsPropertyCollection Properties {
77                         get { return properties; }
78                 }
79
80                 public virtual SettingsPropertyValueCollection PropertyValues {
81                         get {
82                                 SettingsPropertyValueCollection col = new SettingsPropertyValueCollection ();
83
84                                 foreach (SettingsProperty prop in properties)
85                                 {
86                                         col.Add (new SettingsPropertyValue (prop));
87                                 }
88
89                                 return col;
90                         }
91                 }
92
93                 public virtual SettingsProviderCollection Providers {
94                         get {
95                                 return providers;
96                         }
97                 }
98
99                 SettingsContext context;
100                 SettingsPropertyCollection properties;
101                 SettingsProviderCollection providers;
102
103                 private class SyncSettingsBase : SettingsBase
104                 {
105                         SettingsBase host;
106                         object syncRoot;
107
108                         public SyncSettingsBase (SettingsBase host)
109                         {
110                                 this.host = host;
111                                 syncRoot = host;
112                         }
113
114                         public override void Save ()
115                         {
116                                 lock (syncRoot) {
117                                         host.Save ();
118                                 }
119                         }
120
121                         public override object this [ string propertyName ] {
122                                 get { return host[propertyName]; }
123                                 set {
124                                         lock (syncRoot) {
125                                                 host[propertyName] = value;
126                                         }
127                                 }
128                         }
129
130                         public override SettingsPropertyCollection Properties {
131                                 get {
132                                         SettingsPropertyCollection props;
133
134                                         lock (syncRoot) {
135                                                 props = host.Properties;
136                                         }
137
138                                         return props;
139                                 }
140                         }
141
142                         public virtual SettingsPropertyValueCollection PropertyValues {
143                                 get {
144                                         SettingsPropertyValueCollection vals;
145
146                                         lock (syncRoot) {
147                                                 vals = host.PropertyValues;
148                                         }
149
150                                         return vals;
151                                 }
152                         }
153
154                         public virtual SettingsProviderCollection Providers {
155                                 get {
156                                         SettingsProviderCollection prov;
157
158                                         lock (syncRoot) {
159                                                 prov = host.Providers;
160                                         }
161
162                                         return prov;
163                                 }
164                         }
165                 }
166         }
167 }
168
169 #endif