Ejemplo n.º 1
0
        private void AnalyzerItemsGrid_RowDoubleClick(object sender, EventArgs e)
        {
            //show the item edit page
            if (AnalyzerItemsGrid.CurrentItem is AnalyzeAction)
            {
                AnalyzeAction currentAnalyzeAction = (AnalyzeAction)AnalyzerItemsGrid.CurrentItem;
                Act           actionIssue          = currentAnalyzeAction.mAction;
                actionIssue.SolutionFolder = WorkSpace.Instance.Solution.Folder.ToUpper();
                ActionEditPage actedit = new ActionEditPage(actionIssue, General.eRIPageViewMode.ChildWithSave, currentAnalyzeAction.mBusinessFlow, currentAnalyzeAction.mActivity);
                //setting the BusinessFlow on the Action in Order to save
                //actedit.mActParentBusinessFlow = ((AnalyzeAction)AnalyzerItemsGrid.CurrentItem).mBusinessFlow;
                //actedit.ap = null;
                actedit.ShowAsWindow(eWindowShowStyle.Dialog);
            }

            if (AnalyzerItemsGrid.CurrentItem is AnalyzeActivity)
            {
                AnalyzeActivity currentAnalyzeActivity = (AnalyzeActivity)AnalyzerItemsGrid.CurrentItem;
                Activity        ActivityIssue          = currentAnalyzeActivity.mActivity;
                //ActivityIssue.SolutionFolder =  WorkSpace.Instance.Solution.Folder.ToUpper();
                GingerWPF.BusinessFlowsLib.ActivityPage ActivityEdit = new GingerWPF.BusinessFlowsLib.ActivityPage(ActivityIssue, new Context()
                {
                    BusinessFlow = currentAnalyzeActivity.mBusinessFlow
                }, General.eRIPageViewMode.ChildWithSave);
                //setting the BusinessFlow on the Activity in Order to save
                //ActivityEdit.mBusinessFlow = ((AnalyzeActivity)AnalyzerItemsGrid.CurrentItem).mBusinessFlow;
                //ActivityEdit.ap = null;
                ActivityEdit.ShowAsWindow(eWindowShowStyle.Dialog);
            }
        }
Ejemplo n.º 2
0
        private void AnalyzerItemsGrid_RowDoubleClick(object sender, EventArgs e)
        {
            //show the item edit page
            if (AnalyzerItemsGrid.CurrentItem is AnalyzeAction)
            {
                AnalyzeAction currentAnalyzeAction = (AnalyzeAction)AnalyzerItemsGrid.CurrentItem;
                Act           actionIssue          = currentAnalyzeAction.mAction;
                actionIssue.SolutionFolder = App.UserProfile.Solution.Folder.ToUpper();
                ActionEditPage actedit = new ActionEditPage(actionIssue, General.RepositoryItemPageViewMode.Child, currentAnalyzeAction.mBusinessFlow, currentAnalyzeAction.mActivity);
                //setting the BusinessFlow on the Action in Order to save
                //actedit.mActParentBusinessFlow = ((AnalyzeAction)AnalyzerItemsGrid.CurrentItem).mBusinessFlow;
                //actedit.ap = null;
                actedit.ShowAsWindow(eWindowShowStyle.Dialog);
            }

            if (AnalyzerItemsGrid.CurrentItem is AnalyzeActivity)
            {
                AnalyzeActivity currentAnalyzeActivity = (AnalyzeActivity)AnalyzerItemsGrid.CurrentItem;
                Activity        ActivityIssue          = currentAnalyzeActivity.mActivity;
                //ActivityIssue.SolutionFolder = App.UserProfile.Solution.Folder.ToUpper();
                ActivityEditPage ActivityEdit = new ActivityEditPage(ActivityIssue, General.RepositoryItemPageViewMode.Child, currentAnalyzeActivity.mBusinessFlow);
                //setting the BusinessFlow on the Activity in Order to save
                //ActivityEdit.mBusinessFlow = ((AnalyzeActivity)AnalyzerItemsGrid.CurrentItem).mBusinessFlow;
                //ActivityEdit.ap = null;
                ActivityEdit.ShowAsWindow(eWindowShowStyle.Dialog);
            }
        }
