Remove obsolete plugin references

This commit is contained in:
Gary Sharp
2013-02-12 17:24:47 +11:00
parent eb03365513
commit 5fd4f34153
17 changed files with 0 additions and 1500 deletions
@@ -1,304 +0,0 @@
using Disco.Services.Logging;
using Disco.Services.Logging.Models;
using System;
using System.Collections.Generic;
using System.Diagnostics;
namespace Disco.Services.Plugins.Categories.CertificateProvider
{
public class CertificateProvidersLog : LogBase
{
public enum EventTypeIds
{
RetrievalStarting = 10,
RetrievalProgress,
RetrievalFinished,
RetrievalWarning = 15,
RetrievalError,
RetrievalCertificateStarting = 20,
RetrievalCertificateFinished = 22,
RetrievalCertificateWarning = 25,
RetrievalCertificateError,
Allocated = 40,
AllocationFailed = 50
}
private const int _ModuleId = 60;
private static bool _IsCertificateRetrievalProcessing;
private static string _CertificateRetrievalStatus;
private static int _CertificateRetrievalProgress;
public static CertificateProvidersLog Current
{
get
{
return (CertificateProvidersLog)LogContext.LogModules[60];
}
}
public static bool IsCertificateRetrievalProcessing
{
get
{
return CertificateProvidersLog._IsCertificateRetrievalProcessing;
}
}
public override string ModuleDescription
{
get
{
return "Certificate Providers";
}
}
public override int ModuleId
{
get
{
return 60;
}
}
public override string ModuleName
{
get
{
return "CertificateProviders";
}
}
[System.Diagnostics.DebuggerNonUserCode]
public CertificateProvidersLog()
{
}
private static void Log(CertificateProvidersLog.EventTypeIds EventTypeId, params object[] Args)
{
CertificateProvidersLog.Current.Log((int)EventTypeId, Args);
}
public static void LogRetrievalStarting(int CertificateCount, int CertificateIdFrom, int CertificateIdTo)
{
CertificateProvidersLog.Log(CertificateProvidersLog.EventTypeIds.RetrievalStarting, new object[]
{
CertificateCount,
CertificateIdFrom,
CertificateIdTo
});
}
public static void LogRetrievalFinished()
{
CertificateProvidersLog.Log(CertificateProvidersLog.EventTypeIds.RetrievalFinished, new object[0]);
}
public static void LogRetrievalWarning(string Message)
{
CertificateProvidersLog.Log(CertificateProvidersLog.EventTypeIds.RetrievalWarning, new object[]
{
Message
});
}
public static void LogRetrievalError(string Message)
{
CertificateProvidersLog.Log(CertificateProvidersLog.EventTypeIds.RetrievalError, new object[]
{
Message
});
}
public static void LogRetrievalCertificateStarting(string CertificateId)
{
CertificateProvidersLog.Log(CertificateProvidersLog.EventTypeIds.RetrievalCertificateStarting, new object[]
{
CertificateId
});
}
public static void LogRetrievalCertificateFinished(string CertificateId)
{
CertificateProvidersLog.Log(CertificateProvidersLog.EventTypeIds.RetrievalCertificateFinished, new object[]
{
CertificateId
});
}
public static void LogRetrievalCertificateWarning(string CertificateId, string Message)
{
CertificateProvidersLog.Log(CertificateProvidersLog.EventTypeIds.RetrievalCertificateWarning, new object[]
{
CertificateId,
Message
});
}
public static void LogRetrievalCertificateError(string CertificateId, string Message)
{
CertificateProvidersLog.Log(CertificateProvidersLog.EventTypeIds.RetrievalCertificateError, new object[]
{
CertificateId,
Message
});
}
public static void LogAllocated(string CertificateId, string DeviceSerialNumber)
{
CertificateProvidersLog.Log(CertificateProvidersLog.EventTypeIds.Allocated, new object[]
{
CertificateId,
DeviceSerialNumber
});
}
public static void LogAllocationFailed(string DeviceSerialNumber)
{
CertificateProvidersLog.Log(CertificateProvidersLog.EventTypeIds.AllocationFailed, new object[]
{
DeviceSerialNumber
});
}
public static void LogCertificateRetrievalProgress(bool? IsProcessing, int? Progress, string Status)
{
bool flag = IsProcessing.HasValue;
if (flag)
{
CertificateProvidersLog._IsCertificateRetrievalProcessing = IsProcessing.Value;
}
flag = CertificateProvidersLog._IsCertificateRetrievalProcessing;
if (flag)
{
bool flag2 = Status != null;
if (flag2)
{
CertificateProvidersLog._CertificateRetrievalStatus = Status;
}
flag2 = Progress.HasValue;
if (flag2)
{
CertificateProvidersLog._CertificateRetrievalProgress = Progress.Value;
}
}
else
{
CertificateProvidersLog._CertificateRetrievalStatus = null;
CertificateProvidersLog._CertificateRetrievalProgress = 0;
}
CertificateProvidersLog.Log(CertificateProvidersLog.EventTypeIds.RetrievalProgress, new object[]
{
CertificateProvidersLog._IsCertificateRetrievalProcessing,
CertificateProvidersLog._CertificateRetrievalProgress,
CertificateProvidersLog._CertificateRetrievalStatus
});
}
protected override System.Collections.Generic.List<LogEventType> LoadEventTypes()
{
return new System.Collections.Generic.List<LogEventType>
{
new LogEventType
{
Id = 10,
ModuleId = 60,
Name = "Retrieval Starting",
Format = "Starting retrieval of {0} certificate/s ({1} to {2})",
Severity = 0,
UseLive = true,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = 11,
ModuleId = 60,
Name = "Retrieval Progress",
Format = "Processing: {0}; {1}% Complete; Status: {2}",
Severity = 0,
UseLive = true,
UsePersist = false,
UseDisplay = false
},
new LogEventType
{
Id = 12,
ModuleId = 60,
Name = "Retrieval Finished",
Format = "Retrieval of Certificates Complete",
Severity = 0,
UseLive = true,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = 15,
ModuleId = 60,
Name = "Retrieval Warning",
Format = "Retrieval Warning: {0}",
Severity = 1,
UseLive = true,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = 16,
ModuleId = 60,
Name = "Retrieval Error",
Format = "Retrieval Error: {0}",
Severity = 2,
UseLive = true,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = 20,
ModuleId = 60,
Name = "Retrieval Certificate Starting",
Format = "Retrieving Certificate: {0}",
Severity = 0,
UseLive = true,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = 22,
ModuleId = 60,
Name = "Retrieval Certificate Finished",
Format = "Certificate Retrieved: {0}",
Severity = 0,
UseLive = true,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = 25,
ModuleId = 60,
Name = "Retrieval Certificate Warning",
Format = "{0} Certificate Warning: {1}",
Severity = 1,
UseLive = true,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = 26,
ModuleId = 60,
Name = "Retrieval Certificate Error",
Format = "{0} Certificate Error: {1}",
Severity = 2,
UseLive = true,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = 40,
ModuleId = 60,
Name = "Allocated",
Format = "Certificate {0} allocated to {1}",
Severity = 0,
UseLive = true,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = 50,
ModuleId = 60,
Name = "Allocation Failed",
Format = "No certificates available for Device: {0}",
Severity = 2,
UseLive = true,
UsePersist = true,
UseDisplay = true
}
};
}
}
}
@@ -1,23 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Disco.Data.Repository;
using Disco.Models.Repository;
namespace Disco.Services.Plugins.Categories.CertificateProvider
{
[PluginCategory(DisplayName = "Certificate Providers")]
public abstract class CertificateProviderPlugin : Plugin
{
public override sealed Type PluginCategoryType
{
get { return typeof(CertificateProviderPlugin); }
}
// Certificate Plugin Requirements
public abstract string CertificateProviderId { get; }
public abstract Tuple<DeviceCertificate, List<string>> AllocateCertificate(DiscoDataContext dbContext, Device Device);
}
}
@@ -1,17 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Disco.Services.Plugins.Categories.InteroperabilityProvider
{
[PluginCategory(DisplayName = "Interoperability Providers")]
public abstract class InteroperabilityProviderPlugin : Plugin
{
public override sealed Type PluginCategoryType
{
get { return typeof(InteroperabilityProviderPlugin); }
}
}
}
@@ -1,52 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using Disco.Data.Repository;
using Disco.Models.BI.Config;
using Disco.Models.Repository;
namespace Disco.Services.Plugins.Categories.WarrantyProvider
{
[PluginCategory(DisplayName = "Warranty Providers")]
public abstract class WarrantyProviderPlugin : Plugin
{
public override sealed Type PluginCategoryType
{
get { return typeof(WarrantyProviderPlugin); }
}
// Warranty Plugin Requirements
public abstract string WarrantyProviderId { get; }
public abstract Type SubmitJobViewType { get; }
public abstract dynamic SubmitJobViewModel(DiscoDataContext dbContext, Controller controller, Job Job, OrganisationAddress Address, User TechUser);
public abstract Dictionary<string, string> SubmitJobParseProperties(DiscoDataContext dbContext, FormCollection form, Controller controller, Job Job, OrganisationAddress Address, User TechUser, string FaultDescription);
public abstract Dictionary<string, string> SubmitJobDiscloseInfo(DiscoDataContext dbContext, Job Job, OrganisationAddress Address, User TechUser, string FaultDescription, Dictionary<string, string> WarrantyProviderProperties);
public abstract string SubmitJob(DiscoDataContext dbContext, Job Job, OrganisationAddress Address, User TechUser, string FaultDescription, Dictionary<string, string> WarrantyProviderProperties);
public abstract Type JobDetailsViewType { get; }
public bool JobDetailsSupported { get { return this.JobDetailsViewType != null; } }
public abstract dynamic JobDetailsViewModel(DiscoDataContext dbContext, Controller controller, Job Job);
public static PluginDefinition FindPlugin(string PlugIdOrWarrantyProviderId)
{
var defs = Plugins.GetPlugins(typeof(WarrantyProviderPlugin));
var def = defs.FirstOrDefault(d => d.Id.Equals(PlugIdOrWarrantyProviderId, StringComparison.InvariantCultureIgnoreCase));
if (def != null)
return def;
else
foreach (var d in defs)
{
using (var providerInstance = d.CreateInstance<WarrantyProviderPlugin>())
{
if (providerInstance.WarrantyProviderId != null && providerInstance.WarrantyProviderId.Equals(PlugIdOrWarrantyProviderId, StringComparison.InvariantCultureIgnoreCase))
{
return d;
}
}
}
return null;
}
}
}
@@ -1,12 +0,0 @@
using System;
namespace Disco.Services.Plugins.Categories.WarrantyProvider
{
public class WarrantyProviderSubmitJobException : Exception
{
public WarrantyProviderSubmitJobException(string Message)
: base(Message)
{
}
}
}
@@ -1,16 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Disco.Data.Repository;
using System.Web.Mvc;
namespace Disco.Services.Plugins
{
public interface IPluginConfiguration
{
Type ConfigurationViewType { get; }
dynamic ConfigurationViewModel(DiscoDataContext dbContext, Controller controller);
bool ConfigurationSave(DiscoDataContext dbContext, FormCollection form, Controller controller);
}
}
@@ -1,13 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
namespace Disco.Services.Plugins
{
public interface IPluginWebController
{
ActionResult ExecuteAction(string ActionName, Controller HostController);
}
}
@@ -1,50 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Disco.Services.Plugins
{
public class InvalidCategoryTypeException : Exception
{
private string _pluginRequested;
private Type _categoryType;
public string PluginRequested
{
get
{
return _pluginRequested;
}
}
public Type CategoryType
{
get
{
return _categoryType;
}
}
public InvalidCategoryTypeException(Type CategoryType)
: this(CategoryType, null)
{
}
public InvalidCategoryTypeException(Type CategoryType, string PluginRequested)
{
this._categoryType = CategoryType;
this._pluginRequested = PluginRequested;
}
public override string Message
{
get
{
if (string.IsNullOrEmpty(_pluginRequested))
return string.Format("Invalid Category Type [{0}]", _categoryType.Name);
else
return string.Format("Plugin [{1}] is not of the correct Category Type [{0}]", _categoryType.Name, _pluginRequested);
}
}
}
}
-28
View File
@@ -1,28 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Disco.Data.Repository;
using System.Web.Mvc;
namespace Disco.Services.Plugins
{
public abstract class Plugin : IDisposable
{
public string Id { get { return this.GetType().Name; } }
public abstract string Name { get; }
public abstract string Author { get; }
public abstract Version Version { get; }
public abstract Type PluginCategoryType { get; }
public abstract bool Initalize(DiscoDataContext dbContext);
public abstract void Dispose();
public override sealed string ToString()
{
return string.Format("{0} ({1}) - v{2}", this.Name, this.Id, this.Version.ToString(3));
}
}
}
@@ -1,13 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Disco.Services.Plugins
{
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
public class PluginCategoryAttribute : Attribute
{
public string DisplayName { get; set; }
}
}
@@ -1,86 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Web.Mvc;
namespace Disco.Services.Plugins
{
public class PluginDefinition
{
public string Id { get; private set; }
public string Name { get; private set; }
public string Author { get; private set; }
public Version Version { get; private set; }
public Type PluginType { get; private set; }
public Type PluginCategoryType { get; private set; }
public Dictionary<string, string> PluginReferenceAssemblies { get; private set; }
public string PluginHostDirectory { get; private set; }
public bool HasConfiguration { get; private set; }
public bool HasWebController { get; private set; }
public PluginDefinition(Plugin PluginInstance, string HostDirectory, Dictionary<string, string> ReferencedAssemblies = null)
{
Type pluginType = PluginInstance.GetType();
if (string.IsNullOrWhiteSpace(PluginInstance.Id))
throw new ArgumentNullException("PluginInstance.Id");
if (string.IsNullOrWhiteSpace(PluginInstance.Name))
throw new ArgumentNullException("PluginInstance.Name");
if (string.IsNullOrWhiteSpace(PluginInstance.Author))
throw new ArgumentNullException("PluginInstance.Author");
if (string.IsNullOrWhiteSpace(HostDirectory))
throw new ArgumentNullException("HostDirectory");
if (PluginInstance.Version == null)
throw new ArgumentNullException("PluginInstance.Version");
if (PluginInstance.PluginCategoryType == null)
throw new ArgumentNullException("PluginInstance.PluginCategoryType");
if (!PluginInstance.PluginCategoryType.IsAssignableFrom(pluginType))
throw new ArgumentException(string.Format("The plugin [{0}] does not inherit the Category [{1}]", pluginType.Name, PluginInstance.PluginCategoryType.Name), "PluginInstance.PluginCategoryType");
this.Id = PluginInstance.Id;
this.Name = PluginInstance.Name;
this.Author = PluginInstance.Author;
this.Version = PluginInstance.Version;
this.PluginType = pluginType;
this.PluginCategoryType = PluginInstance.PluginCategoryType;
this.PluginHostDirectory = HostDirectory;
if (ReferencedAssemblies != null && ReferencedAssemblies.Count > 0)
this.PluginReferenceAssemblies = ReferencedAssemblies;
// Determine (and Validate) if has Configuration
IPluginConfiguration pluginConfiguration = PluginInstance as IPluginConfiguration;
if (pluginConfiguration != null)
{
if (pluginConfiguration.ConfigurationViewType == null)
throw new ArgumentNullException("PluginInstance.ConfigurationViewType");
if (!typeof(WebViewPage).IsAssignableFrom(pluginConfiguration.ConfigurationViewType))
throw new ArgumentException(string.Format("The plugin [{0}] ConfigurationViewType must inherit System.Web.Mvc.WebViewPage", pluginType.Name), "PluginInstance.ConfigurationViewType");
this.HasConfiguration = true;
}
// Determine if has Web Controller
IPluginWebController pluginWebController = PluginInstance as IPluginWebController;
this.HasWebController = (pluginWebController != null);
}
public Plugin CreateInstance()
{
return (Plugin)Activator.CreateInstance(PluginType);
}
public PluginType CreateInstance<PluginType>()
{
if (typeof(PluginType).IsAssignableFrom(this.PluginType))
return (PluginType)Activator.CreateInstance(this.PluginType);
else
throw new InvalidOperationException(string.Format("The plugin [{0}] cannot be cast into type [{1}]", this.PluginType.Name, typeof(PluginType).Name));
}
}
}
@@ -1,75 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Disco.Data.Repository;
using System.IO;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web;
namespace Disco.Services.Plugins
{
public static class PluginExtensions
{
public static string PluginStorage(this Plugin plugin, DiscoDataContext dbContext)
{
string pluginStorageLocationRoot = dbContext.DiscoConfiguration.PluginStorageLocation;
string storageLocation = Path.Combine(pluginStorageLocationRoot, plugin.Id);
if (!Directory.Exists(storageLocation))
Directory.CreateDirectory(storageLocation);
return storageLocation;
}
public static string PluginCategoryDisplayName(this Plugin plugin)
{
if (plugin == null)
throw new ArgumentNullException("plugin");
return Plugins.CategoryDisplayNames[plugin.PluginCategoryType];
}
#region Model Binding from Controller
public static bool TryUpdateModel<TModel>(this Controller controller, TModel model) where TModel : class
{
return controller.TryUpdateModel<TModel>(model, null, controller.ValueProvider);
}
public static bool TryUpdateModel<TModel>(this Controller controller, TModel model, IValueProvider valueProvider) where TModel : class
{
return controller.TryUpdateModel<TModel>(model, null, valueProvider);
}
public static bool TryUpdateModel<TModel>(this Controller controller, TModel model, string prefix) where TModel : class
{
return controller.TryUpdateModel<TModel>(model, prefix, controller.ValueProvider);
}
public static bool TryUpdateModel<TModel>(this Controller controller, TModel model, string prefix, IValueProvider valueProvider) where TModel : class
{
if (model == null)
throw new ArgumentNullException("model");
if (valueProvider == null)
throw new ArgumentNullException("valueProvider");
Predicate<string> predicate = propertyName => true;
IModelBinder binder = ModelBinders.Binders.GetBinder(typeof(TModel));
ModelBindingContext context2 = new ModelBindingContext
{
ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => model, typeof(TModel)),
ModelName = prefix,
ModelState = controller.ModelState,
PropertyFilter = predicate,
ValueProvider = valueProvider
};
ModelBindingContext bindingContext = context2;
binder.BindModel(controller.ControllerContext, bindingContext);
return controller.ModelState.IsValid;
}
#endregion
}
}
@@ -1,15 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Disco.Services.Plugins
{
public class PluginWebControllerException : Exception
{
public PluginWebControllerException(string PluginId, string PluginAction, Exception InnerException)
: base(string.Format("An error occurred executing the Disco Plugin [{0}] Web Controller Action: [{0}]", PluginId, PluginAction), InnerException)
{
}
}
}
@@ -1,210 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Routing;
using System.Web.Mvc;
using RazorGenerator.Mvc;
using System.IO;
namespace Disco.Services.Plugins
{
public static class PluginWebControllerExtensions
{
#region Virtual Directories
public static string WebControllerRootUrl(this IPluginWebController plugin, RequestContext requestContext)
{
var tempPath = plugin.WebControllerActionUrl(requestContext, "_");
return tempPath.Substring(0, tempPath.LastIndexOf(@"/") + 1);
}
public static string WebControllerActionUrl(this IPluginWebController plugin, RequestContext requestContext, string PluginAction)
{
//return string.Format("~/Config/Plugins/{0}/{1}", HttpUtility.UrlEncode(((IDiscoPlugin)plugin).Id), HttpUtility.UrlEncode(PluginAction));
var routeValues = new RouteValueDictionary(new { PluginId = ((Plugin)plugin).Id, PluginAction = PluginAction });
return UrlHelper.GenerateUrl("Config_Plugins_PluginWebControllerActions", "PluginAction", "Plugins", routeValues, RouteTable.Routes, requestContext, true);
}
#endregion
#region Action Results
#region Compiled View
private static string[] _viewFileNames = new string[] { "cshtml" };
public static ActionResult CompiledView(this Controller HostController, Type CompiledViewType, object Model, bool UseDiscoLayout)
{
string layoutPath = UseDiscoLayout ? "~/Views/Shared/_Layout.cshtml" : null;
IView v = new PrecompiledMvcView(HostController.Request.Path, layoutPath, CompiledViewType, false, _viewFileNames);
if (Model != null)
HostController.ViewData.Model = Model;
return new ViewResult { View = v, ViewData = HostController.ViewData, TempData = HostController.TempData };
}
public static ActionResult CompiledView(this Controller HostController, Type CompiledViewType, bool UseDiscoLayout)
{
return HostController.CompiledView(CompiledViewType, null, UseDiscoLayout);
}
public static ActionResult CompiledView(this Controller HostController, Type CompiledViewType, object Model)
{
return HostController.CompiledView(CompiledViewType, Model, true);
}
public static ActionResult CompiledView(this Controller HostController, Type CompiledViewType)
{
return HostController.CompiledView(CompiledViewType, false, true);
}
public static ActionResult CompiledPartialView(this Controller HostController, Type PartialCompiledViewType, object Model)
{
IView v = new PrecompiledMvcView(HostController.Request.Path, PartialCompiledViewType, false, _viewFileNames);
if (Model != null)
HostController.ViewData.Model = Model;
return new PartialViewResult { View = v, ViewData = HostController.ViewData, TempData = HostController.TempData };
}
public static ActionResult CompiledPartialView(this Controller HostController, Type PartialCompiledViewType)
{
return HostController.CompiledView(PartialCompiledViewType, null);
}
#endregion
#region Content
public static ActionResult Content(this Controller HostController, string content, string contentType, Encoding contentEncoding)
{
return new ContentResult { Content = content, ContentType = contentType, ContentEncoding = contentEncoding };
}
public static ActionResult Content(this Controller HostController, string content, string contentType)
{
return HostController.Content(content, null, null);
}
public static ActionResult Content(this Controller HostController, string content)
{
return HostController.Content(content, null);
}
#endregion
#region Json
public static ActionResult Json(this Controller HostController, object data, JsonRequestBehavior behavior)
{
return new JsonResult { Data = data, ContentType = null, ContentEncoding = null, JsonRequestBehavior = behavior };
}
#endregion
#region File
public static ActionResult File(this Controller HostController, Stream fileStream, string contentType)
{
return HostController.File(fileStream, contentType, null);
}
public static ActionResult File(this Controller HostController, Stream fileStream, string contentType, string fileDownloadName)
{
return new FileStreamResult(fileStream, contentType) { FileDownloadName = fileDownloadName };
}
public static ActionResult File(this Controller HostController, byte[] fileContents, string contentType)
{
return HostController.File(fileContents, contentType, null);
}
public static ActionResult File(this Controller HostController, byte[] fileContents, string contentType, string fileDownloadName)
{
return new FileContentResult(fileContents, contentType) { FileDownloadName = fileDownloadName };
}
#endregion
#region HttpNotFound
public static ActionResult HttpNotFound(this Controller HostController, string statusDescription)
{
return new HttpNotFoundResult(statusDescription);
}
public static ActionResult HttpNotFound(this Controller HostController)
{
return HostController.HttpNotFound(null);
}
#endregion
#region Redirect
public static ActionResult RedirectToScheduledTaskStatus(this Controller HostController, string SessionId)
{
if (string.IsNullOrEmpty(SessionId))
throw new ArgumentNullException(SessionId);
return HostController.RedirectToAction("TaskStatus", "Logging", "Config", new { id = SessionId });
}
public static ActionResult Redirect(this Controller HostController, string url)
{
if (string.IsNullOrEmpty(url))
throw new ArgumentNullException("url");
return new RedirectResult(url);
}
public static ActionResult RedirectPermanent(this Controller HostController, string url)
{
if (string.IsNullOrEmpty(url))
throw new ArgumentNullException("url");
return new RedirectResult(url, true);
}
public static ActionResult RedirectToAction(this Controller HostController, IPluginWebController Plugin, string PluginAction)
{
if (string.IsNullOrEmpty(PluginAction))
throw new ArgumentNullException("PluginAction");
string pluginActionUrl = Plugin.WebControllerActionUrl(HostController.Request.RequestContext, PluginAction);
return new RedirectResult(pluginActionUrl, false);
}
public static ActionResult RedirectToRoute(this Controller HostController, string routeName, object routeValues)
{
RouteValueDictionary routeValueDictionary;
if (routeValues != null)
routeValueDictionary = new RouteValueDictionary(routeValues);
else
routeValueDictionary = new RouteValueDictionary();
return new RedirectToRouteResult(routeName, routeValueDictionary);
}
public static ActionResult RedirectToRoute(this Controller HostController, string routeName)
{
return HostController.RedirectToRoute(routeName, null);
}
public static ActionResult RedirectToAction(this Controller HostController, string actionName, string controllerName, string areaName, object routeValues)
{
RouteValueDictionary routeValueDictionary;
if (routeValues != null)
routeValueDictionary = new RouteValueDictionary(routeValues);
else
routeValueDictionary = new RouteValueDictionary();
routeValueDictionary["action"] = actionName;
routeValueDictionary["controller"] = controllerName;
if (areaName != null)
routeValueDictionary["area"] = areaName;
return new RedirectToRouteResult(routeValueDictionary);
}
public static ActionResult RedirectToAction(this Controller HostController, string actionName, string controllerName, string areaName)
{
return HostController.RedirectToAction(actionName, controllerName, areaName, null);
}
public static ActionResult RedirectToAction(this Controller HostController, string actionName, string controllerName, object routeValues)
{
return HostController.RedirectToAction(actionName, controllerName, null, routeValues);
}
public static ActionResult RedirectToAction(this Controller HostController, string actionName, string controllerName)
{
return HostController.RedirectToAction(actionName, controllerName, null, null);
}
public static ActionResult RedirectToDiscoJob(this Controller HostController, int jobId)
{
return HostController.RedirectToAction("Show", "Job", null, new { id = jobId.ToString() });
}
public static ActionResult RedirectToDiscoDevice(this Controller HostController, string DeviceSerialNumber)
{
return HostController.RedirectToAction("Show", "Device", null, new { id = DeviceSerialNumber });
}
public static ActionResult RedirectToDiscoUser(this Controller HostController, string UserId)
{
return HostController.RedirectToAction("Show", "User", null, new { id = UserId });
}
#endregion
#endregion
}
}
-290
View File
@@ -1,290 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using Disco.Data.Repository;
using System.IO;
using System.ComponentModel.DataAnnotations;
using System.Web;
using System.Web.Mvc;
using RazorGenerator.Mvc;
using System.Web.WebPages;
namespace Disco.Services.Plugins
{
public static class Plugins
{
private static Dictionary<string, PluginDefinition> _LoadedPlugins;
internal static Dictionary<Type, string> CategoryDisplayNames;
private static object _PluginLock = new object();
public static string PluginPath { get; private set; }
public static PluginDefinition GetPlugin(string PluginId, Type CategoryType = null)
{
if (_LoadedPlugins == null)
throw new InvalidOperationException("Plugins have not been initialized");
PluginDefinition def;
if (_LoadedPlugins.TryGetValue(PluginId, out def))
{
if (CategoryType == null)
return def;
else
{
if (CategoryType.IsAssignableFrom(def.PluginCategoryType))
return def;
else
throw new InvalidCategoryTypeException(CategoryType, PluginId);
}
}
else
{
throw new UnknownPluginException(PluginId);
}
}
public static List<PluginDefinition> GetPlugins(Type CategoryType)
{
if (_LoadedPlugins == null)
throw new InvalidOperationException("Plugins have not been initialized");
return _LoadedPlugins.Values.Where(p => p.PluginCategoryType.IsAssignableFrom(CategoryType)).OrderBy(p => p.Name).ToList();
}
public static List<PluginDefinition> GetPlugins()
{
if (_LoadedPlugins == null)
throw new InvalidOperationException("Plugins have not been initialized");
return _LoadedPlugins.Values.ToList();
}
public static string PluginCategoryDisplayName(Type CategoryType)
{
if (CategoryType == null)
throw new ArgumentNullException("CategoryType");
string displayName;
if (CategoryDisplayNames.TryGetValue(CategoryType, out displayName))
return displayName;
else
throw new InvalidOperationException(string.Format("Unknown Plugin Category Type: [{0}]", CategoryType.Name));
}
#region Initalizing
public static void InitalizePlugins(DiscoDataContext dbContext)
{
if (_LoadedPlugins == null)
{
lock (_PluginLock)
{
if (_LoadedPlugins == null)
{
Dictionary<string, PluginDefinition> loadedPlugins = new Dictionary<string, PluginDefinition>();
PluginPath = dbContext.DiscoConfiguration.PluginsLocation;
AppDomain appDomain = AppDomain.CurrentDomain;
// Subscribe to Assembly Resolving
appDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
// Load Internal (Default?) Plugins
IEnumerable<Assembly> discoAssemblies = (from a in appDomain.GetAssemblies()
where !a.GlobalAssemblyCache && !a.IsDynamic &&
a.FullName.StartsWith("Disco.", StringComparison.InvariantCultureIgnoreCase)
select a);
foreach (var discoAssembly in discoAssemblies)
{
List<PluginDefinition> assemblyPluginDefinitions = InitializePluginAssembly(dbContext, discoAssembly, false);
foreach (PluginDefinition definition in assemblyPluginDefinitions)
loadedPlugins[definition.Id] = definition;
}
// Load External (DataStore) Plugins
DirectoryInfo pluginDirectoryRoot = new DirectoryInfo(PluginPath);
if (pluginDirectoryRoot.Exists)
{
foreach (DirectoryInfo pluginDirectory in pluginDirectoryRoot.EnumerateDirectories())
{
string pluginAssemblyFilename = Path.Combine(pluginDirectory.FullName, string.Format("{0}.dll", pluginDirectory.Name));
if (File.Exists(pluginAssemblyFilename))
{
Assembly pluginAssembly = null;
try
{
pluginAssembly = Assembly.LoadFile(pluginAssemblyFilename);
if (pluginAssembly != null)
{
PluginsLog.LogInitializingPluginAssembly(pluginAssembly);
List<PluginDefinition> assemblyPluginDefinitions = InitializePluginAssembly(dbContext, pluginAssembly, true);
foreach (PluginDefinition definition in assemblyPluginDefinitions)
loadedPlugins[definition.Id] = definition;
}
}
catch (Exception ex) { PluginsLog.LogInitializeException(pluginAssemblyFilename, ex); }
}
}
}
// Determine Category Information
CategoryDisplayNames = InitializeCategoryDetails(loadedPlugins.Values);
_LoadedPlugins = loadedPlugins;
}
}
}
}
private static Dictionary<Type, string> InitializeCategoryDetails(IEnumerable<PluginDefinition> plugins)
{
Dictionary<Type, string> categoryDisplayNames = new Dictionary<Type, string>();
foreach (var pluginDefinition in plugins)
{
if (!categoryDisplayNames.ContainsKey(pluginDefinition.PluginCategoryType))
{
string displayName = null;
var displayAttributes = pluginDefinition.PluginCategoryType.GetCustomAttributes(typeof(PluginCategoryAttribute), true);
if (displayAttributes != null && displayAttributes.Length > 0)
displayName = ((PluginCategoryAttribute)(displayAttributes[0])).DisplayName;
if (string.IsNullOrWhiteSpace(displayName))
displayName = pluginDefinition.PluginCategoryType.Name;
categoryDisplayNames[pluginDefinition.PluginCategoryType] = displayName;
}
}
return categoryDisplayNames;
}
private static List<PluginDefinition> InitializePluginAssembly(DiscoDataContext dbContext, Assembly PluginAssembly, bool ResolveReferences)
{
List<PluginDefinition> pluginDefinitions = new List<PluginDefinition>();
var pluginTypes = (from type in PluginAssembly.GetTypes()
where typeof(Plugin).IsAssignableFrom(type) && !type.IsAbstract
select type).ToList();
if (pluginTypes.Count > 0)
{
Dictionary<string, string> referencedAssemblies = null;
string hostDirectory = Path.GetDirectoryName(PluginAssembly.Location);
if (ResolveReferences)
referencedAssemblies = ImportReferencedAssemblies(PluginAssembly, hostDirectory);
foreach (Type t in pluginTypes)
{
var p = InitializePlugin(dbContext, t, hostDirectory, referencedAssemblies);
if (p != null)
pluginDefinitions.Add(p);
}
}
return pluginDefinitions;
}
private static Dictionary<string, string> ImportReferencedAssemblies(Assembly PluginAssembly, string HostDirectory)
{
Dictionary<string, string> referencedAssemblies = new Dictionary<string, string>();
foreach (string referenceFilename in Directory.EnumerateFiles(HostDirectory, "*.dll", SearchOption.TopDirectoryOnly))
{
if (!referenceFilename.Equals(PluginAssembly.Location, StringComparison.InvariantCultureIgnoreCase))
{
try
{
Assembly pluginRefAssembly = Assembly.ReflectionOnlyLoadFrom(referenceFilename);
referencedAssemblies[pluginRefAssembly.FullName] = referenceFilename;
}
catch (Exception) { } // Ignore Load Exceptions
}
}
return referencedAssemblies;
}
private static PluginDefinition InitializePlugin(DiscoDataContext dbContext, Type PluginType, string HostDirectory, Dictionary<string, string> ReferencedAssemblies = null)
{
if (!typeof(Plugin).IsAssignableFrom(PluginType))
throw new ArgumentException(string.Format("Plugins [{0}] does not inherit from [IDiscoPlugin]", PluginType.Name));
using (Plugin instance = (Plugin)Activator.CreateInstance(PluginType))
{
try
{
PluginDefinition definition = new PluginDefinition(instance, HostDirectory, ReferencedAssemblies);
PluginsLog.LogInitializingPlugin(definition);
instance.Initalize(dbContext);
return definition;
}
catch (Exception ex)
{
PluginsLog.LogInitializeException(PluginType.Assembly.Location, ex);
return null;
}
}
}
#endregion
#region Plugin Referenced Assemblies Resolving
public static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
if (args.RequestingAssembly.Location.StartsWith(PluginPath, StringComparison.InvariantCultureIgnoreCase) && _LoadedPlugins != null)
{
// Try best guess first
PluginDefinition requestingPlugin = _LoadedPlugins.Values.Where(p => p.PluginType.Assembly == args.RequestingAssembly).FirstOrDefault();
if (requestingPlugin != null)
{
Assembly loadedAssembly = CurrentDomain_AssemblyResolve_ByPlugin(requestingPlugin, args);
if (loadedAssembly != null)
return loadedAssembly;
}
// Try all Plugin References
foreach (var pluginDef in _LoadedPlugins.Values)
{
Assembly loadedAssembly = CurrentDomain_AssemblyResolve_ByPlugin(pluginDef, args);
if (loadedAssembly != null)
return loadedAssembly;
}
}
return null;
}
private static Assembly CurrentDomain_AssemblyResolve_ByPlugin(PluginDefinition PluginDefinition, ResolveEventArgs args)
{
if (PluginDefinition.PluginReferenceAssemblies != null)
{
string assemblyPath;
if (PluginDefinition.PluginReferenceAssemblies.TryGetValue(args.Name, out assemblyPath))
{
try
{
Assembly loadedAssembly = Assembly.LoadFile(assemblyPath);
PluginsLog.LogPluginReferenceAssemblyLoaded(args.Name, assemblyPath, args.RequestingAssembly.FullName);
return loadedAssembly;
}
catch (Exception ex)
{
PluginsLog.LogPluginException(string.Format("Resolving Plugin Reference Assembly: '{0}' [{1}]; Requested by: '{2}' [{3}]; Disco.Plugins.DiscoPlugins.CurrentDomain_AssemblyResolve()", args.Name, assemblyPath, args.RequestingAssembly.FullName, args.RequestingAssembly.Location), ex);
}
}
}
return null;
}
#endregion
}
}
-259
View File
@@ -1,259 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Disco.Services.Logging;
using Disco.Services.Logging.Models;
using System.Reflection;
namespace Disco.Services.Plugins
{
public class PluginsLog : LogBase
{
private const int _ModuleId = 10;
public override string ModuleDescription { get { return "Plugins"; } }
public override int ModuleId { get { return _ModuleId; } }
public override string ModuleName { get { return "Plugins"; } }
public enum EventTypeIds
{
InitializingPlugins = 10,
InitializingPluginAssembly,
InitializedPlugin,
InitializeWarning = 15,
InitializeError,
InitializeException,
InitializeExceptionWithInner,
PluginException = 20,
PluginExceptionWithInner,
PluginReferenceAssemblyLoaded = 50,
PluginConfigurationLoaded = 100,
PluginConfigurationSaved = 104,
PluginWebControllerAccessed = 200
}
public static PluginsLog Current
{
get
{
return (PluginsLog)LogContext.LogModules[_ModuleId];
}
}
private static void Log(EventTypeIds EventTypeId, params object[] Args)
{
Current.Log((int)EventTypeId, Args);
}
public static void LogInitializingPlugins(string PluginDirectory)
{
Current.Log((int)EventTypeIds.InitializingPlugins, PluginDirectory);
}
public static void LogInitializingPluginAssembly(Assembly PluginAssembly)
{
Current.Log((int)EventTypeIds.InitializingPluginAssembly, PluginAssembly.FullName, PluginAssembly.Location);
}
public static void LogInitializingPlugin(PluginDefinition Definition)
{
Current.Log((int)EventTypeIds.InitializedPlugin, Definition.Id, Definition.Version.ToString(3), Definition.PluginType.Name, Definition.PluginType.Assembly.Location);
}
public static void LogInitializeWarning(string Warning)
{
Current.Log((int)EventTypeIds.InitializeWarning, Warning);
}
public static void LogInitializeError(string Error)
{
Current.Log((int)EventTypeIds.InitializeError, Error);
}
public static void LogPluginReferenceAssemblyLoaded(string AssemblyFullName, string AssemblyPath, string RequestedBy)
{
Current.Log((int)EventTypeIds.PluginReferenceAssemblyLoaded, AssemblyFullName, AssemblyPath, RequestedBy);
}
public static void LogPluginConfigurationLoaded(string PluginId, string UserId)
{
Current.Log((int)EventTypeIds.PluginConfigurationLoaded, PluginId, UserId);
}
public static void LogPluginConfigurationSaved(string PluginId, string UserId)
{
Current.Log((int)EventTypeIds.PluginConfigurationSaved, PluginId, UserId);
}
public static void LogPluginWebControllerAccessed(string PluginId, string PluginAction, string UserId)
{
Current.Log((int)EventTypeIds.PluginWebControllerAccessed, PluginId, PluginAction, UserId);
}
public static void LogInitializeException(string PluginFilename, Exception ex)
{
if (ex.InnerException != null)
{
Log(EventTypeIds.InitializeExceptionWithInner, PluginFilename, ex.GetType().Name, ex.Message, ex.StackTrace, ex.InnerException.GetType().Name, ex.InnerException.Message, ex.InnerException.StackTrace);
}
else
{
Log(EventTypeIds.InitializeException, PluginFilename, ex.GetType().Name, ex.Message, ex.StackTrace);
}
}
public static void LogPluginException(string Component, Exception ex)
{
if (ex.InnerException != null)
{
Log(EventTypeIds.PluginExceptionWithInner, Component, ex.GetType().Name, ex.Message, ex.StackTrace, ex.InnerException.GetType().Name, ex.InnerException.Message, ex.InnerException.StackTrace);
}
else
{
Log(EventTypeIds.PluginException, Component, ex.GetType().Name, ex.Message, ex.StackTrace);
}
}
protected override List<Logging.Models.LogEventType> LoadEventTypes()
{
return new System.Collections.Generic.List<LogEventType>
{
new LogEventType
{
Id = (int)EventTypeIds.InitializingPlugins,
ModuleId = _ModuleId,
Name = "Initializing Plugins",
Format = "Starting plugin discovery and initialization from: {0}",
Severity = (int)LogEventType.Severities.Information,
UseLive = false,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = (int)EventTypeIds.InitializingPluginAssembly,
ModuleId = _ModuleId,
Name = "Initializing Plugin Assembly",
Format = "Initializing Plugin Assembly: [{0}] From '{1}'",
Severity = (int)LogEventType.Severities.Information,
UseLive = false,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = (int)EventTypeIds.InitializedPlugin,
ModuleId = _ModuleId,
Name = "Initialized Plugin",
Format = "Initialized Plugin: '{0} (v{1})' [{2}] From '{3}'",
Severity = (int)LogEventType.Severities.Information,
UseLive = false,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = (int)EventTypeIds.InitializeWarning,
ModuleId = _ModuleId,
Name = "Initialize Warning",
Format = "Initialize Warning: {0}",
Severity = (int)LogEventType.Severities.Warning,
UseLive = false,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = (int)EventTypeIds.InitializeError,
ModuleId = _ModuleId,
Name = "Initialize Error",
Format = "Initialize Error: {0}",
Severity = (int)LogEventType.Severities.Error,
UseLive = false,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = (int)EventTypeIds.InitializeException,
ModuleId = _ModuleId,
Name = "Initialize Exception",
Format = "Exception: {0}; {1}: {2}; {3}",
Severity = (int)LogEventType.Severities.Error,
UseLive = false,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = (int)EventTypeIds.InitializeExceptionWithInner,
ModuleId = _ModuleId,
Name = "Initialize Exception with Inner Exception",
Format = "Exception: {0}; {1}: {2}; {3}; Inner: {4}: {5}; {6}",
Severity = (int)LogEventType.Severities.Error,
UseLive = false,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = (int)EventTypeIds.PluginException,
ModuleId = _ModuleId,
Name = "Plugin Exception",
Format = "Exception: {0}; {1}: {2}; {3}",
Severity = (int)LogEventType.Severities.Error,
UseLive = true,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = (int)EventTypeIds.PluginExceptionWithInner,
ModuleId = _ModuleId,
Name = "Plugin Exception with Inner Exception",
Format = "Exception: {0}; {1}: {2}; {3}; Inner: {4}: {5}; {6}",
Severity = (int)LogEventType.Severities.Error,
UseLive = true,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = (int)EventTypeIds.PluginReferenceAssemblyLoaded,
ModuleId = _ModuleId,
Name = "Plugin Reference Assembly Loaded",
Format = "Loaded Plugin Reference Assembly: [{0}] From: '{1}'; Requested by: [{2}]",
Severity = (int)LogEventType.Severities.Information,
UseLive = true,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = (int)EventTypeIds.PluginConfigurationLoaded,
ModuleId = _ModuleId,
Name = "Plugin Configuration Loaded",
Format = "Plugin Configuration Loaded: [{0}] by [{1}]",
Severity = (int)LogEventType.Severities.Information,
UseLive = true,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = (int)EventTypeIds.PluginConfigurationSaved,
ModuleId = _ModuleId,
Name = "Plugin Configuration Saved",
Format = "Plugin Configuration Saved: [{0}] by [{1}]",
Severity = (int)LogEventType.Severities.Information,
UseLive = true,
UsePersist = true,
UseDisplay = true
},
new LogEventType
{
Id = (int)EventTypeIds.PluginWebControllerAccessed,
ModuleId = _ModuleId,
Name = "Plugin Web Controller Accessed",
Format = "Plugin Web Controller Accessed: Plugin [{0}], Action [{1}], By [{2}]",
Severity = (int)LogEventType.Severities.Information,
UseLive = true,
UsePersist = true,
UseDisplay = true
}
};
}
}
}
@@ -1,37 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Disco.Services.Plugins
{
public class UnknownPluginException : Exception
{
private string _pluginRequested;
public string PluginRequested
{
get
{
return _pluginRequested;
}
}
public UnknownPluginException(string PluginRequested)
{
this._pluginRequested = PluginRequested;
}
public UnknownPluginException(string PluginRequested, string Message) : base(Message)
{
this._pluginRequested = PluginRequested;
}
public override string Message
{
get
{
return string.Format("Unknown Plugin Id: [{0}]", _pluginRequested);
}
}
}
}