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); }