* Applying Mantis #1852 - Plugin Provider refactoring. Courtesy of Ryan/Sempuki.
parent
92e7f88a30
commit
2f8acdbe50
|
@ -27,6 +27,7 @@
|
|||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using log4net;
|
||||
|
@ -61,7 +62,7 @@ namespace OpenSim.Framework
|
|||
/// </summary>
|
||||
public interface IPluginFilter
|
||||
{
|
||||
bool Apply (ExtensionNode plugin);
|
||||
bool Apply (PluginExtensionNode plugin);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -152,7 +153,7 @@ namespace OpenSim.Framework
|
|||
if (filters.ContainsKey (ext))
|
||||
filter = filters [ext];
|
||||
|
||||
foreach (TypeExtensionNode node in AddinManager.GetExtensionNodes (ext))
|
||||
foreach (PluginExtensionNode node in AddinManager.GetExtensionNodes (ext))
|
||||
{
|
||||
log.Info("[PLUGINS]: Trying plugin " + node.Path);
|
||||
|
||||
|
@ -197,9 +198,13 @@ namespace OpenSim.Framework
|
|||
|
||||
private void on_addinloaderror_(object sender, AddinErrorEventArgs args)
|
||||
{
|
||||
log.Error ("[PLUGINS]: Plugin Error: " + args.Message
|
||||
+ ": " + args.Exception.Message
|
||||
+ "\n"+ args.Exception.StackTrace);
|
||||
if (args.Exception == null)
|
||||
log.Error ("[PLUGINS]: Plugin Error: "
|
||||
+ args.Message);
|
||||
else
|
||||
log.Error ("[PLUGINS]: Plugin Error: "
|
||||
+ args.Exception.Message + "\n"
|
||||
+ args.Exception.StackTrace);
|
||||
}
|
||||
|
||||
private void clear_registry_ ()
|
||||
|
@ -230,6 +235,39 @@ namespace OpenSim.Framework
|
|||
}
|
||||
}
|
||||
|
||||
public class PluginExtensionNode : ExtensionNode
|
||||
{
|
||||
[NodeAttribute]
|
||||
string provider;
|
||||
|
||||
[NodeAttribute]
|
||||
string type;
|
||||
|
||||
Type typeobj;
|
||||
|
||||
public string Provider { get { return provider; } }
|
||||
public string TypeName { get { return type; } }
|
||||
|
||||
public Type TypeObject
|
||||
{
|
||||
get
|
||||
{
|
||||
if (typeobj != null)
|
||||
return typeobj;
|
||||
|
||||
if (type.Length == 0)
|
||||
throw new InvalidOperationException ("Type name not specified.");
|
||||
|
||||
return typeobj = Addin.GetType (type, true);
|
||||
}
|
||||
}
|
||||
|
||||
public object CreateInstance ()
|
||||
{
|
||||
return Activator.CreateInstance (TypeObject);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Constraint that bounds the number of plugins to be loaded.
|
||||
/// </summary>
|
||||
|
@ -271,25 +309,20 @@ namespace OpenSim.Framework
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Filters out which plugin to load based on its "Id", which is name given by the namespace or by Mono.Addins.
|
||||
/// Filters out which plugin to load based on its "Provider", which is name given by in the addin.xml
|
||||
/// </summary>
|
||||
public class PluginIdFilter : IPluginFilter
|
||||
public class PluginProviderFilter : IPluginFilter
|
||||
{
|
||||
private string id;
|
||||
private string provider;
|
||||
|
||||
public PluginIdFilter (string id)
|
||||
public PluginProviderFilter (string p)
|
||||
{
|
||||
this.id = id;
|
||||
provider = p;
|
||||
}
|
||||
|
||||
public bool Apply (ExtensionNode plugin)
|
||||
public bool Apply (PluginExtensionNode plugin)
|
||||
{
|
||||
System.Console.WriteLine ("[WTF]: " + plugin.Path);
|
||||
|
||||
if (plugin.HasId == false)
|
||||
return false;
|
||||
|
||||
return (plugin.Id == id);
|
||||
return (plugin.Provider == provider);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -71,9 +71,9 @@ namespace OpenSim.Grid.GridServer
|
|||
logloader.AddExtensionPoint ("/OpenSim/LogData");
|
||||
|
||||
// loader will try to load all providers (MySQL, MSSQL, etc)
|
||||
// unless it is constrainted to the correct "id"
|
||||
gridloader.AddFilter ("/OpenSim/GridData", new PluginIdFilter (provider));
|
||||
logloader.AddFilter ("/OpenSim/LogData", new PluginIdFilter (provider));
|
||||
// unless it is constrainted to the correct "Provider" entry in the addin.xml
|
||||
gridloader.AddFilter ("/OpenSim/GridData", new PluginProviderFilter (provider));
|
||||
logloader.AddFilter ("/OpenSim/LogData", new PluginProviderFilter (provider));
|
||||
|
||||
gridloader.Load();
|
||||
logloader.Load();
|
||||
|
|
|
@ -6,6 +6,6 @@
|
|||
<Addin id="OpenSim" version="0.5" />
|
||||
</Dependencies>
|
||||
<Extension path = "/OpenSim/Startup">
|
||||
<Type type="OpenSim.ApplicationPlugins.GridInfo.GridInfoPlugin" />
|
||||
<Plugin type="OpenSim.ApplicationPlugins.GridInfo.GridInfoPlugin" />
|
||||
</Extension>
|
||||
</Addin>
|
||||
|
|
|
@ -6,6 +6,6 @@
|
|||
<Addin id="OpenSim" version="0.5" />
|
||||
</Dependencies>
|
||||
<Extension path = "/OpenSim/Startup">
|
||||
<Type type="OpenSim.ApplicationPlugins.LoadRegions.LoadRegionsPlugin" />
|
||||
<Plugin type="OpenSim.ApplicationPlugins.LoadRegions.LoadRegionsPlugin" />
|
||||
</Extension>
|
||||
</Addin>
|
||||
|
|
|
@ -6,9 +6,9 @@
|
|||
<Addin id="OpenSim.Data" version="0.5" />
|
||||
</Dependencies>
|
||||
<Extension path = "/OpenSim/GridData">
|
||||
<Type id="OpenSim.Data.MSSQL.dll" type="OpenSim.Data.MSSQL.MSSQLGridData" />
|
||||
<Plugin provider="OpenSim.Data.MSSQL.dll" type="OpenSim.Data.MSSQL.MSSQLGridData" />
|
||||
</Extension>
|
||||
<Extension path = "/OpenSim/LogData">
|
||||
<Type id="OpenSim.Data.MSSQL.dll" type="OpenSim.Data.MSSQL.MSSQLLogData" />
|
||||
<Plugin provider="OpenSim.Data.MSSQL.dll" type="OpenSim.Data.MSSQL.MSSQLLogData" />
|
||||
</Extension>
|
||||
</Addin>
|
||||
|
|
|
@ -6,9 +6,9 @@
|
|||
<Addin id="OpenSim.Data" version="0.5" />
|
||||
</Dependencies>
|
||||
<Extension path = "/OpenSim/GridData">
|
||||
<Type id="OpenSim.Data.MySQL.dll" type="OpenSim.Data.MySQL.MySQLGridData" />
|
||||
<Plugin provider="OpenSim.Data.MySQL.dll" type="OpenSim.Data.MySQL.MySQLGridData" />
|
||||
</Extension>
|
||||
<Extension path = "/OpenSim/LogData">
|
||||
<Type id="OpenSim.Data.MySQL.dll" type="OpenSim.Data.MySQL.MySQLLogData" />
|
||||
<Plugin provider="OpenSim.Data.MySQL.dll" type="OpenSim.Data.MySQL.MySQLLogData" />
|
||||
</Extension>
|
||||
</Addin>
|
||||
|
|
|
@ -6,6 +6,6 @@
|
|||
<Addin id="OpenSim.Data" version="0.5" />
|
||||
</Dependencies>
|
||||
<Extension path = "/OpenSim/GridData">
|
||||
<Type id="OpenSim.Data.SQLite.dll" type="OpenSim.Data.SQLite.SQLiteGridData" />
|
||||
<Plugin provider="OpenSim.Data.SQLite.dll" type="OpenSim.Data.SQLite.SQLiteGridData" />
|
||||
</Extension>
|
||||
</Addin>
|
||||
|
|
|
@ -2,11 +2,12 @@
|
|||
<Runtime>
|
||||
<Import assembly="OpenSim.Grid.GridServer.exe"/>
|
||||
<Import assembly="OpenSim.Data.dll"/>
|
||||
<Import assembly="OpenSim.Framework.dll"/>
|
||||
</Runtime>
|
||||
<ExtensionPoint path = "/OpenSim/GridData">
|
||||
<ExtensionNode objectType="OpenSim.Data.IGridDataPlugin"/>
|
||||
<ExtensionNode name="Plugin" type="OpenSim.Framework.PluginExtensionNode" objectType="OpenSim.Data.IGridDataPlugin"/>
|
||||
</ExtensionPoint>
|
||||
<ExtensionPoint path = "/OpenSim/LogData">
|
||||
<ExtensionNode objectType="OpenSim.Data.ILogDataPlugin"/>
|
||||
<ExtensionNode name="Plugin" type="OpenSim.Framework.PluginExtensionNode" objectType="OpenSim.Data.ILogDataPlugin"/>
|
||||
</ExtensionPoint>
|
||||
</Addin>
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
<Addin id="OpenSim.Grid.GridServer" isroot="true" version="0.5">
|
||||
<Runtime>
|
||||
<Import assembly="OpenSim.Grid.GridServer.exe"/>
|
||||
<Import assembly="OpenSim.Framework.dll"/>
|
||||
</Runtime>
|
||||
<ExtensionPoint path = "/OpenSim/GridServer">
|
||||
<ExtensionNode objectType="OpenSim.Grid.GridServer.IGridPlugin"/>
|
||||
<ExtensionNode name="Plugin" type="OpenSim.Framework.PluginExtensionNode" objectType="OpenSim.Grid.GridServer.IGridPlugin"/>
|
||||
</ExtensionPoint>
|
||||
</Addin>
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
<Addin id="OpenSim" isroot="true" version="0.5">
|
||||
<Runtime>
|
||||
<Import assembly="OpenSim.exe"/>
|
||||
<Import assembly="OpenSim.Framework.dll"/>
|
||||
</Runtime>
|
||||
<ExtensionPoint path = "/OpenSim/Startup">
|
||||
<ExtensionNode objectType="OpenSim.IApplicationPlugin"/>
|
||||
<ExtensionNode name="Plugin" type="OpenSim.Framework.PluginExtensionNode" objectType="OpenSim.IApplicationPlugin"/>
|
||||
</ExtensionPoint>
|
||||
</Addin>
|
||||
|
|
|
@ -6,6 +6,6 @@
|
|||
<Addin id="OpenSim" version="0.5" />
|
||||
</Dependencies>
|
||||
<Extension path = "/OpenSim/Startup">
|
||||
<Type type="OpenSim.ApplicationPlugins.RemoteController.RemoteAdminPlugin" />
|
||||
<Plugin type="OpenSim.ApplicationPlugins.RemoteController.RemoteAdminPlugin" />
|
||||
</Extension>
|
||||
</Addin>
|
||||
|
|
|
@ -6,6 +6,6 @@
|
|||
<Addin id="OpenSim" version="0.5" />
|
||||
</Dependencies>
|
||||
<Extension path = "/OpenSim/Startup">
|
||||
<Type type="OpenSim.ApplicationPlugins.Rest.Inventory.RestHandler" />
|
||||
<Plugin type="OpenSim.ApplicationPlugins.Rest.Inventory.RestHandler" />
|
||||
</Extension>
|
||||
</Addin>
|
||||
|
|
|
@ -6,6 +6,6 @@
|
|||
<Addin id="OpenSim" version="0.5" />
|
||||
</Dependencies>
|
||||
<Extension path = "/OpenSim/Startup">
|
||||
<Type type="OpenSim.ApplicationPlugins.Rest.Regions.RestRegionPlugin" />
|
||||
<Plugin type="OpenSim.ApplicationPlugins.Rest.Regions.RestRegionPlugin" />
|
||||
</Extension>
|
||||
</Addin>
|
||||
|
|
Loading…
Reference in New Issue