aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs')
-rw-r--r--OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs55
1 files changed, 50 insertions, 5 deletions
diff --git a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs
index ee3fc55..96853f0 100644
--- a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs
+++ b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs
@@ -108,7 +108,7 @@ namespace OpenSim.Framework.Communications.Cache
108 } 108 }
109 109
110 /// <summary> 110 /// <summary>
111 /// Returns the item if it exists in this folder or any of this folder's subfolders? 111 /// Returns the item if it exists in this folder or in any of this folder's descendant folders
112 /// </summary> 112 /// </summary>
113 /// <param name="itemID"></param> 113 /// <param name="itemID"></param>
114 /// <returns>null if the item is not found</returns> 114 /// <returns>null if the item is not found</returns>
@@ -197,7 +197,7 @@ namespace OpenSim.Framework.Communications.Cache
197 } 197 }
198 198
199 /// <summary> 199 /// <summary>
200 /// Find a folder given a PATH_DELIMITOR delimited path. 200 /// Find a folder given a PATH_DELIMITOR delimited path starting from this folder
201 /// 201 ///
202 /// This method does not handle paths that contain multiple delimitors 202 /// This method does not handle paths that contain multiple delimitors
203 /// 203 ///
@@ -208,9 +208,8 @@ namespace OpenSim.Framework.Communications.Cache
208 /// </summary> 208 /// </summary>
209 /// <param name="path"> 209 /// <param name="path">
210 /// The path to the required folder. It this is empty then this folder itself is returned. 210 /// The path to the required folder. It this is empty then this folder itself is returned.
211 /// If a folder for the given path is not found, then null is returned.
212 /// </param> 211 /// </param>
213 /// <returns></returns> 212 /// <returns>null if the folder is not found</returns>
214 public InventoryFolderImpl FindFolderByPath(string path) 213 public InventoryFolderImpl FindFolderByPath(string path)
215 { 214 {
216 if (path == string.Empty) 215 if (path == string.Empty)
@@ -234,6 +233,52 @@ namespace OpenSim.Framework.Communications.Cache
234 // We didn't find a folder with the given name 233 // We didn't find a folder with the given name
235 return null; 234 return null;
236 } 235 }
236
237 /// <summary>
238 /// Find an item given a PATH_DELIMITOR delimited path starting from this folder.
239 ///
240 /// This method does not handle paths that contain multiple delimitors
241 ///
242 /// FIXME: We do not yet handle situations where folders or items have the same name. We could handle this by some
243 /// XPath like expression
244 ///
245 /// FIXME: Delimitors which occur in names themselves are not currently escapable.
246 /// </summary>
247 /// <param name="path">
248 /// The path to the required item.
249 /// </param>
250 /// <returns>null if the item is not found</returns>
251 public InventoryItemBase FindItemByPath(string path)
252 {
253 int delimitorIndex = path.IndexOf(PATH_DELIMITER);
254 string[] components = path.Split(new string[] { PATH_DELIMITER }, 2, StringSplitOptions.None);
255
256 if (components.Length == 1)
257 {
258 lock (Items)
259 {
260 foreach (InventoryItemBase item in Items.Values)
261 {
262 if (item.Name == components[0])
263 return item;
264 }
265 }
266 }
267 else
268 {
269 lock (SubFolders)
270 {
271 foreach (InventoryFolderImpl folder in SubFolders.Values)
272 {
273 if (folder.Name == components[0])
274 return folder.FindItemByPath(components[1]);
275 }
276 }
277 }
278
279 // We didn't find an item or intermediate folder with the given name
280 return null;
281 }
237 282
238 /// <summary> 283 /// <summary>
239 /// Return a copy of the list of child items in this folder 284 /// Return a copy of the list of child items in this folder
@@ -256,7 +301,7 @@ namespace OpenSim.Framework.Communications.Cache
256 } 301 }
257 302
258 /// <summary> 303 /// <summary>
259 /// Return a copy of the list of immediate child folders in this folder. 304 /// Return a copy of the list of child folders in this folder.
260 /// </summary> 305 /// </summary>
261 public List<InventoryFolderBase> RequestListOfFolders() 306 public List<InventoryFolderBase> RequestListOfFolders()
262 { 307 {