clockwerk-opensim-stable – 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 System;
30 using System.Collections.Generic;
31 using System.Reflection;
32 using Mono.Addins;
33 using Nini.Config;
34 using OpenSim.Framework;
35 using OpenSim.Framework.Monitoring;
36 using OpenSim.Services.Connectors;
37 using OpenSim.Region.Framework.Interfaces;
38 using OpenSim.Region.Framework.Scenes;
39 using OpenSim.Services.Interfaces;
40 using OpenMetaverse;
41  
42 namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
43 {
44 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "RemoteXInventoryServicesConnector")]
45 public class RemoteXInventoryServicesConnector : ISharedRegionModule, IInventoryService
46 {
47 private static readonly ILog m_log =
48 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
49  
50 /// <summary>
51 /// Scene used by this module. This currently needs to be publicly settable for HGInventoryBroker.
52 /// </summary>
53 public Scene Scene { get; set; }
54  
55 private bool m_Enabled;
56 private XInventoryServicesConnector m_RemoteConnector;
57  
58 private IUserManagement m_UserManager;
59 public IUserManagement UserManager
60 {
61 get
62 {
63 if (m_UserManager == null)
64 {
65 m_UserManager = Scene.RequestModuleInterface<IUserManagement>();
66  
67 if (m_UserManager == null)
68 m_log.ErrorFormat(
69 "[XINVENTORY CONNECTOR]: Could not retrieve IUserManagement module from {0}",
70 Scene.RegionInfo.RegionName);
71 }
72  
73 return m_UserManager;
74 }
75 }
76  
77 public Type ReplaceableInterface
78 {
79 get { return null; }
80 }
81  
82 public string Name
83 {
84 get { return "RemoteXInventoryServicesConnector"; }
85 }
86  
87 public RemoteXInventoryServicesConnector()
88 {
89 }
90  
91 public RemoteXInventoryServicesConnector(string url)
92 {
93 m_RemoteConnector = new XInventoryServicesConnector(url);
94 }
95  
96 public RemoteXInventoryServicesConnector(IConfigSource source)
97 {
98 Init(source);
99 }
100  
101 protected void Init(IConfigSource source)
102 {
103 m_RemoteConnector = new XInventoryServicesConnector(source);
104 }
105  
106 #region ISharedRegionModule
107  
108 public void Initialise(IConfigSource source)
109 {
110 IConfig moduleConfig = source.Configs["Modules"];
111 if (moduleConfig != null)
112 {
113 string name = moduleConfig.GetString("InventoryServices", "");
114 if (name == Name)
115 {
116 Init(source);
117 m_Enabled = true;
118  
119 m_log.Info("[XINVENTORY CONNECTOR]: Remote XInventory 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 // m_Scene = scene;
135 //m_log.Debug("[XXXX] Adding scene " + m_Scene.RegionInfo.RegionName);
136  
137 if (!m_Enabled)
138 return;
139  
140 scene.RegisterModuleInterface<IInventoryService>(this);
141  
142 if (Scene == null)
143 Scene = scene;
144 }
145  
146 public void RemoveRegion(Scene scene)
147 {
148 if (!m_Enabled)
149 return;
150 }
151  
152 public void RegionLoaded(Scene scene)
153 {
154 if (!m_Enabled)
155 return;
156  
157 m_log.InfoFormat("[XINVENTORY CONNECTOR]: Enabled remote XInventory for region {0}", scene.RegionInfo.RegionName);
158  
159 }
160  
161 #endregion ISharedRegionModule
162  
163 #region IInventoryService
164  
165 public bool CreateUserInventory(UUID user)
166 {
167 return false;
168 }
169  
170 public List<InventoryFolderBase> GetInventorySkeleton(UUID userId)
171 {
172 return m_RemoteConnector.GetInventorySkeleton(userId);
173 }
174  
175 public InventoryCollection GetUserInventory(UUID userID)
176 {
177 return m_RemoteConnector.GetUserInventory(userID);
178 }
179  
180 public void GetUserInventory(UUID userID, InventoryReceiptCallback callback)
181 {
182 }
183  
184 public InventoryFolderBase GetRootFolder(UUID userID)
185 {
186 return m_RemoteConnector.GetRootFolder(userID);
187 }
188  
189 public InventoryFolderBase GetFolderForType(UUID userID, AssetType type)
190 {
191 return m_RemoteConnector.GetFolderForType(userID, type);
192 }
193  
194 public InventoryCollection GetFolderContent(UUID userID, UUID folderID)
195 {
196 InventoryCollection invCol = m_RemoteConnector.GetFolderContent(userID, folderID);
197  
198 // Commenting this for now, because it's causing more grief than good
199 //if (invCol != null && UserManager != null)
200 //{
201 // // Protect ourselves against the caller subsequently modifying the items list
202 // List<InventoryItemBase> items = new List<InventoryItemBase>(invCol.Items);
203  
204 // if (items != null && items.Count > 0)
205 // //Util.FireAndForget(delegate
206 // //{
207 // foreach (InventoryItemBase item in items)
208 // if (!string.IsNullOrEmpty(item.CreatorData))
209 // UserManager.AddUser(item.CreatorIdAsUuid, item.CreatorData);
210 // //});
211 //}
212  
213 return invCol;
214 }
215  
216 public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
217 {
218 return m_RemoteConnector.GetFolderItems(userID, folderID);
219 }
220  
221 public bool AddFolder(InventoryFolderBase folder)
222 {
223 if (folder == null)
224 return false;
225  
226 return m_RemoteConnector.AddFolder(folder);
227 }
228  
229 public bool UpdateFolder(InventoryFolderBase folder)
230 {
231 if (folder == null)
232 return false;
233  
234 return m_RemoteConnector.UpdateFolder(folder);
235 }
236  
237 public bool MoveFolder(InventoryFolderBase folder)
238 {
239 if (folder == null)
240 return false;
241  
242 return m_RemoteConnector.MoveFolder(folder);
243 }
244  
245 public bool DeleteFolders(UUID ownerID, List<UUID> folderIDs)
246 {
247 if (folderIDs == null)
248 return false;
249 if (folderIDs.Count == 0)
250 return false;
251  
252 return m_RemoteConnector.DeleteFolders(ownerID, folderIDs);
253 }
254  
255  
256 public bool PurgeFolder(InventoryFolderBase folder)
257 {
258 if (folder == null)
259 return false;
260  
261 return m_RemoteConnector.PurgeFolder(folder);
262 }
263  
264 public bool AddItem(InventoryItemBase item)
265 {
266 if (item == null)
267 return false;
268  
269 return m_RemoteConnector.AddItem(item);
270 }
271  
272 public bool UpdateItem(InventoryItemBase item)
273 {
274 if (item == null)
275 return false;
276  
277 return m_RemoteConnector.UpdateItem(item);
278 }
279  
280 public bool MoveItems(UUID ownerID, List<InventoryItemBase> items)
281 {
282 if (items == null)
283 return false;
284  
285 return m_RemoteConnector.MoveItems(ownerID, items);
286 }
287  
288  
289 public bool DeleteItems(UUID ownerID, List<UUID> itemIDs)
290 {
291 if (itemIDs == null)
292 return false;
293 if (itemIDs.Count == 0)
294 return true;
295  
296 return m_RemoteConnector.DeleteItems(ownerID, itemIDs);
297 }
298  
299 public InventoryItemBase GetItem(InventoryItemBase item)
300 {
301 //m_log.DebugFormat("[XINVENTORY CONNECTOR]: GetItem {0}", item.ID);
302 if (item == null)
303 return null;
304  
305 if (m_RemoteConnector == null)
306 m_log.DebugFormat("[XINVENTORY CONNECTOR]: connector stub is null!!!");
307 return m_RemoteConnector.GetItem(item);
308 }
309  
310 public InventoryFolderBase GetFolder(InventoryFolderBase folder)
311 {
312 //m_log.DebugFormat("[XINVENTORY CONNECTOR]: GetFolder {0}", folder.ID);
313 if (folder == null)
314 return null;
315  
316 return m_RemoteConnector.GetFolder(folder);
317 }
318  
319 public bool HasInventoryForUser(UUID userID)
320 {
321 return false;
322 }
323  
324 public List<InventoryItemBase> GetActiveGestures(UUID userId)
325 {
326 return new List<InventoryItemBase>();
327 }
328  
329 public int GetAssetPermissions(UUID userID, UUID assetID)
330 {
331 return m_RemoteConnector.GetAssetPermissions(userID, assetID);
332 }
333  
334 #endregion
335 }
336 }