Exemplo n.º 1
0
        public void Load(XmlElement el, PropertyManager PM, bool _override)
        {
            XmlNodeList elemList = el.GetElementsByTagName("property");

            if (elemList.Count > 0 && log.IsDebugEnabled)
            {
                string cout = "\n    ";
                if (_override)
                {
                    cout += "Overriding";
                }
                else
                {
                    cout += "Declared";
                }
                cout += " properties \n\n";
                log.Debug(cout);
            }

            foreach (XmlNode xmlNode in elemList)
            {
                if (xmlNode.NodeType == XmlNodeType.Element)
                {
                    XmlElement   property_element = xmlNode as XmlElement;
                    PropertyNode node             = null;
                    double       value            = 0.0;
                    if (!string.IsNullOrEmpty(property_element.GetAttribute("value")))
                    {
                        value = double.Parse(property_element.GetAttribute("value"));
                    }

                    string interface_property_string = property_element.InnerText;
                    if (PM.HasNode(interface_property_string))
                    {
                        if (_override)
                        {
                            node = PM.GetNode(interface_property_string);

                            if (log.IsDebugEnabled)
                            {
                                if (interface_prop_initial_value.ContainsKey(node))
                                {
                                    log.Debug("  The following property will be overridden but it has not been\n" +
                                              "  defined in the current model '" + el.Name + "'");
                                }

                                log.Debug("      " + "Overriding value for property " + interface_property_string + "\n" +
                                          "       (old value: " + node.Get() + "  new value: " + value + ")");
                            }

                            node.Set(value);
                        }
                        else
                        {
                            log.Error("      Property " + interface_property_string
                                      + " is already defined.");
                            continue;
                        }
                    }
                    else
                    {
                        node = PM.GetNode(interface_property_string, true);
                        if (node != null)
                        {
                            node.Set(value);

                            if (log.IsDebugEnabled)
                            {
                                log.Debug("      " + interface_property_string + " (initial value: "
                                          + value + ")");
                            }
                            ;
                        }
                        else
                        {
                            log.Error("Could not create property " + interface_property_string);;
                            continue;
                        }
                    }
                    interface_prop_initial_value[node] = value;
                    if (property_element.GetAttribute("persistent") == "true")
                    {
                        node.SetAttribute(PropertyNode.Attribute.PRESERVE, true);
                    }
                }

                // End of interface property loading logic
            }
        }