aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Environment
diff options
context:
space:
mode:
authorDr Scofield2008-08-15 07:20:38 +0000
committerDr Scofield2008-08-15 07:20:38 +0000
commit8d479fe5afc30cb4a188b79fb9f09820a763afbb (patch)
tree5f228dd1a51e3760c2a1505239691494c88d9827 /OpenSim/Region/Environment
parentFrom: Richard Alimi <ralimi@us.ibm.com> (diff)
downloadopensim-SC-8d479fe5afc30cb4a188b79fb9f09820a763afbb.zip
opensim-SC-8d479fe5afc30cb4a188b79fb9f09820a763afbb.tar.gz
opensim-SC-8d479fe5afc30cb4a188b79fb9f09820a763afbb.tar.bz2
opensim-SC-8d479fe5afc30cb4a188b79fb9f09820a763afbb.tar.xz
From: Richard Alimi <ralimi@us.ibm.com>
The following patch makes some enhancements to loading/saving the Xml2 format. - Add streamed version of functionality for saving prims to Xml2 format. The streamed version (optionally) allows for saving the prims whose positions appear within a particular bounding box. - Expose stream versions of LoadPrimsFromXml2 and SavePrimsToXml2 in the Scene class - Extend loading from Xml2 (the streamed version) to optionally start scripts for the loaded scene objects)
Diffstat (limited to 'OpenSim/Region/Environment')
-rw-r--r--OpenSim/Region/Environment/Modules/World/Serialiser/IRegionSerialiser.cs25
-rw-r--r--OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs64
-rw-r--r--OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs14
-rw-r--r--OpenSim/Region/Environment/Scenes/Scene.cs15
4 files changed, 106 insertions, 12 deletions
diff --git a/OpenSim/Region/Environment/Modules/World/Serialiser/IRegionSerialiser.cs b/OpenSim/Region/Environment/Modules/World/Serialiser/IRegionSerialiser.cs
index 8a13f2b..e76d40d 100644
--- a/OpenSim/Region/Environment/Modules/World/Serialiser/IRegionSerialiser.cs
+++ b/OpenSim/Region/Environment/Modules/World/Serialiser/IRegionSerialiser.cs
@@ -64,7 +64,8 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser
64 /// </summary> 64 /// </summary>
65 /// <param name="scene"></param> 65 /// <param name="scene"></param>
66 /// <param name="reader"></param> 66 /// <param name="reader"></param>
67 void LoadPrimsFromXml2(Scene scene, TextReader reader); 67 /// <param name="startScripts"></param>
68 void LoadPrimsFromXml2(Scene scene, TextReader reader, bool startScripts);
68 69
69 /// <summary> 70 /// <summary>
70 /// Save prims in the xml2 format 71 /// Save prims in the xml2 format
@@ -74,6 +75,17 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser
74 void SavePrimsToXml2(Scene scene, string fileName); 75 void SavePrimsToXml2(Scene scene, string fileName);
75 76
76 /// <summary> 77 /// <summary>
78 /// Save prims in the xml2 format, optionally specifying a bounding box for which
79 /// prims should be saved. If both min and max vectors are LLVector3.Zero, then all prims
80 /// are exported.
81 /// </summary>
82 /// <param name="scene"></param>
83 /// <param name="stream"></param>
84 /// <param name="min"></param>
85 /// <param name="max"></param>
86 void SavePrimsToXml2(Scene scene, TextWriter stream, LLVector3 min, LLVector3 max);
87
88 /// <summary>
77 /// Save a set of prims in the xml2 format 89 /// Save a set of prims in the xml2 format
78 /// </summary> 90 /// </summary>
79 /// <param name="entityList"></param> 91 /// <param name="entityList"></param>
@@ -81,6 +93,17 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser
81 void SavePrimListToXml2(List<EntityBase> entityList, string fileName); 93 void SavePrimListToXml2(List<EntityBase> entityList, string fileName);
82 94
83 /// <summary> 95 /// <summary>
96 /// Save a set of prims in the xml2 format, optionally specifying a bounding box for which
97 /// prims should be saved. If both min and max vectors are LLVector3.Zero, then all prims
98 /// are exported.
99 /// </summary>
100 /// <param name="entityList"></param>
101 /// <param name="stream"></param>
102 /// <param name="min"></param>
103 /// <param name="max"></param>
104 void SavePrimListToXml2(List<EntityBase> entityList, TextWriter stream, LLVector3 min, LLVector3 max);
105
106 /// <summary>
84 /// Deserializes a scene object from its xml2 representation. This does not load the object into the scene. 107 /// Deserializes a scene object from its xml2 representation. This does not load the object into the scene.
85 /// </summary> 108 /// </summary>
86 /// <param name="xmlString"></param> 109 /// <param name="xmlString"></param>
diff --git a/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs b/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs
index cd1fecb..0df19d9 100644
--- a/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs
+++ b/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs
@@ -143,7 +143,7 @@ namespace OpenSim.Region.Environment.Scenes
143 /// <param name="fileName"></param> 143 /// <param name="fileName"></param>
144 public static void LoadPrimsFromXml2(Scene scene, string fileName) 144 public static void LoadPrimsFromXml2(Scene scene, string fileName)
145 { 145 {
146 LoadPrimsFromXml2(scene, new XmlTextReader(fileName)); 146 LoadPrimsFromXml2(scene, new XmlTextReader(fileName), false);
147 } 147 }
148 148
149 /// <summary> 149 /// <summary>
@@ -151,9 +151,10 @@ namespace OpenSim.Region.Environment.Scenes
151 /// </summary> 151 /// </summary>
152 /// <param name="scene"></param> 152 /// <param name="scene"></param>
153 /// <param name="reader"></param> 153 /// <param name="reader"></param>
154 public static void LoadPrimsFromXml2(Scene scene, TextReader reader) 154 /// <param name="startScripts"></param>
155 public static void LoadPrimsFromXml2(Scene scene, TextReader reader, bool startScripts)
155 { 156 {
156 LoadPrimsFromXml2(scene, new XmlTextReader(reader)); 157 LoadPrimsFromXml2(scene, new XmlTextReader(reader), startScripts);
157 } 158 }
158 159
159 /// <summary> 160 /// <summary>
@@ -161,7 +162,8 @@ namespace OpenSim.Region.Environment.Scenes
161 /// </summary> 162 /// </summary>
162 /// <param name="scene"></param> 163 /// <param name="scene"></param>
163 /// <param name="reader"></param> 164 /// <param name="reader"></param>
164 protected static void LoadPrimsFromXml2(Scene scene, XmlTextReader reader) 165 /// <param name="startScripts"></param>
166 protected static void LoadPrimsFromXml2(Scene scene, XmlTextReader reader, bool startScripts)
165 { 167 {
166 XmlDocument doc = new XmlDocument(); 168 XmlDocument doc = new XmlDocument();
167 reader.WhitespaceHandling = WhitespaceHandling.None; 169 reader.WhitespaceHandling = WhitespaceHandling.None;
@@ -169,9 +171,17 @@ namespace OpenSim.Region.Environment.Scenes
169 reader.Close(); 171 reader.Close();
170 XmlNode rootNode = doc.FirstChild; 172 XmlNode rootNode = doc.FirstChild;
171 173
174 ICollection<SceneObjectGroup> sceneObjects = new List<SceneObjectGroup>();
172 foreach (XmlNode aPrimNode in rootNode.ChildNodes) 175 foreach (XmlNode aPrimNode in rootNode.ChildNodes)
173 { 176 {
174 CreatePrimFromXml2(scene, aPrimNode.OuterXml); 177 SceneObjectGroup obj = CreatePrimFromXml2(scene, aPrimNode.OuterXml);
178 if (obj != null && startScripts)
179 sceneObjects.Add(obj);
180 }
181
182 foreach (SceneObjectGroup sceneObject in sceneObjects)
183 {
184 sceneObject.CreateScriptInstances(0, true);
175 } 185 }
176 } 186 }
177 187
@@ -198,10 +208,36 @@ namespace OpenSim.Region.Environment.Scenes
198 SavePrimListToXml2(EntityList, fileName); 208 SavePrimListToXml2(EntityList, fileName);
199 } 209 }
200 210
211 public static void SavePrimsToXml2(Scene scene, TextWriter stream, LLVector3 min, LLVector3 max)
212 {
213 List<EntityBase> EntityList = scene.GetEntities();
214
215 SavePrimListToXml2(EntityList, stream, min, max);
216 }
217
201 public static void SavePrimListToXml2(List<EntityBase> entityList, string fileName) 218 public static void SavePrimListToXml2(List<EntityBase> entityList, string fileName)
202 { 219 {
203 FileStream file = new FileStream(fileName, FileMode.Create); 220 FileStream file = new FileStream(fileName, FileMode.Create);
204 StreamWriter stream = new StreamWriter(file); 221 try
222 {
223 StreamWriter stream = new StreamWriter(file);
224 try
225 {
226 SavePrimListToXml2(entityList, stream, LLVector3.Zero, LLVector3.Zero);
227 }
228 finally
229 {
230 stream.Close();
231 }
232 }
233 finally
234 {
235 file.Close();
236 }
237 }
238
239 public static void SavePrimListToXml2(List<EntityBase> entityList, TextWriter stream, LLVector3 min, LLVector3 max)
240 {
205 int primCount = 0; 241 int primCount = 0;
206 stream.WriteLine("<scene>\n"); 242 stream.WriteLine("<scene>\n");
207 243
@@ -209,13 +245,23 @@ namespace OpenSim.Region.Environment.Scenes
209 { 245 {
210 if (ent is SceneObjectGroup) 246 if (ent is SceneObjectGroup)
211 { 247 {
212 stream.WriteLine(((SceneObjectGroup)ent).ToXmlString2()); 248 SceneObjectGroup g = (SceneObjectGroup)ent;
249 if (!min.Equals(LLVector3.Zero) || !max.Equals(LLVector3.Zero))
250 {
251 LLVector3 pos = g.RootPart.GetWorldPosition();
252 if (min.X > pos.X || min.Y > pos.Y || min.Z > pos.Z)
253 continue;
254 if (max.X < pos.X || max.Y < pos.Y || max.Z < pos.Z)
255 continue;
256 }
257
258 stream.WriteLine(g.ToXmlString2());
213 primCount++; 259 primCount++;
214 } 260 }
215 } 261 }
216 stream.WriteLine("</scene>\n"); 262 stream.WriteLine("</scene>\n");
217 stream.Close(); 263 stream.Flush();
218 file.Close();
219 } 264 }
265
220 } 266 }
221} 267}
diff --git a/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs b/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs
index ce59ecc..d722d68 100644
--- a/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs
+++ b/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs
@@ -102,9 +102,9 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser
102 SceneXmlLoader.LoadPrimsFromXml2(scene, fileName); 102 SceneXmlLoader.LoadPrimsFromXml2(scene, fileName);
103 } 103 }
104 104
105 public void LoadPrimsFromXml2(Scene scene, TextReader reader) 105 public void LoadPrimsFromXml2(Scene scene, TextReader reader, bool startScripts)
106 { 106 {
107 SceneXmlLoader.LoadPrimsFromXml2(scene, reader); 107 SceneXmlLoader.LoadPrimsFromXml2(scene, reader, startScripts);
108 } 108 }
109 109
110 public void SavePrimsToXml2(Scene scene, string fileName) 110 public void SavePrimsToXml2(Scene scene, string fileName)
@@ -112,6 +112,11 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser
112 SceneXmlLoader.SavePrimsToXml2(scene, fileName); 112 SceneXmlLoader.SavePrimsToXml2(scene, fileName);
113 } 113 }
114 114
115 public void SavePrimsToXml2(Scene scene, TextWriter stream, LLVector3 min, LLVector3 max)
116 {
117 SceneXmlLoader.SavePrimsToXml2(scene, stream, min, max);
118 }
119
115 public SceneObjectGroup DeserializeGroupFromXml2(string xmlString) 120 public SceneObjectGroup DeserializeGroupFromXml2(string xmlString)
116 { 121 {
117 return SceneXmlLoader.DeserializeGroupFromXml2(xmlString); 122 return SceneXmlLoader.DeserializeGroupFromXml2(xmlString);
@@ -127,6 +132,11 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser
127 SceneXmlLoader.SavePrimListToXml2(entityList, fileName); 132 SceneXmlLoader.SavePrimListToXml2(entityList, fileName);
128 } 133 }
129 134
135 public void SavePrimListToXml2(List<EntityBase> entityList, TextWriter stream, LLVector3 min, LLVector3 max)
136 {
137 SceneXmlLoader.SavePrimListToXml2(entityList, stream, min, max);
138 }
139
130 public List<string> SerialiseRegion(Scene scene, string saveDir) 140 public List<string> SerialiseRegion(Scene scene, string saveDir)
131 { 141 {
132 List<string> results = new List<string>(); 142 List<string> results = new List<string>();
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs
index bd02b7e..4e7e764 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.cs
@@ -29,6 +29,7 @@ using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using System.Drawing; 30using System.Drawing;
31using System.Drawing.Imaging; 31using System.Drawing.Imaging;
32using System.IO;
32using System.Threading; 33using System.Threading;
33using System.Timers; 34using System.Timers;
34using Axiom.Math; 35using Axiom.Math;
@@ -1760,6 +1761,13 @@ namespace OpenSim.Region.Environment.Scenes
1760 m_serialiser.LoadPrimsFromXml2(this, fileName); 1761 m_serialiser.LoadPrimsFromXml2(this, fileName);
1761 } 1762 }
1762 1763
1764 public void LoadPrimsFromXml2(TextReader reader, bool startScripts)
1765 {
1766 m_log.InfoFormat("[SCENE]: Loading prims in xml2 format to region {0} from stream", RegionInfo.RegionName);
1767
1768 m_serialiser.LoadPrimsFromXml2(this, reader, startScripts);
1769 }
1770
1763 public void SavePrimsToXml2(string fileName) 1771 public void SavePrimsToXml2(string fileName)
1764 { 1772 {
1765 m_log.InfoFormat("[SCENE]: Saving prims in xml2 format for region {0} to {1}", RegionInfo.RegionName, fileName); 1773 m_log.InfoFormat("[SCENE]: Saving prims in xml2 format for region {0} to {1}", RegionInfo.RegionName, fileName);
@@ -1767,6 +1775,13 @@ namespace OpenSim.Region.Environment.Scenes
1767 m_serialiser.SavePrimsToXml2(this, fileName); 1775 m_serialiser.SavePrimsToXml2(this, fileName);
1768 } 1776 }
1769 1777
1778 public void SavePrimsToXml2(TextWriter stream, LLVector3 min, LLVector3 max)
1779 {
1780 m_log.InfoFormat("[SCENE]: Saving prims in xml2 format for region {0} to stream", RegionInfo.RegionName);
1781
1782 m_serialiser.SavePrimsToXml2(this, stream, min, max);
1783 }
1784
1770 public void SaveNamedPrimsToXml2(string primName, string fileName) 1785 public void SaveNamedPrimsToXml2(string primName, string fileName)
1771 { 1786 {
1772 m_log.InfoFormat( 1787 m_log.InfoFormat(