private static void HandleProvidersElement(XmlNode providers, CaptchaConfiguration config)
        {
            config.Providers = new ProviderCollection();

            foreach (XmlNode element in providers.ChildNodes)
            {
                var attributes = element.Attributes.Cast <XmlAttribute>().ToDictionary(attr => attr.Name);

                switch (element.Name)
                {
                case "add":
                {
                    var name = attributes["name"].Value;
                    var type = attributes["type"].Value;

                    var settings = new ProviderSettings(name, type);

                    foreach (var attr in attributes.Where(attr => attr.Key != "name" && attr.Key != type))
                    {
                        settings.Parameters.Add(attr.Key, attr.Value.Value);
                    }

                    var provider = InstantiateProvider(settings);

                    config.Providers.Add(provider);
                }

                break;

                case "remove":
                {
                    var name = attributes["name"].Value;

                    config.Providers.Remove(name);
                }

                break;

                case "clear":
                {
                    config.Providers.Clear();
                }

                break;
                }
            }
        }
        public static CaptchaConfiguration FromXml(XmlNode xml)
        {
            var config = new CaptchaConfiguration();

            var defaultProviderAttribute = xml.Attributes.Cast <XmlAttribute>().SingleOrDefault(a => a.Name == "defaultProvider");

            if (defaultProviderAttribute != null)
            {
                config.DefaultProvider = defaultProviderAttribute.Value;
            }

            foreach (XmlNode element in xml.ChildNodes)
            {
                if (element.Name == "providers")
                {
                    HandleProvidersElement(element, config);
                }
            }

            return(config);
        }
        public object Create(object parent, object configContext, XmlNode section)
        {
            var sectionAttributes = section.Attributes.Cast <XmlAttribute>().ToList();

            var defaultFunctionExecutor = sectionAttributes.SingleOrDefault(attr => attr.Name == "defaultFunctionExecutor");
            var rendererImplementation  = sectionAttributes.SingleOrDefault(attr => attr.Name == "rendererImplementation");

            var config = new FormBuilderConfiguration
            {
                DefaultFunctionExecutor = defaultFunctionExecutor != null ? defaultFunctionExecutor.Value : "FormBuilder.StandardFormExecutor",
                RendererImplementation  = rendererImplementation != null?Type.GetType(rendererImplementation.Value) : typeof(Bootstrap3FormRenderer)
            };

            foreach (XmlNode element in section.ChildNodes)
            {
                if (element.Name == "captcha")
                {
                    config.Captcha = CaptchaConfiguration.FromXml(element);

                    continue;
                }

                var elementAttributes = element.Attributes.Cast <XmlAttribute>();
                var sType             = elementAttributes.Single(attr => attr.Name == "type").Value;

                var type = Type.GetType(sType);
                if (type == null)
                {
                    continue;
                }

                var plugin = (IPluginConfiguration)Activator.CreateInstance(type);

                plugin.Initialize(element);

                config.Plugins.Add(element.Name, plugin);
            }

            return(config);
        }
 public FormBuilderConfiguration()
 {
     Captcha = new CaptchaConfiguration();
     Plugins = new Dictionary <string, IPluginConfiguration>();
 }