private void btnAddAndGroup_Click(object sender, EventArgs e)
        {
            Logger.EnteringMethod();
            RulesGroup addedGroup = new RulesGroup();

            if (rdBtnUpdateLevel.Checked)
            {
                _currentGroupUpdateLevel.IsSelected = false;
                addedGroup.GroupType  = RulesGroup.GroupLogicalOperator.And;
                addedGroup.IsSelected = true;
                _currentGroupUpdateLevel.AddGroup(addedGroup);
                grpDspUpdateLevel.Initialize(_masterGroupUpdateLevel);
            }
            else
            {
                _currentGroupPackageLevel.IsSelected = false;
                addedGroup.GroupType  = RulesGroup.GroupLogicalOperator.And;
                addedGroup.IsSelected = true;
                _currentGroupPackageLevel.AddGroup(addedGroup);
                grpDspPackageLevel.Initialize(_masterGroupPackageLevel);
            }
        }
        private RulesGroup ParseXml(RulesGroup group, string xml, bool mergeGroup)
        {
            Logger.EnteringMethod(xml);
            bool reverseRule = false;
            bool thisGroup   = true;
            XmlNamespaceManager namespaceMng = new XmlNamespaceManager(new System.Xml.NameTable());

            namespaceMng.AddNamespace("lar", "http://schemas.microsoft.com/wsus/2005/04/CorporatePublishing/LogicalApplicabilityRules.xsd");
            namespaceMng.AddNamespace("bar", "http://schemas.microsoft.com/wsus/2005/04/CorporatePublishing/BaseApplicabilityRules.xsd");
            namespaceMng.AddNamespace("msiar", "http://schemas.microsoft.com/wsus/2005/04/CorporatePublishing/MsiApplicabilityRules.xsd");

            XmlParserContext context   = new XmlParserContext(null, namespaceMng, null, XmlSpace.Default);
            XmlTextReader    xmlReader = new XmlTextReader(xml, XmlNodeType.Element, context);

            xmlReader.WhitespaceHandling = WhitespaceHandling.None;
            xmlReader.Read();
            while (!xmlReader.EOF)
            {
                switch (xmlReader.Prefix)
                {
                case "lar":
                    switch (xmlReader.LocalName)
                    {
                    case "Not":
                        reverseRule = (xmlReader.NodeType != XmlNodeType.EndElement);
                        xmlReader.Read();
                        break;

                    case "And":
                        if (xmlReader.NodeType == XmlNodeType.Element)
                        {
                            if (thisGroup && mergeGroup)
                            {
                                group.GroupType = RulesGroup.GroupLogicalOperator.And;
                                thisGroup       = false;
                                xmlReader.Read();
                            }
                            else
                            {
                                RulesGroup tempGroup = new RulesGroup();
                                group.AddGroup(ParseXml(tempGroup, xmlReader.ReadOuterXml(), true));
                            }
                        }
                        else
                        if (xmlReader.NodeType == XmlNodeType.EndElement)
                        {
                            return(group);
                        }
                        break;

                    case "Or":
                        if (xmlReader.NodeType == XmlNodeType.Element)
                        {
                            if (thisGroup && mergeGroup)
                            {
                                group.GroupType = RulesGroup.GroupLogicalOperator.Or;
                                thisGroup       = false;
                                xmlReader.Read();
                            }
                            else
                            {
                                RulesGroup tempGroup = new RulesGroup();
                                group.AddGroup(ParseXml(tempGroup, xmlReader.ReadOuterXml(), true));
                            }
                        }
                        else
                        if (xmlReader.NodeType == XmlNodeType.EndElement)
                        {
                            return(group);
                        }
                        break;

                    default:
                        xmlReader.Read();
                        break;
                    }
                    break;

                case "bar":
                case "msiar":
                    foreach (GenericRule rule in _allSupportedRules)
                    {
                        if (xmlReader.LocalName == rule.XmlElementName)
                        {
                            GenericRule tempRule = GetSelectedForm(rule);
                            tempRule.ReverseRule = reverseRule;
                            tempRule.InitializeWithAttributes(GetAttributes(xmlReader));
                            group.AddRule(tempRule);
                            break;
                        }
                    }
                    xmlReader.Read();
                    break;

                default:
                    xmlReader.Read();
                    break;
                }
            }
            return(group);
        }