public abstract class DesignManagerBase : IConfigurationDesignManager
{
public DesignManagerBase()
{
}
#region IConfigurationDesignManager Implementation
public void Register(IServiceProvider serviceProvider)
{
RegisterCommands(serviceProvider);
}
public void Save(IServiceProvider serviceProvider)
{
ConfigurationContext configurationContext = ServiceHelper.GetCurrentConfigurationContext(serviceProvider);
if (configurationContext.IsValidSection(GetSectionName()))
{
ConfigurationNodeBase node = null;
try
{
IUIHierarchy hierarchy = ServiceHelper.GetCurrentHierarchy(serviceProvider);
node = hierarchy.FindNodeByType(GetConfigurationNodeType()) as ConfigurationNodeBase;
if (node == null)
{
return;
}
object settings = node.GetSettings();
configurationContext.WriteConfiguration(GetSectionName(), settings);
}
catch (ConfigurationException e)
{
ServiceHelper.LogError(serviceProvider, node, e);
}
catch (InvalidOperationException e)
{
ServiceHelper.LogError(serviceProvider, node, e);
}
}
}
public void Open(IServiceProvider serviceProvider)
{
ConfigurationContext configurationContext = ServiceHelper.GetCurrentConfigurationContext(serviceProvider);
if (configurationContext.IsValidSection(GetSectionName()))
{
ConfigurationNode node = null;
try
{
object settings = configurationContext.GetConfiguration(GetSectionName());
node = CreateConfigurationNode(settings);
ConfigurationNode rootConfNode = ServiceHelper.GetCurrentRootNode(serviceProvider);
rootConfNode.Nodes.Add(node);
}
catch (ConfigurationException e)
{
ServiceHelper.LogError(serviceProvider, node, e);
}
}
}
public void BuildContext(IServiceProvider serviceProvider, ConfigurationDictionary configurationDictionary)
{
IUIHierarchy hierarchy = ServiceHelper.GetCurrentHierarchy(serviceProvider);
ConfigurationNodeBase node = hierarchy.FindNodeByType(GetConfigurationNodeType()) as ConfigurationNodeBase;
if (node != null)
{
object settings = node.GetSettings();
configurationDictionary[GetSectionName()] = settings;
}
}
#endregion
protected virtual void RegisterCommands(IServiceProvider serviceProvider)
{
IUIHierarchyService hierarchyService = serviceProvider.GetService(typeof (IUIHierarchyService)) as IUIHierarchyService;
IUIHierarchy currentHierarchy = hierarchyService.SelectedHierarchy;
bool containsNode = currentHierarchy.ContainsNodeType(GetConfigurationNodeType());
IMenuContainerService menuService = serviceProvider.GetService(typeof (IMenuContainerService)) as IMenuContainerService;
ConfigurationMenuItem item = new ConfigurationMenuItem(
GetMenuItemText(),
new AddConfigurationSectionCommand(serviceProvider, GetConfigurationNodeType(), GetSectionName()),
ServiceHelper.GetCurrentRootNode(serviceProvider),
Shortcut.None,
GetStatusBarText(),
InsertionPoint.New);
item.Enabled = !containsNode;
menuService.MenuItems.Add(item);
}
protected abstract string GetSectionName();
protected abstract string GetMenuItemText();
protected abstract string GetStatusBarText();
protected abstract ConfigurationNodeBase CreateConfigurationNode(object settings);
protected abstract Type GetConfigurationNodeType();
}
public class FormsDesignManager : DesignManagerBase
{
private static string MENUITEM_TEXT = "Formulieren Configuration";
private static string STATUSBAR_TEXT = "Formulieren Configuration";
public FormsDesignManager() : base()
{
}
#region DesignManagerBase Implementation
protected override string GetSectionName()
{
return FormsSettings.SectionName;
}
protected override ConfigurationNodeBase CreateConfigurationNode(object settings)
{
return new FormsSettingsNode((FormsSettings) settings);
}
protected override Type GetConfigurationNodeType()
{
return typeof (FormsSettingsNode);
}
protected <