aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/Serialization/External/UserInventoryItemSerializer.cs
diff options
context:
space:
mode:
authorJonathan Freedman2010-12-05 11:49:15 -0800
committerJonathan Freedman2010-12-05 11:49:15 -0800
commit45cd2e3ef93cc8ab880cb5b1742e33d441e7d01a (patch)
tree0351fb2c756a46d522fe41798c3969e020a3258d /OpenSim/Framework/Serialization/External/UserInventoryItemSerializer.cs
parentMerge branch 'master-core' into mantis5110 (diff)
parentMerge branch 'master' of /var/git/opensim/ (diff)
downloadopensim-SC-45cd2e3ef93cc8ab880cb5b1742e33d441e7d01a.zip
opensim-SC-45cd2e3ef93cc8ab880cb5b1742e33d441e7d01a.tar.gz
opensim-SC-45cd2e3ef93cc8ab880cb5b1742e33d441e7d01a.tar.bz2
opensim-SC-45cd2e3ef93cc8ab880cb5b1742e33d441e7d01a.tar.xz
Merge branch 'master-core' into mantis5110
Diffstat (limited to 'OpenSim/Framework/Serialization/External/UserInventoryItemSerializer.cs')
-rw-r--r--OpenSim/Framework/Serialization/External/UserInventoryItemSerializer.cs225
1 files changed, 193 insertions, 32 deletions
diff --git a/OpenSim/Framework/Serialization/External/UserInventoryItemSerializer.cs b/OpenSim/Framework/Serialization/External/UserInventoryItemSerializer.cs
index 862cc72..d5e84c7 100644
--- a/OpenSim/Framework/Serialization/External/UserInventoryItemSerializer.cs
+++ b/OpenSim/Framework/Serialization/External/UserInventoryItemSerializer.cs
@@ -26,11 +26,16 @@
26 */ 26 */
27 27
28using System; 28using System;
29using System.Collections.Generic;
29using System.IO; 30using System.IO;
31using System.Reflection;
30using System.Text; 32using System.Text;
31using System.Xml; 33using System.Xml;
34
35using log4net;
32using OpenMetaverse; 36using OpenMetaverse;
33using OpenSim.Framework; 37using OpenSim.Framework;
38using OpenSim.Services.Interfaces;
34 39
35namespace OpenSim.Framework.Serialization.External 40namespace OpenSim.Framework.Serialization.External
36{ 41{
@@ -40,6 +45,141 @@ namespace OpenSim.Framework.Serialization.External
40 /// XXX: Please do not use yet. 45 /// XXX: Please do not use yet.
41 public class UserInventoryItemSerializer 46 public class UserInventoryItemSerializer
42 { 47 {
48 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
49
50 private delegate void InventoryItemXmlProcessor(InventoryItemBase item, XmlTextReader reader);
51 private static Dictionary<string, InventoryItemXmlProcessor> m_InventoryItemXmlProcessors = new Dictionary<string, InventoryItemXmlProcessor>();
52
53 #region InventoryItemBase Processor initialization
54 static UserInventoryItemSerializer()
55 {
56 m_InventoryItemXmlProcessors.Add("Name", ProcessName);
57 m_InventoryItemXmlProcessors.Add("ID", ProcessID);
58 m_InventoryItemXmlProcessors.Add("InvType", ProcessInvType);
59 m_InventoryItemXmlProcessors.Add("CreatorUUID", ProcessCreatorUUID);
60 m_InventoryItemXmlProcessors.Add("CreatorID", ProcessCreatorID);
61 m_InventoryItemXmlProcessors.Add("CreatorData", ProcessCreatorData);
62 m_InventoryItemXmlProcessors.Add("CreationDate", ProcessCreationDate);
63 m_InventoryItemXmlProcessors.Add("Owner", ProcessOwner);
64 m_InventoryItemXmlProcessors.Add("Description", ProcessDescription);
65 m_InventoryItemXmlProcessors.Add("AssetType", ProcessAssetType);
66 m_InventoryItemXmlProcessors.Add("AssetID", ProcessAssetID);
67 m_InventoryItemXmlProcessors.Add("SaleType", ProcessSaleType);
68 m_InventoryItemXmlProcessors.Add("SalePrice", ProcessSalePrice);
69 m_InventoryItemXmlProcessors.Add("BasePermissions", ProcessBasePermissions);
70 m_InventoryItemXmlProcessors.Add("CurrentPermissions", ProcessCurrentPermissions);
71 m_InventoryItemXmlProcessors.Add("EveryOnePermissions", ProcessEveryOnePermissions);
72 m_InventoryItemXmlProcessors.Add("NextPermissions", ProcessNextPermissions);
73 m_InventoryItemXmlProcessors.Add("Flags", ProcessFlags);
74 m_InventoryItemXmlProcessors.Add("GroupID", ProcessGroupID);
75 m_InventoryItemXmlProcessors.Add("GroupOwned", ProcessGroupOwned);
76 }
77 #endregion
78
79 #region InventoryItemBase Processors
80 private static void ProcessName(InventoryItemBase item, XmlTextReader reader)
81 {
82 item.Name = reader.ReadElementContentAsString("Name", String.Empty);
83 }
84
85 private static void ProcessID(InventoryItemBase item, XmlTextReader reader)
86 {
87 item.ID = Util.ReadUUID(reader, "ID");
88 }
89
90 private static void ProcessInvType(InventoryItemBase item, XmlTextReader reader)
91 {
92 item.InvType = reader.ReadElementContentAsInt("InvType", String.Empty);
93 }
94
95 private static void ProcessCreatorUUID(InventoryItemBase item, XmlTextReader reader)
96 {
97 item.CreatorId = reader.ReadElementContentAsString("CreatorUUID", String.Empty);
98 }
99
100 private static void ProcessCreatorID(InventoryItemBase item, XmlTextReader reader)
101 {
102 // when it exists, this overrides the previous
103 item.CreatorId = reader.ReadElementContentAsString("CreatorID", String.Empty);
104 }
105
106 private static void ProcessCreationDate(InventoryItemBase item, XmlTextReader reader)
107 {
108 item.CreationDate = reader.ReadElementContentAsInt("CreationDate", String.Empty);
109 }
110
111 private static void ProcessOwner(InventoryItemBase item, XmlTextReader reader)
112 {
113 item.Owner = Util.ReadUUID(reader, "Owner");
114 }
115
116 private static void ProcessDescription(InventoryItemBase item, XmlTextReader reader)
117 {
118 item.Description = reader.ReadElementContentAsString("Description", String.Empty);
119 }
120
121 private static void ProcessAssetType(InventoryItemBase item, XmlTextReader reader)
122 {
123 item.AssetType = reader.ReadElementContentAsInt("AssetType", String.Empty);
124 }
125
126 private static void ProcessAssetID(InventoryItemBase item, XmlTextReader reader)
127 {
128 item.AssetID = Util.ReadUUID(reader, "AssetID");
129 }
130
131 private static void ProcessSaleType(InventoryItemBase item, XmlTextReader reader)
132 {
133 item.SaleType = (byte)reader.ReadElementContentAsInt("SaleType", String.Empty);
134 }
135
136 private static void ProcessSalePrice(InventoryItemBase item, XmlTextReader reader)
137 {
138 item.SalePrice = reader.ReadElementContentAsInt("SalePrice", String.Empty);
139 }
140
141 private static void ProcessBasePermissions(InventoryItemBase item, XmlTextReader reader)
142 {
143 item.BasePermissions = (uint)reader.ReadElementContentAsInt("BasePermissions", String.Empty);
144 }
145
146 private static void ProcessCurrentPermissions(InventoryItemBase item, XmlTextReader reader)
147 {
148 item.CurrentPermissions = (uint)reader.ReadElementContentAsInt("CurrentPermissions", String.Empty);
149 }
150
151 private static void ProcessEveryOnePermissions(InventoryItemBase item, XmlTextReader reader)
152 {
153 item.EveryOnePermissions = (uint)reader.ReadElementContentAsInt("EveryOnePermissions", String.Empty);
154 }
155
156 private static void ProcessNextPermissions(InventoryItemBase item, XmlTextReader reader)
157 {
158 item.NextPermissions = (uint)reader.ReadElementContentAsInt("NextPermissions", String.Empty);
159 }
160
161 private static void ProcessFlags(InventoryItemBase item, XmlTextReader reader)
162 {
163 item.Flags = (uint)reader.ReadElementContentAsInt("Flags", String.Empty);
164 }
165
166 private static void ProcessGroupID(InventoryItemBase item, XmlTextReader reader)
167 {
168 item.GroupID = Util.ReadUUID(reader, "GroupID");
169 }
170
171 private static void ProcessGroupOwned(InventoryItemBase item, XmlTextReader reader)
172 {
173 item.GroupOwned = Util.ReadBoolean(reader);
174 }
175
176 private static void ProcessCreatorData(InventoryItemBase item, XmlTextReader reader)
177 {
178 item.CreatorData = reader.ReadElementContentAsString("CreatorData", String.Empty);
179 }
180
181 #endregion
182
43 /// <summary> 183 /// <summary>
44 /// Deserialize item 184 /// Deserialize item
45 /// </summary> 185 /// </summary>
@@ -60,40 +200,47 @@ namespace OpenSim.Framework.Serialization.External
60 public static InventoryItemBase Deserialize(string serialization) 200 public static InventoryItemBase Deserialize(string serialization)
61 { 201 {
62 InventoryItemBase item = new InventoryItemBase(); 202 InventoryItemBase item = new InventoryItemBase();
63 203
64 StringReader sr = new StringReader(serialization); 204 using (XmlTextReader reader = new XmlTextReader(new StringReader(serialization)))
65 XmlTextReader xtr = new XmlTextReader(sr); 205 {
66 206 reader.ReadStartElement("InventoryItem");
67 xtr.ReadStartElement("InventoryItem"); 207
68 208 string nodeName = string.Empty;
69 item.Name = xtr.ReadElementString("Name"); 209 while (reader.NodeType != XmlNodeType.EndElement)
70 item.ID = UUID.Parse( xtr.ReadElementString("ID")); 210 {
71 item.InvType = Convert.ToInt32( xtr.ReadElementString("InvType")); 211 nodeName = reader.Name;
72 item.CreatorId = xtr.ReadElementString("CreatorUUID"); 212 InventoryItemXmlProcessor p = null;
73 item.CreationDate = Convert.ToInt32( xtr.ReadElementString("CreationDate")); 213 if (m_InventoryItemXmlProcessors.TryGetValue(reader.Name, out p))
74 item.Owner = UUID.Parse( xtr.ReadElementString("Owner")); 214 {
75 item.Description = xtr.ReadElementString("Description"); 215 //m_log.DebugFormat("[XXX] Processing: {0}", reader.Name);
76 item.AssetType = Convert.ToInt32( xtr.ReadElementString("AssetType")); 216 try
77 item.AssetID = UUID.Parse( xtr.ReadElementString("AssetID")); 217 {
78 item.SaleType = Convert.ToByte( xtr.ReadElementString("SaleType")); 218 p(item, reader);
79 item.SalePrice = Convert.ToInt32( xtr.ReadElementString("SalePrice")); 219 }
80 item.BasePermissions = Convert.ToUInt32( xtr.ReadElementString("BasePermissions")); 220 catch (Exception e)
81 item.CurrentPermissions = Convert.ToUInt32( xtr.ReadElementString("CurrentPermissions")); 221 {
82 item.EveryOnePermissions = Convert.ToUInt32( xtr.ReadElementString("EveryOnePermissions")); 222 m_log.DebugFormat("[InventoryItemSerializer]: exception while parsing {0}: {1}", nodeName, e);
83 item.NextPermissions = Convert.ToUInt32( xtr.ReadElementString("NextPermissions")); 223 if (reader.NodeType == XmlNodeType.EndElement)
84 item.Flags = Convert.ToUInt32( xtr.ReadElementString("Flags")); 224 reader.Read();
85 item.GroupID = UUID.Parse( xtr.ReadElementString("GroupID")); 225 }
86 item.GroupOwned = Convert.ToBoolean(xtr.ReadElementString("GroupOwned")); 226 }
87 227 else
88 xtr.ReadEndElement(); 228 {
89 229 // m_log.DebugFormat("[InventoryItemSerializer]: caught unknown element {0}", nodeName);
90 xtr.Close(); 230 reader.ReadOuterXml(); // ignore
91 sr.Close(); 231 }
92 232
233 }
234
235 reader.ReadEndElement(); // InventoryItem
236 }
237
238 //m_log.DebugFormat("[XXX]: parsed InventoryItemBase {0} - {1}", obj.Name, obj.UUID);
93 return item; 239 return item;
240
94 } 241 }
95 242
96 public static string Serialize(InventoryItemBase inventoryItem) 243 public static string Serialize(InventoryItemBase inventoryItem, Dictionary<string, object> options, IUserAccountService userAccountService)
97 { 244 {
98 StringWriter sw = new StringWriter(); 245 StringWriter sw = new StringWriter();
99 XmlTextWriter writer = new XmlTextWriter(sw); 246 XmlTextWriter writer = new XmlTextWriter(sw);
@@ -112,7 +259,7 @@ namespace OpenSim.Framework.Serialization.External
112 writer.WriteString(inventoryItem.InvType.ToString()); 259 writer.WriteString(inventoryItem.InvType.ToString());
113 writer.WriteEndElement(); 260 writer.WriteEndElement();
114 writer.WriteStartElement("CreatorUUID"); 261 writer.WriteStartElement("CreatorUUID");
115 writer.WriteString(inventoryItem.CreatorId); 262 writer.WriteString(OspResolver.MakeOspa(inventoryItem.CreatorIdAsUuid, userAccountService));
116 writer.WriteEndElement(); 263 writer.WriteEndElement();
117 writer.WriteStartElement("CreationDate"); 264 writer.WriteStartElement("CreationDate");
118 writer.WriteString(inventoryItem.CreationDate.ToString()); 265 writer.WriteString(inventoryItem.CreationDate.ToString());
@@ -156,6 +303,20 @@ namespace OpenSim.Framework.Serialization.External
156 writer.WriteStartElement("GroupOwned"); 303 writer.WriteStartElement("GroupOwned");
157 writer.WriteString(inventoryItem.GroupOwned.ToString()); 304 writer.WriteString(inventoryItem.GroupOwned.ToString());
158 writer.WriteEndElement(); 305 writer.WriteEndElement();
306 if (inventoryItem.CreatorData != null && inventoryItem.CreatorData != string.Empty)
307 writer.WriteElementString("CreatorData", inventoryItem.CreatorData);
308 else if (options.ContainsKey("profile"))
309 {
310 if (userAccountService != null)
311 {
312 UserAccount account = userAccountService.GetUserAccount(UUID.Zero, inventoryItem.CreatorIdAsUuid);
313 if (account != null)
314 {
315 writer.WriteElementString("CreatorData", (string)options["profile"] + "/" + inventoryItem.CreatorIdAsUuid + ";" + account.FirstName + " " + account.LastName);
316 }
317 writer.WriteElementString("CreatorID", inventoryItem.CreatorId);
318 }
319 }
159 320
160 writer.WriteEndElement(); 321 writer.WriteEndElement();
161 322