aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs')
-rw-r--r--OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs212
1 files changed, 121 insertions, 91 deletions
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs
index c6d4e55..d214eba 100644
--- a/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs
+++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneXmlLoader.cs
@@ -45,6 +45,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
45 { 45 {
46 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 46 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
47 47
48 #region old xml format
48 public static void LoadPrimsFromXml(Scene scene, string fileName, bool newIDS, Vector3 loadOffset) 49 public static void LoadPrimsFromXml(Scene scene, string fileName, bool newIDS, Vector3 loadOffset)
49 { 50 {
50 XmlDocument doc = new XmlDocument(); 51 XmlDocument doc = new XmlDocument();
@@ -98,11 +99,128 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
98 file.Close(); 99 file.Close();
99 } 100 }
100 101
101 public static string SaveGroupToXml2(SceneObjectGroup grp) 102 #endregion
103
104 #region XML2 serialization
105
106 // Called by archives (save oar)
107 public static string SaveGroupToXml2(SceneObjectGroup grp, Dictionary<string, object> options)
108 {
109 //return SceneObjectSerializer.ToXml2Format(grp);
110 using (MemoryStream mem = new MemoryStream())
111 {
112 using (XmlTextWriter writer = new XmlTextWriter(mem, System.Text.Encoding.UTF8))
113 {
114 SceneObjectSerializer.SOGToXml2(writer, grp, options);
115 writer.Flush();
116
117 using (StreamReader reader = new StreamReader(mem))
118 {
119 mem.Seek(0, SeekOrigin.Begin);
120 return reader.ReadToEnd();
121 }
122 }
123 }
124 }
125
126 // Called by scene serializer (save xml2)
127 public static void SavePrimsToXml2(Scene scene, string fileName)
128 {
129 EntityBase[] entityList = scene.GetEntities();
130 SavePrimListToXml2(entityList, fileName);
131 }
132
133 // Called by scene serializer (save xml2)
134 public static void SaveNamedPrimsToXml2(Scene scene, string primName, string fileName)
135 {
136 m_log.InfoFormat(
137 "[SERIALISER]: Saving prims with name {0} in xml2 format for region {1} to {2}",
138 primName, scene.RegionInfo.RegionName, fileName);
139
140 EntityBase[] entityList = scene.GetEntities();
141 List<EntityBase> primList = new List<EntityBase>();
142
143 foreach (EntityBase ent in entityList)
144 {
145 if (ent is SceneObjectGroup)
146 {
147 if (ent.Name == primName)
148 {
149 primList.Add(ent);
150 }
151 }
152 }
153
154 SavePrimListToXml2(primList.ToArray(), fileName);
155 }
156
157 // Called by REST Application plugin
158 public static void SavePrimsToXml2(Scene scene, TextWriter stream, Vector3 min, Vector3 max)
159 {
160 EntityBase[] entityList = scene.GetEntities();
161 SavePrimListToXml2(entityList, stream, min, max);
162 }
163
164 // Called here only. Should be private?
165 public static void SavePrimListToXml2(EntityBase[] entityList, string fileName)
102 { 166 {
103 return SceneObjectSerializer.ToXml2Format(grp); 167 FileStream file = new FileStream(fileName, FileMode.Create);
168 try
169 {
170 StreamWriter stream = new StreamWriter(file);
171 try
172 {
173 SavePrimListToXml2(entityList, stream, Vector3.Zero, Vector3.Zero);
174 }
175 finally
176 {
177 stream.Close();
178 }
179 }
180 finally
181 {
182 file.Close();
183 }
184 }
185
186 // Called here only. Should be private?
187 public static void SavePrimListToXml2(EntityBase[] entityList, TextWriter stream, Vector3 min, Vector3 max)
188 {
189 XmlTextWriter writer = new XmlTextWriter(stream);
190
191 int primCount = 0;
192 stream.WriteLine("<scene>\n");
193
194 foreach (EntityBase ent in entityList)
195 {
196 if (ent is SceneObjectGroup)
197 {
198 SceneObjectGroup g = (SceneObjectGroup)ent;
199 if (!min.Equals(Vector3.Zero) || !max.Equals(Vector3.Zero))
200 {
201 Vector3 pos = g.RootPart.GetWorldPosition();
202 if (min.X > pos.X || min.Y > pos.Y || min.Z > pos.Z)
203 continue;
204 if (max.X < pos.X || max.Y < pos.Y || max.Z < pos.Z)
205 continue;
206 }
207
208 //stream.WriteLine(SceneObjectSerializer.ToXml2Format(g));
209 SceneObjectSerializer.SOGToXml2(writer, (SceneObjectGroup)ent, new Dictionary<string,object>());
210 stream.WriteLine();
211
212 primCount++;
213 }
214 }
215
216 stream.WriteLine("</scene>\n");
217 stream.Flush();
104 } 218 }
105 219
220 #endregion
221
222 #region XML2 deserialization
223
106 public static SceneObjectGroup DeserializeGroupFromXml2(string xmlString) 224 public static SceneObjectGroup DeserializeGroupFromXml2(string xmlString)
107 { 225 {
108 XmlDocument doc = new XmlDocument(); 226 XmlDocument doc = new XmlDocument();
@@ -222,94 +340,6 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
222 } 340 }
223 } 341 }
224 342
225 public static void SavePrimsToXml2(Scene scene, string fileName) 343 #endregion
226 {
227 EntityBase[] entityList = scene.GetEntities();
228 SavePrimListToXml2(entityList, fileName);
229 }
230
231 public static void SavePrimsToXml2(Scene scene, TextWriter stream, Vector3 min, Vector3 max)
232 {
233 EntityBase[] entityList = scene.GetEntities();
234 SavePrimListToXml2(entityList, stream, min, max);
235 }
236
237 public static void SaveNamedPrimsToXml2(Scene scene, string primName, string fileName)
238 {
239 m_log.InfoFormat(
240 "[SERIALISER]: Saving prims with name {0} in xml2 format for region {1} to {2}",
241 primName, scene.RegionInfo.RegionName, fileName);
242
243 EntityBase[] entityList = scene.GetEntities();
244 List<EntityBase> primList = new List<EntityBase>();
245
246 foreach (EntityBase ent in entityList)
247 {
248 if (ent is SceneObjectGroup)
249 {
250 if (ent.Name == primName)
251 {
252 primList.Add(ent);
253 }
254 }
255 }
256
257 SavePrimListToXml2(primList.ToArray(), fileName);
258 }
259
260 public static void SavePrimListToXml2(EntityBase[] entityList, string fileName)
261 {
262 FileStream file = new FileStream(fileName, FileMode.Create);
263 try
264 {
265 StreamWriter stream = new StreamWriter(file);
266 try
267 {
268 SavePrimListToXml2(entityList, stream, Vector3.Zero, Vector3.Zero);
269 }
270 finally
271 {
272 stream.Close();
273 }
274 }
275 finally
276 {
277 file.Close();
278 }
279 }
280
281 public static void SavePrimListToXml2(EntityBase[] entityList, TextWriter stream, Vector3 min, Vector3 max)
282 {
283 XmlTextWriter writer = new XmlTextWriter(stream);
284
285 int primCount = 0;
286 stream.WriteLine("<scene>\n");
287
288 foreach (EntityBase ent in entityList)
289 {
290 if (ent is SceneObjectGroup)
291 {
292 SceneObjectGroup g = (SceneObjectGroup)ent;
293 if (!min.Equals(Vector3.Zero) || !max.Equals(Vector3.Zero))
294 {
295 Vector3 pos = g.RootPart.GetWorldPosition();
296 if (min.X > pos.X || min.Y > pos.Y || min.Z > pos.Z)
297 continue;
298 if (max.X < pos.X || max.Y < pos.Y || max.Z < pos.Z)
299 continue;
300 }
301
302 //stream.WriteLine(SceneObjectSerializer.ToXml2Format(g));
303 SceneObjectSerializer.SOGToXml2(writer, (SceneObjectGroup)ent);
304 stream.WriteLine();
305
306 primCount++;
307 }
308 }
309
310 stream.WriteLine("</scene>\n");
311 stream.Flush();
312 }
313
314 } 344 }
315} 345}