aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs116
-rw-r--r--OpenSim/Region/Framework/Interfaces/IEntityInventory.cs14
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs9
3 files changed, 102 insertions, 37 deletions
diff --git a/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs b/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs
index 7a35182..6feba21 100644
--- a/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Objects/Commands/ObjectCommandsModule.cs
@@ -139,25 +139,29 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
139 "Objects", 139 "Objects",
140 false, 140 false,
141 "show object uuid", 141 "show object uuid",
142 "show object uuid <UUID>", 142 "show object uuid [--full] <UUID>",
143 "Show details of a scene object with the given UUID", HandleShowObjectByUuid); 143 "Show details of a scene object with the given UUID",
144 "The --full option will print out information on all the parts of the object.",
145 HandleShowObjectByUuid);
144 146
145 m_console.Commands.AddCommand( 147 m_console.Commands.AddCommand(
146 "Objects", 148 "Objects",
147 false, 149 false,
148 "show object name", 150 "show object name",
149 "show object name [--regex] <name>", 151 "show object name [--full] [--regex] <name>",
150 "Show details of scene objects with the given name.", 152 "Show details of scene objects with the given name.",
151 "If --regex is specified then the name is treatead as a regular expression", 153 "The --full option will print out information on all the parts of the object.\n"
154 + "If --regex is specified then the name is treatead as a regular expression.",
152 HandleShowObjectByName); 155 HandleShowObjectByName);
153 156
154 m_console.Commands.AddCommand( 157 m_console.Commands.AddCommand(
155 "Objects", 158 "Objects",
156 false, 159 false,
157 "show object pos", 160 "show object pos",
158 "show object pos <start-coord> to <end-coord>", 161 "show object pos [--full] <start-coord> to <end-coord>",
159 "Show details of scene objects within the given area.", 162 "Show details of scene objects within the given area.",
160 "Each component of the coord is comma separated. There must be no spaces between the commas.\n" 163 "The --full option will print out information on all the parts of the object.\n"
164 + "Each component of the coord is comma separated. There must be no spaces between the commas.\n"
161 + "If you don't care about the z component you can simply omit it.\n" 165 + "If you don't care about the z component you can simply omit it.\n"
162 + "If you don't care about the x or y components then you can leave them blank (though a comma is still required)\n" 166 + "If you don't care about the x or y components then you can leave them blank (though a comma is still required)\n"
163 + "If you want to specify the maxmimum value of a component then you can use ~ instead of a number\n" 167 + "If you want to specify the maxmimum value of a component then you can use ~ instead of a number\n"
@@ -216,7 +220,12 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
216// m_log.DebugFormat("[OBJECTS COMMANDS MODULE]: REGION {0} LOADED", scene.RegionInfo.RegionName); 220// m_log.DebugFormat("[OBJECTS COMMANDS MODULE]: REGION {0} LOADED", scene.RegionInfo.RegionName);
217 } 221 }
218 222
219 private void OutputSogsToConsole(Predicate<SceneObjectGroup> searchPredicate) 223 /// <summary>
224 /// Outputs the sogs to console.
225 /// </summary>
226 /// <param name='searchPredicate'></param>
227 /// <param name='showFull'>If true then output all part details. If false then output summary.</param>
228 private void OutputSogsToConsole(Predicate<SceneObjectGroup> searchPredicate, bool showFull)
220 { 229 {
221 List<SceneObjectGroup> sceneObjects = m_scene.GetSceneObjectGroups().FindAll(searchPredicate); 230 List<SceneObjectGroup> sceneObjects = m_scene.GetSceneObjectGroups().FindAll(searchPredicate);
222 231
@@ -224,7 +233,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
224 233
225 foreach (SceneObjectGroup so in sceneObjects) 234 foreach (SceneObjectGroup so in sceneObjects)
226 { 235 {
227 AddSceneObjectReport(sb, so); 236 AddSceneObjectReport(sb, so, showFull);
228 sb.Append("\n"); 237 sb.Append("\n");
229 } 238 }
230 239
@@ -253,21 +262,26 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
253 m_console.OutputFormat(sb.ToString()); 262 m_console.OutputFormat(sb.ToString());
254 } 263 }
255 264
256 private void HandleShowObjectByUuid(string module, string[] cmd) 265 private void HandleShowObjectByUuid(string module, string[] cmdparams)
257 { 266 {
258 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene)) 267 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene))
259 return; 268 return;
260 269
261 if (cmd.Length < 4) 270 bool showFull = false;
271 OptionSet options = new OptionSet().Add("full", v => showFull = v != null );
272
273 List<string> mainParams = options.Parse(cmdparams);
274
275 if (mainParams.Count < 4)
262 { 276 {
263 m_console.OutputFormat("Usage: show object uuid <uuid>"); 277 m_console.OutputFormat("Usage: show object uuid <uuid>");
264 return; 278 return;
265 } 279 }
266 280
267 UUID objectUuid; 281 UUID objectUuid;
268 if (!UUID.TryParse(cmd[3], out objectUuid)) 282 if (!UUID.TryParse(mainParams[3], out objectUuid))
269 { 283 {
270 m_console.OutputFormat("{0} is not a valid uuid", cmd[3]); 284 m_console.OutputFormat("{0} is not a valid uuid", mainParams[3]);
271 return; 285 return;
272 } 286 }
273 287
@@ -280,7 +294,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
280 } 294 }
281 295
282 StringBuilder sb = new StringBuilder(); 296 StringBuilder sb = new StringBuilder();
283 AddSceneObjectReport(sb, so); 297 AddSceneObjectReport(sb, so, showFull);
284 298
285 m_console.OutputFormat(sb.ToString()); 299 m_console.OutputFormat(sb.ToString());
286 } 300 }
@@ -290,14 +304,17 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
290 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene)) 304 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene))
291 return; 305 return;
292 306
307 bool showFull = false;
293 bool useRegex = false; 308 bool useRegex = false;
294 OptionSet options = new OptionSet().Add("regex", v=> useRegex = v != null ); 309 OptionSet options = new OptionSet();
310 options.Add("full", v => showFull = v != null );
311 options.Add("regex", v => useRegex = v != null );
295 312
296 List<string> mainParams = options.Parse(cmdparams); 313 List<string> mainParams = options.Parse(cmdparams);
297 314
298 if (mainParams.Count < 4) 315 if (mainParams.Count < 4)
299 { 316 {
300 m_console.OutputFormat("Usage: show object name [--regex] <name>"); 317 m_console.OutputFormat("Usage: show object name [--full] [--regex] <name>");
301 return; 318 return;
302 } 319 }
303 320
@@ -315,7 +332,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
315 searchPredicate = so => so.Name == name; 332 searchPredicate = so => so.Name == name;
316 } 333 }
317 334
318 OutputSogsToConsole(searchPredicate); 335 OutputSogsToConsole(searchPredicate, showFull);
319 } 336 }
320 337
321 private void HandleShowObjectByPos(string module, string[] cmdparams) 338 private void HandleShowObjectByPos(string module, string[] cmdparams)
@@ -323,9 +340,14 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
323 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene)) 340 if (!(m_console.ConsoleScene == null || m_console.ConsoleScene == m_scene))
324 return; 341 return;
325 342
326 if (cmdparams.Length < 5) 343 bool showFull = false;
344 OptionSet options = new OptionSet().Add("full", v => showFull = v != null );
345
346 List<string> mainParams = options.Parse(cmdparams);
347
348 if (mainParams.Count < 5)
327 { 349 {
328 m_console.OutputFormat("Usage: show object pos <start-coord> to <end-coord>"); 350 m_console.OutputFormat("Usage: show object pos [--full] <start-coord> to <end-coord>");
329 return; 351 return;
330 } 352 }
331 353
@@ -337,7 +359,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
337 Predicate<SceneObjectGroup> searchPredicate 359 Predicate<SceneObjectGroup> searchPredicate
338 = so => Util.IsInsideBox(so.AbsolutePosition, startVector, endVector); 360 = so => Util.IsInsideBox(so.AbsolutePosition, startVector, endVector);
339 361
340 OutputSogsToConsole(searchPredicate); 362 OutputSogsToConsole(searchPredicate, showFull);
341 } 363 }
342 364
343 private void HandleShowPartByUuid(string module, string[] cmd) 365 private void HandleShowPartByUuid(string module, string[] cmd)
@@ -437,28 +459,54 @@ namespace OpenSim.Region.CoreModules.World.Objects.Commands
437 OutputSopsToConsole(searchPredicate); 459 OutputSopsToConsole(searchPredicate);
438 } 460 }
439 461
440 private StringBuilder AddSceneObjectReport(StringBuilder sb, SceneObjectGroup so) 462 private StringBuilder AddSceneObjectReport(StringBuilder sb, SceneObjectGroup so, bool showFull)
441 { 463 {
442 sb.AppendFormat("Name: {0}\n", so.Name); 464 if (showFull)
443 sb.AppendFormat("Description: {0}\n", so.Description); 465 {
444 sb.AppendFormat("Location: {0} @ {1}\n", so.AbsolutePosition, so.Scene.RegionInfo.RegionName); 466 foreach (SceneObjectPart sop in so.Parts)
445 sb.AppendFormat("Parts: {0}\n", so.PrimCount); 467 {
446 sb.AppendFormat("Flags: {0}\n", so.RootPart.Flags); 468 AddScenePartReport(sb, sop);
469 sb.Append("\n");
470 }
471 }
472 else
473 {
474 AddSummarySceneObjectReport(sb, so);
475 }
447 476
448 return sb; 477 return sb;
449 } 478 }
450 479
451 private StringBuilder AddScenePartReport(StringBuilder sb, SceneObjectPart sop) 480 private StringBuilder AddSummarySceneObjectReport(StringBuilder sb, SceneObjectGroup so)
452 { 481 {
453 sb.AppendFormat("Name: {0}\n", sop.Name); 482 ConsoleDisplayList cdl = new ConsoleDisplayList();
454 sb.AppendFormat("Description: {0}\n", sop.Description); 483 cdl.AddRow("Name", so.Name);
455 sb.AppendFormat("Location: {0} @ {1}\n", sop.AbsolutePosition, sop.ParentGroup.Scene.RegionInfo.RegionName); 484 cdl.AddRow("Descrition", so.Description);
456 sb.AppendFormat("Parent: {0}", 485 cdl.AddRow("Local ID", so.LocalId);
457 sop.IsRoot ? "Is Root\n" : string.Format("{0} {1}\n", sop.ParentGroup.Name, sop.ParentGroup.UUID)); 486 cdl.AddRow("UUID", so.UUID);
458 sb.AppendFormat("Link number: {0}\n", sop.LinkNum); 487 cdl.AddRow("Location", string.Format("{0} @ {1}", so.AbsolutePosition, so.Scene.Name));
459 sb.AppendFormat("Flags: {0}\n", sop.Flags); 488 cdl.AddRow("Parts", so.PrimCount);
489 cdl.AddRow("Flags", so.RootPart.Flags);
490
491 return sb.Append(cdl.ToString());
492 }
460 493
461 return sb; 494 private StringBuilder AddScenePartReport(StringBuilder sb, SceneObjectPart sop)
495 {
496 ConsoleDisplayList cdl = new ConsoleDisplayList();
497 cdl.AddRow("Name", sop.Name);
498 cdl.AddRow("Description", sop.Description);
499 cdl.AddRow("Local ID", sop.LocalId);
500 cdl.AddRow("UUID", sop.UUID);
501 cdl.AddRow("Location", string.Format("{0} @ {1}", sop.AbsolutePosition, sop.ParentGroup.Scene.Name));
502 cdl.AddRow(
503 "Parent",
504 sop.IsRoot ? "Is Root" : string.Format("{0} {1}", sop.ParentGroup.Name, sop.ParentGroup.UUID));
505 cdl.AddRow("Link number", sop.LinkNum);
506 cdl.AddRow("Flags", sop.Flags);
507 cdl.AddRow("Items", sop.Inventory.Count);
508
509 return sb.Append(cdl.ToString());
462 } 510 }
463 511
464 private void HandleDeleteObject(string module, string[] cmd) 512 private void HandleDeleteObject(string module, string[] cmd)
diff --git a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
index 4274cbe..9d921de 100644
--- a/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
+++ b/OpenSim/Region/Framework/Interfaces/IEntityInventory.cs
@@ -270,17 +270,25 @@ namespace OpenSim.Region.Framework.Interfaces
270 void ApplyGodPermissions(uint perms); 270 void ApplyGodPermissions(uint perms);
271 271
272 /// <summary> 272 /// <summary>
273 /// Number of items in this inventory.
274 /// </summary>
275 int Count { get; }
276
277 /// <summary>
273 /// Returns true if this inventory contains any scripts 278 /// Returns true if this inventory contains any scripts
274 /// </summary></returns> 279 /// </summary></returns>
275 bool ContainsScripts(); 280 bool ContainsScripts();
276 281
277 /// <summary> 282 /// <summary>
278 /// Returns the count of scripts contained 283 /// Number of scripts in this inventory.
279 /// </summary></returns> 284 /// </summary>
285 /// <remarks>
286 /// Includes both running and non running scripts.
287 /// </remarks>
280 int ScriptCount(); 288 int ScriptCount();
281 289
282 /// <summary> 290 /// <summary>
283 /// Returns the count of running scripts contained 291 /// Number of running scripts in this inventory.
284 /// </summary></returns> 292 /// </summary></returns>
285 int RunningScriptCount(); 293 int RunningScriptCount();
286 294
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
index e010864..f41e329 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPartInventory.cs
@@ -97,6 +97,15 @@ namespace OpenSim.Region.Framework.Scenes
97 QueryScriptStates(); 97 QueryScriptStates();
98 } 98 }
99 } 99 }
100
101 public int Count
102 {
103 get
104 {
105 lock (m_items)
106 return m_items.Count;
107 }
108 }
100 109
101 /// <summary> 110 /// <summary>
102 /// Constructor 111 /// Constructor