2005-06-05 Peter Bartok <pbartok@novell.com>
[mono.git] / mcs / nant / src / PropertyDictionary.cs
1 // NAnt - A .NET build tool\r
2 // Copyright (C) 2001 Gerry Shaw\r
3 //\r
4 // This program is free software; you can redistribute it and/or modify\r
5 // it under the terms of the GNU General Public License as published by\r
6 // the Free Software Foundation; either version 2 of the License, or\r
7 // (at your option) any later version.\r
8 //\r
9 // This program is distributed in the hope that it will be useful,\r
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
12 // GNU General Public License for more details.\r
13 //\r
14 // You should have received a copy of the GNU General Public License\r
15 // along with this program; if not, write to the Free Software\r
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
17 //\r
18 // Gerry Shaw (gerry_shaw@yahoo.com)\r
19 \r
20 namespace SourceForge.NAnt {\r
21 \r
22     using System.Collections;\r
23     using System.Collections.Specialized;\r
24 \r
25     public class PropertyDictionary : DictionaryBase {\r
26 \r
27         /// <summary>\r
28         /// Maintains a list of the property names that are readonly.\r
29         /// </summary>\r
30         StringCollection _readOnlyProperties = new StringCollection();\r
31 \r
32         /// <summary>\r
33         /// Adds a property that cannot be changed.\r
34         /// </summary>\r
35         /// <remarks>\r
36         /// Properties added with this method can never be changed.  Note that\r
37         /// they are removed if the <c>Clear</c> method is called.\r
38         /// </remarks>\r
39         /// <param name="name">Name of property</param>\r
40         /// <param name="value">Value of property</param>\r
41         public void AddReadOnly(string name, string value) {\r
42             if (!_readOnlyProperties.Contains(name)) {\r
43                 _readOnlyProperties.Add(name);\r
44                 Dictionary.Add(name, value);\r
45             }\r
46         }\r
47 \r
48         /// <summary>\r
49         /// Adds a property to the collection.\r
50         /// </summary>\r
51         /// <param name="name">Name of property</param>\r
52         /// <param name="value">Value of property</param>\r
53         public void Add(string name, string value) {\r
54             if (!_readOnlyProperties.Contains(name)) {\r
55                 Dictionary.Add(name, value);\r
56             }\r
57         }\r
58 \r
59         public string this[string name] {\r
60             get { return (string) Dictionary[(object) name]; }\r
61             set {\r
62                 if (!_readOnlyProperties.Contains(name)) {\r
63                     Dictionary[name] = value;\r
64                 }\r
65             }\r
66         }\r
67 \r
68         protected override void OnClear() {\r
69             _readOnlyProperties.Clear();\r
70         }\r
71     }\r
72 }