clockwerk-opensim – Blame information for rev 1

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