using System.Collections.Generic; using System.Linq; using CTA.FeatureDetection.Common.Models; using CTA.Rules.Config; using CTA.Rules.Metrics.Models.WebForms; using CTA.Rules.Models; namespace CTA.Rules.Metrics { /// /// Converts metrics data from raw form into serializable objects /// public class MetricsTransformer { internal static IEnumerable TransformGenericActionExecutions(MetricsContext context, ProjectResult projectResult) { var projectFile = projectResult.ProjectFile; var executedActionsByFile = projectResult.ExecutedActions; var genericActionExecutionsMetrics = new List(); foreach (var kvp in executedActionsByFile) { var fileName = kvp.Key; var actionExecutions = kvp.Value; foreach (var actionExecution in actionExecutions) { genericActionExecutionsMetrics.Add(new GenericActionExecutionMetric(context, actionExecution, projectFile)); } } return genericActionExecutionsMetrics; } internal static IEnumerable TransformProjectActions(MetricsContext context, ProjectResult projectResult) { var projectFile = projectResult.ProjectFile; var detectedActionsByFile = projectResult.ProjectActions?.FileActions.ToList(); var genericActions = new List(); foreach (var fileAction in detectedActionsByFile) { var fileName = fileAction.FilePath; var actionExecutions = fileAction.AllActions; foreach (var actionExecution in actionExecutions) { genericActions.Add(new GenericActionMetric(context, actionExecution, fileName, projectFile)); } } return genericActions; } internal static IEnumerable TransformTargetVersions(MetricsContext context, ProjectResult projectResult) { var projectFile = projectResult.ProjectFile; var targetVersions = projectResult.TargetVersions; var sourceVersions = projectResult.SourceVersions; var targetVersionMetrics = new List(); for (int i = 0; i < targetVersions.Count; i++) { string sourceVersion = null; if (targetVersions.Count == sourceVersions.Count) { sourceVersion = sourceVersions[i]; } targetVersionMetrics.Add(new TargetVersionMetric(context, targetVersions[i], projectFile, sourceVersion)); } return targetVersionMetrics; } internal static IEnumerable TransformUpgradePackages(MetricsContext context, ProjectResult projectResult) { var projectFile = projectResult.ProjectFile; var upgradePackages = projectResult.UpgradePackages; var upgradePackagesMetric = new List(); foreach (var upgradePackage in upgradePackages) { upgradePackagesMetric.Add(new UpgradePackageMetric(context, upgradePackage, projectFile)); } return upgradePackagesMetric; } internal static IEnumerable TransformActionPackages(MetricsContext context, ProjectResult projectResult) { var projectFile = projectResult.ProjectFile; var actionPackages = projectResult.ActionPackages; var actionPackagesMetric = new List(); foreach (var actionPackage in actionPackages) { actionPackagesMetric.Add(new ActionPackageMetric(context, actionPackage, projectFile)); } return actionPackagesMetric; } internal static IEnumerable TransformDownloadedFiles(MetricsContext context, IEnumerable downloadedFiles) { var downloadedFilesMetrics = new List(); foreach (var downloadedFile in downloadedFiles) { downloadedFilesMetrics.Add(new DownloadedFilesMetric(context, downloadedFile)); } return downloadedFilesMetrics; } internal static IEnumerable TransformReferences(MetricsContext context, IEnumerable references) { var referencesMetrics = new List(); foreach (var reference in references) { referencesMetrics.Add(new ReferencesMetric(context, reference)); } return referencesMetrics; } internal static IEnumerable TransformMissingMetaReferences(MetricsContext context, ProjectResult projectResult) { var projectFile = projectResult.ProjectFile; var missingMetaReferences = projectResult.MissingMetaReferences; var missingMetaReferenceMetrics = new List(); foreach (var reference in missingMetaReferences) { missingMetaReferenceMetrics.Add(new MissingMetaReferenceMetric(context, reference, projectFile)); } return missingMetaReferenceMetrics; } internal static IEnumerable TransformWebFormActionMetrics(MetricsContext context, ProjectResult projectResult) { var projectFile = projectResult.ProjectFile; var webFormActionMetrics = new List(); foreach (var metric in projectResult.WebFormsMetricResults) { if(metric.ActionName == WebFormsActionType.FileConversion) webFormActionMetrics.Add(new FileConversionMetric(context, metric.ChildAction, projectFile)); else if(metric.ActionName == WebFormsActionType.ControlConversion) webFormActionMetrics.Add(new ControlConversionMetric(context,metric.ChildAction,metric.NodeName, projectFile)); else if(metric.ActionName == WebFormsActionType.ClassConversion) webFormActionMetrics.Add(new ClassConversionMetric(context, metric.ChildAction, projectFile)); else if(metric.ActionName == WebFormsActionType.DirectiveConversion) webFormActionMetrics.Add(new DirectiveConversionMetric(context, metric.ChildAction, projectFile)); else LogHelper.LogInformation($"WebForms porting action not found with the name"+ metric.ActionName.ToString()); } return webFormActionMetrics; } internal static IEnumerable TransformBuildErrors(MetricsContext context, Dictionary> buildErrorsByProject) { var buildErrorMetrics = new List(); foreach (var project in buildErrorsByProject.Keys) { var buildErrorCounts = buildErrorsByProject[project]; foreach (var buildError in buildErrorCounts.Keys) { var count = buildErrorCounts[buildError]; buildErrorMetrics.Add(new BuildErrorMetric(context, buildError, count, project)); } } return buildErrorMetrics; } internal static IEnumerable TransformFeatureDetectionResults(MetricsContext context, Dictionary featureDetectionResults) { var featureDetectionMetrics = new List(); foreach (var kvp in featureDetectionResults) { var featureDetectionResult = kvp.Value; var metrics = featureDetectionResult.PresentFeatures.Select(featureName => new FeatureDetectionMetric(context, featureName, featureDetectionResult.ProjectPath)); featureDetectionMetrics.AddRange(metrics); } return featureDetectionMetrics; } } }