private void PrepareLayoutConfiguration()
        {
            object layoutConfiguration = graphCanvas.CreateDefaultLayoutConfiguration();
            if (Messageflow.LayoutConfiguration != null) {
                Configurator.LoadConfiguration(layoutConfiguration, Messageflow.LayoutConfiguration);
            } else {
                Messageflow.LayoutConfiguration = new SerializableXDocument(Configurator.SaveConfiguration(layoutConfiguration));
            }
            graphCanvas.ApplyLayoutConfiguration(layoutConfiguration);

            uiLayoutConfigEditor = Configurator.CreateEditor(layoutConfiguration.GetType());
            uiLayoutConfigEditor.LoadConfiguration(Messageflow.LayoutConfiguration);
            uiLayoutConfigEditor.ConfigurationChanged += delegate {
                XDocument xNewConfiguration = uiLayoutConfigEditor.SaveConfiguration();
                bool isValid = true;
                try {
                    Configurator.LoadConfiguration(layoutConfiguration, xNewConfiguration);
                } catch {
                    isValid = false;
                }
                if (isValid) {
                    Messageflow.LayoutConfiguration = new SerializableXDocument(xNewConfiguration);
                    graphCanvas.ApplyLayoutConfiguration(layoutConfiguration);
                }
            };
            uiLayoutConfigurationContainer.Child = uiLayoutConfigEditor;
        }
        void IConfigurationControl.Initialize(ConfigurationManager configManager, ConfigurationTreeItem configTreeItem)
        {
            ConfigManager = configManager;
            ConfigTreeItem = configTreeItem;

            Config config = new Config {
                ConcurrentProcessingThreads = ConfigManager.Configuration.GetConcurrentThreadsCountForProcessor(ProcessorName)
            };
            editor = Configurator.CreateEditor(typeof(Config));
            XDocument xConfig = Configurator.SaveConfiguration(config);
            editor.LoadConfiguration(xConfig);
            uiContent.Content = editor;
		}
        private void SetActiveAdapter(FrameworkElement uiAdapter)
        {
            if (uiAdapter == null) {
                activeAdapter = null;
                uiAdapterConfigurationRegion.Visibility = Visibility.Collapsed;
                return;
            }

            activeAdapter = (AdapterConfiguration)uiAdapter.Tag;
            uiAdapterConfigurationRegion.Visibility = Visibility.Visible;
            uiAdapterConfigurationHeader.Text = activeAdapter.AdapterName;

            AdapterType activeAdapterType = ConfigManager.Configuration.GetAdapterType(activeAdapter.AdapterTypeName);
            activeConfigurationEditor = Configurator.CreateEditor(activeAdapterType.ConfigurationMetadata);
            activeConfigurationEditor.LoadConfiguration(activeAdapter.Configuration.XDocument);
            activeConfigurationEditor.ConfigurationChanged += delegate {
                activeAdapter.Configuration = new SerializableXDocument(activeConfigurationEditor.SaveConfiguration());
                ConfigManager.Configuration.SaveAdapterConfiguration(activeAdapter);
            };
            uiAdapterConfigurationContainer.Child = activeConfigurationEditor;
        }
        private void SetActiveAction(FrameworkElement uiAction)
        {
            if (uiAction == null) {
                activeAction = null;
                uiActionConfigurationRegion.Visibility = Visibility.Collapsed;
                return;
            }

            activeAction = (ActionConfiguration)uiAction.Tag;
            uiActionConfigurationRegion.Visibility = Visibility.Visible;

            ActionType activeActionType = nodeSelectionManager.AppConfig.GetActionType(activeAction.ActionTypeName);
            activeConfigurationEditor = Configurator.CreateEditor(activeActionType.ConfigurationMetadata);
            activeConfigurationEditor.LoadConfiguration(activeAction.Configuration.XDocument);
            activeConfigurationEditor.ConfigurationChanged += delegate {
                activeAction.Configuration = new SerializableXDocument(activeConfigurationEditor.SaveConfiguration());
            };
            uiActionConfigurationContainer.Child = activeConfigurationEditor;
        }