From f42d085ab17098709bcba0c816c9742a213d3c01 Mon Sep 17 00:00:00 2001
From: John Hurliman
Date: Wed, 16 Sep 2009 15:06:08 -0700
Subject: SceneObjectGroup cleanup. Removes the default constructor and
 unnecessary null checks on m_rootPart

---
 OpenSim/Data/NHibernate/NHibernateRegionData.cs | 32 +++++++++++++++++--------
 OpenSim/Data/SQLite/SQLiteRegionData.cs         |  3 +--
 OpenSim/Data/Tests/BasicRegionTest.cs           |  6 ++---
 3 files changed, 25 insertions(+), 16 deletions(-)

(limited to 'OpenSim/Data')

diff --git a/OpenSim/Data/NHibernate/NHibernateRegionData.cs b/OpenSim/Data/NHibernate/NHibernateRegionData.cs
index 26ec500..673ca6f 100644
--- a/OpenSim/Data/NHibernate/NHibernateRegionData.cs
+++ b/OpenSim/Data/NHibernate/NHibernateRegionData.cs
@@ -178,25 +178,38 @@ namespace OpenSim.Data.NHibernate
 
         private SceneObjectGroup LoadObject(UUID uuid, UUID region)
         {
-            SceneObjectGroup group = new SceneObjectGroup();
-
             ICriteria criteria = manager.GetSession().CreateCriteria(typeof(SceneObjectPart));
             criteria.Add(Expression.Eq("RegionID", region));
             criteria.Add(Expression.Eq("ParentUUID", uuid));
             criteria.AddOrder(Order.Asc("ParentID"));
 
-            foreach (SceneObjectPart p in criteria.List())
+            IList<SceneObjectPart> parts = criteria.List<SceneObjectPart>();
+
+            SceneObjectGroup group = null;
+
+            // Find the root part
+            for (int i = 0; i < parts.Count; i++)
             {
-                // root part
-                if (p.UUID == uuid)
+                if (parts[i].UUID == uuid)
                 {
-                    group.SetRootPart(p);
+                    group = new SceneObjectGroup(parts[i]);
+                    break;
                 }
-                else
+            }
+
+            // Add the children parts
+            if (group != null)
+            {
+                for (int i = 0; i < parts.Count; i++)
                 {
-                    group.AddPart(p);
+                    if (parts[i].UUID != uuid)
+                        group.AddPart(parts[i]);
                 }
             }
+            else
+            {
+                m_log.Error("[NHIBERNATE]: LoadObject() Attempted to load a SceneObjectGroup with no root SceneObjectPart ");
+            }
 
             return group;
         }
@@ -237,8 +250,7 @@ namespace OpenSim.Data.NHibernate
                 // root part
                 if (p.UUID == p.ParentUUID)
                 {
-                    SceneObjectGroup group = new SceneObjectGroup();
-                    group.SetRootPart(p);
+                    SceneObjectGroup group = new SceneObjectGroup(p);
                     SOG.Add(p.ParentUUID, group);
                 }
                 else
diff --git a/OpenSim/Data/SQLite/SQLiteRegionData.cs b/OpenSim/Data/SQLite/SQLiteRegionData.cs
index 0259ac5..ea076fe 100644
--- a/OpenSim/Data/SQLite/SQLiteRegionData.cs
+++ b/OpenSim/Data/SQLite/SQLiteRegionData.cs
@@ -416,7 +416,6 @@ namespace OpenSim.Data.SQLite
                         
                         if (uuid == objID) //is new SceneObjectGroup ?
                         {
-                            SceneObjectGroup group = new SceneObjectGroup();
                             prim = buildPrim(primRow);
                             DataRow shapeRow = shapes.Rows.Find(prim.UUID.ToString());
                             if (shapeRow != null)
@@ -430,7 +429,7 @@ namespace OpenSim.Data.SQLite
                                 prim.Shape = PrimitiveBaseShape.Default;
                             }
                             
-                            group.SetRootPart(prim);
+                            SceneObjectGroup group = new SceneObjectGroup(prim);
                             createdObjects.Add(group.UUID, group);
                             retvals.Add(group);
                             LoadItems(prim);
diff --git a/OpenSim/Data/Tests/BasicRegionTest.cs b/OpenSim/Data/Tests/BasicRegionTest.cs
index 8474921..c66ab7c 100644
--- a/OpenSim/Data/Tests/BasicRegionTest.cs
+++ b/OpenSim/Data/Tests/BasicRegionTest.cs
@@ -322,9 +322,8 @@ namespace OpenSim.Data.Tests
             // This is necessary or object will not be inserted in DB            
             sop.ObjectFlags = 0;
 
-            SceneObjectGroup sog = new SceneObjectGroup();
+            SceneObjectGroup sog = new SceneObjectGroup(sop);
             sog.SetScene(scene); // Reguired by nhibernate database module.
-            sog.SetRootPart(sop);
             
             // Inserts group in DB
             db.StoreObject(sog,region3);
@@ -1003,9 +1002,8 @@ namespace OpenSim.Data.Tests
             sop.UUID = uuid;
             sop.Shape = PrimitiveBaseShape.Default;
 
-            SceneObjectGroup sog = new SceneObjectGroup();
+            SceneObjectGroup sog = new SceneObjectGroup(sop);
             sog.SetScene(scene);
-            sog.SetRootPart(sop); 
 
             return sog;
         }
-- 
cgit v1.1