Ejemplo n.º 3
0
        private List <string> RunBusinessFlowAnalyzer(BusinessFlow businessFlow, bool markCompletion = true)
        {
            List <string> usedVariablesInBF       = new List <string>();
            List <string> usedVariablesInActivity = new List <string>();

            DSList = WorkSpace.Instance.SolutionRepository.GetAllRepositoryItems <DataSourceBase>();
            SetStatus("Analyzing " + GingerDicser.GetTermResValue(eTermResKey.BusinessFlow, suffixString: ":  ") + businessFlow.Name);
            List <AnalyzerItemBase> issues = AnalyzeBusinessFlow.Analyze(mSolution, businessFlow);

            AddIssues(issues);
            foreach (Activity activity in businessFlow.Activities)
            {
                issues = AnalyzeActivity.Analyze(businessFlow, activity);
                AddIssues(issues);
                foreach (Act action in activity.Acts)
                {
                    List <AnalyzerItemBase> actionissues = AnalyzeAction.Analyze(businessFlow, activity, action, DSList);
                    AddIssues(actionissues);
                    List <string> tempList = AnalyzeAction.GetUsedVariableFromAction(action);
                    usedVariablesInActivity.AddRange(tempList);
                }
                ReportUnusedVariables(activity, usedVariablesInActivity);
                usedVariablesInBF.AddRange(usedVariablesInActivity);
                usedVariablesInActivity.Clear();
            }
            ReportUnusedVariables(businessFlow, usedVariablesInBF);

            if (markCompletion)
            {
                SetAnalayzeProceesAsCompleted();
            }

            return(usedVariablesInBF);
        }
Ejemplo n.º 4
0
        public static List <AnalyzerItemBase> Analyze(BusinessFlow BusinessFlow, Activity Activity)
        {
            // Put all tests on Activity here
            List <AnalyzerItemBase> IssuesList = new List <AnalyzerItemBase>();

            // Check Activity have Target App
            if (string.IsNullOrEmpty(Activity.TargetApplication))
            {
                AnalyzeActivity AA = CreateNewIssue(BusinessFlow, Activity);
                AA.Description  = GingerDicser.GetTermResValue(eTermResKey.Activity) + " is missing target Application";
                AA.Details      = GingerDicser.GetTermResValue(eTermResKey.BusinessFlow) + " doesn't have Target Application(s) defined";
                AA.HowToFix     = "Open the " + GingerDicser.GetTermResValue(eTermResKey.BusinessFlow, suffixString: "s") + " in solution tab and add target apps";
                AA.CanAutoFix   = AnalyzerItemBase.eCanFix.Yes; //  take it from solution
                AA.FixItHandler = FixTargetApplicationHandler;
                AA.IssueType    = eType.Error;
                AA.Impact       = "Might be executed on wrong application or not executed at all and will fail at run time";
                AA.Severity     = eSeverity.High;
                AA.Selected     = true;

                IssuesList.Add(AA);
            }

            // Check Activity have actions
            if (Activity.Acts.Count() == 0)
            {
                AnalyzeActivity AA = CreateNewIssue(BusinessFlow, Activity);
                AA.Description = GingerDicser.GetTermResValue(eTermResKey.Activity) + " is missing Actions";
                AA.Details     = GingerDicser.GetTermResValue(eTermResKey.Activity) + " doesn't have Actions";
                AA.HowToFix    = "Open the " + GingerDicser.GetTermResValue(eTermResKey.BusinessFlow) + " " + GingerDicser.GetTermResValue(eTermResKey.Activity) + " and add actions or remove this " + GingerDicser.GetTermResValue(eTermResKey.Activity);
                AA.CanAutoFix  = AnalyzerItemBase.eCanFix.No;   // we can autofix by delete, but don't want to
                AA.IssueType   = eType.Warning;
                AA.Impact      = "Will be marked as pass and can give wrong impression while nothing is executed";
                AA.Severity    = eSeverity.Medium;
                IssuesList.Add(AA);
            }

            // Check Activity target app exist in the BF target app
            //Check only when there is  target app, since the user will get no target err before
            if (!string.IsNullOrEmpty(Activity.TargetApplication))
            {
                string AppName = (from x in BusinessFlow.TargetApplications where x.Name == Activity.TargetApplication select x.Name).FirstOrDefault();
                if (string.IsNullOrEmpty(AppName))
                {
                    string BFApps = string.Join(";", BusinessFlow.TargetApplications.Select(p => p.Name).ToList());

                    AnalyzeActivity AA = CreateNewIssue(BusinessFlow, Activity);
                    AA.Description = GingerDicser.GetTermResValue(eTermResKey.Activity) + " target application not found in " + GingerDicser.GetTermResValue(eTermResKey.BusinessFlow);
                    AA.Details     = GingerDicser.GetTermResValue(eTermResKey.Activity) + " target application = '" + Activity.TargetApplication + "' while " + GingerDicser.GetTermResValue(eTermResKey.BusinessFlow) + " target app(s) is: '" + BFApps + "'";
                    AA.HowToFix    = "Open the " + GingerDicser.GetTermResValue(eTermResKey.BusinessFlow) + " " + GingerDicser.GetTermResValue(eTermResKey.Activity) + " and add set correct target application";
                    AA.CanAutoFix  = AnalyzerItemBase.eCanFix.No;   // yes if we have one target app, or just set the first
                    AA.IssueType   = eType.Error;
                    AA.Impact      = GingerDicser.GetTermResValue(eTermResKey.Activity) + " will not be executed and will fail";
                    AA.Severity    = eSeverity.Critical;

                    IssuesList.Add(AA);
                }
            }
            return(IssuesList);
        }
