From af64c1ee9e38da931b49f83277aedd6399010de2 Mon Sep 17 00:00:00 2001 From: Mike Mazur Date: Mon, 16 Feb 2009 02:26:36 +0000 Subject: [PATCH] Migrate OpenSim inventory frontend to load with Mono.Addins. Everything should compile and it seems even creating users works somehow. --- .../AssetInventoryServer.cs | 21 +++++++-- .../Extensions/SimpleUtils.cs | 44 ------------------ .../OpenSim/OpenSimAssetFrontendPlugin.cs | 4 +- .../OpenSimInventoryFrontendPlugin.cs} | 45 +++++++++++++++---- ...setInventoryServerOpenSimPlugins.addin.xml | 3 ++ 5 files changed, 60 insertions(+), 57 deletions(-) delete mode 100644 OpenSim/Grid/AssetInventoryServer/Extensions/SimpleUtils.cs rename OpenSim/Grid/AssetInventoryServer/{Extensions/OpenSimInventoryFrontend.cs => Plugins/OpenSim/OpenSimInventoryFrontendPlugin.cs} (95%) diff --git a/OpenSim/Grid/AssetInventoryServer/AssetInventoryServer.cs b/OpenSim/Grid/AssetInventoryServer/AssetInventoryServer.cs index e100377509..012c4eaca5 100644 --- a/OpenSim/Grid/AssetInventoryServer/AssetInventoryServer.cs +++ b/OpenSim/Grid/AssetInventoryServer/AssetInventoryServer.cs @@ -55,7 +55,7 @@ namespace OpenSim.Grid.AssetInventoryServer public IAuthorizationProvider AuthorizationProvider; public IMetricsProvider MetricsProvider; - private IAssetInventoryServerPlugin frontend; + private List frontends = new List(); public AssetInventoryServer() { @@ -107,7 +107,7 @@ namespace OpenSim.Grid.AssetInventoryServer } StorageProvider = LoadAssetInventoryServerPlugin("/OpenSim/AssetInventoryServer/StorageProvider", "OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim.dll") as IAssetStorageProvider; - InventoryProvider = LoadAssetInventoryServerPlugin("/OpenSim/AssetInventoryServer/InventoryProvider", "OpenSim.Grid.AssetInventoryServer.Plugins.Simple.dll") as IInventoryStorageProvider; + InventoryProvider = LoadAssetInventoryServerPlugin("/OpenSim/AssetInventoryServer/InventoryProvider", "OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim.dll") as IInventoryStorageProvider; MetricsProvider = LoadAssetInventoryServerPlugin("/OpenSim/AssetInventoryServer/MetricsProvider", String.Empty) as IMetricsProvider; try @@ -121,7 +121,7 @@ namespace OpenSim.Grid.AssetInventoryServer return false; } - frontend = LoadAssetInventoryServerPlugin("/OpenSim/AssetInventoryServer/Frontend", String.Empty); + frontends.AddRange(LoadAssetInventoryServerPlugins("/OpenSim/AssetInventoryServer/Frontend", String.Empty)); return true; } @@ -194,6 +194,21 @@ namespace OpenSim.Grid.AssetInventoryServer return loader.Plugin; } + + private List LoadAssetInventoryServerPlugins(string addinPath, string provider) + { + PluginLoader loader = new PluginLoader(new AssetInventoryServerPluginInitialiser(this)); + + if (provider == String.Empty) + loader.Add(addinPath); + else + loader.Add(addinPath, new PluginProviderFilter(provider)); + //loader.Add(addinPath, new PluginCountConstraint(1)); + + loader.Load(); + + return loader.Plugins; + } } public class log4netLogWriter : ILogWriter diff --git a/OpenSim/Grid/AssetInventoryServer/Extensions/SimpleUtils.cs b/OpenSim/Grid/AssetInventoryServer/Extensions/SimpleUtils.cs deleted file mode 100644 index b3edf59ddc..0000000000 --- a/OpenSim/Grid/AssetInventoryServer/Extensions/SimpleUtils.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using System.IO; -using OpenMetaverse; - -namespace OpenSim.Grid.AssetInventoryServer.Extensions -{ - public static class SimpleUtils - { - public static string ParseNameFromFilename(string filename) - { - filename = Path.GetFileName(filename); - - int dot = filename.LastIndexOf('.'); - int firstDash = filename.IndexOf('-'); - - if (dot - 37 > 0 && firstDash > 0) - return filename.Substring(0, firstDash); - else - return String.Empty; - } - - public static UUID ParseUUIDFromFilename(string filename) - { - int dot = filename.LastIndexOf('.'); - - if (dot > 35) - { - // Grab the last 36 characters of the filename - string uuidString = filename.Substring(dot - 36, 36); - UUID uuid; - UUID.TryParse(uuidString, out uuid); - return uuid; - } - else - { - UUID uuid; - if (UUID.TryParse(Path.GetFileName(filename), out uuid)) - return uuid; - else - return UUID.Zero; - } - } - } -} diff --git a/OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/OpenSimAssetFrontendPlugin.cs b/OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/OpenSimAssetFrontendPlugin.cs index f0ad3cfa62..ebab55723b 100644 --- a/OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/OpenSimAssetFrontendPlugin.cs +++ b/OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/OpenSimAssetFrontendPlugin.cs @@ -43,7 +43,7 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim { public class OpenSimAssetFrontendPlugin : IAssetInventoryServerPlugin { - AssetInventoryServer server; + private AssetInventoryServer server; public OpenSimAssetFrontendPlugin() { @@ -60,6 +60,8 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim // Asset creation server.HttpServer.AddHandler("post", null, @"^/assets/", AssetPostHandler); + + Logger.Log.Info("[ASSET] OpenSim Asset Frontend loaded."); } /// diff --git a/OpenSim/Grid/AssetInventoryServer/Extensions/OpenSimInventoryFrontend.cs b/OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/OpenSimInventoryFrontendPlugin.cs similarity index 95% rename from OpenSim/Grid/AssetInventoryServer/Extensions/OpenSimInventoryFrontend.cs rename to OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/OpenSimInventoryFrontendPlugin.cs index 340e00cd8a..6e33cdfdf4 100644 --- a/OpenSim/Grid/AssetInventoryServer/Extensions/OpenSimInventoryFrontend.cs +++ b/OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/OpenSimInventoryFrontendPlugin.cs @@ -36,21 +36,24 @@ using ExtensionLoader; using OpenMetaverse; using OpenMetaverse.StructuredData; using HttpServer; +using OpenSim.Framework; -namespace OpenSim.Grid.AssetInventoryServer.Extensions +namespace OpenSim.Grid.AssetInventoryServer.Plugins.OpenSim { - public class OpenSimInventoryFrontend : IExtension + public class OpenSimInventoryFrontendPlugin : IAssetInventoryServerPlugin { - AssetInventoryServer server; - Utils.InventoryItemSerializer itemSerializer = new Utils.InventoryItemSerializer(); - Utils.InventoryFolderSerializer folderSerializer = new Utils.InventoryFolderSerializer(); - Utils.InventoryCollectionSerializer collectionSerializer = new Utils.InventoryCollectionSerializer(); + private AssetInventoryServer server; + private Utils.InventoryItemSerializer itemSerializer = new Utils.InventoryItemSerializer(); + private Utils.InventoryFolderSerializer folderSerializer = new Utils.InventoryFolderSerializer(); + private Utils.InventoryCollectionSerializer collectionSerializer = new Utils.InventoryCollectionSerializer(); - public OpenSimInventoryFrontend() + public OpenSimInventoryFrontendPlugin() { } - public void Start(AssetInventoryServer server) + #region IPlugin implementation + + public void Initialise(AssetInventoryServer server) { this.server = server; @@ -64,12 +67,36 @@ namespace OpenSim.Grid.AssetInventoryServer.Extensions server.HttpServer.AddHandler("post", null, @"^/DeleteItem/", DeleteItemHandler); server.HttpServer.AddHandler("post", null, @"^/RootFolders/", RootFoldersHandler); server.HttpServer.AddHandler("post", null, @"^/ActiveGestures/", ActiveGesturesHandler); + + Logger.Log.Info("[INVENTORY] OpenSim Inventory Frontend loaded."); } - public void Stop() + /// + /// Initialises asset interface + /// + public void Initialise() + { + Logger.Log.InfoFormat("[INVENTORY]: {0} cannot be default-initialized!", Name); + throw new PluginNotInitialisedException(Name); + } + + public void Dispose() { } + public string Version + { + // TODO: this should be something meaningful and not hardcoded? + get { return "0.1"; } + } + + public string Name + { + get { return "AssetInventoryServer OpenSim asset frontend"; } + } + + #endregion IPlugin implementation + bool GetInventoryHandler(IHttpClientContext client, IHttpRequest request, IHttpResponse response) { UUID sessionID, agentID; diff --git a/OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/Resources/AssetInventoryServerOpenSimPlugins.addin.xml b/OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/Resources/AssetInventoryServerOpenSimPlugins.addin.xml index 6d21327e8d..cfdfdb5967 100644 --- a/OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/Resources/AssetInventoryServerOpenSimPlugins.addin.xml +++ b/OpenSim/Grid/AssetInventoryServer/Plugins/OpenSim/Resources/AssetInventoryServerOpenSimPlugins.addin.xml @@ -21,4 +21,7 @@ + + +