diff options
author | Justin Clark-Casey (justincc) | 2013-02-16 00:26:21 +0000 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2013-02-16 00:26:21 +0000 |
commit | e9cc22fea48a6d80fccbd624fd9710dfa3830980 (patch) | |
tree | 1298f28b915ce6c0d23a5ac50aea93f8e06fdc19 | |
parent | Enable one sub-test in TestJsonSetValue() which now works (using identifier w... (diff) | |
download | opensim-SC-e9cc22fea48a6d80fccbd624fd9710dfa3830980.zip opensim-SC-e9cc22fea48a6d80fccbd624fd9710dfa3830980.tar.gz opensim-SC-e9cc22fea48a6d80fccbd624fd9710dfa3830980.tar.bz2 opensim-SC-e9cc22fea48a6d80fccbd624fd9710dfa3830980.tar.xz |
Add regression test TestSaveNonRootFolderToIar
11 files changed, 277 insertions, 54 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs index ecbd07f..98285e9 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs | |||
@@ -161,7 +161,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
161 | string filePath = "ERROR"; | 161 | string filePath = "ERROR"; |
162 | 162 | ||
163 | List<InventoryFolderBase> folderCandidates | 163 | List<InventoryFolderBase> folderCandidates |
164 | = InventoryArchiveUtils.FindFolderByPath( | 164 | = InventoryArchiveUtils.FindFoldersByPath( |
165 | m_scene.InventoryService, m_userInfo.PrincipalID, m_invPath); | 165 | m_scene.InventoryService, m_userInfo.PrincipalID, m_invPath); |
166 | 166 | ||
167 | if (folderCandidates.Count == 0) | 167 | if (folderCandidates.Count == 0) |
@@ -296,7 +296,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
296 | // iar name and try to find that instead. | 296 | // iar name and try to find that instead. |
297 | string plainPath = ArchiveConstants.ExtractPlainPathFromIarPath(archivePath); | 297 | string plainPath = ArchiveConstants.ExtractPlainPathFromIarPath(archivePath); |
298 | List<InventoryFolderBase> folderCandidates | 298 | List<InventoryFolderBase> folderCandidates |
299 | = InventoryArchiveUtils.FindFolderByPath( | 299 | = InventoryArchiveUtils.FindFoldersByPath( |
300 | m_scene.InventoryService, m_userInfo.PrincipalID, plainPath); | 300 | m_scene.InventoryService, m_userInfo.PrincipalID, plainPath); |
301 | 301 | ||
302 | if (folderCandidates.Count != 0) | 302 | if (folderCandidates.Count != 0) |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs index 0d90a15..dbaf2aa 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs | |||
@@ -52,13 +52,82 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
52 | /// <summary> | 52 | /// <summary> |
53 | /// Find a folder given a PATH_DELIMITER delimited path starting from a user's root folder | 53 | /// Find a folder given a PATH_DELIMITER delimited path starting from a user's root folder |
54 | /// </summary> | 54 | /// </summary> |
55 | /// <remarks> | ||
56 | /// This method does not handle paths that contain multiple delimitors | ||
57 | /// | ||
58 | /// FIXME: We have no way of distinguishing folders with the same path | ||
55 | /// | 59 | /// |
60 | /// FIXME: Delimitors which occur in names themselves are not currently escapable. | ||
61 | /// </remarks> | ||
62 | /// <param name="inventoryService"> | ||
63 | /// Inventory service to query | ||
64 | /// </param> | ||
65 | /// <param name="userId"> | ||
66 | /// User id to search | ||
67 | /// </param> | ||
68 | /// <param name="path"> | ||
69 | /// The path to the required folder. | ||
70 | /// It this is empty or consists only of the PATH_DELIMTER then this folder itself is returned. | ||
71 | /// </param> | ||
72 | /// <returns>The folder found. Please note that if there are multiple folders with the same name then an | ||
73 | /// unspecified one will be returned. If no such folder eixsts then null is returned</returns> | ||
74 | public static InventoryFolderBase FindFolderByPath( | ||
75 | IInventoryService inventoryService, UUID userId, string path) | ||
76 | { | ||
77 | List<InventoryFolderBase> folders = FindFoldersByPath(inventoryService, userId, path); | ||
78 | |||
79 | if (folders.Count == 0) | ||
80 | return null; | ||
81 | else | ||
82 | return folders[0]; | ||
83 | } | ||
84 | |||
85 | /// <summary> | ||
86 | /// Find a folder given a PATH_DELIMITER delimited path starting from a given folder | ||
87 | /// </summary> | ||
88 | /// <remarks> | ||
56 | /// This method does not handle paths that contain multiple delimitors | 89 | /// This method does not handle paths that contain multiple delimitors |
57 | /// | 90 | /// |
58 | /// FIXME: We have no way of distinguishing folders with the same path | 91 | /// FIXME: We have no way of distinguishing folders with the same path |
59 | /// | 92 | /// |
60 | /// FIXME: Delimitors which occur in names themselves are not currently escapable. | 93 | /// FIXME: Delimitors which occur in names themselves are not currently escapable. |
94 | /// </remarks> | ||
95 | /// <param name="inventoryService"> | ||
96 | /// Inventory service to query | ||
97 | /// </param> | ||
98 | /// <param name="startFolder"> | ||
99 | /// The folder from which the path starts | ||
100 | /// </param> | ||
101 | /// <param name="path"> | ||
102 | /// The path to the required folder. | ||
103 | /// It this is empty or consists only of the PATH_DELIMTER then this folder itself is returned. | ||
104 | /// </param> | ||
105 | /// <returns>The folder found. Please note that if there are multiple folders with the same name then an | ||
106 | /// unspecified one will be returned. If no such folder eixsts then null is returned</returns> | ||
107 | public static InventoryFolderBase FindFolderByPath( | ||
108 | IInventoryService inventoryService, InventoryFolderBase startFolder, string path) | ||
109 | { | ||
110 | if (null == startFolder) | ||
111 | return null; | ||
112 | |||
113 | List<InventoryFolderBase> folders = FindFoldersByPath(inventoryService, startFolder, path); | ||
114 | |||
115 | if (folders.Count == 0) | ||
116 | return null; | ||
117 | else | ||
118 | return folders[0]; | ||
119 | } | ||
120 | |||
121 | /// <summary> | ||
122 | /// Find a set of folders given a PATH_DELIMITER delimited path starting from a user's root folder | ||
123 | /// </summary> | ||
124 | /// <remarks> | ||
125 | /// This method does not handle paths that contain multiple delimitors | ||
126 | /// | ||
127 | /// FIXME: We have no way of distinguishing folders with the same path | ||
61 | /// | 128 | /// |
129 | /// FIXME: Delimitors which occur in names themselves are not currently escapable. | ||
130 | /// </remarks> | ||
62 | /// <param name="inventoryService"> | 131 | /// <param name="inventoryService"> |
63 | /// Inventory service to query | 132 | /// Inventory service to query |
64 | /// </param> | 133 | /// </param> |
@@ -70,7 +139,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
70 | /// It this is empty or consists only of the PATH_DELIMTER then this folder itself is returned. | 139 | /// It this is empty or consists only of the PATH_DELIMTER then this folder itself is returned. |
71 | /// </param> | 140 | /// </param> |
72 | /// <returns>An empty list if the folder is not found, otherwise a list of all folders that match the name</returns> | 141 | /// <returns>An empty list if the folder is not found, otherwise a list of all folders that match the name</returns> |
73 | public static List<InventoryFolderBase> FindFolderByPath( | 142 | public static List<InventoryFolderBase> FindFoldersByPath( |
74 | IInventoryService inventoryService, UUID userId, string path) | 143 | IInventoryService inventoryService, UUID userId, string path) |
75 | { | 144 | { |
76 | InventoryFolderBase rootFolder = inventoryService.GetRootFolder(userId); | 145 | InventoryFolderBase rootFolder = inventoryService.GetRootFolder(userId); |
@@ -78,19 +147,19 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
78 | if (null == rootFolder) | 147 | if (null == rootFolder) |
79 | return new List<InventoryFolderBase>(); | 148 | return new List<InventoryFolderBase>(); |
80 | 149 | ||
81 | return FindFolderByPath(inventoryService, rootFolder, path); | 150 | return FindFoldersByPath(inventoryService, rootFolder, path); |
82 | } | 151 | } |
83 | 152 | ||
84 | /// <summary> | 153 | /// <summary> |
85 | /// Find a folder given a PATH_DELIMITER delimited path starting from this folder | 154 | /// Find a set of folders given a PATH_DELIMITER delimited path starting from this folder |
86 | /// </summary> | 155 | /// </summary> |
87 | /// | 156 | /// <remarks> |
88 | /// This method does not handle paths that contain multiple delimitors | 157 | /// This method does not handle paths that contain multiple delimitors |
89 | /// | 158 | /// |
90 | /// FIXME: We have no way of distinguishing folders with the same path. | 159 | /// FIXME: We have no way of distinguishing folders with the same path. |
91 | /// | 160 | /// |
92 | /// FIXME: Delimitors which occur in names themselves are not currently escapable. | 161 | /// FIXME: Delimitors which occur in names themselves are not currently escapable. |
93 | /// | 162 | /// </remarks> |
94 | /// <param name="inventoryService"> | 163 | /// <param name="inventoryService"> |
95 | /// Inventory service to query | 164 | /// Inventory service to query |
96 | /// </param> | 165 | /// </param> |
@@ -102,7 +171,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
102 | /// It this is empty or consists only of the PATH_DELIMTER then this folder itself is returned. | 171 | /// It this is empty or consists only of the PATH_DELIMTER then this folder itself is returned. |
103 | /// </param> | 172 | /// </param> |
104 | /// <returns>An empty list if the folder is not found, otherwise a list of all folders that match the name</returns> | 173 | /// <returns>An empty list if the folder is not found, otherwise a list of all folders that match the name</returns> |
105 | public static List<InventoryFolderBase> FindFolderByPath( | 174 | public static List<InventoryFolderBase> FindFoldersByPath( |
106 | IInventoryService inventoryService, InventoryFolderBase startFolder, string path) | 175 | IInventoryService inventoryService, InventoryFolderBase startFolder, string path) |
107 | { | 176 | { |
108 | List<InventoryFolderBase> foundFolders = new List<InventoryFolderBase>(); | 177 | List<InventoryFolderBase> foundFolders = new List<InventoryFolderBase>(); |
@@ -133,12 +202,15 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
133 | 202 | ||
134 | InventoryCollection contents = inventoryService.GetFolderContent(startFolder.Owner, startFolder.ID); | 203 | InventoryCollection contents = inventoryService.GetFolderContent(startFolder.Owner, startFolder.ID); |
135 | 204 | ||
205 | // m_log.DebugFormat( | ||
206 | // "Found {0} folders in {1} for {2}", contents.Folders.Count, startFolder.Name, startFolder.Owner); | ||
207 | |||
136 | foreach (InventoryFolderBase folder in contents.Folders) | 208 | foreach (InventoryFolderBase folder in contents.Folders) |
137 | { | 209 | { |
138 | if (folder.Name == components[0]) | 210 | if (folder.Name == components[0]) |
139 | { | 211 | { |
140 | if (components.Length > 1) | 212 | if (components.Length > 1) |
141 | foundFolders.AddRange(FindFolderByPath(inventoryService, folder, components[1])); | 213 | foundFolders.AddRange(FindFoldersByPath(inventoryService, folder, components[1])); |
142 | else | 214 | else |
143 | foundFolders.Add(folder); | 215 | foundFolders.Add(folder); |
144 | } | 216 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs index 4c85637..d703498 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs | |||
@@ -289,7 +289,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
289 | { | 289 | { |
290 | m_invPath = m_invPath.Remove(m_invPath.LastIndexOf(InventoryFolderImpl.PATH_DELIMITER)); | 290 | m_invPath = m_invPath.Remove(m_invPath.LastIndexOf(InventoryFolderImpl.PATH_DELIMITER)); |
291 | List<InventoryFolderBase> candidateFolders | 291 | List<InventoryFolderBase> candidateFolders |
292 | = InventoryArchiveUtils.FindFolderByPath(m_scene.InventoryService, rootFolder, m_invPath); | 292 | = InventoryArchiveUtils.FindFoldersByPath(m_scene.InventoryService, rootFolder, m_invPath); |
293 | if (candidateFolders.Count > 0) | 293 | if (candidateFolders.Count > 0) |
294 | inventoryFolder = candidateFolders[0]; | 294 | inventoryFolder = candidateFolders[0]; |
295 | } | 295 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs index 06f6e49..38254e5 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/InventoryArchiverTests.cs | |||
@@ -121,6 +121,86 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
121 | 121 | ||
122 | Assert.That(iarr.ControlFileLoaded, Is.True); | 122 | Assert.That(iarr.ControlFileLoaded, Is.True); |
123 | } | 123 | } |
124 | |||
125 | [Test] | ||
126 | public void TestSaveNonRootFolderToIar() | ||
127 | { | ||
128 | TestHelpers.InMethod(); | ||
129 | TestHelpers.EnableLogging(); | ||
130 | |||
131 | string userFirstName = "Jock"; | ||
132 | string userLastName = "Stirrup"; | ||
133 | string userPassword = "troll"; | ||
134 | UUID userId = TestHelpers.ParseTail(0x20); | ||
135 | |||
136 | UserAccountHelpers.CreateUserWithInventory(m_scene, userFirstName, userLastName, userId, userPassword); | ||
137 | |||
138 | // Create base folder | ||
139 | InventoryFolderBase f1 | ||
140 | = UserInventoryHelpers.CreateInventoryFolder(m_scene.InventoryService, userId, "f1", true); | ||
141 | |||
142 | // Create item1 | ||
143 | SceneObjectGroup so1 = SceneHelpers.CreateSceneObject(1, userId, "My Little Dog Object", 0x5); | ||
144 | InventoryItemBase i1 = UserInventoryHelpers.AddInventoryItem(m_scene, so1, 0x50, 0x60, "f1"); | ||
145 | |||
146 | // Create embedded folder | ||
147 | InventoryFolderBase f1_1 | ||
148 | = UserInventoryHelpers.CreateInventoryFolder(m_scene.InventoryService, userId, "f1/f1.1", true); | ||
149 | |||
150 | // Create embedded item | ||
151 | SceneObjectGroup so1_1 = SceneHelpers.CreateSceneObject(1, userId, "My Little Cat Object", 0x6); | ||
152 | InventoryItemBase i2 = UserInventoryHelpers.AddInventoryItem(m_scene, so1_1, 0x500, 0x600, "f1/f1.1"); | ||
153 | |||
154 | MemoryStream archiveWriteStream = new MemoryStream(); | ||
155 | m_archiverModule.OnInventoryArchiveSaved += SaveCompleted; | ||
156 | |||
157 | mre.Reset(); | ||
158 | m_archiverModule.ArchiveInventory( | ||
159 | Guid.NewGuid(), userFirstName, userLastName, "f1", userPassword, archiveWriteStream); | ||
160 | mre.WaitOne(60000, false); | ||
161 | |||
162 | // Test created iar | ||
163 | byte[] archive = archiveWriteStream.ToArray(); | ||
164 | MemoryStream archiveReadStream = new MemoryStream(archive); | ||
165 | TarArchiveReader tar = new TarArchiveReader(archiveReadStream); | ||
166 | |||
167 | // InventoryArchiveUtils. | ||
168 | bool gotf1 = false, gotf1_1 = false, gotso1 = false, gotso2 = false; | ||
169 | |||
170 | string f1FileName | ||
171 | = string.Format("{0}{1}", ArchiveConstants.INVENTORY_PATH, InventoryArchiveWriteRequest.CreateArchiveFolderName(f1)); | ||
172 | string f1_1FileName | ||
173 | = string.Format("{0}{1}", f1FileName, InventoryArchiveWriteRequest.CreateArchiveFolderName(f1_1)); | ||
174 | string so1FileName | ||
175 | = string.Format("{0}{1}", f1FileName, InventoryArchiveWriteRequest.CreateArchiveItemName(i1)); | ||
176 | string so2FileName | ||
177 | = string.Format("{0}{1}", f1_1FileName, InventoryArchiveWriteRequest.CreateArchiveItemName(i2)); | ||
178 | |||
179 | string filePath; | ||
180 | TarArchiveReader.TarEntryType tarEntryType; | ||
181 | |||
182 | while (tar.ReadEntry(out filePath, out tarEntryType) != null) | ||
183 | { | ||
184 | // Console.WriteLine("Got {0}", filePath); | ||
185 | |||
186 | if (filePath == f1FileName) | ||
187 | gotf1 = true; | ||
188 | else if (filePath == f1_1FileName) | ||
189 | gotf1_1 = true; | ||
190 | else if (filePath == so1FileName) | ||
191 | gotso1 = true; | ||
192 | else if (filePath == so2FileName) | ||
193 | gotso2 = true; | ||
194 | } | ||
195 | |||
196 | // Assert.That(gotControlFile, Is.True, "No control file in archive"); | ||
197 | Assert.That(gotf1, Is.True); | ||
198 | Assert.That(gotf1_1, Is.True); | ||
199 | Assert.That(gotso1, Is.True); | ||
200 | Assert.That(gotso2, Is.True); | ||
201 | |||
202 | // TODO: Test presence of more files and contents of files. | ||
203 | } | ||
124 | 204 | ||
125 | /// <summary> | 205 | /// <summary> |
126 | /// Test saving a single inventory item to an IAR | 206 | /// Test saving a single inventory item to an IAR |
@@ -155,7 +235,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
155 | item1.AssetID = asset1.FullID; | 235 | item1.AssetID = asset1.FullID; |
156 | item1.ID = item1Id; | 236 | item1.ID = item1Id; |
157 | InventoryFolderBase objsFolder | 237 | InventoryFolderBase objsFolder |
158 | = InventoryArchiveUtils.FindFolderByPath(m_scene.InventoryService, userId, "Objects")[0]; | 238 | = InventoryArchiveUtils.FindFoldersByPath(m_scene.InventoryService, userId, "Objects")[0]; |
159 | item1.Folder = objsFolder.ID; | 239 | item1.Folder = objsFolder.ID; |
160 | m_scene.AddInventoryItem(item1); | 240 | m_scene.AddInventoryItem(item1); |
161 | 241 | ||
@@ -250,7 +330,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
250 | item1.AssetID = asset1.FullID; | 330 | item1.AssetID = asset1.FullID; |
251 | item1.ID = item1Id; | 331 | item1.ID = item1Id; |
252 | InventoryFolderBase objsFolder | 332 | InventoryFolderBase objsFolder |
253 | = InventoryArchiveUtils.FindFolderByPath(m_scene.InventoryService, userId, "Objects")[0]; | 333 | = InventoryArchiveUtils.FindFoldersByPath(m_scene.InventoryService, userId, "Objects")[0]; |
254 | item1.Folder = objsFolder.ID; | 334 | item1.Folder = objsFolder.ID; |
255 | m_scene.AddInventoryItem(item1); | 335 | m_scene.AddInventoryItem(item1); |
256 | 336 | ||
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/PathTests.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/PathTests.cs index 6eb3605..1871576 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/PathTests.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/Tests/PathTests.cs | |||
@@ -101,7 +101,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
101 | item1.AssetID = asset1.FullID; | 101 | item1.AssetID = asset1.FullID; |
102 | item1.ID = item1Id; | 102 | item1.ID = item1Id; |
103 | InventoryFolderBase objsFolder | 103 | InventoryFolderBase objsFolder |
104 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, userId, "Objects")[0]; | 104 | = InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, userId, "Objects")[0]; |
105 | item1.Folder = objsFolder.ID; | 105 | item1.Folder = objsFolder.ID; |
106 | scene.AddInventoryItem(item1); | 106 | scene.AddInventoryItem(item1); |
107 | 107 | ||
@@ -193,7 +193,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
193 | Assert.That(foundItem1, Is.Not.Null, "Didn't find loaded item 1"); | 193 | Assert.That(foundItem1, Is.Not.Null, "Didn't find loaded item 1"); |
194 | 194 | ||
195 | // Now try loading to a root child folder | 195 | // Now try loading to a root child folder |
196 | UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, m_uaMT.PrincipalID, "xA"); | 196 | UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, m_uaMT.PrincipalID, "xA", false); |
197 | MemoryStream archiveReadStream = new MemoryStream(m_iarStream.ToArray()); | 197 | MemoryStream archiveReadStream = new MemoryStream(m_iarStream.ToArray()); |
198 | archiverModule.DearchiveInventory(m_uaMT.FirstName, m_uaMT.LastName, "xA", "meowfood", archiveReadStream); | 198 | archiverModule.DearchiveInventory(m_uaMT.FirstName, m_uaMT.LastName, "xA", "meowfood", archiveReadStream); |
199 | 199 | ||
@@ -202,7 +202,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
202 | Assert.That(foundItem2, Is.Not.Null, "Didn't find loaded item 2"); | 202 | Assert.That(foundItem2, Is.Not.Null, "Didn't find loaded item 2"); |
203 | 203 | ||
204 | // Now try loading to a more deeply nested folder | 204 | // Now try loading to a more deeply nested folder |
205 | UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, m_uaMT.PrincipalID, "xB/xC"); | 205 | UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, m_uaMT.PrincipalID, "xB/xC", false); |
206 | archiveReadStream = new MemoryStream(archiveReadStream.ToArray()); | 206 | archiveReadStream = new MemoryStream(archiveReadStream.ToArray()); |
207 | archiverModule.DearchiveInventory(m_uaMT.FirstName, m_uaMT.LastName, "xB/xC", "meowfood", archiveReadStream); | 207 | archiverModule.DearchiveInventory(m_uaMT.FirstName, m_uaMT.LastName, "xB/xC", "meowfood", archiveReadStream); |
208 | 208 | ||
@@ -287,7 +287,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
287 | item1.AssetID = asset1.FullID; | 287 | item1.AssetID = asset1.FullID; |
288 | item1.ID = item1Id; | 288 | item1.ID = item1Id; |
289 | InventoryFolderBase objsFolder | 289 | InventoryFolderBase objsFolder |
290 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, userId, "Objects")[0]; | 290 | = InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, userId, "Objects")[0]; |
291 | item1.Folder = objsFolder.ID; | 291 | item1.Folder = objsFolder.ID; |
292 | scene.AddInventoryItem(item1); | 292 | scene.AddInventoryItem(item1); |
293 | 293 | ||
@@ -351,12 +351,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
351 | foldersCreated, nodesLoaded); | 351 | foldersCreated, nodesLoaded); |
352 | 352 | ||
353 | List<InventoryFolderBase> folder1Candidates | 353 | List<InventoryFolderBase> folder1Candidates |
354 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, ua1.PrincipalID, folder1Name); | 354 | = InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, ua1.PrincipalID, folder1Name); |
355 | Assert.That(folder1Candidates.Count, Is.EqualTo(1)); | 355 | Assert.That(folder1Candidates.Count, Is.EqualTo(1)); |
356 | 356 | ||
357 | InventoryFolderBase folder1 = folder1Candidates[0]; | 357 | InventoryFolderBase folder1 = folder1Candidates[0]; |
358 | List<InventoryFolderBase> folder2aCandidates | 358 | List<InventoryFolderBase> folder2aCandidates |
359 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, folder2aName); | 359 | = InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, folder1, folder2aName); |
360 | Assert.That(folder2aCandidates.Count, Is.EqualTo(1)); | 360 | Assert.That(folder2aCandidates.Count, Is.EqualTo(1)); |
361 | } | 361 | } |
362 | 362 | ||
@@ -368,17 +368,17 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
368 | foldersCreated, nodesLoaded); | 368 | foldersCreated, nodesLoaded); |
369 | 369 | ||
370 | List<InventoryFolderBase> folder1Candidates | 370 | List<InventoryFolderBase> folder1Candidates |
371 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, ua1.PrincipalID, folder1Name); | 371 | = InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, ua1.PrincipalID, folder1Name); |
372 | Assert.That(folder1Candidates.Count, Is.EqualTo(1)); | 372 | Assert.That(folder1Candidates.Count, Is.EqualTo(1)); |
373 | 373 | ||
374 | InventoryFolderBase folder1 = folder1Candidates[0]; | 374 | InventoryFolderBase folder1 = folder1Candidates[0]; |
375 | 375 | ||
376 | List<InventoryFolderBase> folder2aCandidates | 376 | List<InventoryFolderBase> folder2aCandidates |
377 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, folder2aName); | 377 | = InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, folder1, folder2aName); |
378 | Assert.That(folder2aCandidates.Count, Is.EqualTo(1)); | 378 | Assert.That(folder2aCandidates.Count, Is.EqualTo(1)); |
379 | 379 | ||
380 | List<InventoryFolderBase> folder2bCandidates | 380 | List<InventoryFolderBase> folder2bCandidates |
381 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1, folder2bName); | 381 | = InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, folder1, folder2bName); |
382 | Assert.That(folder2bCandidates.Count, Is.EqualTo(1)); | 382 | Assert.That(folder2bCandidates.Count, Is.EqualTo(1)); |
383 | } | 383 | } |
384 | } | 384 | } |
@@ -401,7 +401,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
401 | 401 | ||
402 | InventoryFolderBase folder1 | 402 | InventoryFolderBase folder1 |
403 | = UserInventoryHelpers.CreateInventoryFolder( | 403 | = UserInventoryHelpers.CreateInventoryFolder( |
404 | scene.InventoryService, ua1.PrincipalID, folder1ExistingName); | 404 | scene.InventoryService, ua1.PrincipalID, folder1ExistingName, false); |
405 | 405 | ||
406 | string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1ExistingName, UUID.Random()); | 406 | string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1ExistingName, UUID.Random()); |
407 | string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random()); | 407 | string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random()); |
@@ -414,7 +414,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
414 | new Dictionary<string, InventoryFolderBase>(), new HashSet<InventoryNodeBase>()); | 414 | new Dictionary<string, InventoryFolderBase>(), new HashSet<InventoryNodeBase>()); |
415 | 415 | ||
416 | List<InventoryFolderBase> folder1PostCandidates | 416 | List<InventoryFolderBase> folder1PostCandidates |
417 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, ua1.PrincipalID, folder1ExistingName); | 417 | = InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, ua1.PrincipalID, folder1ExistingName); |
418 | Assert.That(folder1PostCandidates.Count, Is.EqualTo(2)); | 418 | Assert.That(folder1PostCandidates.Count, Is.EqualTo(2)); |
419 | 419 | ||
420 | // FIXME: Temporarily, we're going to do something messy to make sure we pick up the created folder. | 420 | // FIXME: Temporarily, we're going to do something messy to make sure we pick up the created folder. |
@@ -430,7 +430,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
430 | // Assert.That(folder1Post.ID, Is.EqualTo(folder1.ID)); | 430 | // Assert.That(folder1Post.ID, Is.EqualTo(folder1.ID)); |
431 | 431 | ||
432 | List<InventoryFolderBase> folder2PostCandidates | 432 | List<InventoryFolderBase> folder2PostCandidates |
433 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1Post, "b"); | 433 | = InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, folder1Post, "b"); |
434 | Assert.That(folder2PostCandidates.Count, Is.EqualTo(1)); | 434 | Assert.That(folder2PostCandidates.Count, Is.EqualTo(1)); |
435 | } | 435 | } |
436 | 436 | ||
@@ -452,7 +452,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
452 | 452 | ||
453 | InventoryFolderBase folder1 | 453 | InventoryFolderBase folder1 |
454 | = UserInventoryHelpers.CreateInventoryFolder( | 454 | = UserInventoryHelpers.CreateInventoryFolder( |
455 | scene.InventoryService, ua1.PrincipalID, folder1ExistingName); | 455 | scene.InventoryService, ua1.PrincipalID, folder1ExistingName, false); |
456 | 456 | ||
457 | string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1ExistingName, UUID.Random()); | 457 | string folder1ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder1ExistingName, UUID.Random()); |
458 | string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random()); | 458 | string folder2ArchiveName = InventoryArchiveWriteRequest.CreateArchiveFolderName(folder2Name, UUID.Random()); |
@@ -465,12 +465,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests | |||
465 | new Dictionary<string, InventoryFolderBase>(), new HashSet<InventoryNodeBase>()); | 465 | new Dictionary<string, InventoryFolderBase>(), new HashSet<InventoryNodeBase>()); |
466 | 466 | ||
467 | List<InventoryFolderBase> folder1PostCandidates | 467 | List<InventoryFolderBase> folder1PostCandidates |
468 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, ua1.PrincipalID, folder1ExistingName); | 468 | = InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, ua1.PrincipalID, folder1ExistingName); |
469 | Assert.That(folder1PostCandidates.Count, Is.EqualTo(1)); | 469 | Assert.That(folder1PostCandidates.Count, Is.EqualTo(1)); |
470 | Assert.That(folder1PostCandidates[0].ID, Is.EqualTo(folder1.ID)); | 470 | Assert.That(folder1PostCandidates[0].ID, Is.EqualTo(folder1.ID)); |
471 | 471 | ||
472 | List<InventoryFolderBase> folder2PostCandidates | 472 | List<InventoryFolderBase> folder2PostCandidates |
473 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, folder1PostCandidates[0], "b"); | 473 | = InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, folder1PostCandidates[0], "b"); |
474 | Assert.That(folder2PostCandidates.Count, Is.EqualTo(1)); | 474 | Assert.That(folder2PostCandidates.Count, Is.EqualTo(1)); |
475 | } | 475 | } |
476 | } | 476 | } |
diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/Tests/InventoryAccessModuleTests.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/Tests/InventoryAccessModuleTests.cs index ac25a93..ad1a0e1 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/Tests/InventoryAccessModuleTests.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/Tests/InventoryAccessModuleTests.cs | |||
@@ -109,7 +109,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess.Tests | |||
109 | item1.AssetID = asset1.FullID; | 109 | item1.AssetID = asset1.FullID; |
110 | item1.ID = item1Id; | 110 | item1.ID = item1Id; |
111 | InventoryFolderBase objsFolder | 111 | InventoryFolderBase objsFolder |
112 | = InventoryArchiveUtils.FindFolderByPath(m_scene.InventoryService, m_userId, "Objects")[0]; | 112 | = InventoryArchiveUtils.FindFoldersByPath(m_scene.InventoryService, m_userId, "Objects")[0]; |
113 | item1.Folder = objsFolder.ID; | 113 | item1.Folder = objsFolder.ID; |
114 | m_scene.AddInventoryItem(item1); | 114 | m_scene.AddInventoryItem(item1); |
115 | 115 | ||
@@ -159,7 +159,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess.Tests | |||
159 | item1.AssetID = asset1.FullID; | 159 | item1.AssetID = asset1.FullID; |
160 | item1.ID = item1Id; | 160 | item1.ID = item1Id; |
161 | InventoryFolderBase objsFolder | 161 | InventoryFolderBase objsFolder |
162 | = InventoryArchiveUtils.FindFolderByPath(m_scene.InventoryService, m_userId, "Objects")[0]; | 162 | = InventoryArchiveUtils.FindFoldersByPath(m_scene.InventoryService, m_userId, "Objects")[0]; |
163 | item1.Folder = objsFolder.ID; | 163 | item1.Folder = objsFolder.ID; |
164 | m_scene.AddInventoryItem(item1); | 164 | m_scene.AddInventoryItem(item1); |
165 | 165 | ||
diff --git a/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs index b22bcf9..9600023 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/AssetsRequest.cs | |||
@@ -156,6 +156,8 @@ namespace OpenSim.Region.CoreModules.World.Archiver | |||
156 | 156 | ||
157 | foreach (KeyValuePair<UUID, AssetType> kvp in m_uuids) | 157 | foreach (KeyValuePair<UUID, AssetType> kvp in m_uuids) |
158 | { | 158 | { |
159 | // m_log.DebugFormat("[ARCHIVER]: Requesting asset {0}", kvp.Key); | ||
160 | |||
159 | // m_assetService.Get(kvp.Key.ToString(), kvp.Value, PreAssetRequestCallback); | 161 | // m_assetService.Get(kvp.Key.ToString(), kvp.Value, PreAssetRequestCallback); |
160 | AssetBase asset = m_assetService.Get(kvp.Key.ToString()); | 162 | AssetBase asset = m_assetService.Get(kvp.Key.ToString()); |
161 | PreAssetRequestCallback(kvp.Key.ToString(), kvp.Value, asset); | 163 | PreAssetRequestCallback(kvp.Key.ToString(), kvp.Value, asset); |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs index c1522e7..52ad538 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/SceneObjectDeRezTests.cs | |||
@@ -164,7 +164,7 @@ namespace OpenSim.Region.Framework.Scenes.Tests | |||
164 | 164 | ||
165 | UserAccount ua = UserAccountHelpers.CreateUserWithInventory(scene, agentId); | 165 | UserAccount ua = UserAccountHelpers.CreateUserWithInventory(scene, agentId); |
166 | InventoryFolderBase folder1 | 166 | InventoryFolderBase folder1 |
167 | = UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, ua.PrincipalID, "folder1"); | 167 | = UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, ua.PrincipalID, "folder1", false); |
168 | 168 | ||
169 | IClientAPI client = SceneHelpers.AddScenePresence(scene, agentId).ControllingClient; | 169 | IClientAPI client = SceneHelpers.AddScenePresence(scene, agentId).ControllingClient; |
170 | scene.DeRezObjects(client, new List<uint>() { so.LocalId }, UUID.Zero, DeRezAction.Take, folder1.ID); | 170 | scene.DeRezObjects(client, new List<uint>() { so.LocalId }, UUID.Zero, DeRezAction.Take, folder1.ID); |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs b/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs index 0b461f5..df819ec 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/TaskInventoryTests.cs | |||
@@ -133,7 +133,7 @@ namespace OpenSim.Region.Framework.Tests | |||
133 | scene, sop1, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900)); | 133 | scene, sop1, "ncItem", TestHelpers.ParseTail(0x800), TestHelpers.ParseTail(0x900)); |
134 | 134 | ||
135 | InventoryFolderBase folder | 135 | InventoryFolderBase folder |
136 | = InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, user1.PrincipalID, "Objects")[0]; | 136 | = InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, user1.PrincipalID, "Objects")[0]; |
137 | 137 | ||
138 | // Perform test | 138 | // Perform test |
139 | scene.MoveTaskInventoryItem(user1.PrincipalID, folder.ID, sop1, sopItem1.ItemID); | 139 | scene.MoveTaskInventoryItem(user1.PrincipalID, folder.ID, sop1, sopItem1.ItemID); |
diff --git a/OpenSim/Region/Framework/Scenes/Tests/UserInventoryTests.cs b/OpenSim/Region/Framework/Scenes/Tests/UserInventoryTests.cs index 9457ebb..e50b4da 100644 --- a/OpenSim/Region/Framework/Scenes/Tests/UserInventoryTests.cs +++ b/OpenSim/Region/Framework/Scenes/Tests/UserInventoryTests.cs | |||
@@ -64,7 +64,7 @@ namespace OpenSim.Region.Framework.Tests | |||
64 | Scene scene = new SceneHelpers().SetupScene(); | 64 | Scene scene = new SceneHelpers().SetupScene(); |
65 | UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1001)); | 65 | UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1001)); |
66 | 66 | ||
67 | UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, user1.PrincipalID, foldersName); | 67 | UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, user1.PrincipalID, foldersName, false); |
68 | 68 | ||
69 | List<InventoryFolderBase> oneFolder | 69 | List<InventoryFolderBase> oneFolder |
70 | = UserInventoryHelpers.GetInventoryFolders(scene.InventoryService, user1.PrincipalID, foldersName); | 70 | = UserInventoryHelpers.GetInventoryFolders(scene.InventoryService, user1.PrincipalID, foldersName); |
@@ -73,7 +73,7 @@ namespace OpenSim.Region.Framework.Tests | |||
73 | InventoryFolderBase firstRetrievedFolder = oneFolder[0]; | 73 | InventoryFolderBase firstRetrievedFolder = oneFolder[0]; |
74 | Assert.That(firstRetrievedFolder.Name, Is.EqualTo(foldersName)); | 74 | Assert.That(firstRetrievedFolder.Name, Is.EqualTo(foldersName)); |
75 | 75 | ||
76 | UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, user1.PrincipalID, foldersName); | 76 | UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, user1.PrincipalID, foldersName, false); |
77 | 77 | ||
78 | List<InventoryFolderBase> twoFolders | 78 | List<InventoryFolderBase> twoFolders |
79 | = UserInventoryHelpers.GetInventoryFolders(scene.InventoryService, user1.PrincipalID, foldersName); | 79 | = UserInventoryHelpers.GetInventoryFolders(scene.InventoryService, user1.PrincipalID, foldersName); |
@@ -121,7 +121,7 @@ namespace OpenSim.Region.Framework.Tests | |||
121 | UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1001)); | 121 | UserAccount user1 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1001)); |
122 | UserAccount user2 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1002)); | 122 | UserAccount user2 = UserAccountHelpers.CreateUserWithInventory(scene, TestHelpers.ParseTail(1002)); |
123 | InventoryFolderBase folder1 | 123 | InventoryFolderBase folder1 |
124 | = UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, user1.PrincipalID, "folder1"); | 124 | = UserInventoryHelpers.CreateInventoryFolder(scene.InventoryService, user1.PrincipalID, "folder1", false); |
125 | 125 | ||
126 | scene.GiveInventoryFolder(user2.PrincipalID, user1.PrincipalID, folder1.ID, UUID.Zero); | 126 | scene.GiveInventoryFolder(user2.PrincipalID, user1.PrincipalID, folder1.ID, UUID.Zero); |
127 | 127 | ||
diff --git a/OpenSim/Tests/Common/Helpers/UserInventoryHelpers.cs b/OpenSim/Tests/Common/Helpers/UserInventoryHelpers.cs index 87d9410..a1794c9 100644 --- a/OpenSim/Tests/Common/Helpers/UserInventoryHelpers.cs +++ b/OpenSim/Tests/Common/Helpers/UserInventoryHelpers.cs | |||
@@ -45,6 +45,9 @@ namespace OpenSim.Tests.Common | |||
45 | /// <summary> | 45 | /// <summary> |
46 | /// Add an existing scene object as an item in the user's inventory. | 46 | /// Add an existing scene object as an item in the user's inventory. |
47 | /// </summary> | 47 | /// </summary> |
48 | /// <remarks> | ||
49 | /// Will be added to the system Objects folder. | ||
50 | /// </remarks> | ||
48 | /// <param name='scene'></param> | 51 | /// <param name='scene'></param> |
49 | /// <param name='so'></param> | 52 | /// <param name='so'></param> |
50 | /// <param name='inventoryIdTail'></param> | 53 | /// <param name='inventoryIdTail'></param> |
@@ -63,7 +66,29 @@ namespace OpenSim.Tests.Common | |||
63 | } | 66 | } |
64 | 67 | ||
65 | /// <summary> | 68 | /// <summary> |
66 | /// Creates a notecard in the objects folder and specify an item id. | 69 | /// Add an existing scene object as an item in the user's inventory at the given path. |
70 | /// </summary> | ||
71 | /// <param name='scene'></param> | ||
72 | /// <param name='so'></param> | ||
73 | /// <param name='inventoryIdTail'></param> | ||
74 | /// <param name='assetIdTail'></param> | ||
75 | /// <returns>The inventory item created.</returns> | ||
76 | public static InventoryItemBase AddInventoryItem( | ||
77 | Scene scene, SceneObjectGroup so, int inventoryIdTail, int assetIdTail, string path) | ||
78 | { | ||
79 | return AddInventoryItem( | ||
80 | scene, | ||
81 | so.Name, | ||
82 | TestHelpers.ParseTail(inventoryIdTail), | ||
83 | InventoryType.Object, | ||
84 | AssetHelpers.CreateAsset(TestHelpers.ParseTail(assetIdTail), so), | ||
85 | so.OwnerID, | ||
86 | path); | ||
87 | } | ||
88 | |||
89 | /// <summary> | ||
90 | /// Adds the given item to the existing system folder for its type (e.g. an object will go in the "Objects" | ||
91 | /// folder). | ||
67 | /// </summary> | 92 | /// </summary> |
68 | /// <param name="scene"></param> | 93 | /// <param name="scene"></param> |
69 | /// <param name="itemName"></param> | 94 | /// <param name="itemName"></param> |
@@ -75,6 +100,25 @@ namespace OpenSim.Tests.Common | |||
75 | private static InventoryItemBase AddInventoryItem( | 100 | private static InventoryItemBase AddInventoryItem( |
76 | Scene scene, string itemName, UUID itemId, InventoryType itemType, AssetBase asset, UUID userId) | 101 | Scene scene, string itemName, UUID itemId, InventoryType itemType, AssetBase asset, UUID userId) |
77 | { | 102 | { |
103 | return AddInventoryItem( | ||
104 | scene, itemName, itemId, itemType, asset, userId, | ||
105 | scene.InventoryService.GetFolderForType(userId, (AssetType)asset.Type).Name); | ||
106 | } | ||
107 | |||
108 | /// <summary> | ||
109 | /// Adds the given item to an inventory folder | ||
110 | /// </summary> | ||
111 | /// <param name="scene"></param> | ||
112 | /// <param name="itemName"></param> | ||
113 | /// <param name="itemId"></param> | ||
114 | /// <param name="itemType"></param> | ||
115 | /// <param name="asset">The serialized asset for this item</param> | ||
116 | /// <param name="userId"></param> | ||
117 | /// <param name="path">Existing inventory path at which to add.</param> | ||
118 | /// <returns></returns> | ||
119 | private static InventoryItemBase AddInventoryItem( | ||
120 | Scene scene, string itemName, UUID itemId, InventoryType itemType, AssetBase asset, UUID userId, string path) | ||
121 | { | ||
78 | scene.AssetService.Store(asset); | 122 | scene.AssetService.Store(asset); |
79 | 123 | ||
80 | InventoryItemBase item = new InventoryItemBase(); | 124 | InventoryItemBase item = new InventoryItemBase(); |
@@ -85,7 +129,7 @@ namespace OpenSim.Tests.Common | |||
85 | item.AssetType = asset.Type; | 129 | item.AssetType = asset.Type; |
86 | item.InvType = (int)itemType; | 130 | item.InvType = (int)itemType; |
87 | 131 | ||
88 | InventoryFolderBase folder = scene.InventoryService.GetFolderForType(userId, (AssetType)asset.Type); | 132 | InventoryFolderBase folder = InventoryArchiveUtils.FindFoldersByPath(scene.InventoryService, userId, path)[0]; |
89 | 133 | ||
90 | item.Folder = folder.ID; | 134 | item.Folder = folder.ID; |
91 | scene.AddInventoryItem(item); | 135 | scene.AddInventoryItem(item); |
@@ -156,58 +200,83 @@ namespace OpenSim.Tests.Common | |||
156 | /// <summary> | 200 | /// <summary> |
157 | /// Create inventory folders starting from the user's root folder. | 201 | /// Create inventory folders starting from the user's root folder. |
158 | /// </summary> | 202 | /// </summary> |
159 | /// | ||
160 | /// Ignores any existing folders with the same name | ||
161 | /// | ||
162 | /// <param name="inventoryService"></param> | 203 | /// <param name="inventoryService"></param> |
163 | /// <param name="userId"></param> | 204 | /// <param name="userId"></param> |
164 | /// <param name="path"> | 205 | /// <param name="path"> |
165 | /// The folders to create. Multiple folders can be specified on a path delimited by the PATH_DELIMITER | 206 | /// The folders to create. Multiple folders can be specified on a path delimited by the PATH_DELIMITER |
166 | /// </param> | 207 | /// </param> |
208 | /// <param name="useExistingFolders"> | ||
209 | /// If true, then folders in the path which already the same name are | ||
210 | /// used. This applies to the terminal folder as well. | ||
211 | /// If false, then all folders in the path are created, even if there is already a folder at a particular | ||
212 | /// level with the same name. | ||
213 | /// </param> | ||
167 | /// <returns> | 214 | /// <returns> |
168 | /// The folder created. If the path contains multiple folders then the last one created is returned. | 215 | /// The folder created. If the path contains multiple folders then the last one created is returned. |
169 | /// Will return null if the root folder could not be found. | 216 | /// Will return null if the root folder could not be found. |
170 | /// </returns> | 217 | /// </returns> |
171 | public static InventoryFolderBase CreateInventoryFolder( | 218 | public static InventoryFolderBase CreateInventoryFolder( |
172 | IInventoryService inventoryService, UUID userId, string path) | 219 | IInventoryService inventoryService, UUID userId, string path, bool useExistingFolders) |
173 | { | 220 | { |
174 | InventoryFolderBase rootFolder = inventoryService.GetRootFolder(userId); | 221 | InventoryFolderBase rootFolder = inventoryService.GetRootFolder(userId); |
175 | 222 | ||
176 | if (null == rootFolder) | 223 | if (null == rootFolder) |
177 | return null; | 224 | return null; |
178 | 225 | ||
179 | return CreateInventoryFolder(inventoryService, rootFolder, path); | 226 | return CreateInventoryFolder(inventoryService, rootFolder, path, useExistingFolders); |
180 | } | 227 | } |
181 | 228 | ||
182 | /// <summary> | 229 | /// <summary> |
183 | /// Create inventory folders starting from a given parent folder | 230 | /// Create inventory folders starting from a given parent folder |
184 | /// </summary> | 231 | /// </summary> |
185 | /// | 232 | /// <remarks> |
186 | /// Ignores any existing folders with the same name | 233 | /// If any stem of the path names folders that already exist then these are not recreated. This includes the |
187 | /// | 234 | /// final folder. |
235 | /// TODO: May need to make it an option to create duplicate folders. | ||
236 | /// </remarks> | ||
188 | /// <param name="inventoryService"></param> | 237 | /// <param name="inventoryService"></param> |
189 | /// <param name="parentFolder"></param> | 238 | /// <param name="parentFolder"></param> |
190 | /// <param name="path"> | 239 | /// <param name="path"> |
191 | /// The folders to create. Multiple folders can be specified on a path delimited by the PATH_DELIMITER | 240 | /// The folder to create. |
241 | /// </param> | ||
242 | /// <param name="useExistingFolders"> | ||
243 | /// If true, then folders in the path which already the same name are | ||
244 | /// used. This applies to the terminal folder as well. | ||
245 | /// If false, then all folders in the path are created, even if there is already a folder at a particular | ||
246 | /// level with the same name. | ||
192 | /// </param> | 247 | /// </param> |
193 | /// <returns> | 248 | /// <returns> |
194 | /// The folder created. If the path contains multiple folders then the last one created is returned. | 249 | /// The folder created. If the path contains multiple folders then the last one created is returned. |
195 | /// </returns> | 250 | /// </returns> |
196 | public static InventoryFolderBase CreateInventoryFolder( | 251 | public static InventoryFolderBase CreateInventoryFolder( |
197 | IInventoryService inventoryService, InventoryFolderBase parentFolder, string path) | 252 | IInventoryService inventoryService, InventoryFolderBase parentFolder, string path, bool useExistingFolders) |
198 | { | 253 | { |
199 | string[] components = path.Split(new string[] { PATH_DELIMITER }, 2, StringSplitOptions.None); | 254 | string[] components = path.Split(new string[] { PATH_DELIMITER }, 2, StringSplitOptions.None); |
200 | 255 | ||
201 | InventoryFolderBase newFolder | 256 | InventoryFolderBase folder = null; |
202 | = new InventoryFolderBase( | 257 | |
203 | UUID.Random(), components[0], parentFolder.Owner, (short)AssetType.Unknown, parentFolder.ID, 0); | 258 | if (useExistingFolders) |
204 | 259 | folder = InventoryArchiveUtils.FindFolderByPath(inventoryService, parentFolder, components[0]); | |
205 | inventoryService.AddFolder(newFolder); | 260 | |
261 | if (folder == null) | ||
262 | { | ||
263 | // Console.WriteLine("Creating folder {0} at {1}", components[0], parentFolder.Name); | ||
264 | |||
265 | folder | ||
266 | = new InventoryFolderBase( | ||
267 | UUID.Random(), components[0], parentFolder.Owner, (short)AssetType.Unknown, parentFolder.ID, 0); | ||
268 | |||
269 | inventoryService.AddFolder(folder); | ||
270 | } | ||
271 | // else | ||
272 | // { | ||
273 | // Console.WriteLine("Found existing folder {0}", folder.Name); | ||
274 | // } | ||
206 | 275 | ||
207 | if (components.Length > 1) | 276 | if (components.Length > 1) |
208 | return CreateInventoryFolder(inventoryService, newFolder, components[1]); | 277 | return CreateInventoryFolder(inventoryService, folder, components[1], useExistingFolders); |
209 | else | 278 | else |
210 | return newFolder; | 279 | return folder; |
211 | } | 280 | } |
212 | 281 | ||
213 | /// <summary> | 282 | /// <summary> |
@@ -237,7 +306,7 @@ namespace OpenSim.Tests.Common | |||
237 | /// <returns>An empty list if no matching folders were found</returns> | 306 | /// <returns>An empty list if no matching folders were found</returns> |
238 | public static List<InventoryFolderBase> GetInventoryFolders(IInventoryService inventoryService, UUID userId, string path) | 307 | public static List<InventoryFolderBase> GetInventoryFolders(IInventoryService inventoryService, UUID userId, string path) |
239 | { | 308 | { |
240 | return InventoryArchiveUtils.FindFolderByPath(inventoryService, userId, path); | 309 | return InventoryArchiveUtils.FindFoldersByPath(inventoryService, userId, path); |
241 | } | 310 | } |
242 | 311 | ||
243 | /// <summary> | 312 | /// <summary> |