/// <summary> /// Constructor for the SonarBrowser Orchestrator. /// </summary> /// <param name="sonarConnector">Connector for SonarQube related searches.</param> /// <param name="mapper">AutoMapper interface.</param> /// <param name="activeDirectoryService">Service for ActiveDirectory related searches.</param> /// <param name="tfsConnector">Service for Tfs related searches.</param> /// <param name="loggingService">The error logging services.</param> public SonarBrowserOrchestrator(ISonarConnector sonarConnector, IMapper mapper, IActiveDirectoryService activeDirectoryService, ITfsConnector tfsConnector, ILoggingService loggingService) { _sonarConnector = sonarConnector; _mapper = mapper; _activeDirectoryService = activeDirectoryService; _tfsConnector = tfsConnector; _loggingService = loggingService; }
/// <summary> /// Add the CodeProject informations to existing Sonar Issue. /// </summary> /// <param name="issue">The current Issue.</param> /// <param name="tfsConnector">The access to the Tfs Services.</param> /// <returns>The enriched Sonar Issue.</returns> private static Issue AddCodeProject(this Issue issue, ITfsConnector tfsConnector) { Issue returnIssue = issue; if (issue.ChangetSet == default(int)) { returnIssue.CodeProject = "no changeset detected"; } else { returnIssue.CodeProject = tfsConnector.GetAgressoCode(issue.ChangetSet).GetAwaiter().GetResult(); } return(returnIssue); }
/// <summary> /// Enrich the issue with it's corresponding line count (calculated from the ChangeSet). /// </summary> /// <param name="issue">The current issue.</param> /// <param name="tfsConnector">The access to the TFS Services.</param> /// <returns>The enriched issue.</returns> private static Issue AddCodeLineCount(this Issue issue, ITfsConnector tfsConnector) { Issue returnIssue = issue; if (issue.ChangetSet == default(int)) { returnIssue.CodeLineCountForChangeSet = default(int); } else { returnIssue.CodeLineCountForChangeSet = tfsConnector.GetNumberOfImpactedLines(returnIssue.ChangetSet).GetAwaiter().GetResult(); } return(returnIssue); }
/// <summary> /// The internal Assembler converting the <see cref="SearchIssuesResponse"/> to an enriched list of Sonar Issues. /// </summary> /// <param name="searchIssuesResponse">The list of Issues from the Sonar API.</param> /// <param name="groupADSet">The active directory information needed to get some informations.</param> /// <param name="mapper">The AutoMapper interface to create the Issues Detail <see cref="IssueDetail"/>.</param> /// <param name="sonarConnector">The link to the Sonar Services.</param> /// <returns>An enriched and filtered list of Sonar Issues.</returns> internal static List <Issue> CreateIssueSet(this SearchIssuesResponse searchIssuesResponse, GroupADSet groupADSet, IMapper mapper, ISonarConnector sonarConnector, ITfsConnector tfsConnector) { List <Issue> issueSet = new List <Issue>(); if (searchIssuesResponse?.issues == null) { return(issueSet); } issueSet.Capacity = searchIssuesResponse.issues.Count; foreach (var responseIssue in searchIssuesResponse.issues) { if (responseIssue != null) { Issue issue = new Issue() { IssueDetail = mapper.Map <IssueDetail>(responseIssue) }; issue = issue.AddChangeSet(sonarConnector); if (issue.ChangeSetDate != null && issue.ChangeSetDate?.AddDays(5) > issue.IssueDetail.creationDate) { issue = issue.AddCodeProject(tfsConnector); issue = issue.AddActiveDirectoryGroup(groupADSet); issue = issue.AddCodeLineCount(tfsConnector); issueSet.Add(issue); } } } issueSet.TrimExcess(); return(issueSet); }