2005-06-05 Peter Bartok <pbartok@novell.com>
[mono.git] / mcs / class / System.Data.ObjectSpaces / System.Data.ObjectSpaces / ObjectSet.cs
1 //\r
2 // System.Data.ObjectSpaces.ObjectSet.cs \r
3 //\r
4 // Author:\r
5 //   Tim Coleman (tim@timcoleman.com)\r
6 //\r
7 // Copyright (C) Tim Coleman, 2003-2004\r
8 //\r
9
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30 \r
31 #if NET_2_0\r
32 \r
33 using System.Collections;\r
34 using System.ComponentModel;\r
35 using System.Data.ObjectSpaces.Schema;\r
36 using System.Xml;\r
37 using System.Xml.Schema;\r
38 using System.Xml.Serialization;\r
39 \r
40 namespace System.Data.ObjectSpaces\r
41 {\r
42         public class ObjectSet : CollectionBase, IListSource, IXmlSerializable\r
43         {        \r
44                 #region Fields\r
45 \r
46                 DynamicAssembly da;\r
47                 ObjectContext context;\r
48                 ObjectSchema os;\r
49 \r
50                 #endregion // Fields\r
51 \r
52                 #region Constructors\r
53 \r
54                 public ObjectSet (Type t, ObjectSchema oschema)\r
55                 {\r
56                         da = DynamicAssembly.GetDynamicAssembly (t);\r
57                         os = oschema;\r
58                         context = new CommonObjectContext (oschema);\r
59                 }\r
60 \r
61                 public ObjectSet ()\r
62                         : this (typeof (object), new ObjectSchema ())\r
63                 {\r
64                 }\r
65 \r
66                 #endregion // Constructors\r
67 \r
68                 #region Properties\r
69 \r
70                 [MonoTODO]\r
71                 public object this [int i] {\r
72                         get { return InnerList [i]; }\r
73                         set { InnerList [i] = value; }\r
74                 }\r
75 \r
76                 [MonoTODO]\r
77                 bool IListSource.ContainsListCollection {\r
78                         get { throw new NotImplementedException(); }\r
79                 }\r
80                  \r
81                 internal ObjectContext ObjectContext {\r
82                         get { return context; }\r
83                 }\r
84 \r
85                 #endregion // Properties\r
86 \r
87                 #region Methods\r
88 \r
89                 public void Add (object o)\r
90                 {\r
91                         Type t = o.GetType ();\r
92                         if (t != da.UnderlyingType)\r
93                                 throw new ObjectException (String.Format (Locale.GetText ("Wrong Object type '{0}' added to ObjectSet.  ObjectSet type is '{1}'"), t.FullName, da.UnderlyingType.FullName));\r
94                         context.Add (o, ObjectState.Inserted);\r
95                         InnerList.Add (o);\r
96                 }\r
97 \r
98                 public void Add (ICollection c)\r
99                 {\r
100                         foreach (object o in c)\r
101                                 Add (o);\r
102                 }\r
103 \r
104                 public void Add (object o, ObjectState state)\r
105                 {\r
106                         Type t = o.GetType ();\r
107                         if (t != da.UnderlyingType)\r
108                                 throw new ObjectException (String.Format (Locale.GetText ("Wrong Object type '{0}' added to ObjectSet.  ObjectSet type is '{1}'"), t.FullName, da.UnderlyingType.FullName));\r
109                         context.Add (o, state);\r
110                         InnerList.Add (o);\r
111                 }\r
112 \r
113                 [MonoTODO]\r
114                 public void GetRemotingDiffGram (XmlWriter writer)\r
115                 {\r
116                         throw new NotImplementedException ();\r
117                 }\r
118 \r
119                 IList IListSource.GetList ()\r
120                 {\r
121                         return List;\r
122                 }\r
123 \r
124                 [MonoTODO]\r
125                 XmlSchema IXmlSerializable.GetSchema()\r
126                 {\r
127                         throw new NotImplementedException ();\r
128                 }\r
129 \r
130                 [MonoTODO]\r
131                 void IXmlSerializable.ReadXml (XmlReader reader)\r
132                 {\r
133                         throw new NotImplementedException();\r
134                 }\r
135 \r
136                 [MonoTODO]\r
137                 void IXmlSerializable.WriteXml (XmlWriter writer)\r
138                 {\r
139                         throw new NotImplementedException();\r
140                 }\r
141 \r
142                 [MonoTODO]\r
143                 protected override void OnInsertComplete (int index, object value)\r
144                 {\r
145                         throw new NotImplementedException();\r
146                 }\r
147 \r
148                 [MonoTODO]\r
149                 protected override void OnRemoveComplete (int index, object value)\r
150                 {\r
151                         throw new NotImplementedException();\r
152                 }\r
153 \r
154                 [MonoTODO]\r
155                 protected override void OnSetComplete (int index, object oldValue, object newValue)\r
156                 {\r
157                         throw new NotImplementedException();\r
158                 }\r
159 \r
160                 [MonoTODO]\r
161                 public void StartTracking (Object o, InitialState state)\r
162                 {\r
163                         throw new NotImplementedException();\r
164                 }\r
165 \r
166                 #endregion // Methods\r
167         }\r
168 }\r
169 \r
170 #endif // NET_2_0\r