コード例 #1
0
 public override IEnumerable<Result> Execute(Release release)
 {
     var res = new List<Result>();
     var helper = new StageHelper();
     foreach (var obj in release.Objects)
     {
         foreach (var el in obj.ApplicationDefinition.Elements.Where(i => i.Type.ToLowerInvariant().Contains("html")))
         {
             foreach (var at in el.Attributes)
             {
                 if (at.Name.ToLowerInvariant() == "purl" && at.IsInUse)
                 {
                     var uses = helper.ElementUses(el, obj);
                     if (uses.Count() <= 0) continue;
                     res.Add(new Result()
                     {
                         Type = ResultType.Error,
                         Parent = obj.Name,
                         Page = "Application Modeller",
                         Scope = "Object",
                         RuleName = Name,
                         RuleDescription = GetRuleDescription(),
                         Message = string.Format(@"Parent Url is being used for element ""{0}"" the element is being used {1} times in these stages {2}", 
                         el.Name, uses.Count(), string.Join(",", uses.Select(i => i.Name)))
                     });
                 }
             }
         }
     }
     return res;
 }
コード例 #2
0
        public override IEnumerable <Result> Execute(Release release)
        {
            var helper = new StageHelper();
            var res    = new List <Result>();
            var units  = release.GetAnalysisUnits(i => i.Type == "Action" || i.Type == "Anchor");
            var stages = units.Select(i => i.Stage).ToList();
            var mark   = GetQueueStages(stages.Where(i => i.Type == "Action"), "Mark Exception").ToList();
            var tag    = GetQueueStages(stages.Where(i => i.Type == "Action"), "Tag Item").ToList();

            foreach (var ac in mark)
            {
                //no tag for the mark exception
                var tagFound = tag.Any(i => {
                    var next = helper.GetNextStage(i.OnSuccess, stages);
                    return
                    (!string.IsNullOrWhiteSpace(i.OnSuccess) &&
                     next != null && next.Id == ac.Id);
                });
                if (!tagFound)
                {
                    res.Add(FromStageAnalysis(units.First(i => i.Stage.Id == ac.Id),
                                              ResultType.Error, string.Format(@"Mark exception stage ""{0}"" requires that item has the exception labeled", ac.Name),
                                              ""
                                              ));
                }
            }
            return(res);
        }
コード例 #3
0
        public override IEnumerable <Result> Execute(Release release)
        {
            var res    = new List <Result>();
            var helper = new StageHelper();

            foreach (var obj in release.Objects)
            {
                foreach (var el in obj.ApplicationDefinition.Elements.Where(i => !string.IsNullOrWhiteSpace(i.Type) && i.Type.ToLowerInvariant().Contains("html")))
                {
                    var atts = el.Attributes.Where(i => i.IsInUse).ToList();
                    var max  = GetMaxCount();
                    if (atts.Count <= max)
                    {
                        continue;
                    }
                    var uses = helper.ElementUses(el, obj);
                    if (uses.Count() <= 0)
                    {
                        continue;
                    }
                    res.Add(new Result()
                    {
                        Type            = ResultType.Warning,
                        Parent          = obj.Name,
                        Page            = "Application Modeller",
                        Scope           = "Object",
                        RuleName        = Name,
                        RuleDescription = GetRuleDescription(),
                        Message         = string.Format("Too many attributes are used to identify the element {0}, a total of {1} are in used, and the max allowed is {2}. List attributes {3}. Element is used {4} times in stages {5}"
                                                        , el.Name, atts.Count, max, string.Join(", ", atts.Select(i => i.Name)), uses.Count(), string.Join(",", uses.Select(i => i.Name)))
                    });
                }
            }
            return(res);
        }
コード例 #4
0
        private IEnumerable <object> GetElements(Release release)
        {
            var res    = new List <object>();
            var helper = new StageHelper();

            foreach (var obj in release.Objects)
            {
                foreach (var el in obj.ApplicationDefinition.Elements)
                {
                    var stages = helper.ElementUses(el, obj);
                    foreach (var att in el.Attributes.Where(i => i.IsInUse))
                    {
                        res.Add(new
                        {
                            Object   = obj.Name,
                            Element  = el.Name,
                            Type     = el.Type,
                            Name     = att.Name,
                            DataType = att.DataType,
                            Value    = att.Value,
                            UseCount = stages.Count()
                        });
                    }
                }
            }
            return(res);
        }
コード例 #5
0
        public override IEnumerable<Result> Execute(Release release)
        {
            var helper = new StageHelper();
            var res = new List<Result>();
            var units = release.GetAnalysisUnits();
            var readsAndWrites = units.Where(i => i.Stage.Type == "Read" || i.Stage.Type == "Write").ToList();
            foreach (var u in readsAndWrites)
            {

                if (HasExclusion(u.Stage)) continue;
                var stages = helper.FilterStagesByPage(u, units);
                if (!helper.HasAnImediatePreviousWait(u.Stage, units.Where(i => i.PageId == u.PageId).Select(i => i.Stage)))
                    res.Add(FromStageAnalysis(u, ResultType.Error,
                        string.Format("{0} stage {1} is not preceeded by a proper wait stage", u.Stage.Type, u.Stage.Name), ""));
            }
            return res;
        }
コード例 #6
0
        public override IEnumerable <Result> Execute(Release release)
        {
            var helper         = new StageHelper();
            var res            = new List <Result>();
            var units          = release.GetAnalysisUnits();
            var navigateStages = FilterStagesToAnalize(release.GetAnalysisUnits());

            foreach (var u in navigateStages)
            {
                var stages = helper.FilterStagesByPage(u, units);
                if (!helper.HasAnImediatePreviousWait(u.Stage, units.Where(i => i.PageId == u.PageId).Select(i => i.Stage)))
                {
                    res.Add(FromStageAnalysis(u, ResultType.Error,
                                              string.Format("{0} stage {1} is not preceeded by a proper wait stage", u.Stage.Type, u.Stage.Name), ""));
                }
            }
            return(res);
        }
コード例 #7
0
        public void Load(IEnumerable <Stage> stages, string parent, string pageName, string type)
        {
            Parent = parent; PageName = pageName; Type = type;
            var helper      = new StageHelper();
            var blocks      = stages.Where(i => i.Type == "Block").ToList();
            var otherStages = stages.Where(i => i.Type != "Block").ToList();

            foreach (var block in blocks)
            {
                var inBlock = helper.GetStagesInBlock(block, otherStages);
                if (!inBlock.Any())
                {
                    continue;
                }
                Blocks.Add(new BlockGroupItem()
                {
                    Block = block, Stages = inBlock.ToList()
                });
            }
            StagesOutsideOfBlock = stages.Where(i => i.Type != "Block" && !Blocks.SelectMany(s => s.Stages).Contains(i)).ToList();
        }