using System; using System.Collections.Generic; using System.Text; using ScrewTurn.Wiki.PluginFramework; namespace ScrewTurn.Wiki { /// /// Contains instances of the Providers Collectors. /// public static class Collectors { // The following static instances are "almost" thread-safe because they are set at startup and never changed // The ProviderCollector generic class is fully thread-safe /// /// Contains the file names of the DLLs containing each provider (provider->file). /// public static Dictionary FileNames; /// /// The settings storage provider. /// public static ISettingsStorageProviderV30 SettingsProvider; /// /// The Users Provider Collector instance. /// public static ProviderCollector UsersProviderCollector; /// /// The Pages Provider Collector instance. /// public static ProviderCollector PagesProviderCollector; /// /// The Files Provider Collector instance. /// public static ProviderCollector FilesProviderCollector; /// /// The Formatter Provider Collector instance. /// public static ProviderCollector FormatterProviderCollector; /// /// The Cache Provider Collector instance. /// public static ProviderCollector CacheProviderCollector; /// /// The Disabled Users Provider Collector instance. /// public static ProviderCollector DisabledUsersProviderCollector; /// /// The Disabled Files Provider Collector instance. /// public static ProviderCollector DisabledFilesProviderCollector; /// /// The Disabled Pages Provider Collector instance. /// public static ProviderCollector DisabledPagesProviderCollector; /// /// The Disabled Formatter Provider Collector instance. /// public static ProviderCollector DisabledFormatterProviderCollector; /// /// The Disabled Cache Provider Collector instance. /// public static ProviderCollector DisabledCacheProviderCollector; /// /// Finds a provider. /// /// The provider type name. /// A value indicating whether the provider is enabled. /// A value indicating whether the provider can be disabled. /// The provider, or null. public static IProviderV30 FindProvider(string typeName, out bool enabled, out bool canDisable) { enabled = true; canDisable = true; IProviderV30 prov = null; prov = PagesProviderCollector.GetProvider(typeName); canDisable = typeName != Settings.DefaultPagesProvider; if(prov == null) { prov = DisabledPagesProviderCollector.GetProvider(typeName); if(prov != null) enabled = false; } if(prov != null) return prov; prov = UsersProviderCollector.GetProvider(typeName); canDisable = typeName != Settings.DefaultUsersProvider; if(prov == null) { prov = DisabledUsersProviderCollector.GetProvider(typeName); if(prov != null) enabled = false; } if(prov != null) return prov; prov = FilesProviderCollector.GetProvider(typeName); canDisable = typeName != Settings.DefaultFilesProvider; if(prov == null) { prov = DisabledFilesProviderCollector.GetProvider(typeName); if(prov != null) enabled = false; } if(prov != null) return prov; prov = CacheProviderCollector.GetProvider(typeName); canDisable = typeName != Settings.DefaultCacheProvider; if(prov == null) { prov = DisabledCacheProviderCollector.GetProvider(typeName); if(prov != null) enabled = false; } if(prov != null) return prov; prov = FormatterProviderCollector.GetProvider(typeName); if(prov == null) { prov = DisabledFormatterProviderCollector.GetProvider(typeName); if(prov != null) enabled = false; } if(prov != null) return prov; return null; } /// /// Tries to unload a provider. /// /// The provider. public static void TryUnload(string typeName) { bool enabled, canDisable; IProviderV30 prov = FindProvider(typeName, out enabled, out canDisable); PagesProviderCollector.RemoveProvider(prov as IPagesStorageProviderV30); DisabledPagesProviderCollector.RemoveProvider(prov as IPagesStorageProviderV30); UsersProviderCollector.RemoveProvider(prov as IUsersStorageProviderV30); DisabledUsersProviderCollector.RemoveProvider(prov as IUsersStorageProviderV30); FilesProviderCollector.RemoveProvider(prov as IFilesStorageProviderV30); DisabledFilesProviderCollector.RemoveProvider(prov as IFilesStorageProviderV30); CacheProviderCollector.RemoveProvider(prov as ICacheProviderV30); DisabledCacheProviderCollector.RemoveProvider(prov as ICacheProviderV30); FormatterProviderCollector.RemoveProvider(prov as IFormatterProviderV30); DisabledFormatterProviderCollector.RemoveProvider(prov as IFormatterProviderV30); } /// /// Tries to disable a provider. /// /// The provider. public static void TryDisable(string typeName) { IProviderV30 prov = null; prov = PagesProviderCollector.GetProvider(typeName); if(prov != null) { DisabledPagesProviderCollector.AddProvider((IPagesStorageProviderV30)prov); PagesProviderCollector.RemoveProvider((IPagesStorageProviderV30)prov); return; } prov = UsersProviderCollector.GetProvider(typeName); if(prov != null) { DisabledUsersProviderCollector.AddProvider((IUsersStorageProviderV30)prov); UsersProviderCollector.RemoveProvider((IUsersStorageProviderV30)prov); return; } prov = FilesProviderCollector.GetProvider(typeName); if(prov != null) { DisabledFilesProviderCollector.AddProvider((IFilesStorageProviderV30)prov); FilesProviderCollector.RemoveProvider((IFilesStorageProviderV30)prov); return; } prov = CacheProviderCollector.GetProvider(typeName); if(prov != null) { DisabledCacheProviderCollector.AddProvider((ICacheProviderV30)prov); CacheProviderCollector.RemoveProvider((ICacheProviderV30)prov); return; } prov = FormatterProviderCollector.GetProvider(typeName); if(prov != null) { DisabledFormatterProviderCollector.AddProvider((IFormatterProviderV30)prov); FormatterProviderCollector.RemoveProvider((IFormatterProviderV30)prov); return; } } /// /// Tries to enable a provider. /// /// The provider. public static void TryEnable(string typeName) { IProviderV30 prov = null; prov = DisabledPagesProviderCollector.GetProvider(typeName); if(prov != null) { PagesProviderCollector.AddProvider((IPagesStorageProviderV30)prov); DisabledPagesProviderCollector.RemoveProvider((IPagesStorageProviderV30)prov); return; } prov = DisabledUsersProviderCollector.GetProvider(typeName); if(prov != null) { UsersProviderCollector.AddProvider((IUsersStorageProviderV30)prov); DisabledUsersProviderCollector.RemoveProvider((IUsersStorageProviderV30)prov); return; } prov = DisabledFilesProviderCollector.GetProvider(typeName); if(prov != null) { FilesProviderCollector.AddProvider((IFilesStorageProviderV30)prov); DisabledFilesProviderCollector.RemoveProvider((IFilesStorageProviderV30)prov); return; } prov = DisabledCacheProviderCollector.GetProvider(typeName); if(prov != null) { CacheProviderCollector.AddProvider((ICacheProviderV30)prov); DisabledCacheProviderCollector.RemoveProvider((ICacheProviderV30)prov); return; } prov = DisabledFormatterProviderCollector.GetProvider(typeName); if(prov != null) { FormatterProviderCollector.AddProvider((IFormatterProviderV30)prov); DisabledFormatterProviderCollector.RemoveProvider((IFormatterProviderV30)prov); return; } } /// /// Gets the names of all known providers, both enabled and disabled. /// /// The names of the known providers. public static string[] GetAllProviders() { List result = new List(20); foreach(IProviderV30 prov in PagesProviderCollector.AllProviders) result.Add(prov.GetType().FullName); foreach(IProviderV30 prov in DisabledPagesProviderCollector.AllProviders) result.Add(prov.GetType().FullName); foreach(IProviderV30 prov in UsersProviderCollector.AllProviders) result.Add(prov.GetType().FullName); foreach(IProviderV30 prov in DisabledUsersProviderCollector.AllProviders) result.Add(prov.GetType().FullName); foreach(IProviderV30 prov in FilesProviderCollector.AllProviders) result.Add(prov.GetType().FullName); foreach(IProviderV30 prov in DisabledFilesProviderCollector.AllProviders) result.Add(prov.GetType().FullName); foreach(IProviderV30 prov in CacheProviderCollector.AllProviders) result.Add(prov.GetType().FullName); foreach(IProviderV30 prov in DisabledCacheProviderCollector.AllProviders) result.Add(prov.GetType().FullName); foreach(IProviderV30 prov in FormatterProviderCollector.AllProviders) result.Add(prov.GetType().FullName); foreach(IProviderV30 prov in DisabledFormatterProviderCollector.AllProviders) result.Add(prov.GetType().FullName); return result.ToArray(); } } }