aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/Framework')
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs27
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs416
-rw-r--r--OpenSim/Region/CoreModules/Framework/InventoryAccess/Tests/InventoryAccessModuleTests.cs60
3 files changed, 238 insertions, 265 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs
index 4565d10..8c99983 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs
@@ -129,35 +129,14 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
129 } 129 }
130 130
131 /// 131 ///
132 /// DeleteToInventory 132 /// Used in DeleteToInventory
133 /// 133 ///
134 public override UUID DeleteToInventory(DeRezAction action, UUID folderID, List<SceneObjectGroup> objectGroups, IClientAPI remoteClient) 134 protected override void ExportAsset(UUID agentID, UUID assetID)
135 { 135 {
136 UUID ret = UUID.Zero;
137
138 // HACK: Only works for lists of length one.
139 // Intermediate version, just to make things compile
140 foreach (SceneObjectGroup g in objectGroups)
141 ret = DeleteToInventory(action, folderID, g, remoteClient);
142
143 return ret;
144 }
145
146 // DO NOT OVERRIDE THE BASE METHOD
147 public new virtual UUID DeleteToInventory(DeRezAction action, UUID folderID,
148 SceneObjectGroup objectGroup, IClientAPI remoteClient)
149 {
150 UUID assetID = base.DeleteToInventory(action, folderID, new List<SceneObjectGroup>() {objectGroup}, remoteClient);
151
152 if (!assetID.Equals(UUID.Zero)) 136 if (!assetID.Equals(UUID.Zero))
153 { 137 UploadInventoryItem(agentID, assetID, "", 0);
154 if (remoteClient != null)
155 UploadInventoryItem(remoteClient.AgentId, assetID, "", 0);
156 }
157 else 138 else
158 m_log.Debug("[HGScene]: Scene.Inventory did not create asset"); 139 m_log.Debug("[HGScene]: Scene.Inventory did not create asset");
159
160 return assetID;
161 } 140 }
162 141
163 /// 142 ///
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
index c0946f4..a716326 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.cs
@@ -274,238 +274,278 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
274 foreach (SceneObjectGroup objectGroup in objlist) 274 foreach (SceneObjectGroup objectGroup in objlist)
275 objectGroup.AbsolutePosition = originalPositions[objectGroup.UUID]; 275 objectGroup.AbsolutePosition = originalPositions[objectGroup.UUID];
276 276
277 // Get the user info of the item destination 277 InventoryItemBase item = CreateItemForObject(action, remoteClient, objlist[0], folderID);
278 // 278 if (item == null)
279 UUID userID = UUID.Zero; 279 return UUID.Zero;
280 280
281 if (action == DeRezAction.Take || action == DeRezAction.TakeCopy || 281 // Can't know creator is the same, so null it in inventory
282 action == DeRezAction.SaveToExistingUserInventoryItem) 282 if (objlist.Count > 1)
283 { 283 {
284 // Take or take copy require a taker 284 item.CreatorId = UUID.Zero.ToString();
285 // Saving changes requires a local user 285 item.Flags = (uint)InventoryItemFlags.ObjectHasMultipleItems;
286 //
287 if (remoteClient == null)
288 return UUID.Zero;
289
290 userID = remoteClient.AgentId;
291 } 286 }
292 else 287 else
293 { 288 {
294 // All returns / deletes go to the object owner 289 item.CreatorId = objlist[0].RootPart.CreatorID.ToString();
295 // 290 item.SaleType = objlist[0].RootPart.ObjectSaleType;
296 userID = objlist[0].RootPart.OwnerID; 291 item.SalePrice = objlist[0].RootPart.SalePrice;
297 } 292 }
298 293
299 if (userID == UUID.Zero) // Can't proceed 294 AssetBase asset = CreateAsset(
300 { 295 objlist[0].GetPartName(objlist[0].RootPart.LocalId),
301 return UUID.Zero; 296 objlist[0].GetPartDescription(objlist[0].RootPart.LocalId),
302 } 297 (sbyte)AssetType.Object,
303 298 Utils.StringToBytes(itemXml),
304 // If we're returning someone's item, it goes back to the 299 objlist[0].OwnerID.ToString());
305 // owner's Lost And Found folder. 300 m_Scene.AssetService.Store(asset);
306 // Delete is treated like return in this case
307 // Deleting your own items makes them go to trash
308 //
309 301
310 InventoryFolderBase folder = null; 302 item.AssetID = asset.FullID;
311 InventoryItemBase item = null; 303 assetID = asset.FullID;
312 304
313 if (DeRezAction.SaveToExistingUserInventoryItem == action) 305 if (DeRezAction.SaveToExistingUserInventoryItem == action)
314 { 306 {
315 item = new InventoryItemBase(objlist[0].RootPart.FromUserInventoryItemID, userID); 307 m_Scene.InventoryService.UpdateItem(item);
316 item = m_Scene.InventoryService.GetItem(item);
317
318 //item = userInfo.RootFolder.FindItem(
319 // objectGroup.RootPart.FromUserInventoryItemID);
320
321 if (null == item)
322 {
323 m_log.DebugFormat(
324 "[AGENT INVENTORY]: Object {0} {1} scheduled for save to inventory has already been deleted.",
325 objlist[0].Name, objlist[0].UUID);
326 return UUID.Zero;
327 }
328 } 308 }
329 else 309 else
330 { 310 {
331 // Folder magic 311 AddPermissions(item, objlist[0], objlist, remoteClient);
332 //
333 if (action == DeRezAction.Delete)
334 {
335 // Deleting someone else's item
336 //
337 if (remoteClient == null ||
338 objlist[0].OwnerID != remoteClient.AgentId)
339 {
340 312
341 folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.LostAndFoundFolder); 313 item.CreationDate = Util.UnixTimeSinceEpoch();
342 } 314 item.Description = asset.Description;
343 else 315 item.Name = asset.Name;
344 { 316 item.AssetType = asset.Type;
345 folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.TrashFolder);
346 }
347 }
348 else if (action == DeRezAction.Return)
349 {
350 317
351 // Dump to lost + found unconditionally 318 m_Scene.AddInventoryItem(item);
352 //
353 folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.LostAndFoundFolder);
354 }
355 319
356 if (folderID == UUID.Zero && folder == null) 320 if (remoteClient != null && item.Owner == remoteClient.AgentId)
357 { 321 {
358 if (action == DeRezAction.Delete) 322 remoteClient.SendInventoryItemCreateUpdate(item, 0);
359 {
360 // Deletes go to trash by default
361 //
362 folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.TrashFolder);
363 }
364 else
365 {
366 if (remoteClient == null ||
367 objlist[0].OwnerID != remoteClient.AgentId)
368 {
369 // Taking copy of another person's item. Take to
370 // Objects folder.
371 folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.Object);
372 }
373 else
374 {
375 // Catch all. Use lost & found
376 //
377
378 folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.LostAndFoundFolder);
379 }
380 }
381 } 323 }
382 324 else
383 // Override and put into where it came from, if it came
384 // from anywhere in inventory
385 //
386 if (action == DeRezAction.Take || action == DeRezAction.TakeCopy)
387 { 325 {
388 if (objlist[0].RootPart.FromFolderID != UUID.Zero) 326 ScenePresence notifyUser = m_Scene.GetScenePresence(item.Owner);
327 if (notifyUser != null)
389 { 328 {
390 InventoryFolderBase f = new InventoryFolderBase(objlist[0].RootPart.FromFolderID, userID); 329 notifyUser.ControllingClient.SendInventoryItemCreateUpdate(item, 0);
391 folder = m_Scene.InventoryService.GetFolder(f);
392 } 330 }
393 } 331 }
332 }
394 333
395 if (folder == null) // None of the above 334 // This is a hook to do some per-asset post-processing for subclasses that need that
396 { 335 ExportAsset(remoteClient.AgentId, assetID);
397 folder = new InventoryFolderBase(folderID); 336 }
337
338 return assetID;
339 }
398 340
399 if (folder == null) // Nowhere to put it 341 protected virtual void ExportAsset(UUID agentID, UUID assetID)
400 { 342 {
401 return UUID.Zero; 343 // nothing to do here
402 } 344 }
403 }
404 345
405 item = new InventoryItemBase(); 346 /// <summary>
406 // Can't know creator is the same, so null it in inventory 347 /// Add relevant permissions for an object to the item.
407 if (objlist.Count > 1) 348 /// </summary>
408 item.CreatorId = UUID.Zero.ToString(); 349 /// <param name="item"></param>
409 else 350 /// <param name="so"></param>
410 item.CreatorId = objlist[0].RootPart.CreatorID.ToString(); 351 /// <param name="objsForEffectivePermissions"></param>
411 item.ID = UUID.Random(); 352 /// <param name="remoteClient"></param>
412 item.InvType = (int)InventoryType.Object; 353 /// <returns></returns>
413 item.Folder = folder.ID; 354 protected InventoryItemBase AddPermissions(
414 item.Owner = userID; 355 InventoryItemBase item, SceneObjectGroup so, List<SceneObjectGroup> objsForEffectivePermissions,
415 if (objlist.Count > 1) 356 IClientAPI remoteClient)
357 {
358 uint effectivePerms = (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify | PermissionMask.Move) | 7;
359 foreach (SceneObjectGroup grp in objsForEffectivePermissions)
360 effectivePerms &= grp.GetEffectivePermissions();
361 effectivePerms |= (uint)PermissionMask.Move;
362
363 if (remoteClient != null && (remoteClient.AgentId != so.RootPart.OwnerID) && m_Scene.Permissions.PropagatePermissions())
364 {
365 uint perms = effectivePerms;
366 uint nextPerms = (perms & 7) << 13;
367 if ((nextPerms & (uint)PermissionMask.Copy) == 0)
368 perms &= ~(uint)PermissionMask.Copy;
369 if ((nextPerms & (uint)PermissionMask.Transfer) == 0)
370 perms &= ~(uint)PermissionMask.Transfer;
371 if ((nextPerms & (uint)PermissionMask.Modify) == 0)
372 perms &= ~(uint)PermissionMask.Modify;
373
374 item.BasePermissions = perms & so.RootPart.NextOwnerMask;
375 item.CurrentPermissions = item.BasePermissions;
376 item.NextPermissions = perms & so.RootPart.NextOwnerMask;
377 item.EveryOnePermissions = so.RootPart.EveryoneMask & so.RootPart.NextOwnerMask;
378 item.GroupPermissions = so.RootPart.GroupMask & so.RootPart.NextOwnerMask;
379
380 // Magic number badness. Maybe this deserves an enum.
381 // bit 4 (16) is the "Slam" bit, it means treat as passed
382 // and apply next owner perms on rez
383 item.CurrentPermissions |= 16; // Slam!
384 }
385 else
386 {
387 item.BasePermissions = effectivePerms;
388 item.CurrentPermissions = effectivePerms;
389 item.NextPermissions = so.RootPart.NextOwnerMask & effectivePerms;
390 item.EveryOnePermissions = so.RootPart.EveryoneMask & effectivePerms;
391 item.GroupPermissions = so.RootPart.GroupMask & effectivePerms;
392
393 item.CurrentPermissions &=
394 ((uint)PermissionMask.Copy |
395 (uint)PermissionMask.Transfer |
396 (uint)PermissionMask.Modify |
397 (uint)PermissionMask.Move |
398 7); // Preserve folded permissions
399 }
400
401 return item;
402 }
403
404 /// <summary>
405 /// Create an item using details for the given scene object.
406 /// </summary>
407 /// <param name="action"></param>
408 /// <param name="remoteClient"></param>
409 /// <param name="so"></param>
410 /// <param name="folderID"></param>
411 /// <returns></returns>
412 protected InventoryItemBase CreateItemForObject(
413 DeRezAction action, IClientAPI remoteClient, SceneObjectGroup so, UUID folderID)
414 {
415 // Get the user info of the item destination
416 //
417 UUID userID = UUID.Zero;
418
419 if (action == DeRezAction.Take || action == DeRezAction.TakeCopy ||
420 action == DeRezAction.SaveToExistingUserInventoryItem)
421 {
422 // Take or take copy require a taker
423 // Saving changes requires a local user
424 //
425 if (remoteClient == null)
426 return null;
427
428 userID = remoteClient.AgentId;
429 }
430 else
431 {
432 // All returns / deletes go to the object owner
433 //
434 userID = so.RootPart.OwnerID;
435 }
436
437 if (userID == UUID.Zero) // Can't proceed
438 {
439 return null;
440 }
441
442 // If we're returning someone's item, it goes back to the
443 // owner's Lost And Found folder.
444 // Delete is treated like return in this case
445 // Deleting your own items makes them go to trash
446 //
447
448 InventoryFolderBase folder = null;
449 InventoryItemBase item = null;
450
451 if (DeRezAction.SaveToExistingUserInventoryItem == action)
452 {
453 item = new InventoryItemBase(so.RootPart.FromUserInventoryItemID, userID);
454 item = m_Scene.InventoryService.GetItem(item);
455
456 //item = userInfo.RootFolder.FindItem(
457 // objectGroup.RootPart.FromUserInventoryItemID);
458
459 if (null == item)
460 {
461 m_log.DebugFormat(
462 "[AGENT INVENTORY]: Object {0} {1} scheduled for save to inventory has already been deleted.",
463 so.Name, so.UUID);
464
465 return null;
466 }
467 }
468 else
469 {
470 // Folder magic
471 //
472 if (action == DeRezAction.Delete)
473 {
474 // Deleting someone else's item
475 //
476 if (remoteClient == null ||
477 so.OwnerID != remoteClient.AgentId)
416 { 478 {
417 item.Flags = (uint)InventoryItemFlags.ObjectHasMultipleItems; 479 folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.LostAndFoundFolder);
418 } 480 }
419 else 481 else
420 { 482 {
421 item.SaleType = objlist[0].RootPart.ObjectSaleType; 483 folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.TrashFolder);
422 item.SalePrice = objlist[0].RootPart.SalePrice;
423 } 484 }
424 } 485 }
425 486 else if (action == DeRezAction.Return)
426 AssetBase asset = CreateAsset(
427 objlist[0].GetPartName(objlist[0].RootPart.LocalId),
428 objlist[0].GetPartDescription(objlist[0].RootPart.LocalId),
429 (sbyte)AssetType.Object,
430 Utils.StringToBytes(itemXml),
431 objlist[0].OwnerID.ToString());
432 m_Scene.AssetService.Store(asset);
433 assetID = asset.FullID;
434
435 if (DeRezAction.SaveToExistingUserInventoryItem == action)
436 { 487 {
437 item.AssetID = asset.FullID; 488 // Dump to lost + found unconditionally
438 m_Scene.InventoryService.UpdateItem(item); 489 //
490 folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.LostAndFoundFolder);
439 } 491 }
440 else
441 {
442 item.AssetID = asset.FullID;
443 492
444 uint effectivePerms = (uint)(PermissionMask.Copy | PermissionMask.Transfer | PermissionMask.Modify | PermissionMask.Move) | 7; 493 if (folderID == UUID.Zero && folder == null)
445 foreach (SceneObjectGroup grp in objlist) 494 {
446 effectivePerms &= grp.GetEffectivePermissions(); 495 if (action == DeRezAction.Delete)
447 effectivePerms |= (uint)PermissionMask.Move;
448
449 if (remoteClient != null && (remoteClient.AgentId != objlist[0].RootPart.OwnerID) && m_Scene.Permissions.PropagatePermissions())
450 { 496 {
451 uint perms = effectivePerms; 497 // Deletes go to trash by default
452 uint nextPerms = (perms & 7) << 13; 498 //
453 if ((nextPerms & (uint)PermissionMask.Copy) == 0) 499 folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.TrashFolder);
454 perms &= ~(uint)PermissionMask.Copy;
455 if ((nextPerms & (uint)PermissionMask.Transfer) == 0)
456 perms &= ~(uint)PermissionMask.Transfer;
457 if ((nextPerms & (uint)PermissionMask.Modify) == 0)
458 perms &= ~(uint)PermissionMask.Modify;
459
460 item.BasePermissions = perms & objlist[0].RootPart.NextOwnerMask;
461 item.CurrentPermissions = item.BasePermissions;
462 item.NextPermissions = perms & objlist[0].RootPart.NextOwnerMask;
463 item.EveryOnePermissions = objlist[0].RootPart.EveryoneMask & objlist[0].RootPart.NextOwnerMask;
464 item.GroupPermissions = objlist[0].RootPart.GroupMask & objlist[0].RootPart.NextOwnerMask;
465
466 // Magic number badness. Maybe this deserves an enum.
467 // bit 4 (16) is the "Slam" bit, it means treat as passed
468 // and apply next owner perms on rez
469 item.CurrentPermissions |= 16; // Slam!
470 } 500 }
471 else 501 else
472 { 502 {
473 item.BasePermissions = effectivePerms; 503 if (remoteClient == null || so.OwnerID != remoteClient.AgentId)
474 item.CurrentPermissions = effectivePerms; 504 {
475 item.NextPermissions = objlist[0].RootPart.NextOwnerMask & effectivePerms; 505 // Taking copy of another person's item. Take to
476 item.EveryOnePermissions = objlist[0].RootPart.EveryoneMask & effectivePerms; 506 // Objects folder.
477 item.GroupPermissions = objlist[0].RootPart.GroupMask & effectivePerms; 507 folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.Object);
478 508 }
479 item.CurrentPermissions &= 509 else
480 ((uint)PermissionMask.Copy | 510 {
481 (uint)PermissionMask.Transfer | 511 // Catch all. Use lost & found
482 (uint)PermissionMask.Modify | 512 //
483 (uint)PermissionMask.Move |
484 7); // Preserve folded permissions
485 }
486
487 item.CreationDate = Util.UnixTimeSinceEpoch();
488 item.Description = asset.Description;
489 item.Name = asset.Name;
490 item.AssetType = asset.Type;
491 513
492 m_Scene.AddInventoryItem(item); 514 folder = m_Scene.InventoryService.GetFolderForType(userID, AssetType.LostAndFoundFolder);
515 }
516 }
517 }
493 518
494 if (remoteClient != null && item.Owner == remoteClient.AgentId) 519 // Override and put into where it came from, if it came
520 // from anywhere in inventory
521 //
522 if (action == DeRezAction.Take || action == DeRezAction.TakeCopy)
523 {
524 if (so.RootPart.FromFolderID != UUID.Zero)
495 { 525 {
496 remoteClient.SendInventoryItemCreateUpdate(item, 0); 526 InventoryFolderBase f = new InventoryFolderBase(so.RootPart.FromFolderID, userID);
527 folder = m_Scene.InventoryService.GetFolder(f);
497 } 528 }
498 else 529 }
530
531 if (folder == null) // None of the above
532 {
533 folder = new InventoryFolderBase(folderID);
534
535 if (folder == null) // Nowhere to put it
499 { 536 {
500 ScenePresence notifyUser = m_Scene.GetScenePresence(item.Owner); 537 return null;
501 if (notifyUser != null)
502 {
503 notifyUser.ControllingClient.SendInventoryItemCreateUpdate(item, 0);
504 }
505 } 538 }
506 } 539 }
507 } 540
508 return assetID; 541 item = new InventoryItemBase();
542 item.ID = UUID.Random();
543 item.InvType = (int)InventoryType.Object;
544 item.Folder = folder.ID;
545 item.Owner = userID;
546 }
547
548 return item;
509 } 549 }
510 550
511 /// <summary> 551 /// <summary>
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/Tests/InventoryAccessModuleTests.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/Tests/InventoryAccessModuleTests.cs
index c76a30a..8d53cf1 100644
--- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/Tests/InventoryAccessModuleTests.cs
+++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/Tests/InventoryAccessModuleTests.cs
@@ -66,7 +66,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess.Tests
66 config.AddConfig("Modules"); 66 config.AddConfig("Modules");
67 config.Configs["Modules"].Set("InventoryAccessModule", "BasicInventoryAccessModule"); 67 config.Configs["Modules"].Set("InventoryAccessModule", "BasicInventoryAccessModule");
68 68
69 m_scene = SceneSetupHelpers.SetupScene("Inventory"); 69 m_scene = SceneSetupHelpers.SetupScene();
70 SceneSetupHelpers.SetupSceneModules(m_scene, config, m_iam); 70 SceneSetupHelpers.SetupSceneModules(m_scene, config, m_iam);
71 71
72 // Create user 72 // Create user
@@ -87,41 +87,11 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess.Tests
87// log4net.Config.XmlConfigurator.Configure(); 87// log4net.Config.XmlConfigurator.Configure();
88 88
89 // Create asset 89 // Create asset
90 SceneObjectGroup object1; 90 SceneObjectGroup object1 = SceneSetupHelpers.CreateSceneObject(1, m_userId, "Object1", 0x20);
91 { 91 object1.AbsolutePosition = new Vector3(15, 30, 45);
92 string partName = "Object1"; 92
93 UUID ownerId = UUID.Parse("00000000-0000-0000-0000-000000000040"); 93 SceneObjectGroup object2 = SceneSetupHelpers.CreateSceneObject(1, m_userId, "Object2", 0x40);
94 PrimitiveBaseShape shape = PrimitiveBaseShape.CreateSphere(); 94 object2.AbsolutePosition = new Vector3(25, 50, 75);
95 Vector3 groupPosition = new Vector3(10, 20, 30);
96 Quaternion rotationOffset = Quaternion.Identity;
97 Vector3 offsetPosition = new Vector3(5, 10, 15);
98
99 SceneObjectPart part1
100 = new SceneObjectPart(
101 ownerId, shape, groupPosition, rotationOffset, offsetPosition);
102 part1.Scale = new Vector3(1, 1, 1);
103 part1.Name = partName;
104
105 object1 = new SceneObjectGroup(part1);
106 }
107
108 SceneObjectGroup object2;
109 {
110 string partName = "Object2";
111 UUID ownerId = UUID.Parse("00000000-0000-0000-0000-000000000040");
112 PrimitiveBaseShape shape = PrimitiveBaseShape.CreateSphere();
113 Vector3 groupPosition = new Vector3(20, 40, 60);
114 Quaternion rotationOffset = Quaternion.Identity;
115 Vector3 offsetPosition = new Vector3(5, 10, 15);
116
117 SceneObjectPart part1
118 = new SceneObjectPart(
119 ownerId, shape, groupPosition, rotationOffset, offsetPosition);
120 part1.Scale = new Vector3(1, 1, 1);
121 part1.Name = partName;
122
123 object2 = new SceneObjectGroup(part1);
124 }
125 95
126 CoalescedSceneObjects coa = new CoalescedSceneObjects(m_userId, object1, object2); 96 CoalescedSceneObjects coa = new CoalescedSceneObjects(m_userId, object1, object2);
127 97
@@ -173,23 +143,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess.Tests
173// log4net.Config.XmlConfigurator.Configure(); 143// log4net.Config.XmlConfigurator.Configure();
174 144
175 // Create asset 145 // Create asset
176 SceneObjectGroup object1; 146 SceneObjectGroup object1 = SceneSetupHelpers.CreateSceneObject(1, m_userId, "My Little Dog Object", 0x40);
177 SceneObjectPart part1;
178 {
179 string partName = "My Little Dog Object";
180 UUID ownerId = UUID.Parse("00000000-0000-0000-0000-000000000040");
181 PrimitiveBaseShape shape = PrimitiveBaseShape.CreateSphere();
182 Vector3 groupPosition = new Vector3(10, 20, 30);
183 Quaternion rotationOffset = new Quaternion(20, 30, 40, 50);
184 Vector3 offsetPosition = new Vector3(5, 10, 15);
185
186 part1
187 = new SceneObjectPart(
188 ownerId, shape, groupPosition, rotationOffset, offsetPosition);
189 part1.Name = partName;
190
191 object1 = new SceneObjectGroup(part1);
192 }
193 147
194 UUID asset1Id = UUID.Parse("00000000-0000-0000-0000-000000000060"); 148 UUID asset1Id = UUID.Parse("00000000-0000-0000-0000-000000000060");
195 AssetBase asset1 = AssetHelpers.CreateAsset(asset1Id, object1); 149 AssetBase asset1 = AssetHelpers.CreateAsset(asset1Id, object1);