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 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 InventoryFolderBase GetRootFolder(UUID userID)
176 {
177 return m_RemoteConnector.GetRootFolder(userID);
178 }
179  
180 public InventoryFolderBase GetFolderForType(UUID userID, AssetType type)
181 {
182 return m_RemoteConnector.GetFolderForType(userID, type);
183 }
184  
185 public InventoryCollection GetFolderContent(UUID userID, UUID folderID)
186 {
187 InventoryCollection invCol = m_RemoteConnector.GetFolderContent(userID, folderID);
188  
189 // Commenting this for now, because it's causing more grief than good
190 //if (invCol != null && UserManager != null)
191 //{
192 // // Protect ourselves against the caller subsequently modifying the items list
193 // List<InventoryItemBase> items = new List<InventoryItemBase>(invCol.Items);
194  
195 // if (items != null && items.Count > 0)
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_RemoteConnector.GetFolderItems(userID, folderID);
210 }
211  
212 public bool AddFolder(InventoryFolderBase folder)
213 {
214 if (folder == null)
215 return false;
216  
217 return m_RemoteConnector.AddFolder(folder);
218 }
219  
220 public bool UpdateFolder(InventoryFolderBase folder)
221 {
222 if (folder == null)
223 return false;
224  
225 return m_RemoteConnector.UpdateFolder(folder);
226 }
227  
228 public bool MoveFolder(InventoryFolderBase folder)
229 {
230 if (folder == null)
231 return false;
232  
233 return m_RemoteConnector.MoveFolder(folder);
234 }
235  
236 public bool DeleteFolders(UUID ownerID, List<UUID> folderIDs)
237 {
238 if (folderIDs == null)
239 return false;
240 if (folderIDs.Count == 0)
241 return false;
242  
243 return m_RemoteConnector.DeleteFolders(ownerID, folderIDs);
244 }
245  
246  
247 public bool PurgeFolder(InventoryFolderBase folder)
248 {
249 if (folder == null)
250 return false;
251  
252 return m_RemoteConnector.PurgeFolder(folder);
253 }
254  
255 public bool AddItem(InventoryItemBase item)
256 {
257 if (item == null)
258 return false;
259  
260 return m_RemoteConnector.AddItem(item);
261 }
262  
263 public bool UpdateItem(InventoryItemBase item)
264 {
265 if (item == null)
266 return false;
267  
268 return m_RemoteConnector.UpdateItem(item);
269 }
270  
271 public bool MoveItems(UUID ownerID, List<InventoryItemBase> items)
272 {
273 if (items == null)
274 return false;
275  
276 return m_RemoteConnector.MoveItems(ownerID, items);
277 }
278  
279  
280 public bool DeleteItems(UUID ownerID, List<UUID> itemIDs)
281 {
282 if (itemIDs == null)
283 return false;
284 if (itemIDs.Count == 0)
285 return true;
286  
287 return m_RemoteConnector.DeleteItems(ownerID, itemIDs);
288 }
289  
290 public InventoryItemBase GetItem(InventoryItemBase item)
291 {
292 //m_log.DebugFormat("[XINVENTORY CONNECTOR]: GetItem {0}", item.ID);
293 if (item == null)
294 return null;
295  
296 if (m_RemoteConnector == null)
297 m_log.DebugFormat("[XINVENTORY CONNECTOR]: connector stub is null!!!");
298 return m_RemoteConnector.GetItem(item);
299 }
300  
301 public InventoryFolderBase GetFolder(InventoryFolderBase folder)
302 {
303 //m_log.DebugFormat("[XINVENTORY CONNECTOR]: GetFolder {0}", folder.ID);
304 if (folder == null)
305 return null;
306  
307 return m_RemoteConnector.GetFolder(folder);
308 }
309  
310 public bool HasInventoryForUser(UUID userID)
311 {
312 return false;
313 }
314  
315 public List<InventoryItemBase> GetActiveGestures(UUID userId)
316 {
317 return new List<InventoryItemBase>();
318 }
319  
320 public int GetAssetPermissions(UUID userID, UUID assetID)
321 {
322 return m_RemoteConnector.GetAssetPermissions(userID, assetID);
323 }
324  
325 #endregion
326 }
327 }