예제 #1
0
        static IEnumerable <IProviderNode> Replicate(ReplicasNode replicas,
                                                     ProvidersNodeGroup group)
        {
            List <ProviderNode> clones = new List <ProviderNode>();

            foreach (ReplicaNode replica in replicas)
            {
                clones.AddRange(Replicate(replica, group));
            }
            return(clones.ToArray());
        }
예제 #2
0
 /// <summary>
 /// Parses the specified <see cref="XmlElement"/> element into a
 /// <see cref="ReplicasNode"/> object.
 /// </summary>
 /// <param name="element">
 /// A Xml element that contains the providers configuration data.
 /// </param>
 /// <returns>
 /// A <see cref="ReplicasNode"/> containing the configured providers.
 /// </returns>
 /// <exception cref="ArgumentNullException">
 /// <paramref name="element"/> is a <c>null</c> reference.
 /// </exception>
 /// <exception cref="ConfigurationException">
 /// The <paramref name="element"/> contains invalid configuration data.
 /// </exception>
 public static ReplicasNode Parse(XmlElement element) {
   string group = GetAttributeValue(element, Strings.kGroupAttribute);
   ReplicasNode replicas = new ReplicasNode(group);
   foreach (XmlNode node in element.ChildNodes) {
     if (node.NodeType == XmlNodeType.Element &&
       Strings.AreEquals(node.Name, Strings.kReplicaNodeName)) {
       ReplicaNode replica = ReplicaNode.Parse((XmlElement) node);
       replicas.AddChildNode(replica);
     }
   }
   return replicas;
 }
예제 #3
0
        /// <summary>
        /// Parses the specified <see cref="XmlElement"/> element into a
        /// <see cref="ReplicasNode"/> object.
        /// </summary>
        /// <param name="element">
        /// A Xml element that contains the providers configuration data.
        /// </param>
        /// <returns>
        /// A <see cref="ReplicasNode"/> containing the configured providers.
        /// </returns>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="element"/> is a <c>null</c> reference.
        /// </exception>
        /// <exception cref="ConfigurationException">
        /// The <paramref name="element"/> contains invalid configuration data.
        /// </exception>
        public static ReplicasNode Parse(XmlElement element)
        {
            string       group    = GetAttributeValue(element, Strings.kGroupAttribute);
            ReplicasNode replicas = new ReplicasNode(group);

            foreach (XmlNode node in element.ChildNodes)
            {
                if (node.NodeType == XmlNodeType.Element &&
                    Strings.AreEquals(node.Name, Strings.kReplicaNodeName))
                {
                    ReplicaNode replica = ReplicaNode.Parse((XmlElement)node);
                    replicas.AddChildNode(replica);
                }
            }
            return(replicas);
        }
예제 #4
0
 static IEnumerable<IProviderNode> Replicate(ReplicasNode replicas,
   ProvidersNodeGroup group) {
   List<ProviderNode> clones = new List<ProviderNode>();
   foreach (ReplicaNode replica in replicas) {
     clones.AddRange(Replicate(replica, group));
   }
   return clones.ToArray();
 }
예제 #5
0
        /// <summary>
        /// Parses the specified <see cref="XmlElement"/> element into a
        /// <see cref="ProvidersNode"/> object.
        /// </summary>
        /// <param name="element">
        /// A Xml element that contains the providers configuration data.
        /// </param>
        /// <param name="base_directory">
        /// The base directory to use when resolving the providers's location.
        /// </param>
        /// <returns>
        /// A <see cref="ProvidersNode"/> containing the configured providers.
        /// </returns>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="element"/> is a <c>null</c> reference.
        /// </exception>
        /// <exception cref="ConfigurationException">
        /// The <paramref name="element"/> contains invalid configuration data.
        /// </exception>
        public static ProvidersNode Parse(XmlElement element, string base_directory)
        {
            CheckPreconditions(element, base_directory);
            IList <UnresolvedOptions> unresolved_options_references =
                new List <UnresolvedOptions>();
            List <ReplicasNode> replicas = new List <ReplicasNode>();
            Dictionary <string, IProviderOptions> reference_table =
                new Dictionary <string, IProviderOptions>();
            ProvidersNode providers = new ProvidersNode();

            foreach (XmlNode node in element.ChildNodes)
            {
                if (node.NodeType == XmlNodeType.Element)
                {
                    if (Strings.AreEquals(node.Name, Strings.kProviderNodeName))
                    {
                        IList <string> references;
                        IProviderNode  provider =
                            ProviderNode
                            .Parse((XmlElement)node, base_directory, out references);

                        IProvidersNodeGroup providers_node_group;
                        if (!providers.GetProvidersNodeGroup(provider.Group,
                                                             out providers_node_group))
                        {
                            providers_node_group = new ProvidersNodeGroup(provider.Group);
                            providers.Add(providers_node_group);
                        }
                        providers_node_group.Add(provider);

                        // Associate each alias with the provider object.
                        foreach (string alias in provider.Aliases)
                        {
                            providers_node_group.Add(alias, provider);
                        }

                        // Add the provider to the unresolved providers list if it has
                        // references to be resolved.
                        if (references.Count > 0)
                        {
                            unresolved_options_references
                            .Add(new UnresolvedOptions(provider.Options, references));
                        }
                    }
                    else if (Strings.AreEquals(node.Name, Strings.kOptionsNodeName))
                    {
                        ParseReferenceTable((XmlElement)node,
                                            unresolved_options_references, reference_table);
                    }
                    else if (Strings.AreEquals(node.Name, Strings.kReplicasNodeName))
                    {
                        replicas.Add(ReplicasNode.Parse((XmlElement)node));
                    }
                }

                if (unresolved_options_references.Count > 0)
                {
                    if (reference_table.Count == 0)
                    {
                        throw new ConfigurationException(
                                  Resources.Resources.Configuration_providers_missing_reference);
                    }
                    ResolveOptionsReferences(unresolved_options_references,
                                             reference_table);
                }

                if (replicas.Count > 0)
                {
                    CreateReplicas(replicas, providers);
                }
            }
            return(providers);
        }