private static void UpdateRulesByMappingTable(string groupName, string parentRuleName, IList <Rule> rules, Dictionary <string, List <Common.Types.Rule> > mappingTable, IEnumerable <Common.Types.RuleGroup> selectedRules = null) { if (rules == null) { return; } foreach (var r in rules) { if (r.Categories == null) { continue; } if (r.Categories.Length > 0 && mappingTable.ContainsKey(r.Categories.FirstOrDefault())) { var mappingValues = mappingTable.GetValueOrDefault(r.Categories.FirstOrDefault()); var hiddenNodes = mappingValues.Select(x => x.Name).Distinct(); r.MappingRules = hiddenNodes.ToArray(); // Make it be compatible to PTMGUI exported profile.xml var newSelectedHiddenNodes = mappingValues.Where(i => i.SelectStatus != RuleSelectStatus.UnSelected).Select(x => x.Name).Distinct(); if (newSelectedHiddenNodes.Count() > 0 && !r.Name.Contains('%') && selectedRules != null) { var selectedRule = selectedRules.Where(i => i.Name == groupName).FirstOrDefault(); if (selectedRule != null) { var originalRules = selectedRule.Rules; var rule = selectedRule.Rules.Where(i => i.Name.Contains(parentRuleName) && (i.Name.Contains('.') ? i.Name.Remove(0, i.Name.LastIndexOf('.') + 1) : i.Name) == r.Name).FirstOrDefault(); if (rule != null) { originalRules.Remove(rule); foreach (var mapRule in newSelectedHiddenNodes) { Common.Types.Rule newRule = new Common.Types.Rule() { Name = rule.Name, DisplayName = rule.DisplayName, Categories = rule.Categories, SelectStatus = rule.SelectStatus }; newRule.Name = rule.Name + '%' + mapRule; originalRules.Add(newRule); } } } } } if (r.Rules != null) { UpdateRulesByMappingTable(groupName, r.Name, r.Rules, mappingTable, selectedRules); } } }
private void AddItems(IList <Common.Types.Rule> displayRules, List <Kernel.Rule> rules) { foreach (var rule in rules) { Common.Types.Rule displayRule = new Common.Types.Rule() { DisplayName = rule.Name, Name = rule.Name, Categories = rule.CategoryList.ToArray(), SelectStatus = rule.SelectStatus == Kernel.RuleSelectStatus.Selected ? Common.Types.RuleSelectStatus.Selected : (rule.SelectStatus == Kernel.RuleSelectStatus.Partial ? Common.Types.RuleSelectStatus.Partial : Common.Types.RuleSelectStatus.UnSelected), }; if (rule.Count > 0) { AddItems(displayRule, rule); } displayRules.Add(displayRule); } }
private static void AddKernalRules(IList <Rule> rules, List <Common.Types.Rule> kernalRules) { foreach (var r in rules) { Common.Types.Rule dr = new Common.Types.Rule() { DisplayName = r.DisplayName, Name = r.Name, Categories = r.Categories, SelectStatus = r.IsSelected == null ? RuleSelectStatus.Partial : r.IsSelected == true ? RuleSelectStatus.Selected : RuleSelectStatus.UnSelected, }; if (r.Rules != null && r.Rules.Length > 0) { var drList = new List <Common.Types.Rule>(); AddKernalRules(r.Rules, drList); dr.AddRange(drList); } kernalRules.Add(dr); } }