aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Storage/LocalStorageDb4o/Db4LocalStorage.cs
diff options
context:
space:
mode:
authorMW2007-06-27 15:28:52 +0000
committerMW2007-06-27 15:28:52 +0000
commit646bbbc84b8010e0dacbeed5342cdb045f46cc49 (patch)
tree770b34d19855363c3c113ab9a0af9a56d821d887 /OpenSim/Region/Storage/LocalStorageDb4o/Db4LocalStorage.cs
downloadopensim-SC_OLD-646bbbc84b8010e0dacbeed5342cdb045f46cc49.zip
opensim-SC_OLD-646bbbc84b8010e0dacbeed5342cdb045f46cc49.tar.gz
opensim-SC_OLD-646bbbc84b8010e0dacbeed5342cdb045f46cc49.tar.bz2
opensim-SC_OLD-646bbbc84b8010e0dacbeed5342cdb045f46cc49.tar.xz
Some work on restructuring the namespaces / project names. Note this doesn't compile yet as not all the code has been changed to use the new namespaces. Am committing it now for feedback on the namespaces.
Diffstat (limited to 'OpenSim/Region/Storage/LocalStorageDb4o/Db4LocalStorage.cs')
-rw-r--r--OpenSim/Region/Storage/LocalStorageDb4o/Db4LocalStorage.cs271
1 files changed, 271 insertions, 0 deletions
diff --git a/OpenSim/Region/Storage/LocalStorageDb4o/Db4LocalStorage.cs b/OpenSim/Region/Storage/LocalStorageDb4o/Db4LocalStorage.cs
new file mode 100644
index 0000000..8e6b04d
--- /dev/null
+++ b/OpenSim/Region/Storage/LocalStorageDb4o/Db4LocalStorage.cs
@@ -0,0 +1,271 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using System.Collections.Generic;
30using Db4objects.Db4o;
31using Db4objects.Db4o.Query;
32
33using libsecondlife;
34using OpenSim.Framework.Interfaces;
35using OpenSim.Framework.Types;
36using OpenSim.Framework.Console;
37
38
39namespace OpenSim.Storage.LocalStorageDb4o
40{
41 /// <summary>
42 ///
43 /// </summary>
44 public class Db4LocalStorage : ILocalStorage
45 {
46 private IObjectContainer db;
47 private string datastore;
48
49 public Db4LocalStorage()
50 {
51
52 }
53
54 public void Initialise(string dfile)
55 {
56 OpenSim.Framework.Console.MainLog.Instance.Warn("Db4LocalStorage Opening " + dfile);
57 datastore = dfile;
58 try
59 {
60 db = Db4oFactory.OpenFile(datastore);
61 OpenSim.Framework.Console.MainLog.Instance.Verbose("Db4LocalStorage creation");
62 }
63 catch (Exception e)
64 {
65 db.Close();
66 OpenSim.Framework.Console.MainLog.Instance.Warn("Db4LocalStorage :Constructor - Exception occured");
67 OpenSim.Framework.Console.MainLog.Instance.Warn(e.ToString());
68 }
69 }
70
71 public void StorePrim(PrimData prim)
72 {
73 IObjectSet result = db.Query(new UUIDPrimQuery(prim.FullID));
74 if (result.Count > 0)
75 {
76 //prim already in storage
77 //so update it
78 PrimData found = (PrimData)result.Next();
79 found.PathBegin = prim.PathBegin;
80 found.PathCurve = prim.PathCurve;
81 found.PathEnd = prim.PathEnd;
82 found.PathRadiusOffset = prim.PathRadiusOffset;
83 found.PathRevolutions = prim.PathRevolutions;
84 found.PathScaleX = prim.PathScaleX;
85 found.PathScaleY = prim.PathScaleY;
86 found.PathShearX = prim.PathShearX;
87 found.PathShearY = prim.PathShearY;
88 found.PathSkew = prim.PathSkew;
89 found.PathTaperX = prim.PathTaperX;
90 found.PathTaperY = prim.PathTaperY;
91 found.PathTwist = prim.PathTwist;
92 found.PathTwistBegin = prim.PathTwistBegin;
93 found.PCode = prim.PCode;
94 found.ProfileBegin = prim.ProfileBegin;
95 found.ProfileCurve = prim.ProfileCurve;
96 found.ProfileEnd = prim.ProfileEnd;
97 found.ProfileHollow = prim.ProfileHollow;
98 found.Position = prim.Position;
99 found.Rotation = prim.Rotation;
100 found.TextureEntry = prim.TextureEntry;
101 db.Set(found);
102 db.Commit();
103 }
104 else
105 {
106 //not in storage
107 db.Set(prim);
108 db.Commit();
109 }
110 }
111
112 public void RemovePrim(LLUUID primID)
113 {
114 IObjectSet result = db.Query(new UUIDPrimQuery(primID));
115 if (result.Count > 0)
116 {
117 PrimData found = (PrimData)result.Next();
118 db.Delete(found);
119 }
120 }
121
122
123 public void LoadPrimitives(ILocalStorageReceiver receiver)
124 {
125 IObjectSet result = db.Get(typeof(PrimData));
126 OpenSim.Framework.Console.MainLog.Instance.Verbose("Db4LocalStorage.cs: LoadPrimitives() - number of prims in storages is " + result.Count);
127 foreach (PrimData prim in result)
128 {
129 receiver.PrimFromStorage(prim);
130 }
131 }
132
133 public float[] LoadWorld()
134 {
135 OpenSim.Framework.Console.MainLog.Instance.Verbose("LoadWorld() - Loading world....");
136 float[] heightmap = null;
137 OpenSim.Framework.Console.MainLog.Instance.Verbose("LoadWorld() - Looking for a heightmap in local DB");
138 IObjectSet world_result = db.Get(typeof(MapStorage));
139 if (world_result.Count > 0)
140 {
141 OpenSim.Framework.Console.MainLog.Instance.Verbose("LoadWorld() - Found a heightmap in local database, loading");
142 MapStorage map = (MapStorage)world_result.Next();
143 //blank.LandMap = map.Map;
144 heightmap = map.Map;
145 }
146 return heightmap;
147 }
148
149 public void SaveMap(float[] heightmap)
150 {
151 IObjectSet world_result = db.Get(typeof(MapStorage));
152 if (world_result.Count > 0)
153 {
154 OpenSim.Framework.Console.MainLog.Instance.Verbose("SaveWorld() - updating saved copy of heightmap in local database");
155 MapStorage map = (MapStorage)world_result.Next();
156 db.Delete(map);
157 }
158 MapStorage map1 = new MapStorage();
159 map1.Map = heightmap; //OpenSim_Main.local_world.LandMap;
160 db.Set(map1);
161 db.Commit();
162 }
163
164 public void SaveParcel(ParcelData parcel)
165 {
166 IObjectSet result = db.Query(new UUIDParcelQuery(parcel.globalID));
167 if (result.Count > 0)
168 {
169 //Old Parcel
170 ParcelData updateParcel = (ParcelData)result.Next();
171 updateParcel.AABBMax = parcel.AABBMax;
172 updateParcel.AABBMin = parcel.AABBMin;
173 updateParcel.area = parcel.area;
174 updateParcel.auctionID = parcel.auctionID;
175 updateParcel.authBuyerID = parcel.authBuyerID;
176 updateParcel.category = parcel.category;
177 updateParcel.claimDate = parcel.claimDate;
178 updateParcel.claimPrice = parcel.claimPrice;
179 updateParcel.groupID = parcel.groupID;
180 updateParcel.groupPrims = parcel.groupPrims;
181 updateParcel.isGroupOwned = parcel.isGroupOwned;
182 updateParcel.landingType = parcel.landingType;
183 updateParcel.mediaAutoScale = parcel.mediaAutoScale;
184 updateParcel.mediaID = parcel.mediaID;
185 updateParcel.mediaURL = parcel.mediaURL;
186 updateParcel.musicURL = parcel.musicURL;
187 updateParcel.localID = parcel.localID;
188 updateParcel.ownerID = parcel.ownerID;
189 updateParcel.passHours = parcel.passHours;
190 updateParcel.passPrice = parcel.passPrice;
191 updateParcel.parcelBitmapByteArray = (byte[])parcel.parcelBitmapByteArray.Clone();
192 updateParcel.parcelDesc = parcel.parcelDesc;
193 updateParcel.parcelFlags = parcel.parcelFlags;
194 updateParcel.parcelName = parcel.parcelName;
195 updateParcel.parcelStatus = parcel.parcelStatus;
196 updateParcel.salePrice = parcel.salePrice;
197 updateParcel.snapshotID = parcel.snapshotID;
198 updateParcel.userLocation = parcel.userLocation;
199 updateParcel.userLookAt = parcel.userLookAt;
200
201 db.Set(updateParcel);
202 }
203 else
204 {
205 db.Set(parcel);
206 }
207 db.Commit();
208 }
209
210 public void SaveParcels(ParcelData[] parcel_data)
211 {
212 MainLog.Instance.Notice("Parcel Backup: Saving Parcels...");
213 int i;
214 for (i = 0; i < parcel_data.GetLength(0); i++)
215 {
216
217 SaveParcel(parcel_data[i]);
218
219 }
220 MainLog.Instance.Notice("Parcel Backup: Parcel Save Complete");
221 }
222
223 public void RemoveParcel(ParcelData parcel)
224 {
225 IObjectSet result = db.Query(new UUIDParcelQuery(parcel.globalID));
226 if (result.Count > 0)
227 {
228 db.Delete(result[0]);
229 }
230 db.Commit();
231 }
232 public void RemoveAllParcels()
233 {
234 MainLog.Instance.Notice("Parcel Backup: Removing all parcels...");
235 IObjectSet result = db.Get(typeof(ParcelData));
236 if (result.Count > 0)
237 {
238 foreach (ParcelData parcelData in result)
239 {
240 RemoveParcel(parcelData);
241 }
242 }
243 }
244
245 public void LoadParcels(ILocalStorageParcelReceiver recv)
246 {
247 MainLog.Instance.Notice("Parcel Backup: Loading Parcels...");
248 IObjectSet result = db.Get(typeof(ParcelData));
249 if (result.Count > 0)
250 {
251 MainLog.Instance.Notice("Parcel Backup: Parcels exist in database.");
252 foreach (ParcelData parcelData in result)
253 {
254
255 recv.ParcelFromStorage(parcelData);
256 }
257 }
258 else
259 {
260 MainLog.Instance.Notice("Parcel Backup: No parcels exist. Creating basic parcel.");
261 recv.NoParcelDataFromStorage();
262 }
263 MainLog.Instance.Notice("Parcel Backup: Parcels Restored");
264 }
265 public void ShutDown()
266 {
267 db.Commit();
268 db.Close();
269 }
270 }
271} \ No newline at end of file