aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data/NHibernate/NHibernateUserData.cs
diff options
context:
space:
mode:
authorCharles Krinke2009-01-11 18:24:16 +0000
committerCharles Krinke2009-01-11 18:24:16 +0000
commit40f34aeffd64e2aa81cecb2e861f60d6e8886198 (patch)
tree5d0059eb7aa70799c8239bb273efc997138cabb5 /OpenSim/Data/NHibernate/NHibernateUserData.cs
parentThank you kindly, Tlaukkan (Tommil) for a patch that: (diff)
downloadopensim-SC-40f34aeffd64e2aa81cecb2e861f60d6e8886198.zip
opensim-SC-40f34aeffd64e2aa81cecb2e861f60d6e8886198.tar.gz
opensim-SC-40f34aeffd64e2aa81cecb2e861f60d6e8886198.tar.bz2
opensim-SC-40f34aeffd64e2aa81cecb2e861f60d6e8886198.tar.xz
Thank you kindly, Tlaukkan (Tommil) for a patch that:
Fixed all NHibernate unit tests by implementing missing persistency methods, tables, columns and fixing bugs in the existing implementation. Two minor changes to classes outside NHibernate module: Added Scene instantiation for SceneObjectGroup in OpenSim.Data.Tests.BasicRegionTest as this was required by the NHibernate persistency. In the process added also mock constructor to Scene which only populates RegionInfo in the scene which is used by ScenePart.RegionUUID. NHibernate module is still in experimental state and has not been tested at opensim region or ugaim runtime configuration. Adding unit tests to build is not yet advisable nor using NHibernate module in any production setup.
Diffstat (limited to '')
-rw-r--r--OpenSim/Data/NHibernate/NHibernateUserData.cs188
1 files changed, 180 insertions, 8 deletions
diff --git a/OpenSim/Data/NHibernate/NHibernateUserData.cs b/OpenSim/Data/NHibernate/NHibernateUserData.cs
index e0f6db7..6076f90 100644
--- a/OpenSim/Data/NHibernate/NHibernateUserData.cs
+++ b/OpenSim/Data/NHibernate/NHibernateUserData.cs
@@ -97,11 +97,18 @@ namespace OpenSim.Data.NHibernate
97 97
98 override public void AddNewUserProfile(UserProfileData profile) 98 override public void AddNewUserProfile(UserProfileData profile)
99 { 99 {
100 if (profile.ID == UUID.Zero)
101 {
102 m_log.ErrorFormat("[NHIBERNATE] Attempted to add User {0} {1} with zero UUID, throwintg exception as this is programming error ", profile.FirstName, profile.SurName);
103 return;
104 }
105
100 if (!ExistsUser(profile.ID)) 106 if (!ExistsUser(profile.ID))
101 { 107 {
102 m_log.InfoFormat("[NHIBERNATE] AddNewUserProfile {0}", profile.ID); 108 m_log.InfoFormat("[NHIBERNATE] AddNewUserProfile {0}", profile.ID);
103 manager.Save(profile); 109 manager.Save(profile);
104 SetAgentData(profile.ID, profile.CurrentAgent); 110 // Agent should not be saved according to BasicUserTest.T015_UserPersistency()
111 // SetAgentData(profile.ID, profile.CurrentAgent);
105 112
106 } 113 }
107 else 114 else
@@ -131,7 +138,8 @@ namespace OpenSim.Data.NHibernate
131 if (ExistsUser(profile.ID)) 138 if (ExistsUser(profile.ID))
132 { 139 {
133 manager.Update(profile); 140 manager.Update(profile);
134 SetAgentData(profile.ID, profile.CurrentAgent); 141 // Agent should not be saved according to BasicUserTest.T015_UserPersistency()
142 // SetAgentData(profile.ID, profile.CurrentAgent);
135 return true; 143 return true;
136 } 144 }
137 else 145 else
@@ -144,6 +152,19 @@ namespace OpenSim.Data.NHibernate
144 152
145 override public void AddNewUserAgent(UserAgentData agent) 153 override public void AddNewUserAgent(UserAgentData agent)
146 { 154 {
155 if (agent.ProfileID == UUID.Zero)
156 {
157 m_log.ErrorFormat("[NHIBERNATE] Attempted to add new user agent with zero user id. Agent session id: {0}", agent.SessionID);
158 return;
159 }
160
161 if (agent.SessionID == UUID.Zero)
162 {
163 m_log.ErrorFormat("[NHIBERNATE] Attempted to add new user agent with zero session id. User profile id: {0}", agent.SessionID);
164 return;
165 }
166
167
147 UserAgentData old = (UserAgentData)manager.Load(typeof(UserAgentData), agent.ProfileID); 168 UserAgentData old = (UserAgentData)manager.Load(typeof(UserAgentData), agent.ProfileID);
148 if (old != null) 169 if (old != null)
149 { 170 {
@@ -214,12 +235,163 @@ namespace OpenSim.Data.NHibernate
214 } 235 }
215 236
216 // TODO: actually implement these 237 // TODO: actually implement these
217 public override void StoreWebLoginKey(UUID agentID, UUID webLoginKey) { return; } 238 public override void StoreWebLoginKey(UUID agentID, UUID webLoginKey)
218 public override void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms) { return; } 239 {
219 public override void RemoveUserFriend(UUID friendlistowner, UUID friend) { return; } 240 UserProfileData user=GetUserByUUID(agentID);
220 public override void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms) { return; } 241 user.WebLoginKey = webLoginKey;
221 public override List<FriendListItem> GetUserFriendList(UUID friendlistowner) { return new List<FriendListItem>(); } 242 UpdateUserProfile(user);
222 public override Dictionary<UUID, FriendRegionInfo> GetFriendRegionInfos (List<UUID> uuids) { return new Dictionary<UUID, FriendRegionInfo>(); } 243 return;
244 }
245
246 public override void AddNewUserFriend(UUID ownerId, UUID friendId, uint perms)
247 {
248 if (!FriendRelationExists(ownerId,friendId))
249 {
250 manager.Save(new UserFriend(UUID.Random(), ownerId, friendId, perms));
251 }
252 if (!FriendRelationExists(friendId, ownerId))
253 {
254 manager.Save(new UserFriend(UUID.Random(), friendId, ownerId, perms));
255 }
256 return;
257 }
258
259 private bool FriendRelationExists(UUID ownerId, UUID friendId)
260 {
261 using (ISession session = manager.GetSession())
262 {
263 ICriteria criteria = session.CreateCriteria(typeof(UserFriend));
264 criteria.Add(Expression.Eq("OwnerID", ownerId));
265 criteria.Add(Expression.Eq("FriendID", friendId));
266 return criteria.List().Count > 0;
267 }
268 }
269
270 public override void RemoveUserFriend(UUID ownerId, UUID friendId)
271 {
272 using (ISession session = manager.GetSession())
273 {
274 using (ITransaction transaction = session.BeginTransaction())
275 {
276
277 {
278 ICriteria criteria = session.CreateCriteria(typeof(UserFriend));
279 criteria.Add(Expression.Eq("OwnerID", ownerId));
280 criteria.Add(Expression.Eq("FriendID", friendId));
281
282 foreach (UserFriend userFriend in criteria.List())
283 {
284 session.Delete(userFriend);
285 }
286 }
287
288 {
289 ICriteria criteria = session.CreateCriteria(typeof(UserFriend));
290 criteria.Add(Expression.Eq("OwnerID", friendId));
291 criteria.Add(Expression.Eq("FriendID", ownerId));
292
293 foreach (UserFriend userFriend in criteria.List())
294 {
295 session.Delete(userFriend);
296 }
297 }
298
299 transaction.Commit();
300 }
301 }
302 return;
303 }
304
305
306 public override void UpdateUserFriendPerms(UUID ownerId, UUID friendId, uint perms)
307 {
308 using (ISession session = manager.GetSession())
309 {
310 using (ITransaction transaction = session.BeginTransaction())
311 {
312 {
313 ICriteria criteria = session.CreateCriteria(typeof(UserFriend));
314 criteria.Add(Expression.Eq("OwnerID", ownerId));
315 criteria.Add(Expression.Eq("FriendID", friendId));
316
317 foreach (UserFriend userFriend in criteria.List())
318 {
319 userFriend.FriendPermissions = perms;
320 session.Update(userFriend);
321 }
322 }
323 transaction.Commit();
324 }
325 }
326 return;
327 }
328
329 public override List<FriendListItem> GetUserFriendList(UUID ownerId)
330 {
331 List<FriendListItem> friendList=new List<FriendListItem>();
332 Dictionary<UUID, FriendListItem> friendListItemDictionary = new Dictionary<UUID, FriendListItem>();
333
334 using (ISession session = manager.GetSession())
335 {
336 ICriteria criteria = session.CreateCriteria(typeof(UserFriend));
337 criteria.Add(Expression.Or(
338 Expression.Eq("OwnerID", ownerId),
339 Expression.Eq("FriendID", ownerId)
340 ));
341
342 foreach (UserFriend userFriend in criteria.List())
343 {
344 if (userFriend.OwnerID == ownerId)
345 {
346 FriendListItem friendListItem = new FriendListItem();
347 friendListItem.FriendListOwner = userFriend.OwnerID;
348 friendListItem.Friend = userFriend.FriendID;
349 friendListItem.FriendPerms = userFriend.FriendPermissions;
350 friendListItemDictionary.Add(userFriend.FriendID, friendListItem);
351 friendList.Add(friendListItem);
352 }
353 }
354
355 // Reading permissions to other direction
356 foreach (UserFriend userFriend in criteria.List())
357 {
358 if (userFriend.FriendID == ownerId)
359 {
360 //Ignore if there is no reverse relation existing.
361 //if (friendListItemDictionary.ContainsKey(userFriend.OwnerID))
362 {
363 FriendListItem friendListItem = friendListItemDictionary[userFriend.OwnerID];
364 friendListItem.FriendListOwnerPerms = userFriend.FriendPermissions;
365 }
366 }
367 }
368
369 }
370
371 return friendList;
372 }
373
374
375 public override Dictionary<UUID, FriendRegionInfo> GetFriendRegionInfos (List<UUID> friendsIds)
376 {
377 Dictionary<UUID, FriendRegionInfo> friendRegionInfos=new Dictionary<UUID, FriendRegionInfo>();
378
379 foreach(UUID friendId in friendsIds)
380 {
381 UserAgentData agent=GetAgentByUUID(friendId);
382 if (agent != null)
383 {
384 FriendRegionInfo fri = new FriendRegionInfo();
385 fri.isOnline = agent.AgentOnline;
386 fri.regionHandle = agent.Handle;
387
388 friendRegionInfos[friendId] = fri;
389 }
390 }
391
392 return friendRegionInfos;
393 }
394
223 public override bool MoneyTransferRequest(UUID from, UUID to, uint amount) { return true; } 395 public override bool MoneyTransferRequest(UUID from, UUID to, uint amount) { return true; }
224 public override bool InventoryTransferRequest(UUID from, UUID to, UUID inventory) { return true; } 396 public override bool InventoryTransferRequest(UUID from, UUID to, UUID inventory) { return true; }
225 397