Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
            }
        }