diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs index 60e00a2109..4afe37b998 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 e6090a7928..3ae7a5436e 100644 --- a/OpenSim/Region/Environment/Modules/World/Serialiser/IRegionSerialiser.cs +++ b/OpenSim/Region/Environment/Modules/World/Serialiser/IRegionSerialiser.cs @@ -73,6 +73,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 ed211e4112..9bab2b68b0 100644 --- a/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs +++ b/OpenSim/Region/Environment/Modules/World/Serialiser/SceneXmlLoader.cs @@ -185,19 +185,24 @@ 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 28f3996eef..c7b5fa59ce 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 261f73dfc8..375756d28a 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 add80813f0..a3a9c75705 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 ///