Ejemplo n.º 5
0
        private static void FixTargetApplicationHandler(object sender, EventArgs e)
        {
            //Do recheck
            AnalyzeActivity AA = (AnalyzeActivity)sender;

            if (string.IsNullOrEmpty(AA.mActivity.TargetApplication))
            {
                AA.mActivity.TargetApplication = AA.mBusinessFlow.TargetApplications[0].Name;
                AA.Status = eStatus.Fixed;
            }
        }
Ejemplo n.º 6
0
        static AnalyzeActivity CreateNewIssue(BusinessFlow BusinessFlow, Activity Activity)
        {
            AnalyzeActivity AA = new AnalyzeActivity();

            AA.Status        = AnalyzerItemBase.eStatus.NeedFix;
            AA.mActivity     = Activity;
            AA.ItemName      = Activity.ActivityName;
            AA.ItemParent    = BusinessFlow.Name;
            AA.mBusinessFlow = BusinessFlow;
            AA.ItemClass     = "Activity";

            return(AA);
        }
Ejemplo n.º 7
0
        private void RunBusinessFlowAnalyzer(BusinessFlow businessFlow, bool markCompletion = true)
        {
            DSList = Ginger.App.LocalRepository.GetSolutionDataSources();
            SetStatus("Analyzing " + GingerDicser.GetTermResValue(eTermResKey.BusinessFlow, suffixString: ":  ") + businessFlow.Name);
            List <AnalyzerItemBase> issues = AnalyzeBusinessFlow.Analyze(mSolution, businessFlow);

            AddIssues(issues);
            foreach (Activity activitiy in businessFlow.Activities)
            {
                issues = AnalyzeActivity.Analyze(businessFlow, activitiy);
                AddIssues(issues);
                foreach (Act action in activitiy.Acts)
                {
                    List <AnalyzerItemBase> actionissues = AnalyzeAction.Analyze(businessFlow, activitiy, action, DSList);
                    AddIssues(actionissues);
                }
            }

            if (markCompletion)
            {
                SetAnalayzeProceesAsCompleted();
            }
        }
