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