Example #1
0
        /// <summary>
        /// Parses the configuration node using the nohros schema.
        /// </summary>
        /// <param name="element">
        /// A Xml element representing the configuration root node.
        /// </param>
        /// <remarks>
        /// The <paramref name="element"/> does not need to be the nohros
        /// configuration node, but a node with name "nohros" must exists on the
        /// node hierarchy.
        /// </remarks>
        T Parse(XmlElement element)
        {
            XmlElement root_node = GetRootNode(element);

            // the logger is used by some methods above and the level threshold of it
            // could be overloaded by a configuration key. So, we need to do the
            // first logger instantiation here and adjust the threshold level if
            // needed.
            builder.SetLogLevel(GetLogLevel(root_node));

            // parse any internal property
            if (use_dynamic_property_assignment_)
            {
                ParseProperties(element, this);
                ParseProperties(element, builder);
            }

            // parse the know configuration nodes.
            foreach (XmlNode node in root_node.ChildNodes)
            {
                if (node.NodeType == XmlNodeType.Element)
                {
                    string name = node.Name;
                    if (Strings.AreEquals(name, Strings.kRepositoriesNodeName))
                    {
                        builder.SetRepositories(RepositoriesNode.Parse((XmlElement)node,
                                                                       location_));
                    }
                    else if (Strings.AreEquals(name, Strings.kProvidersNodeName))
                    {
                        builder.SetProviders(ProvidersNode.Parse((XmlElement)node,
                                                                 location_));
                    }
                    else if (Strings.AreEquals(name, Strings.kXmlElementsNodeName))
                    {
                        XmlElementsNode xml_elements =
                            XmlElementsNode.Parse((XmlElement)node);

                        // Add the element that was used to configure this class to the
                        // collection of xml elements nodes.
                        xml_elements[Strings.kRootXmlElementName] = element;
                        builder.SetXmlElements(xml_elements);
                    }
                }
            }

            OnParseComplete(this);

            T configuration = CreateConfiguration(builder);

            OnLoadComplete(configuration);

            return(configuration);
        }