OpenSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros
ConsoleUtil.cs
Go to the documentation of this file.
1 /*
2  * Copyright (c) Contributors, http://opensimulator.org/
3  * See CONTRIBUTORS.TXT for a full list of copyright holders.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * * Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the name of the OpenSimulator Project nor the
13  * names of its contributors may be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 using System;
29 using System.Collections.Generic;
30 using System.IO;
31 using System.Linq;
32 using System.Reflection;
33 using log4net;
34 using OpenMetaverse;
35 
36 namespace OpenSim.Framework.Console
37 {
38  public class ConsoleUtil
39  {
40  // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
41 
42  public const int LocalIdNotFound = 0;
43 
48  public const string CoordHelp
49  = @"Each component of the coord is comma separated. There must be no spaces between the commas.
50  If you don't care about the z component you can simply omit it.
51  If you don't care about the x or y components then you can leave them blank (though a comma is still required)
52  If you want to specify the maximum value of a component then you can use ~ instead of a number
53  If you want to specify the minimum value of a component then you can use -~ instead of a number
54  e.g.
55  show object pos 20,20,20 to 40,40,40
56  delete object pos 20,20 to 40,40
57  show object pos ,20,20 to ,40,40
58  delete object pos ,,30 to ,,~
59  show object pos ,,-~ to ,,30";
60 
61  public const string MinRawConsoleVectorValue = "-~";
62  public const string MaxRawConsoleVectorValue = "~";
63 
64  public const string VectorSeparator = ",";
65  public static char[] VectorSeparatorChars = VectorSeparator.ToCharArray();
66 
74  public static bool CheckFileDoesNotExist(ICommandConsole console, string path)
75  {
76  if (File.Exists(path))
77  {
78  console.OutputFormat("File {0} already exists. Please move or remove it.", path);
79  return false;
80  }
81 
82  return true;
83  }
84 
95  public static bool TryParseConsoleUuid(ICommandConsole console, string rawUuid, out UUID uuid)
96  {
97  if (!UUID.TryParse(rawUuid, out uuid))
98  {
99  if (console != null)
100  console.OutputFormat("ERROR: {0} is not a valid uuid", rawUuid);
101 
102  return false;
103  }
104 
105  return true;
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("ERROR: {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("ERROR: {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 
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("ERROR: {0} is not a valid UUID or local id", rawId);
154 
155  return false;
156  }
157 
165  public static bool TryParseConsoleBool(ICommandConsole console, string rawConsoleString, out bool b)
166  {
167  if (!bool.TryParse(rawConsoleString, out b))
168  {
169  if (console != null)
170  console.OutputFormat("ERROR: {0} is not a true or false value", rawConsoleString);
171 
172  return false;
173  }
174 
175  return true;
176  }
177 
185  public static bool TryParseConsoleInt(ICommandConsole console, string rawConsoleInt, out int i)
186  {
187  if (!int.TryParse(rawConsoleInt, out i))
188  {
189  if (console != null)
190  console.OutputFormat("ERROR: {0} is not a valid integer", rawConsoleInt);
191 
192  return false;
193  }
194 
195  return true;
196  }
197 
205  public static bool TryParseConsoleFloat(ICommandConsole console, string rawConsoleInput, out float i)
206  {
207  if (!float.TryParse(rawConsoleInput, out i))
208  {
209  if (console != null)
210  console.OutputFormat("ERROR: {0} is not a valid float", rawConsoleInput);
211 
212  return false;
213  }
214 
215  return true;
216  }
217 
225  public static bool TryParseConsoleDouble(ICommandConsole console, string rawConsoleInput, out double i)
226  {
227  if (!double.TryParse(rawConsoleInput, out i))
228  {
229  if (console != null)
230  console.OutputFormat("ERROR: {0} is not a valid double", rawConsoleInput);
231 
232  return false;
233  }
234 
235  return true;
236  }
237 
245  public static bool TryParseConsoleNaturalInt(ICommandConsole console, string rawConsoleInt, out int i)
246  {
247  if (TryParseConsoleInt(console, rawConsoleInt, out i))
248  {
249  if (i < 0)
250  {
251  if (console != null)
252  console.OutputFormat("ERROR: {0} is not a positive integer", rawConsoleInt);
253 
254  return false;
255  }
256 
257  return true;
258  }
259 
260  return false;
261  }
262 
269  public static bool TryParseConsoleMinVector(string rawConsoleVector, out Vector3 vector)
270  {
271  return TryParseConsoleVector(rawConsoleVector, c => float.MinValue.ToString(), out vector);
272  }
273 
280  public static bool TryParseConsoleMaxVector(string rawConsoleVector, out Vector3 vector)
281  {
282  return TryParseConsoleVector(rawConsoleVector, c => float.MaxValue.ToString(), out vector);
283  }
284 
300  public static bool TryParseConsoleVector(
301  string rawConsoleVector, Func<string, string> blankComponentFunc, out Vector3 vector)
302  {
303  return Vector3.TryParse(CookVector(rawConsoleVector, 3, blankComponentFunc), out vector);
304  }
305 
321  public static bool TryParseConsole2DVector(
322  string rawConsoleVector, Func<string, string> blankComponentFunc, out Vector2 vector)
323  {
324  // We don't use Vector2.TryParse() for now because for some reason it expects an input with 3 components
325  // rather than 2.
326  string cookedVector = CookVector(rawConsoleVector, 2, blankComponentFunc);
327 
328  if (cookedVector == null)
329  {
330  vector = Vector2.Zero;
331 
332  return false;
333  }
334  else
335  {
336  string[] cookedComponents = cookedVector.Split(VectorSeparatorChars);
337 
338  vector = new Vector2(float.Parse(cookedComponents[0]), float.Parse(cookedComponents[1]));
339 
340  return true;
341  }
342 
343  //return Vector2.TryParse(CookVector(rawConsoleVector, 2, blankComponentFunc), out vector);
344  }
345 
353  private static string CookVector(
354  string rawConsoleVector, int dimensions, Func<string, string> blankComponentFunc)
355  {
356  List<string> components = rawConsoleVector.Split(VectorSeparatorChars).ToList();
357 
358  if (components.Count < 1 || components.Count > dimensions)
359  return null;
360 
361  if (components.Count < dimensions)
362  {
363  if (blankComponentFunc == null)
364  return null;
365  else
366  for (int i = components.Count; i < dimensions; i++)
367  components.Add("");
368  }
369 
370  List<string> cookedComponents
371  = components.ConvertAll<string>(
372  c =>
373  {
374  if (c == "")
375  return blankComponentFunc.Invoke(c);
376  else if (c == MaxRawConsoleVectorValue)
377  return float.MaxValue.ToString();
378  else if (c == MinRawConsoleVectorValue)
379  return float.MinValue.ToString();
380  else
381  return c;
382  });
383 
384  return string.Join(VectorSeparator, cookedComponents.ToArray());
385  }
386  }
387 }
static bool TryParseConsoleMaxVector(string rawConsoleVector, out Vector3 vector)
Convert a maximum vector input from the console to an OpenMetaverse.Vector3
Definition: ConsoleUtil.cs:280
static bool TryParseConsoleMinVector(string rawConsoleVector, out Vector3 vector)
Convert a minimum vector input from the console to an OpenMetaverse.Vector3
Definition: ConsoleUtil.cs:269
static bool TryParseConsoleUuid(ICommandConsole console, string rawUuid, out UUID uuid)
Try to parse a console UUID from the console.
Definition: ConsoleUtil.cs:95
static bool TryParseConsoleInt(ICommandConsole console, string rawConsoleInt, out int i)
Convert a console input to an int, automatically complaining if a console is given.
Definition: ConsoleUtil.cs:185
static bool TryParseConsoleId(ICommandConsole console, string rawId, out UUID uuid, out uint localId)
Tries to parse the input as either a UUID or a local ID.
Definition: ConsoleUtil.cs:139
static bool TryParseConsoleVector(string rawConsoleVector, Func< string, string > blankComponentFunc, out Vector3 vector)
Convert a vector input from the console to an OpenMetaverse.Vector3
Definition: ConsoleUtil.cs:300
static bool TryParseConsoleDouble(ICommandConsole console, string rawConsoleInput, out double i)
Convert a console input to a double, automatically complaining if a console is given.
Definition: ConsoleUtil.cs:225
static bool TryParseConsoleBool(ICommandConsole console, string rawConsoleString, out bool b)
Convert a console input to a bool, automatically complaining if a console is given.
Definition: ConsoleUtil.cs:165
static bool TryParseConsole2DVector(string rawConsoleVector, Func< string, string > blankComponentFunc, out Vector2 vector)
Convert a vector input from the console to an OpenMetaverse.Vector2
Definition: ConsoleUtil.cs:321
static bool TryParseConsoleLocalId(ICommandConsole console, string rawLocalId, out uint localId)
Definition: ConsoleUtil.cs:108
static bool TryParseConsoleFloat(ICommandConsole console, string rawConsoleInput, out float i)
Convert a console input to a float, automatically complaining if a console is given.
Definition: ConsoleUtil.cs:205
static bool TryParseConsoleNaturalInt(ICommandConsole console, string rawConsoleInt, out int i)
Convert a console integer to a natural int, automatically complaining if a console is given...
Definition: ConsoleUtil.cs:245
static bool CheckFileDoesNotExist(ICommandConsole console, string path)
Check if the given file path exists.
Definition: ConsoleUtil.cs:74
OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3 vector
Definition: ICM_Api.cs:33