From b2afea72c84124e0ae4a5b729163a9825c515f6e Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Sat, 17 Dec 2022 20:49:56 +0000 Subject: [PATCH] Make PluginBase a singleton. --- PluginBase.cs | 139 -------------------------------------------------- 1 file changed, 139 deletions(-) delete mode 100644 PluginBase.cs diff --git a/PluginBase.cs b/PluginBase.cs deleted file mode 100644 index 7d1e2519b..000000000 --- a/PluginBase.cs +++ /dev/null @@ -1,139 +0,0 @@ -// /*************************************************************************** -// Aaru Data Preservation Suite -// ---------------------------------------------------------------------------- -// -// Filename : PluginBase.cs -// Author(s) : Natalia Portillo -// -// Component : Core algorithms. -// -// --[ Description ] ---------------------------------------------------------- -// -// Class to hold all installed plugins. -// -// --[ License ] -------------------------------------------------------------- -// -// Permission is hereby granted, free of charge, to any person obtaining a -// copy of this software and associated documentation files (the -// "Software"), to deal in the Software without restriction, including -// without limitation the rights to use, copy, modify, merge, publish, -// distribute, sublicense, and/or sell copies of the Software, and to -// permit persons to whom the Software is furnished to do so, subject to -// the following conditions: -// -// The above copyright notice and this permission notice shall be included -// in all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -// -// ---------------------------------------------------------------------------- -// Copyright © 2011-2023 Natalia Portillo -// ****************************************************************************/ - -using System; -using System.Collections.Generic; -using System.Linq; -using Aaru.CommonTypes.Interfaces; - -namespace Aaru.CommonTypes; - -/// Contain all plugins (filesystem, partition and image) -public class PluginBase -{ - /// List of all archive formats - public readonly SortedDictionary Archives; - /// List of byte addressable image plugins - public readonly SortedDictionary ByteAddressableImages; - /// List of all filesystem plugins - public readonly SortedDictionary Filesystems; - /// List of filter plugins - public readonly SortedDictionary Filters; - /// List of floppy image plugins - public readonly SortedDictionary FloppyImages; - /// List of all media image plugins - public readonly SortedDictionary MediaImages; - /// List of all partition plugins - public readonly SortedDictionary Partitions; - /// List of read-only filesystem plugins - public readonly SortedDictionary ReadOnlyFilesystems; - /// List of writable floppy image plugins - public readonly SortedDictionary WritableFloppyImages; - /// List of writable media image plugins - public readonly SortedDictionary WritableImages; - - /// Initializes the plugins lists - public PluginBase() - { - Filesystems = new SortedDictionary(); - ReadOnlyFilesystems = new SortedDictionary(); - Partitions = new SortedDictionary(); - MediaImages = new SortedDictionary(); - WritableImages = new SortedDictionary(); - Filters = new SortedDictionary(); - FloppyImages = new SortedDictionary(); - WritableFloppyImages = new SortedDictionary(); - Archives = new SortedDictionary(); - ByteAddressableImages = new SortedDictionary(); - } - - /// Adds plugins to the central plugin register - /// Plugin register - public void AddPlugins(IPluginRegister pluginRegister) - { - foreach(Type type in pluginRegister.GetAllFilesystemPlugins() ?? Enumerable.Empty()) - if(Activator.CreateInstance(type) is IFilesystem plugin && - !Filesystems.ContainsKey(plugin.Name.ToLower())) - Filesystems.Add(plugin.Name.ToLower(), type); - - foreach(Type type in pluginRegister.GetAllFilterPlugins() ?? Enumerable.Empty()) - if(Activator.CreateInstance(type) is IFilter plugin && - !Filters.ContainsKey(plugin.Name.ToLower())) - Filters.Add(plugin.Name.ToLower(), type); - - foreach(Type type in pluginRegister.GetAllFloppyImagePlugins() ?? Enumerable.Empty()) - if(Activator.CreateInstance(type) is IFloppyImage plugin && - !FloppyImages.ContainsKey(plugin.Name.ToLower())) - FloppyImages.Add(plugin.Name.ToLower(), type); - - foreach(Type type in pluginRegister.GetAllMediaImagePlugins() ?? Enumerable.Empty()) - if(Activator.CreateInstance(type) is IMediaImage plugin && - !MediaImages.ContainsKey(plugin.Name.ToLower())) - MediaImages.Add(plugin.Name.ToLower(), type); - - foreach(Type type in pluginRegister.GetAllPartitionPlugins() ?? Enumerable.Empty()) - if(Activator.CreateInstance(type) is IPartition plugin && - !Partitions.ContainsKey(plugin.Name.ToLower())) - Partitions.Add(plugin.Name.ToLower(), type); - - foreach(Type type in pluginRegister.GetAllReadOnlyFilesystemPlugins() ?? Enumerable.Empty()) - if(Activator.CreateInstance(type) is IReadOnlyFilesystem plugin && - !ReadOnlyFilesystems.ContainsKey(plugin.Name.ToLower())) - ReadOnlyFilesystems.Add(plugin.Name.ToLower(), type); - - foreach(Type type in pluginRegister.GetAllWritableFloppyImagePlugins() ?? Enumerable.Empty()) - if(Activator.CreateInstance(type) is IWritableFloppyImage plugin && - !WritableFloppyImages.ContainsKey(plugin.Name.ToLower())) - WritableFloppyImages.Add(plugin.Name.ToLower(), type); - - foreach(Type type in pluginRegister.GetAllWritableImagePlugins() ?? Enumerable.Empty()) - if(Activator.CreateInstance(type) is IBaseWritableImage plugin && - !WritableImages.ContainsKey(plugin.Name.ToLower())) - WritableImages.Add(plugin.Name.ToLower(), type); - - foreach(Type type in pluginRegister.GetAllArchivePlugins() ?? Enumerable.Empty()) - if(Activator.CreateInstance(type) is IArchive plugin && - !Archives.ContainsKey(plugin.Name.ToLower())) - Archives.Add(plugin.Name.ToLower(), type); - - foreach(Type type in pluginRegister.GetAllByteAddressablePlugins() ?? Enumerable.Empty()) - if(Activator.CreateInstance(type) is IByteAddressableImage plugin && - !ByteAddressableImages.ContainsKey(plugin.Name.ToLower())) - ByteAddressableImages.Add(plugin.Name.ToLower(), type); - } -} \ No newline at end of file