Ejemplo n.º 8
0
        public void ReportUnusedVariables(object obj, List <string> usedVariables)
        {
            List <AnalyzerItemBase> IssuesList = new List <AnalyzerItemBase>();
            Solution     solution           = null;
            BusinessFlow businessFlow       = null;
            Activity     activity           = null;
            string       variableSourceType = "";
            string       variableSourceName = "";
            ObservableList <VariableBase> AvailableAllVariables = new ObservableList <VariableBase>();

            if (typeof(BusinessFlow).Equals(obj.GetType()))
            {
                businessFlow = (BusinessFlow)obj;
                if (businessFlow.Variables.Count > 0)
                {
                    AvailableAllVariables = businessFlow.Variables;
                    variableSourceType    = GingerDicser.GetTermResValue(eTermResKey.BusinessFlow);
                    variableSourceName    = businessFlow.Name;
                }
            }
            else if (typeof(Activity).Equals(obj.GetType()))
            {
                activity = (Activity)obj;
                if (activity.Variables.Count > 0)
                {
                    AvailableAllVariables = activity.Variables;
                    variableSourceType    = GingerDicser.GetTermResValue(eTermResKey.Activity);
                    variableSourceName    = activity.ActivityName;
                }
            }
            else if (typeof(Solution).Equals(obj.GetType()))
            {
                solution = (Solution)obj;
                AvailableAllVariables = solution.Variables;
                variableSourceType    = "Solution";
                variableSourceName    = solution.Name;
            }

            foreach (VariableBase var in AvailableAllVariables)
            {
                if (usedVariables != null && (!usedVariables.Contains(var.Name)))
                {
                    if (obj.GetType().Equals(typeof(BusinessFlow)))
                    {
                        AnalyzeBusinessFlow aa = new AnalyzeBusinessFlow();
                        aa.Status        = AnalyzerItemBase.eStatus.NeedFix;
                        aa.ItemName      = var.Name;
                        aa.Description   = var + " is Unused in " + variableSourceType + ": " + businessFlow.Name;
                        aa.Details       = variableSourceType;
                        aa.mBusinessFlow = businessFlow;
                        aa.ItemParent    = variableSourceName;
                        aa.CanAutoFix    = AnalyzerItemBase.eCanFix.Yes;
                        aa.IssueType     = eType.Error;
                        aa.FixItHandler  = DeleteUnusedVariables;
                        aa.Severity      = eSeverity.Medium;
                        IssuesList.Add(aa);
                    }
                    else if (obj.GetType().Equals(typeof(Solution)))
                    {
                        AnalyzeSolution aa = new AnalyzeSolution();
                        aa.Status       = AnalyzerItemBase.eStatus.NeedFix;
                        aa.ItemName     = var.Name;
                        aa.Description  = var + " is Unused in Solution";
                        aa.Details      = variableSourceType;
                        aa.ItemParent   = variableSourceName;
                        aa.CanAutoFix   = AnalyzerItemBase.eCanFix.Yes;
                        aa.IssueType    = eType.Error;
                        aa.FixItHandler = DeleteUnusedVariables;
                        aa.Severity     = eSeverity.Medium;
                        IssuesList.Add(aa);
                    }
                    else
                    {
                        AnalyzeActivity aa = new AnalyzeActivity();
                        aa.Status      = AnalyzerItemBase.eStatus.NeedFix;
                        aa.ItemName    = var.Name;
                        aa.Description = var + " is Unused in " + variableSourceType + ": " + activity.ActivityName;
                        aa.Details     = variableSourceType;
                        aa.mActivity   = activity;
                        //aa.mBusinessFlow = businessFlow;
                        aa.ItemParent   = variableSourceName;
                        aa.CanAutoFix   = AnalyzerItemBase.eCanFix.Yes;
                        aa.IssueType    = eType.Error;
                        aa.FixItHandler = DeleteUnusedVariables;
                        aa.Severity     = eSeverity.Medium;
                        IssuesList.Add(aa);
                    }
                }
            }
            AddIssues(IssuesList);
        }
Ejemplo n.º 9
0
        public void ReportUnusedVariables(object obj, List <string> usedVariables)
        {
            List <AnalyzerItemBase> IssuesList   = new List <AnalyzerItemBase>();
            BusinessFlow            BusinessFlow = App.BusinessFlow;
            Activity activity           = BusinessFlow.Activities[0];
            string   variableSourceType = "";
            string   variableSourceName = "";
            ObservableList <VariableBase> AvailableAllVariables = new ObservableList <VariableBase>();

            if (typeof(BusinessFlow).Equals(obj.GetType()))
            {
                BusinessFlow = (BusinessFlow)obj;
                if (BusinessFlow.Variables.Count > 0)
                {
                    AvailableAllVariables = BusinessFlow.Variables;
                    variableSourceType    = "BusinessFlow";
                    variableSourceName    = BusinessFlow.Name;
                }
            }
            else if (typeof(Activity).Equals(obj.GetType()))
            {
                activity = (Activity)obj;
                if (activity.Variables.Count > 0)
                {
                    AvailableAllVariables = activity.Variables;
                    variableSourceType    = "Activity";
                    variableSourceName    = activity.ActivityName;
                }
            }
            else if (typeof(Solution).Equals(obj.GetType()))
            {
                Solution solution = (Solution)obj;
                AvailableAllVariables = solution.Variables;
                variableSourceType    = "Solution";
                variableSourceName    = solution.Name;
                activity = BusinessFlow.Activities[0];
            }



            foreach (VariableBase var in AvailableAllVariables)
            {
                if (usedVariables != null && (!usedVariables.Contains(var.Name)))
                {
                    if (obj.GetType().Equals(typeof(BusinessFlow)))
                    {
                        AnalyzeBusinessFlow aa = new AnalyzeBusinessFlow();
                        aa.Status        = AnalyzerItemBase.eStatus.NeedFix;
                        aa.ItemName      = var.Name;
                        aa.Description   = var + " is Unused in Business Flow : " + BusinessFlow.Name;
                        aa.Details       = variableSourceType;
                        aa.mBusinessFlow = BusinessFlow;
                        aa.ItemParent    = variableSourceName;

                        aa.CanAutoFix   = AnalyzerItemBase.eCanFix.Yes;  // we can autofix by delete, but don't want to
                        aa.IssueType    = eType.Error;
                        aa.FixItHandler = DeleteUnusedVariables;
                        aa.Severity     = eSeverity.Medium;
                        IssuesList.Add(aa);
                    }
                    else if (obj.GetType().Equals(typeof(Solution)))
                    {
                        AnalyzeSolution aa = new AnalyzeSolution();
                        aa.Status      = AnalyzerItemBase.eStatus.NeedFix;
                        aa.ItemName    = var.Name;
                        aa.Description = var + " is Unused in Solution";
                        aa.Details     = variableSourceType;
                        aa.ItemParent  = variableSourceName;

                        aa.CanAutoFix   = AnalyzerItemBase.eCanFix.Yes;  // we can autofix by delete, but don't want to
                        aa.IssueType    = eType.Error;
                        aa.FixItHandler = DeleteUnusedVariables;
                        aa.Severity     = eSeverity.Medium;
                        IssuesList.Add(aa);
                    }
                    else
                    {
                        AnalyzeActivity aa = new AnalyzeActivity();
                        aa.Status        = AnalyzerItemBase.eStatus.NeedFix;
                        aa.ItemName      = var.Name;
                        aa.Description   = var + " is Unused in Activity : " + activity.ActivityName;
                        aa.Details       = variableSourceType;
                        aa.mActivity     = activity;
                        aa.mBusinessFlow = BusinessFlow;
                        aa.ItemParent    = variableSourceName;

                        aa.CanAutoFix   = AnalyzerItemBase.eCanFix.Yes;  // we can autofix by delete, but don't want to
                        aa.IssueType    = eType.Error;
                        aa.FixItHandler = DeleteUnusedVariables;
                        aa.Severity     = eSeverity.Medium;
                        IssuesList.Add(aa);
                    }
                }
            }
            AddIssues(IssuesList);
        }
