* refactor: move archive user inventory item serialization out to a separate file

This commit is contained in:
Justin Clarke Casey
2009-04-23 20:15:05 +00:00
parent 0d51c22620
commit 1ccc99a3f9
8 changed files with 295 additions and 223 deletions

View File

@@ -36,6 +36,7 @@ using log4net;
using OpenMetaverse;
using OpenSim.Framework;
using OpenSim.Framework.Serialization;
using OpenSim.Framework.Serialization.External;
using OpenSim.Framework.Communications;
using OpenSim.Framework.Communications.Cache;
using OpenSim.Region.CoreModules.World.Archiver;
@@ -78,71 +79,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
this.commsManager = commsManager;
}
protected InventoryItemBase LoadInvItem(string contents)
{
InventoryItemBase item = new InventoryItemBase();
StringReader sr = new StringReader(contents);
XmlTextReader reader = new XmlTextReader(sr);
if (contents.Equals("")) return null;
reader.ReadStartElement("InventoryItem");
reader.ReadStartElement("Name");
item.Name = reader.ReadString();
reader.ReadEndElement();
reader.ReadStartElement("ID");
item.ID = UUID.Parse(reader.ReadString());
reader.ReadEndElement();
reader.ReadStartElement("InvType");
item.InvType = Convert.ToInt32(reader.ReadString());
reader.ReadEndElement();
reader.ReadStartElement("CreatorUUID");
item.CreatorId = reader.ReadString();
reader.ReadEndElement();
reader.ReadStartElement("CreationDate");
item.CreationDate = Convert.ToInt32(reader.ReadString());
reader.ReadEndElement();
reader.ReadStartElement("Owner");
item.Owner = UUID.Parse(reader.ReadString());
reader.ReadEndElement();
reader.ReadElementString("Description");
reader.ReadStartElement("AssetType");
item.AssetType = Convert.ToInt32(reader.ReadString());
reader.ReadEndElement();
reader.ReadStartElement("AssetID");
item.AssetID = UUID.Parse(reader.ReadString());
reader.ReadEndElement();
reader.ReadStartElement("SaleType");
item.SaleType = Convert.ToByte(reader.ReadString());
reader.ReadEndElement();
reader.ReadStartElement("SalePrice");
item.SalePrice = Convert.ToInt32(reader.ReadString());
reader.ReadEndElement();
reader.ReadStartElement("BasePermissions");
item.BasePermissions = Convert.ToUInt32(reader.ReadString());
reader.ReadEndElement();
reader.ReadStartElement("CurrentPermissions");
item.CurrentPermissions = Convert.ToUInt32(reader.ReadString());
reader.ReadEndElement();
reader.ReadStartElement("EveryOnePermssions");
item.EveryOnePermissions = Convert.ToUInt32(reader.ReadString());
reader.ReadEndElement();
reader.ReadStartElement("NextPermissions");
item.NextPermissions = Convert.ToUInt32(reader.ReadString());
reader.ReadEndElement();
reader.ReadStartElement("Flags");
item.Flags = Convert.ToUInt32(reader.ReadString());
reader.ReadEndElement();
reader.ReadStartElement("GroupID");
item.GroupID = UUID.Parse(reader.ReadString());
reader.ReadEndElement();
reader.ReadStartElement("GroupOwned");
item.GroupOwned = Convert.ToBoolean(reader.ReadString());
reader.ReadEndElement();
return item;
}
/// <summary>
/// Execute the request
/// </summary>
@@ -322,27 +258,24 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY != entryType)
{
InventoryItemBase item = LoadInvItem(m_asciiEncoding.GetString(data));
InventoryItemBase item = UserInventoryItemSerializer.Deserialize(data);
// Don't use the item ID that's in the file
item.ID = UUID.Random();
if (item != null)
{
// Don't use the item ID that's in the file
item.ID = UUID.Random();
item.CreatorId = m_userInfo.UserProfile.ID.ToString();
item.Owner = m_userInfo.UserProfile.ID;
item.CreatorId = m_userInfo.UserProfile.ID.ToString();
item.Owner = m_userInfo.UserProfile.ID;
// Reset folder ID to the one in which we want to load it
item.Folder = foundFolder.ID;
// Reset folder ID to the one in which we want to load it
item.Folder = foundFolder.ID;
m_userInfo.AddItem(item);
successfulItemRestores++;
m_userInfo.AddItem(item);
successfulItemRestores++;
// If we're loading an item directly into the given destination folder then we need to record
// it separately from any loaded root folders
if (rootDestinationFolder == foundFolder)
nodesLoaded.Add(item);
}
// If we're loading an item directly into the given destination folder then we need to record
// it separately from any loaded root folders
if (rootDestinationFolder == foundFolder)
nodesLoaded.Add(item);
}
}
}

View File

