diff options
| author | Avi Levkovich <avi@twine-s.com> | 2020-02-17 17:00:29 +0200 |
|---|---|---|
| committer | Avi Levkovich <avi@twine-s.com> | 2020-02-17 17:00:29 +0200 |
| commit | cbc80e71fac7d2896ac496b0fbf22051c0cdcff7 (patch) | |
| tree | 9f898e565748f5581e900491ca36ce21c6462846 /Software/Visual_Studio/PPC/Tango.PPC.UI/Modules/DefaultStudioModuleLoader.cs | |
| parent | ef657b4a3ae76e99ab077d6b4fc19691c2a0da4a (diff) | |
| download | Tango-cbc80e71fac7d2896ac496b0fbf22051c0cdcff7.tar.gz Tango-cbc80e71fac7d2896ac496b0fbf22051c0cdcff7.zip | |
merge
Diffstat (limited to 'Software/Visual_Studio/PPC/Tango.PPC.UI/Modules/DefaultStudioModuleLoader.cs')
| -rw-r--r-- | Software/Visual_Studio/PPC/Tango.PPC.UI/Modules/DefaultStudioModuleLoader.cs | 152 |
1 files changed, 0 insertions, 152 deletions
diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/Modules/DefaultStudioModuleLoader.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/Modules/DefaultStudioModuleLoader.cs deleted file mode 100644 index 375b648d0..000000000 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/Modules/DefaultStudioModuleLoader.cs +++ /dev/null @@ -1,152 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; -using Tango.Core; -using Tango.BL.Entities; -using Tango.Logging; -using Tango.PPC.Common.Authentication; -using Tango.PPC.Common.Modules; -using Tango.PPC.Common; -using Tango.PPC.Jobs; -using System.Windows.Data; -using Tango.Core.DI; - -namespace Tango.PPC.UI.Modules -{ - /// <summary> - /// Represents the default PPC <see cref="IPPCModuleLoader"></see>. - /// </summary> - /// <seealso cref="Tango.Core.ExtendedObject" /> - /// <seealso cref="Tango.PPC.Common.Modules.IPPCModuleLoader" /> - public class DefaultPPCModuleLoader : ExtendedObject, IPPCModuleLoader - { - private static object _syncObject = new object(); - private IAuthenticationProvider _authenticationProvider; - private bool _loaded; - - /// <summary> - /// Occurs when the user has logged in and user modules are loaded. - /// </summary> - public event EventHandler ModulesLoaded; - - /// <summary> - /// Initializes a new instance of the <see cref="DefaultPPCModuleLoader"/> class. - /// </summary> - /// <param name="authenticationProvider">The authentication provider.</param> - public DefaultPPCModuleLoader(IAuthenticationProvider authenticationProvider) - { - _authenticationProvider = authenticationProvider; - AllModules = new ObservableCollection<IPPCModule>(); - UserModules = new ObservableCollection<IPPCModule>(); - - BindingOperations.EnableCollectionSynchronization(UserModules, _syncObject); - - _authenticationProvider.CurrentUserChanged += _authenticationProvider_CurrentUserChanged; - } - - /// <summary> - /// Handles the authentication provider user changed event. - /// </summary> - /// <param name="sender">The sender.</param> - /// <param name="e">The e.</param> - private void _authenticationProvider_CurrentUserChanged(object sender, User e) - { - LoadModules(); - } - - private ObservableCollection<IPPCModule> _allModules; - /// <summary> - /// Gets all loaded modules. - /// </summary> - public ObservableCollection<IPPCModule> AllModules - { - get { return _allModules; } - private set { _allModules = value; RaisePropertyChangedAuto(); } - } - - private ObservableCollection<IPPCModule> _userModules; - /// <summary> - /// Gets all the user permitted modules. - /// </summary> - public ObservableCollection<IPPCModule> UserModules - { - get { return _userModules; } - private set { _userModules = value; RaisePropertyChangedAuto(); } - } - - /// <summary> - /// Loads all available PPC modules. - /// </summary> - public void LoadModules() - { - if (!_loaded) - { - //Preloaded - LogManager.Log(String.Format("Loading module '{0}'...", nameof(JobsModule))); - AllModules.Add(new JobsModule()); - //Preloaded - - AllModules.Clear(); - string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); - - foreach (var file in Directory.GetFiles(assemblyFolder, "*.dll").Where(x => x.Contains("Tango.PPC"))) - { - try - { - Assembly moduleAssembly = null; - moduleAssembly = Assembly.LoadFrom(file); - - if (moduleAssembly != null) - { - foreach (var moduleType in moduleAssembly.GetLoadableTypes().Where(x => !x.IsInterface && typeof(IPPCModule).IsAssignableFrom(x) && !x.IsAbstract)) - { - if (!AllModules.ToList().Exists(x => x.GetType() == moduleType)) - { - try - { - LogManager.Log(String.Format("Loading module '{0}'...", moduleType.Name)); - var module = Activator.CreateInstance(moduleType) as IPPCModule; - AllModules.Add(module); - } - catch (Exception ex) - { - LogManager.Log(ex, "Could not load module " + moduleType.Name); - } - } - } - } - } - catch { } - } - - _loaded = true; - } - - AllModules = AllModules.OrderBy(x => x.GetType().GetCustomAttribute<PPCModuleAttribute>().Index).ToObservableCollection(); - - UserModules.Clear(); - - if (_authenticationProvider.CurrentUser != null) - { - UserModules = AllModules.Where(x => _authenticationProvider.CurrentUser.HasPermission(x.Permission)).ToObservableCollection(); - } - - ModulesLoaded?.Invoke(this, new EventArgs()); - } - - /// <summary> - /// Gets the PPC module of type T if loaded. - /// </summary> - /// <typeparam name="T"></typeparam> - /// <returns></returns> - public T GetPPCModule<T>() where T : IPPCModule - { - return UserModules.OfType<T>().FirstOrDefault(); - } - } -} |
