2005-06-05 Peter Bartok <pbartok@novell.com>
[mono.git] / mcs / class / System.Data.ObjectSpaces / System.Data.ObjectSpaces / ObjectSpace.cs
1 //\r
2 // System.Data.ObjectSpaces.ObjectSpace.cs : Handles high-level object persistence interactions with a data source.\r
3 //\r
4 // Authors:\r
5 //   Mark Easton (mark.easton@blinksoftware.co.uk)\r
6 //   Tim Coleman (tim@timcoleman.com)\r
7 //\r
8 // (C) BLiNK Software Ltd.  http://www.blinksoftware.co.uk\r
9 // Copyright (C) Tim Coleman, 2003\r
10 //\r
11
12 //
13 // Permission is hereby granted, free of charge, to any person obtaining
14 // a copy of this software and associated documentation files (the
15 // "Software"), to deal in the Software without restriction, including
16 // without limitation the rights to use, copy, modify, merge, publish,
17 // distribute, sublicense, and/or sell copies of the Software, and to
18 // permit persons to whom the Software is furnished to do so, subject to
19 // the following conditions:
20 // 
21 // The above copyright notice and this permission notice shall be
22 // included in all copies or substantial portions of the Software.
23 // 
24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 //
32 \r
33 #if NET_2_0\r
34 \r
35 using System.Collections;\r
36 using System.Data;\r
37 using System.Data.Mapping;\r
38 using System.Data.ObjectSpaces.Query;\r
39 using System.Data.ObjectSpaces.Schema;\r
40 \r
41 namespace System.Data.ObjectSpaces\r
42 {\r
43         public class ObjectSpace\r
44         {        \r
45                 #region Fields\r
46 \r
47                 MappingSchema map;\r
48                 ObjectSources sources;\r
49                 ObjectSchema os;\r
50                 CommonObjectContext context;\r
51 \r
52                 #endregion // Fields\r
53 \r
54                 #region Constructors\r
55 \r
56                 private ObjectSpace ()\r
57                         : base ()\r
58                 {\r
59                         os = new ObjectSchema ();\r
60                         context = new CommonObjectContext (os);\r
61                 }\r
62 \r
63                 [MonoTODO]                \r
64                 public ObjectSpace (MappingSchema map, ObjectSources sources) \r
65                         : this ()\r
66                 {\r
67                         this.map = map;\r
68                         this.sources = sources;\r
69                 }\r
70                 \r
71                 [MonoTODO ("Figure out correct name")]\r
72                 public ObjectSpace (string mapFile, IDbConnection con) \r
73                         : this ()\r
74                 {\r
75                         map = new MappingSchema (mapFile);\r
76                         sources = new ObjectSources ();\r
77                         sources.Add (map.DataSources [0].Name, con);\r
78                 }\r
79                 \r
80                 public ObjectSpace (string mapFile, ObjectSources sources) \r
81                         : this ()\r
82                 {\r
83                         map = new MappingSchema (mapFile);\r
84                         this.sources = sources;\r
85                 }\r
86                 \r
87                 [MonoTODO ("Figure out correct name")]\r
88                 public ObjectSpace (MappingSchema map, IDbConnection con) \r
89                         : this ()\r
90                 {\r
91                         this.map = map;\r
92                         sources = new ObjectSources ();\r
93                         sources.Add (map.DataSources [0].Name, con);\r
94                 }\r
95 \r
96                 #endregion // Constructors\r
97 \r
98                 #region Properties\r
99 \r
100                 internal ObjectContext ObjectContext {\r
101                         get { return context; }\r
102                 }\r
103 \r
104                 #endregion // Properties\r
105 \r
106                 #region Methods\r
107 \r
108                 public object GetObject (ObjectQuery query, object[] parameters)\r
109                 {\r
110                         return GetObject (GetObjectReader (query, parameters));\r
111                 }\r
112 \r
113                 public object GetObject (Type type, string queryString)\r
114                 {\r
115                         return GetObject (GetObjectReader (type, queryString));\r
116                 }\r
117 \r
118                 public object GetObject (Type type, string queryString, string relatedSpan)\r
119                 {\r
120                         return GetObject (GetObjectReader (type, queryString));\r
121                 }\r
122 \r
123                 private object GetObject (ObjectReader reader)\r
124                 {\r
125                         reader.Read ();\r
126                         object result = reader.Current;\r
127                         reader.Close ();\r
128                         return result;\r
129                 }\r
130 \r
131                 public ObjectReader GetObjectReader (ObjectQuery query, object[] parameters)\r
132                 {\r
133                         ObjectExpression oe = OPath.Parse (query, os);\r
134                         CompiledQuery cq = oe.Compile (map);\r
135                         return ObjectEngine.GetObjectReader (sources, context, cq, parameters);\r
136                 }\r
137 \r
138                 public ObjectReader GetObjectReader (Type type, string queryString)\r
139                 {\r
140                         return GetObjectReader (new ObjectQuery (type, queryString), null);\r
141                 }\r
142 \r
143                 public ObjectReader GetObjectReader (Type type, string queryString, string relatedSpan)\r
144                 {\r
145                         return GetObjectReader (new ObjectQuery (type, queryString, relatedSpan), null);\r
146                 }\r
147 \r
148                 public ObjectSet GetObjectSet (ObjectQuery query, object[] parameters)\r
149                 {\r
150                         return GetObjectSet (GetObjectReader (query, parameters));\r
151                 }\r
152 \r
153                 public ObjectSet GetObjectSet (Type type, string queryString)\r
154                 {\r
155                         return GetObjectSet (GetObjectReader (type, queryString));\r
156                 }\r
157 \r
158                 public ObjectSet GetObjectSet (Type type, string queryString, string relatedSpan)\r
159                 {\r
160                         return GetObjectSet (GetObjectReader (type, queryString, relatedSpan));\r
161                 }\r
162 \r
163                 private ObjectSet GetObjectSet (ObjectReader reader)\r
164                 {\r
165                         ObjectSet result = new ObjectSet ();\r
166                         foreach (object o in reader)\r
167                                 result.Add (o);\r
168                         reader.Close ();\r
169                         return result;\r
170                 }\r
171 \r
172                 public void MarkForDeletion (object obj) \r
173                 {\r
174                         MarkForDeletion (new object[] {obj});\r
175                 }\r
176 \r
177                 [MonoTODO]\r
178                 public void MarkForDeletion (ICollection objs) {}\r
179 \r
180                 public void PersistChanges (object obj) \r
181                 {\r
182                         PersistChanges (new object[] {obj}, new PersistenceOptions ());\r
183                 }\r
184 \r
185                 public void PersistChanges (object obj, PersistenceOptions options) \r
186                 {\r
187                         PersistChanges (new object[] {obj}, options);\r
188                 }\r
189 \r
190                 public void PersistChanges (ICollection objs) \r
191                 {\r
192                         PersistChanges (objs, new PersistenceOptions ());\r
193                 }\r
194 \r
195                 public void PersistChanges (ICollection objs, PersistenceOptions options) \r
196                 {\r
197                         ObjectEngine.PersistChanges (map, sources, context, objs, options);\r
198                 }\r
199 \r
200                 public void Resync (object obj, Depth depth) \r
201                 {\r
202                         Resync (new object[] {obj}, depth);\r
203                 }\r
204 \r
205                 public void Resync (ICollection objs, Depth depth) \r
206                 {\r
207                         ObjectEngine.Resync (map, sources, context, objs, depth);\r
208                 }\r
209 \r
210                 public void StartTracking (object obj, InitialState state) \r
211                 {\r
212                         StartTracking (new object[] {obj}, state);\r
213                 }\r
214         \r
215                 [MonoTODO]\r
216                 public void StartTracking (ICollection objs, InitialState state) \r
217                 {\r
218                 }\r
219 \r
220                 #endregion // Methods\r
221         }\r
222 }\r
223 \r
224 #endif\r