opensim-development – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 eva 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 log4net;
29 using Mono.Addins;
30 using Nini.Config;
31  
32 using System;
33 using System.Collections.Generic;
34 using System.Reflection;
35 using OpenSim.Framework;
36 using OpenSim.Data;
37 using OpenSim.Server.Base;
38 using OpenSim.Region.Framework.Interfaces;
39 using OpenSim.Region.Framework.Scenes;
40 using OpenSim.Services.Interfaces;
41 using OpenMetaverse;
42  
43 namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
44 {
45 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "LocalInventoryServicesConnector")]
46 public class LocalInventoryServicesConnector : ISharedRegionModule, IInventoryService
47 {
48 private static readonly ILog m_log =
49 LogManager.GetLogger(
50 MethodBase.GetCurrentMethod().DeclaringType);
51  
52 /// <summary>
53 /// Scene used by this module. This currently needs to be publicly settable for HGInventoryBroker.
54 /// </summary>
55 public Scene Scene { get; set; }
56  
57 private IInventoryService m_InventoryService;
58  
59 private IUserManagement m_UserManager;
60 private IUserManagement UserManager
61 {
62 get
63 {
64 if (m_UserManager == null)
65 {
66 m_UserManager = Scene.RequestModuleInterface<IUserManagement>();
67 }
68 return m_UserManager;
69 }
70 }
71  
72 private bool m_Enabled = false;
73  
74 public Type ReplaceableInterface
75 {
76 get { return null; }
77 }
78  
79 public string Name
80 {
81 get { return "LocalInventoryServicesConnector"; }
82 }
83  
84 public void Initialise(IConfigSource source)
85 {
86 IConfig moduleConfig = source.Configs["Modules"];
87 if (moduleConfig != null)
88 {
89 string name = moduleConfig.GetString("InventoryServices", "");
90 if (name == Name)
91 {
92 IConfig inventoryConfig = source.Configs["InventoryService"];
93 if (inventoryConfig == null)
94 {
95 m_log.Error("[LOCAL INVENTORY SERVICES CONNECTOR]: InventoryService missing from OpenSim.ini");
96 return;
97 }
98  
99 string serviceDll = inventoryConfig.GetString("LocalServiceModule", String.Empty);
100  
101 if (serviceDll == String.Empty)
102 {
103 m_log.Error("[LOCAL INVENTORY SERVICES CONNECTOR]: No LocalServiceModule named in section InventoryService");
104 return;
105 }
106  
107 Object[] args = new Object[] { source };
108 m_log.DebugFormat("[LOCAL INVENTORY SERVICES CONNECTOR]: Service dll = {0}", serviceDll);
109  
110 m_InventoryService = ServerUtils.LoadPlugin<IInventoryService>(serviceDll, args);
111  
112 if (m_InventoryService == null)
113 {
114 m_log.Error("[LOCAL INVENTORY SERVICES CONNECTOR]: Can't load inventory service");
115 throw new Exception("Unable to proceed. Please make sure your ini files in config-include are updated according to .example's");
116 }
117  
118 m_Enabled = true;
119 m_log.Info("[LOCAL INVENTORY SERVICES CONNECTOR]: Local inventory connector enabled");
120 }
121 }
122 }
123  
124 public void PostInitialise()
125 {
126 }
127  
128 public void Close()
129 {
130 }
131  
132 public void AddRegion(Scene scene)
133 {
134 if (!m_Enabled)
135 return;
136  
137 scene.RegisterModuleInterface<IInventoryService>(this);
138  
139 if (Scene == null)
140 Scene = scene;
141 }
142  
143 public void RemoveRegion(Scene scene)
144 {
145 if (!m_Enabled)
146 return;
147 }
148  
149 public void RegionLoaded(Scene scene)
150 {
151 if (!m_Enabled)
152 return;
153 }
154  
155 #region IInventoryService
156  
157 public bool CreateUserInventory(UUID user)
158 {
159 return m_InventoryService.CreateUserInventory(user);
160 }
161  
162 public List<InventoryFolderBase> GetInventorySkeleton(UUID userId)
163 {
164 return m_InventoryService.GetInventorySkeleton(userId);
165 }
166  
167 public InventoryCollection GetUserInventory(UUID id)
168 {
169 return m_InventoryService.GetUserInventory(id);
170 }
171  
172 public void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
173 {
174 m_InventoryService.GetUserInventory(userID, callback);
175 }
176  
177 public InventoryFolderBase GetRootFolder(UUID userID)
178 {
179 return m_InventoryService.GetRootFolder(userID);
180 }
181  
182 public InventoryFolderBase GetFolderForType(UUID userID, AssetType type)
183 {
184 return m_InventoryService.GetFolderForType(userID, type);
185 }
186  
187 public InventoryCollection GetFolderContent(UUID userID, UUID folderID)
188 {
189 InventoryCollection invCol = m_InventoryService.GetFolderContent(userID, folderID);
190  
191 if (UserManager != null)
192 {
193 // Protect ourselves against the caller subsequently modifying the items list
194 List<InventoryItemBase> items = new List<InventoryItemBase>(invCol.Items);
195  
196 Util.FireAndForget(delegate
197 {
198 foreach (InventoryItemBase item in items)
199 if (!string.IsNullOrEmpty(item.CreatorData))
200 UserManager.AddUser(item.CreatorIdAsUuid, item.CreatorData);
201 });
202 }
203  
204 return invCol;
205 }
206  
207 public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
208 {
209 return m_InventoryService.GetFolderItems(userID, folderID);
210 }
211  
212 /// <summary>
213 /// Add a new folder to the user's inventory
214 /// </summary>
215 /// <param name="folder"></param>
216 /// <returns>true if the folder was successfully added</returns>
217 public bool AddFolder(InventoryFolderBase folder)
218 {
219 return m_InventoryService.AddFolder(folder);
220 }
221  
222 /// <summary>
223 /// Update a folder in the user's inventory
224 /// </summary>
225 /// <param name="folder"></param>
226 /// <returns>true if the folder was successfully updated</returns>
227 public bool UpdateFolder(InventoryFolderBase folder)
228 {
229 return m_InventoryService.UpdateFolder(folder);
230 }
231  
232 /// <summary>
233 /// Move an inventory folder to a new location
234 /// </summary>
235 /// <param name="folder">A folder containing the details of the new location</param>
236 /// <returns>true if the folder was successfully moved</returns>
237 public bool MoveFolder(InventoryFolderBase folder)
238 {
239 return m_InventoryService.MoveFolder(folder);
240 }
241  
242 public bool DeleteFolders(UUID ownerID, List<UUID> folderIDs)
243 {
244 return m_InventoryService.DeleteFolders(ownerID, folderIDs);
245 }
246  
247 /// <summary>
248 /// Purge an inventory folder of all its items and subfolders.
249 /// </summary>
250 /// <param name="folder"></param>
251 /// <returns>true if the folder was successfully purged</returns>
252 public bool PurgeFolder(InventoryFolderBase folder)
253 {
254 return m_InventoryService.PurgeFolder(folder);
255 }
256  
257 public bool AddItem(InventoryItemBase item)
258 {
259 // m_log.DebugFormat(
260 // "[LOCAL INVENTORY SERVICES CONNECTOR]: Adding inventory item {0} to user {1} folder {2}",
261 // item.Name, item.Owner, item.Folder);
262  
263 return m_InventoryService.AddItem(item);
264 }
265  
266 /// <summary>
267 /// Update an item in the user's inventory
268 /// </summary>
269 /// <param name="item"></param>
270 /// <returns>true if the item was successfully updated</returns>
271 public bool UpdateItem(InventoryItemBase item)
272 {
273 return m_InventoryService.UpdateItem(item);
274 }
275  
276 public bool MoveItems(UUID ownerID, List<InventoryItemBase> items)
277 {
278 return m_InventoryService.MoveItems(ownerID, items);
279 }
280  
281 /// <summary>
282 /// Delete an item from the user's inventory
283 /// </summary>
284 /// <param name="item"></param>
285 /// <returns>true if the item was successfully deleted</returns>
286 public bool DeleteItems(UUID ownerID, List<UUID> itemIDs)
287 {
288 return m_InventoryService.DeleteItems(ownerID, itemIDs);
289 }
290  
291 public InventoryItemBase GetItem(InventoryItemBase item)
292 {
293 // m_log.DebugFormat("[LOCAL INVENTORY SERVICES CONNECTOR]: Requesting inventory item {0}", item.ID);
294  
295 // UUID requestedItemId = item.ID;
296  
297 item = m_InventoryService.GetItem(item);
298  
299 // if (null == item)
300 // m_log.ErrorFormat(
301 // "[LOCAL INVENTORY SERVICES CONNECTOR]: Could not find item with id {0}", requestedItemId);
302  
303 return item;
304 }
305  
306 public InventoryFolderBase GetFolder(InventoryFolderBase folder)
307 {
308 return m_InventoryService.GetFolder(folder);
309 }
310  
311 /// <summary>
312 /// Does the given user have an inventory structure?
313 /// </summary>
314 /// <param name="userID"></param>
315 /// <returns></returns>
316 public bool HasInventoryForUser(UUID userID)
317 {
318 return m_InventoryService.HasInventoryForUser(userID);
319 }
320  
321 public List<InventoryItemBase> GetActiveGestures(UUID userId)
322 {
323 return m_InventoryService.GetActiveGestures(userId);
324 }
325  
326 public int GetAssetPermissions(UUID userID, UUID assetID)
327 {
328 return m_InventoryService.GetAssetPermissions(userID, assetID);
329 }
330 #endregion IInventoryService
331 }
332 }