aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2012-10-24 04:10:22 +0100
committerJustin Clark-Casey (justincc)2012-10-24 04:10:22 +0100
commit81aeecc90723658187668baa49bd168b7b333afb (patch)
tree11e62ae375450e7d8d500565e29d05cc9b0b4ec7
parentGet "save oar" and "save iar" to tell you in a more friendly manner if the fi... (diff)
downloadopensim-SC-81aeecc90723658187668baa49bd168b7b333afb.zip
opensim-SC-81aeecc90723658187668baa49bd168b7b333afb.tar.gz
opensim-SC-81aeecc90723658187668baa49bd168b7b333afb.tar.bz2
opensim-SC-81aeecc90723658187668baa49bd168b7b333afb.tar.xz
Allow "show object", "show part", "dump object" and "delete object" to accept a local ID as well as a UUID.
This means that the sub-commands are now id rather than uuid, e.g. show object id
-rw-r--r--OpenSim/Framework/Console/ConsoleUtil.cs58
-rw-r--r--OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs103
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.cs13
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneGraph.cs24
4 files changed, 153 insertions, 45 deletions
diff --git a/OpenSim/Framework/Console/ConsoleUtil.cs b/OpenSim/Framework/Console/ConsoleUtil.cs
index 3ebfdf8..16a63e0 100644
--- a/OpenSim/Framework/Console/ConsoleUtil.cs
+++ b/OpenSim/Framework/Console/ConsoleUtil.cs
@@ -38,6 +38,8 @@ namespace OpenSim.Framework.Console
38 public class ConsoleUtil 38 public class ConsoleUtil
39 { 39 {
40 // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 40 // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
41
42 public const int LocalIdNotFound = 0;
41 43
42 /// <summary> 44 /// <summary>
43 /// Used by modules to display stock co-ordinate help, though possibly this should be under some general section 45 /// Used by modules to display stock co-ordinate help, though possibly this should be under some general section
@@ -87,19 +89,71 @@ namespace OpenSim.Framework.Console
87 /// Will complain to the console if parsing fails. 89 /// Will complain to the console if parsing fails.
88 /// </remarks> 90 /// </remarks>
89 /// <returns></returns> 91 /// <returns></returns>
90 /// <param name='console'></param> 92 /// <param name='console'>If null then no complaint is printed.</param>
91 /// <param name='rawUuid'></param> 93 /// <param name='rawUuid'></param>
92 /// <param name='uuid'></param> 94 /// <param name='uuid'></param>
93 public static bool TryParseConsoleUuid(ICommandConsole console, string rawUuid, out UUID uuid) 95 public static bool TryParseConsoleUuid(ICommandConsole console, string rawUuid, out UUID uuid)
94 { 96 {
95 if (!UUID.TryParse(rawUuid, out uuid)) 97 if (!UUID.TryParse(rawUuid, out uuid))
96 { 98 {
97 console.OutputFormat("{0} is not a valid uuid", rawUuid); 99 if (console != null)
100 console.OutputFormat("{0} is not a valid uuid", rawUuid);
101
98 return false; 102 return false;
99 } 103 }
100 104
101 return true; 105 return true;
102 } 106 }
107
108 public static bool TryParseConsoleLocalId(ICommandConsole console, string rawLocalId, out uint localId)
109 {
110 if (!uint.TryParse(rawLocalId, out localId))
111 {
112 if (console != null)
113 console.OutputFormat("{0} is not a valid local id", localId);
114
115 return false;
116 }
117
118 if (localId == 0)
119 {
120 if (console != null)
121 console.OutputFormat("{0} is not a valid local id - it must be greater than 0", localId);
122
123 return false;
124 }
125
126 return true;
127 }
128
129 /// <summary>
130 /// Tries to parse the input as either a UUID or a local ID.
131 /// </summary>
132 /// <returns>true if parsing succeeded, false otherwise.</returns>
133 /// <param name='console'></param>
134 /// <param name='rawId'></param>
135 /// <param name='uuid'></param>
136 /// <param name='localId'>
137 /// Will be set to ConsoleUtil.LocalIdNotFound if parsing result was a UUID or no parse succeeded.
138 /// </param>
139 public static bool TryParseConsoleId(ICommandConsole console, string rawId, out UUID uuid, out uint localId)
140 {
141 if (TryParseConsoleUuid(null, rawId, out uuid))
142 {
143 localId = LocalIdNotFound;
144 return true;
145 }
146
147 if (TryParseConsoleLocalId(null, rawId, out localId))
148 {
149 return true;
150 }
151
152 if (console != null)
153 console.OutputFormat("{0} is not a valid UUID or local id", rawId);
154
155 return false;
156 }
103 157
104 /// <summary> 158 /// <summary>
105 /// Convert a minimum vector input from the console to an OpenMetaverse.Vector3 159 /// Convert a minimum vector input from the console to an OpenMetaverse.Vector3
diff --git a/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs b/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs
index f0a35ad..b2c9bce 100644
--- a/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs
@@ -99,9 +99,9 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
99 HandleDeleteObject); 99 HandleDeleteObject);
100 100
101 m_console.Commands.AddCommand( 101 m_console.Commands.AddCommand(
102 "Objects", false, "delete object uuid", 102 "Objects", false, "delete object id",
103 "delete object uuid <UUID>", 103 "delete object id <UUID-or-localID>",
104 "Delete a scene object by uuid", 104 "Delete a scene object by uuid or localID",
105 HandleDeleteObject); 105 HandleDeleteObject);
106 106
107 m_console.Commands.AddCommand( 107 m_console.Commands.AddCommand(
@@ -131,12 +131,12 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
131 m_console.Commands.AddCommand( 131 m_console.Commands.AddCommand(
132 "Objects", 132 "Objects",
133 false, 133 false,
134 "show object uuid", 134 "show object id",
135 "show object uuid [--full] <UUID>", 135 "show object id [--full] <UUID-or-localID>",
136 "Show details of a scene object with the given UUID", 136 "Show details of a scene object with the given UUID or localID",
137 "The --full option will print out information on all the parts of the object.\n" 137 "The --full option will print out information on all the parts of the object.\n"
138 + "For yet more detailed part information, use the \"show part\" commands.", 138 + "For yet more detailed part information, use the \"show part\" commands.",
139 HandleShowObjectByUuid); 139 HandleShowObjectById);
140 140
141 m_console.Commands.AddCommand( 141 m_console.Commands.AddCommand(
142 "Objects", 142 "Objects",
@@ -163,9 +163,9 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
163 m_console.Commands.AddCommand( 163 m_console.Commands.AddCommand(
164 "Objects", 164 "Objects",
165 false, 165 false,
166 "show part uuid", 166 "show part id",
167 "show part uuid <UUID>", 167 "show part id <UUID-or-localID>",
168 "Show details of a scene object parts with the given UUID", HandleShowPartByUuid); 168 "Show details of a scene object part with the given UUID or localID", HandleShowPartById);
169 169
170 m_console.Commands.AddCommand( 170 m_console.Commands.AddCommand(
171 "Objects", 171 "Objects",
@@ -173,7 +173,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
173 "show part name", 173 "show part name",
174 "show part name [--regex] <name>", 174 "show part name [--regex] <name>",
175 "Show details of scene object parts with the given name.", 175 "Show details of scene object parts with the given name.",
176 "If --regex is specified then the name is treatead as a regular expression", 176 "If --regex is specified then the name is treated as a regular expression",
177 HandleShowPartByName); 177 HandleShowPartByName);
178 178
179 m_console.Commands.AddCommand( 179 m_console.Commands.AddCommand(
@@ -188,12 +188,13 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
188 m_console.Commands.AddCommand( 188 m_console.Commands.AddCommand(
189 "Objects", 189 "Objects",
190 false, 190 false,
191 "dump object uuid", 191 "dump object id",
192 "dump object uuid <UUID>", 192 "dump object id <UUID-or-localID>",
193 "Dump the formatted serialization of the given object to the file <UUID>.xml", 193 "Dump the formatted serialization of the given object to the file <UUID>.xml",
194 "e.g. dump object uuid c1ed6809-cc24-4061-a4c2-93082a2d1f1d will dump serialization to c1ed6809-cc24-4061-a4c2-93082a2d1f1d.xml\n" 194 "e.g. dump object uuid c1ed6809-cc24-4061-a4c2-93082a2d1f1d will dump serialization to c1ed6809-cc24-4061-a4c2-93082a2d1f1d.xml\n"
195 + "To locate the UUID in the first place, you need to use the other show object commands", 195 + "To locate the UUID or localID in the first place, you need to use the other show object commands.\n"
196 HandleDumpObjectByUuid); 196 + "If a local ID is given then the filename used is still that for the UUID",
197 HandleDumpObjectById);
197 } 198 }
198 199
199 public void RemoveRegion(Scene scene) 200 public void RemoveRegion(Scene scene)
@@ -248,7 +249,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
248 m_console.OutputFormat(sb.ToString()); 249 m_console.OutputFormat(sb.ToString());
249 } 250 }
250 251
251 private void HandleShowObjectByUuid(string module, string[] cmdparams) 252 private void HandleShowObjectById(string module, string[] cmdparams)
252 { 253 {
253 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene)) 254 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene))
254 return; 255 return;
@@ -264,14 +265,17 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
264 return; 265 return;
265 } 266 }
266 267
267 UUID objectUuid; 268 UUID uuid;
268 if (!UUID.TryParse(mainParams[3], out objectUuid)) 269 uint localId;
269 { 270 if (!ConsoleUtil.TryParseConsoleId(m_console, mainParams[3], out uuid, out localId))
270 m_console.OutputFormat("{0} is not a valid uuid", mainParams[3]);
271 return; 271 return;
272 }
273 272
274 SceneObjectGroup so = m_scene.GetSceneObjectGroup(objectUuid); 273 SceneObjectGroup so;
274
275 if (localId != ConsoleUtil.LocalIdNotFound)
276 so = m_scene.GetSceneObjectGroup(localId);
277 else
278 so = m_scene.GetSceneObjectGroup(uuid);
275 279
276 if (so == null) 280 if (so == null)
277 { 281 {
@@ -348,7 +352,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
348 OutputSogsToConsole(searchPredicate, showFull); 352 OutputSogsToConsole(searchPredicate, showFull);
349 } 353 }
350 354
351 private void HandleShowPartByUuid(string module, string[] cmdparams) 355 private void HandleShowPartById(string module, string[] cmdparams)
352 { 356 {
353 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene)) 357 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene))
354 return; 358 return;
@@ -361,18 +365,20 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
361 365
362 if (mainParams.Count < 4) 366 if (mainParams.Count < 4)
363 { 367 {
364 m_console.OutputFormat("Usage: show part uuid [--full] <uuid>"); 368 m_console.OutputFormat("Usage: show part id [--full] <UUID-or-localID>");
365 return; 369 return;
366 } 370 }
367 371
368 UUID objectUuid; 372 UUID objectUuid;
369 if (!UUID.TryParse(mainParams[3], out objectUuid)) 373 uint localId;
370 { 374 if (!ConsoleUtil.TryParseConsoleId(m_console, mainParams[3], out objectUuid, out localId))
371 m_console.OutputFormat("{0} is not a valid uuid", mainParams[3]);
372 return; 375 return;
373 }
374 376
375 SceneObjectPart sop = m_scene.GetSceneObjectPart(objectUuid); 377 SceneObjectPart sop;
378 if (localId == ConsoleUtil.LocalIdNotFound)
379 sop = m_scene.GetSceneObjectPart(objectUuid);
380 else
381 sop = m_scene.GetSceneObjectPart(localId);
376 382
377 if (sop == null) 383 if (sop == null)
378 { 384 {
@@ -460,22 +466,27 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
460 OutputSopsToConsole(searchPredicate, true); 466 OutputSopsToConsole(searchPredicate, true);
461 } 467 }
462 468
463 private void HandleDumpObjectByUuid(string module, string[] cmdparams) 469 private void HandleDumpObjectById(string module, string[] cmdparams)
464 { 470 {
465 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene)) 471 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene))
466 return; 472 return;
467 473
468 if (cmdparams.Length < 4) 474 if (cmdparams.Length < 4)
469 { 475 {
470 m_console.OutputFormat("Usage: dump object uuid <uuid>"); 476 m_console.OutputFormat("Usage: dump object id <UUID-or-localID>");
471 return; 477 return;
472 } 478 }
473 479
474 UUID objectUuid; 480 UUID objectUuid;
475 if (!ConsoleUtil.TryParseConsoleUuid(m_console, cmdparams[3], out objectUuid)) 481 uint localId;
482 if (!ConsoleUtil.TryParseConsoleId(m_console, cmdparams[3], out objectUuid, out localId))
476 return; 483 return;
477 484
478 SceneObjectGroup so = m_scene.GetSceneObjectGroup(objectUuid); 485 SceneObjectGroup so;
486 if (localId == ConsoleUtil.LocalIdNotFound)
487 so = m_scene.GetSceneObjectGroup(objectUuid);
488 else
489 so = m_scene.GetSceneObjectGroup(localId);
479 490
480 if (so == null) 491 if (so == null)
481 { 492 {
@@ -483,6 +494,9 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
483 return; 494 return;
484 } 495 }
485 496
497 // In case we found it via local ID.
498 objectUuid = so.UUID;
499
486 string fileName = string.Format("{0}.xml", objectUuid); 500 string fileName = string.Format("{0}.xml", objectUuid);
487 501
488 if (!ConsoleUtil.CheckFileDoesNotExist(m_console, fileName)) 502 if (!ConsoleUtil.CheckFileDoesNotExist(m_console, fileName))
@@ -661,19 +675,24 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
661 675
662 break; 676 break;
663 677
664 case "uuid": 678 case "id":
665 if (!UUID.TryParse(o, out match)) 679 UUID uuid;
680 uint localId;
681 if (!ConsoleUtil.TryParseConsoleId(m_console, o, out uuid, out localId))
666 return; 682 return;
667 683
668 requireConfirmation = false; 684 requireConfirmation = false;
669 deletes = new List<SceneObjectGroup>(); 685 deletes = new List<SceneObjectGroup>();
670 686
671 m_scene.ForEachSOG(delegate (SceneObjectGroup g) 687 SceneObjectGroup so;
672 { 688 if (localId == ConsoleUtil.LocalIdNotFound)
673 if (g.UUID == match && !g.IsAttachment) 689 so = m_scene.GetSceneObjectGroup(uuid);
674 deletes.Add(g); 690 else
675 }); 691 so = m_scene.GetSceneObjectGroup(localId);
676 692
693 if (!so.IsAttachment)
694 deletes.Add(so);
695
677 // if (deletes.Count == 0) 696 // if (deletes.Count == 0)
678 // m_console.OutputFormat("No objects were found with uuid {0}", match); 697 // m_console.OutputFormat("No objects were found with uuid {0}", match);
679 698
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 5f45529..532598a 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -4688,13 +4688,24 @@ namespace OpenSim.Region.Framework.Scenes
4688 /// Get a group via its UUID 4688 /// Get a group via its UUID
4689 /// </summary> 4689 /// </summary>
4690 /// <param name="fullID"></param> 4690 /// <param name="fullID"></param>
4691 /// <returns>null if no group with that name exists</returns> 4691 /// <returns>null if no group with that id exists</returns>
4692 public SceneObjectGroup GetSceneObjectGroup(UUID fullID) 4692 public SceneObjectGroup GetSceneObjectGroup(UUID fullID)
4693 { 4693 {
4694 return m_sceneGraph.GetSceneObjectGroup(fullID); 4694 return m_sceneGraph.GetSceneObjectGroup(fullID);
4695 } 4695 }
4696 4696
4697 /// <summary> 4697 /// <summary>
4698 /// Get a group via its local ID
4699 /// </summary>
4700 /// <remarks>This will only return a group if the local ID matches a root part</remarks>
4701 /// <param name="localID"></param>
4702 /// <returns>null if no group with that id exists</returns>
4703 public SceneObjectGroup GetSceneObjectGroup(uint localID)
4704 {
4705 return m_sceneGraph.GetSceneObjectGroup(localID);
4706 }
4707
4708 /// <summary>
4698 /// Get a group by name from the scene (will return the first 4709 /// Get a group by name from the scene (will return the first
4699 /// found, if there are more than one prim with the same name) 4710 /// found, if there are more than one prim with the same name)
4700 /// </summary> 4711 /// </summary>
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index 209a770..a4383fd 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -983,6 +983,30 @@ namespace OpenSim.Region.Framework.Scenes
983 } 983 }
984 984
985 /// <summary> 985 /// <summary>
986 /// Get a group in the scene
987 /// </summary>
988 /// <remarks>
989 /// This will only return a group if the local ID matches the root part, not other parts.
990 /// </remarks>
991 /// <param name="localID">Local id of the root part of the group</param>
992 /// <returns>null if no such group was found</returns>
993 protected internal SceneObjectGroup GetSceneObjectGroup(uint localID)
994 {
995 lock (SceneObjectGroupsByLocalPartID)
996 {
997 if (SceneObjectGroupsByLocalPartID.ContainsKey(localID))
998 {
999 SceneObjectGroup so = SceneObjectGroupsByLocalPartID[localID];
1000
1001 if (so.LocalId == localID)
1002 return so;
1003 }
1004 }
1005
1006 return null;
1007 }
1008
1009 /// <summary>
986 /// Get a group by name from the scene (will return the first 1010 /// Get a group by name from the scene (will return the first
987 /// found, if there are more than one prim with the same name) 1011 /// found, if there are more than one prim with the same name)
988 /// </summary> 1012 /// </summary>