@@ -123,71 +123,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
protected void SaveInvItem(InventoryItemBase inventoryItem, string path)
{
string filename = string.Format("{0}{1}_{2}.xml", path, inventoryItem.Name, inventoryItem.ID);
StringWriter sw = new StringWriter();
XmlTextWriter writer = new XmlTextWriter(sw);
writer.Formatting = Formatting.Indented;
writer.WriteStartElement("InventoryItem");
writer.WriteStartElement("Name");
writer.WriteString(inventoryItem.Name);
writer.WriteEndElement();
writer.WriteStartElement("ID");
writer.WriteString(inventoryItem.ID.ToString());
writer.WriteEndElement();
writer.WriteStartElement("InvType");
writer.WriteString(inventoryItem.InvType.ToString());
writer.WriteEndElement();
writer.WriteStartElement("CreatorUUID");
writer.WriteString(inventoryItem.CreatorId);
writer.WriteEndElement();
writer.WriteStartElement("CreationDate");
writer.WriteString(inventoryItem.CreationDate.ToString());
writer.WriteEndElement();
writer.WriteStartElement("Owner");
writer.WriteString(inventoryItem.Owner.ToString());
writer.WriteEndElement();
writer.WriteStartElement("Description");
writer.WriteString(inventoryItem.Description);
writer.WriteEndElement();
writer.WriteStartElement("AssetType");
writer.WriteString(inventoryItem.AssetType.ToString());
writer.WriteEndElement();
writer.WriteStartElement("AssetID");
writer.WriteString(inventoryItem.AssetID.ToString());
writer.WriteEndElement();
writer.WriteStartElement("SaleType");
writer.WriteString(inventoryItem.SaleType.ToString());
writer.WriteEndElement();
writer.WriteStartElement("SalePrice");
writer.WriteString(inventoryItem.SalePrice.ToString());
writer.WriteEndElement();
writer.WriteStartElement("BasePermissions");
writer.WriteString(inventoryItem.BasePermissions.ToString());
writer.WriteEndElement();
writer.WriteStartElement("CurrentPermissions");
writer.WriteString(inventoryItem.CurrentPermissions.ToString());
writer.WriteEndElement();
writer.WriteStartElement("EveryOnePermssions");
writer.WriteString(inventoryItem.EveryOnePermissions.ToString());
writer.WriteEndElement();
writer.WriteStartElement("NextPermissions");
writer.WriteString(inventoryItem.NextPermissions.ToString());
writer.WriteEndElement();
writer.WriteStartElement("Flags");
writer.WriteString(inventoryItem.Flags.ToString());
writer.WriteEndElement();
writer.WriteStartElement("GroupID");
writer.WriteString(inventoryItem.GroupID.ToString());
writer.WriteEndElement();
writer.WriteStartElement("GroupOwned");
writer.WriteString(inventoryItem.GroupOwned.ToString());
writer.WriteEndElement();
writer.WriteEndElement();
m_archive.WriteFile(filename, sw.ToString());
string filename = string.Format("{0}{1}_{2}.xml", path, inventoryItem.Name, inventoryItem.ID);
string serialization = UserInventoryItemSerializer.Serialize(inventoryItem);
m_archive.WriteFile(filename, serialization);
UUID creatorId = inventoryItem.CreatorIdAsUuid;

View File

@@ -188,5 +188,73 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
// TODO: Test presence of more files and contents of files.
}
/*
/// <summary>
/// Test loading a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet).
/// </summary>
[Test]
public void TestLoadIarV0p1()
{
//log4net.Config.XmlConfigurator.Configure();
MemoryStream archiveWriteStream = new MemoryStream();
TarArchiveWriter tar = new TarArchiveWriter(archiveWriteStream);
string item1FileName = string.Format("{0}{1}/{2}", INVENTORY_PATH, "a", "b.lsl");
tar.WriteFile(item1FileName, item1.
string part1Name = "object1";
PrimitiveBaseShape shape = PrimitiveBaseShape.CreateCylinder();
Vector3 groupPosition = new Vector3(90, 80, 70);
Quaternion rotationOffset = new Quaternion(60, 70, 80, 90);
Vector3 offsetPosition = new Vector3(20, 25, 30);
SerialiserModule serialiserModule = new SerialiserModule();
ArchiverModule archiverModule = new ArchiverModule();
Scene scene = SceneSetupHelpers.SetupScene();
SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule);
SceneObjectPart part1
= new SceneObjectPart(
UUID.Zero, shape, groupPosition, rotationOffset, offsetPosition);
part1.Name = part1Name;
SceneObjectGroup object1 = new SceneObjectGroup(part1);
scene.AddNewSceneObject(object1, false);
string object1FileName = string.Format(
"{0}_{1:000}-{2:000}-{3:000}__{4}.xml",
part1Name,
Math.Round(groupPosition.X), Math.Round(groupPosition.Y), Math.Round(groupPosition.Z),
part1.UUID);
tar.WriteFile(ArchiveConstants.OBJECTS_PATH + object1FileName, object1.ToXmlString2());
tar.Close();
MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray());
// SerialiserModule serialiserModule = new SerialiserModule();
// ArchiverModule archiverModule = new ArchiverModule();
// Scene scene = SceneSetupHelpers.SetupScene();
// SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule);
archiverModule.DearchiveRegion(archiveReadStream);
SceneObjectPart object1PartLoaded = scene.GetSceneObjectPart(part1Name);
Assert.That(object1PartLoaded, Is.Not.Null, "object1 was not loaded");
Assert.That(object1PartLoaded.Name, Is.EqualTo(part1Name), "object1 names not identical");
Assert.That(object1PartLoaded.GroupPosition, Is.EqualTo(groupPosition), "object1 group position not equal");
Assert.That(
object1PartLoaded.RotationOffset, Is.EqualTo(rotationOffset), "object1 rotation offset not equal");
Assert.That(
object1PartLoaded.OffsetPosition, Is.EqualTo(offsetPosition), "object1 offset position not equal");
// Temporary
Console.WriteLine("Successfully completed {0}", MethodBase.GetCurrentMethod());
}
*/
}
}

View File

@@ -44,7 +44,7 @@ using OpenSim.Tests.Common.Setup;
namespace OpenSim.Region.CoreModules.World.Archiver.Tests
{
[TestFixture, LongRunning]
[TestFixture]
public class ArchiverTests
{
private Guid m_lastRequestId;