* break out 'xml2' deserialization from sog

0.6.5-rc1
Justin Clarke Casey 2009-05-08 19:18:37 +00:00
parent c8d44971c4
commit 567e0d032c
8 changed files with 85 additions and 126 deletions

View File

@ -41,6 +41,7 @@ using OpenSim.Framework.Communications.Clients;
using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Framework.Scenes;
using OpenSim.Region.Framework.Scenes.Hypergrid; using OpenSim.Region.Framework.Scenes.Hypergrid;
using OpenSim.Region.Framework.Scenes.Serialization;
namespace OpenSim.Region.CoreModules.ServiceConnectors.Interregion namespace OpenSim.Region.CoreModules.ServiceConnectors.Interregion
{ {
@ -641,7 +642,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectors.Interregion
SceneObjectGroup sog = null; SceneObjectGroup sog = null;
try try
{ {
sog = new SceneObjectGroup(sogXmlStr); sog = SceneObjectSerializer.FromXml2Format(sogXmlStr);
sog.ExtraFromXmlString(extraStr); sog.ExtraFromXmlString(extraStr);
} }
catch (Exception ex) catch (Exception ex)

View File

@ -406,78 +406,6 @@ namespace OpenSim.Region.Framework.Scenes
SetRootPart(part); SetRootPart(part);
} }
/// <summary>
/// Create an object using serialized data in OpenSim's xml2 format.
/// </summary>
public SceneObjectGroup(string xmlData)
{
SetFromXml(xmlData);
}
protected void SetFromXml(string xmlData)
{
//m_log.DebugFormat("[SOG]: Starting deserialization of SOG");
//int time = System.Environment.TickCount;
// libomv.types changes UUID to Guid
xmlData = xmlData.Replace("<UUID>", "<Guid>");
xmlData = xmlData.Replace("</UUID>", "</Guid>");
// Handle Nested <UUID><UUID> property
xmlData = xmlData.Replace("<Guid><Guid>", "<UUID><Guid>");
xmlData = xmlData.Replace("</Guid></Guid>", "</Guid></UUID>");
try
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlData);
XmlNodeList parts = doc.GetElementsByTagName("SceneObjectPart");
// Process the root part first
if (parts.Count > 0)
{
StringReader sr = new StringReader(parts[0].OuterXml);
XmlTextReader reader = new XmlTextReader(sr);
SetRootPart(CreatePartFromXml(reader));
reader.Close();
sr.Close();
}
// Then deal with the rest
for (int i=1; i<parts.Count; i++)
{
StringReader sr = new StringReader(parts[i].OuterXml);
XmlTextReader reader = new XmlTextReader(sr);
SceneObjectPart part = CreatePartFromXml(reader);
AddPart(part);
part.StoreUndoState();
reader.Close();
sr.Close();
}
// Script state may, or may not, exist. Not having any, is NOT
// ever a problem.
LoadScriptState(doc);
}
catch (Exception e)
{
m_log.ErrorFormat("[SCENE]: Deserialization of xml failed with {0}. xml was {1}", e, xmlData);
}
//m_log.DebugFormat("[SOG]: Finished deserialization of SOG {0}, {1}ms", Name, System.Environment.TickCount - time);
}
protected virtual SceneObjectPart CreatePartFromXml(XmlTextReader reader)
{
SceneObjectPart part = SceneObjectPart.FromXml(reader);
return part;
}
/// <summary> /// <summary>
/// Constructor. This object is added to the scene later via AttachToScene() /// Constructor. This object is added to the scene later via AttachToScene()
/// </summary> /// </summary>

View File

