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();
}
}
}