From c9fe500212cf8b8231ef0604a1f577e9bbedfcbe Mon Sep 17 00:00:00 2001 From: MW Date: Tue, 1 Jul 2008 19:23:45 +0000 Subject: Added "save-prims-xml2 ", as we were lacking a method to save a single primitive or small group of them. This command will save all prims in the current scene that name matches the "PrimName" parameter. The saved file is in standard xml2 format, so can be loaded using load-xml2 --- OpenSim/Region/Application/OpenSim.cs | 11 +++++++++++ .../Modules/World/Serialiser/IRegionSerialiser.cs | 7 +++++++ .../Modules/World/Serialiser/SceneXmlLoader.cs | 13 +++++++++---- .../Modules/World/Serialiser/SerialiserModule.cs | 5 +++++ OpenSim/Region/Environment/Scenes/Scene.cs | 21 +++++++++++++++++++++ OpenSim/Region/Environment/Scenes/SceneManager.cs | 5 +++++ 6 files changed, 58 insertions(+), 4 deletions(-) diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index 60e00a2..4afe37b 100644 --- a/OpenSim/Region/Application/OpenSim.cs +++ b/OpenSim/Region/Application/OpenSim.cs @@ -401,6 +401,17 @@ namespace OpenSim } break; + case "save-prims-xml2": + if (cmdparams.Length > 1) + { + m_sceneManager.SaveNamedPrimsToXml2(cmdparams[0], cmdparams[1]); + } + else + { + m_sceneManager.SaveNamedPrimsToXml2("Primitive", DEFAULT_PRIM_BACKUP_FILENAME); + } + break; + case "load-oar": m_log.Error("[CONSOLE]: Don't use me - I haven't yet been sufficiently implemented!"); diff --git a/OpenSim/Region/Environment/Modules/World/Serialiser/IRegionSerialiser.cs b/OpenSim/Region/Environment/Modules/World/Serialiser/IRegionSerialiser.cs index e6090a7..3ae7a54 100644 --- a/OpenSim/Region/Environment/Modules/World/Serialiser/IRegionSerialiser.cs +++ b/OpenSim/Region/Environment/Modules/World/Serialiser/IRegionSerialiser.cs @@ -74,6 +74,13 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser void SavePrimsToXml2(Scene scene, string fileName); /// + /// Save a set of prims in the xml2 format + /// + /// + /// + void SavePrimListToXml2(List entityList, string fileName); + + /// /// Load an individual scene object from the xml2 format /// /// diff --git a/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs b/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs index ed211e4..9bab2b6 100644 --- a/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs +++ b/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs @@ -186,18 +186,23 @@ namespace OpenSim.Region.Environment.Scenes public static void SavePrimsToXml2(Scene scene, string fileName) { + List EntityList = scene.GetEntities(); + + SavePrimListToXml2(EntityList, fileName); + } + + public static void SavePrimListToXml2(List entityList, string fileName) + { FileStream file = new FileStream(fileName, FileMode.Create); StreamWriter stream = new StreamWriter(file); int primCount = 0; stream.WriteLine("\n"); - List EntityList = scene.GetEntities(); - - foreach (EntityBase ent in EntityList) + foreach (EntityBase ent in entityList) { if (ent is SceneObjectGroup) { - stream.WriteLine(((SceneObjectGroup) ent).ToXmlString2()); + stream.WriteLine(((SceneObjectGroup)ent).ToXmlString2()); primCount++; } } diff --git a/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs b/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs index 28f3996..c7b5fa5 100644 --- a/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs +++ b/OpenSim/Region/Environment/Modules/World/Serialiser/SerialiserModule.cs @@ -122,6 +122,11 @@ namespace OpenSim.Region.Environment.Modules.World.Serialiser return SceneXmlLoader.SaveGroupToXml2(grp); } + public void SavePrimListToXml2(List entityList, string fileName) + { + SceneXmlLoader.SavePrimListToXml2(entityList, fileName); + } + public List SerialiseRegion(Scene scene, string saveDir) { List results = new List(); diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 261f73d..375756d 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -1738,6 +1738,27 @@ namespace OpenSim.Region.Environment.Scenes m_serialiser.SavePrimsToXml2(this, fileName); } + + public void SaveNamedPrimsToXml2(string primName, string fileName) + { + List entityList = GetEntities(); + List primList = new List(); + + foreach (EntityBase ent in entityList) + { + if (ent is SceneObjectGroup) + { + if (ent.Name == primName) + { + primList.Add(ent); + } + } + } + + m_serialiser.SavePrimListToXml2(primList, fileName); + } + + /// /// Load a prim archive into the scene. This loads both prims and their assets. /// diff --git a/OpenSim/Region/Environment/Scenes/SceneManager.cs b/OpenSim/Region/Environment/Scenes/SceneManager.cs index add8081..a3a9c75 100644 --- a/OpenSim/Region/Environment/Scenes/SceneManager.cs +++ b/OpenSim/Region/Environment/Scenes/SceneManager.cs @@ -204,6 +204,11 @@ namespace OpenSim.Region.Environment.Scenes CurrentOrFirstScene.SavePrimsToXml2(filename); } + public void SaveNamedPrimsToXml2(string primName, string filename) + { + CurrentOrFirstScene.SaveNamedPrimsToXml2( primName, filename); + } + /// /// Load an xml file of prims in OpenSimulator's current 'xml2' file format to the current scene /// -- cgit v1.1