@ -125,14 +125,14 @@ namespace OpenSim.Region.Framework.Scenes
foreach (XmlNode aPrimNode in rootNode.ChildNodes) foreach (XmlNode aPrimNode in rootNode.ChildNodes)
{ {
// There is only ever one prim. This oddity should be removeable post 0.5.9 // There is only ever one prim. This oddity should be removeable post 0.5.9
return new SceneObjectGroup(aPrimNode.OuterXml); return SceneObjectSerializer.FromXml2Format(aPrimNode.OuterXml);
} }
return null; return null;
} }
else else
{ {
return new SceneObjectGroup(rootNode.OuterXml); return SceneObjectSerializer.FromXml2Format(rootNode.OuterXml);
} }
} }
@ -193,7 +193,7 @@ namespace OpenSim.Region.Framework.Scenes
/// <returns>The scene object created. null if the scene object already existed</returns> /// <returns>The scene object created. null if the scene object already existed</returns>
protected static SceneObjectGroup CreatePrimFromXml2(Scene scene, string xmlData) protected static SceneObjectGroup CreatePrimFromXml2(Scene scene, string xmlData)
{ {
SceneObjectGroup obj = new SceneObjectGroup(xmlData); SceneObjectGroup obj = SceneObjectSerializer.FromXml2Format(xmlData);
if (scene.AddRestoredSceneObject(obj, true, false)) if (scene.AddRestoredSceneObject(obj, true, false))
return obj; return obj;

View File

@ -59,7 +59,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
/// </summary> /// </summary>
/// <param name="serialization"></param> /// <param name="serialization"></param>
/// <returns></returns> /// <returns></returns>
public static SceneObjectGroup FromOriginalXmlFormat(UUID fromUserInventoryItemID, string serialization) public static SceneObjectGroup FromOriginalXmlFormat(UUID fromUserInventoryItemID, string xmlData)
{ {
//m_log.DebugFormat("[SOG]: Starting deserialization of SOG"); //m_log.DebugFormat("[SOG]: Starting deserialization of SOG");
//int time = System.Environment.TickCount; //int time = System.Environment.TickCount;
@ -67,12 +67,12 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
SceneObjectGroup sceneObject = new SceneObjectGroup(); SceneObjectGroup sceneObject = new SceneObjectGroup();
// libomv.types changes UUID to Guid // libomv.types changes UUID to Guid
serialization = serialization.Replace("<UUID>", "<Guid>"); xmlData = xmlData.Replace("<UUID>", "<Guid>");
serialization = serialization.Replace("</UUID>", "</Guid>"); xmlData = xmlData.Replace("</UUID>", "</Guid>");
// Handle Nested <UUID><UUID> property // Handle Nested <UUID><UUID> property
serialization = serialization.Replace("<Guid><Guid>", "<UUID><Guid>"); xmlData = xmlData.Replace("<Guid><Guid>", "<UUID><Guid>");
serialization = serialization.Replace("</Guid></Guid>", "</Guid></UUID>"); xmlData = xmlData.Replace("</Guid></Guid>", "</Guid></UUID>");
try try
{ {
@ -83,7 +83,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
int linkNum; int linkNum;
doc = new XmlDocument(); doc = new XmlDocument();
doc.LoadXml(serialization); doc.LoadXml(xmlData);
parts = doc.GetElementsByTagName("RootPart"); parts = doc.GetElementsByTagName("RootPart");
if (parts.Count == 0) if (parts.Count == 0)
@ -122,7 +122,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
catch (Exception e) catch (Exception e)
{ {
m_log.ErrorFormat( m_log.ErrorFormat(
"[SERIALIZER]: Deserialization of xml failed with {0}. xml was {1}", e, serialization); "[SERIALIZER]: Deserialization of xml failed with {0}. xml was {1}", e, xmlData);
} }
//m_log.DebugFormat("[SERIALIZER]: Finished deserialization of SOG {0}, {1}ms", Name, System.Environment.TickCount - time); //m_log.DebugFormat("[SERIALIZER]: Finished deserialization of SOG {0}, {1}ms", Name, System.Environment.TickCount - time);
@ -130,6 +130,70 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
return sceneObject; return sceneObject;
} }
/// <summary>
/// Deserialize a scene object from the 'xml2' format
/// </summary>
/// <param name="serialization"></param>
/// <returns></returns>
public static SceneObjectGroup FromXml2Format(string xmlData)
{
//m_log.DebugFormat("[SOG]: Starting deserialization of SOG");
//int time = System.Environment.TickCount;
SceneObjectGroup sceneObject = new SceneObjectGroup();
// libomv.types changes UUID to Guid
xmlData = xmlData.Replace("<UUID>", "<Guid>");
xmlData = xmlData.Replace("</UUID>", "</Guid>");
// Handle Nested <UUID><UUID> property
xmlData = xmlData.Replace("<Guid><Guid>", "<UUID><Guid>");
xmlData = xmlData.Replace("</Guid></Guid>", "</Guid></UUID>");
try
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(xmlData);
XmlNodeList parts = doc.GetElementsByTagName("SceneObjectPart");
// Process the root part first
if (parts.Count > 0)
{
StringReader sr = new StringReader(parts[0].OuterXml);
XmlTextReader reader = new XmlTextReader(sr);
sceneObject.SetRootPart(SceneObjectPart.FromXml(reader));
reader.Close();
sr.Close();
}
// Then deal with the rest
for (int i = 1; i < parts.Count; i++)
{
StringReader sr = new StringReader(parts[i].OuterXml);
XmlTextReader reader = new XmlTextReader(sr);
SceneObjectPart part = SceneObjectPart.FromXml(reader);
sceneObject.AddPart(part);
part.StoreUndoState();
reader.Close();
sr.Close();
}
// Script state may, or may not, exist. Not having any, is NOT
// ever a problem.
sceneObject.LoadScriptState(doc);
}
catch (Exception e)
{
m_log.ErrorFormat("[SERIALIZER]: Deserialization of xml failed with {0}. xml was {1}", e, xmlData);
}
//m_log.DebugFormat("[SERIALIZER]: Finished deserialization of SOG {0}, {1}ms", Name, System.Environment.TickCount - time);
return sceneObject;
}
/// <summary> /// <summary>
/// Serialize a scene object to the original xml format /// Serialize a scene object to the original xml format
/// </summary> /// </summary>

View File

@ -25,15 +25,6 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#region Header
// CMModel.cs
// User: bongiojp
//
//
#endregion Header
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
@ -45,6 +36,7 @@ using OpenSim;
using OpenSim.Framework; using OpenSim.Framework;
using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Framework.Scenes;
using OpenSim.Region.Framework.Scenes.Serialization;
using OpenSim.Region.Physics.Manager; using OpenSim.Region.Physics.Manager;
using log4net; using log4net;
@ -211,14 +203,15 @@ namespace OpenSim.Region.OptionalModules.ContentManagement
foreach (string xml in xmllist) foreach (string xml in xmllist)
{ {
try{ try
temp = new SceneObjectGroup(xml); {
temp = SceneObjectSerializer.FromXml2Format(xml);
temp.SetScene(scene); temp.SetScene(scene);
foreach (SceneObjectPart part in temp.Children.Values) foreach (SceneObjectPart part in temp.Children.Values)
part.RegionHandle = scene.RegionInfo.RegionHandle; part.RegionHandle = scene.RegionInfo.RegionHandle;
ReplacementList.Add(temp.UUID, (EntityBase)temp); ReplacementList.Add(temp.UUID, (EntityBase)temp);
} }
catch(Exception e) catch (Exception e)
{ {
m_log.Info("[CMMODEL]: Error while creating replacement list for rollback: " + e); m_log.Info("[CMMODEL]: Error while creating replacement list for rollback: " + e);
} }

View File

@ -25,15 +25,6 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#region Header
// ContentManagementEntity.cs
// User: bongiojp
//
//
#endregion Header
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
@ -45,6 +36,7 @@ using Nini.Config;
using OpenSim.Framework; using OpenSim.Framework;
using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Framework.Scenes;
using OpenSim.Region.Framework.Scenes.Serialization;
using OpenSim.Region.Physics.Manager; using OpenSim.Region.Physics.Manager;
using log4net; using log4net;
@ -87,7 +79,7 @@ namespace OpenSim.Region.OptionalModules.ContentManagement
public ContentManagementEntity(string objectXML, Scene scene, bool physics) public ContentManagementEntity(string objectXML, Scene scene, bool physics)
: base(objectXML, scene, false) : base(objectXML, scene, false)
{ {
m_UnchangedEntity = new SceneObjectGroup(objectXML); m_UnchangedEntity = SceneObjectSerializer.FromXml2Format(objectXML);
} }
#endregion Constructors #endregion Constructors

View File

@ -25,16 +25,6 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#region Header
// MetaEntity.cs
// User: bongiojp
//
// TODO:
// Create a physics manager to the meta object if there isn't one or the object knows of no scene but the user wants physics enabled.
#endregion Header
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
@ -46,6 +36,7 @@ using Nini.Config;
using OpenSim.Framework; using OpenSim.Framework;
using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Interfaces;
using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Framework.Scenes;
using OpenSim.Region.Framework.Scenes.Serialization;
using OpenSim.Region.Physics.Manager; using OpenSim.Region.Physics.Manager;
using log4net; using log4net;
@ -98,7 +89,7 @@ namespace OpenSim.Region.OptionalModules.ContentManagement
/// </summary> /// </summary>
public MetaEntity(string objectXML, Scene scene, bool physics) public MetaEntity(string objectXML, Scene scene, bool physics)
{ {
m_Entity = new SceneObjectGroup(objectXML); m_Entity = SceneObjectSerializer.FromXml2Format(objectXML);
m_Entity.SetScene(scene); m_Entity.SetScene(scene);
Initialize(physics); Initialize(physics);
} }

View File

@ -25,16 +25,6 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
#region Header
// PointMetaEntity.cs created with MonoDevelop
// User: bongiojp at 3:03 PM 8/6/2008
//
// To change standard headers go to Edit->Preferences->Coding->Standard Headers
//
#endregion Header
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;