Ejemplo n.º 10
0
        public List <string> RunBusinessFlowAnalyzer(BusinessFlow businessFlow, ObservableList <AnalyzerItemBase> issuesList)
        {
            List <string> usedVariablesInBF       = new List <string>();
            List <string> usedVariablesInActivity = new List <string>();

            ObservableList <DataSourceBase> DSList = WorkSpace.Instance.SolutionRepository.GetAllRepositoryItems <DataSourceBase>();

            foreach (AnalyzerItemBase issue in AnalyzeBusinessFlow.Analyze(WorkSpace.Instance.Solution, businessFlow))
            {
                AddIssue(issuesList, issue);
            }

            Parallel.ForEach(businessFlow.Activities, new ParallelOptions {
                MaxDegreeOfParallelism = 5
            }, activity =>
            {
                if (activity.Active)
                {
                    foreach (AnalyzerItemBase issue in AnalyzeActivity.Analyze(businessFlow, activity))
                    {
                        AddIssue(issuesList, issue);
                    }
                }

                Parallel.ForEach(activity.Acts, new ParallelOptions {
                    MaxDegreeOfParallelism = 5
                }, iaction =>
                {
                    Act action = (Act)iaction;
                    if (action.Active)
                    {
                        foreach (AnalyzerItemBase issue in AnalyzeAction.Analyze(businessFlow, activity, action, DSList))
                        {
                            AddIssue(issuesList, issue);
                        }
                    }

                    List <string> tempList = AnalyzeAction.GetUsedVariableFromAction(action);
                    usedVariablesInActivity.AddRange(tempList);
                });

                List <string> activityVarList = AnalyzeActivity.GetUsedVariableFromActivity(activity);
                usedVariablesInActivity.AddRange(activityVarList);
                ReportUnusedVariables(activity, usedVariablesInActivity, issuesList);
                usedVariablesInBF.AddRange(usedVariablesInActivity);
                usedVariablesInActivity.Clear();
            });

            //Get all the missing variable issues Grouped by Variable name
            var missingVariableIssuesGroupList = issuesList.Where(x => x.IssueCategory == AnalyzerItemBase.eIssueCategory.MissingVariable).GroupBy(x => x.IssueReferenceObject);

            foreach (var variableIssueGroup in missingVariableIssuesGroupList)
            {
                //If for specific variable, all the issues are for set variable action then we support Auto Fix
                var canAutoFix = variableIssueGroup.All(x => x is AnalyzeAction && ((AnalyzeAction)x).mAction.GetType() == typeof(ActSetVariableValue));

                if (canAutoFix)
                {
                    foreach (AnalyzeAction issue in variableIssueGroup)
                    {
                        issue.CanAutoFix    = AnalyzerItemBase.eCanFix.Yes;
                        issue.FixItHandler += MarkSetVariableActionAsInactive;
                    }
                }
            }

            ReportUnusedVariables(businessFlow, usedVariablesInBF, issuesList);

            return(usedVariablesInBF);
        }