/// <summary> /// Gets the available report types. /// </summary> /// <returns> /// The available report types. /// </returns> public IEnumerable <string> GetAvailableReportTypes() { var reportBuilders = MefHelper.LoadInstancesOfType <IReportBuilder>().ToArray(); return(reportBuilders .Select(r => r.ReportType) .Distinct() .OrderBy(r => r) .ToArray()); }
/// <summary> /// Gets the report builders that correspond to the given <paramref name="reportTypes" />. /// </summary> /// <param name="targetDirectory">The target directory where reports are stored.</param> /// <param name="reportTypes">The report types.</param> /// <returns> /// The report builders. /// </returns> public IEnumerable <IReportBuilder> GetReportBuilders(string targetDirectory, IEnumerable <string> reportTypes) { Logger.InfoFormat(Resources.InitializingReportBuilders, string.Join(", ", reportTypes)); var reportBuilders = MefHelper.LoadInstancesOfType <IReportBuilder>() .Where(r => reportTypes.Contains(r.ReportType, StringComparer.OrdinalIgnoreCase)) .OrderBy(r => r.ReportType) .ToArray(); var result = new List <IReportBuilder>(); foreach (var reportBuilderGroup in reportBuilders.GroupBy(r => r.ReportType)) { if (reportBuilderGroup.Count() == 1) { result.Add(reportBuilderGroup.First()); } else { var nonDefaultParsers = reportBuilderGroup .Where(r => r.GetType().Assembly.GetName().Name != "ReportGenerator.Reporting") .ToArray(); foreach (var reportBuilder in nonDefaultParsers) { result.Add(reportBuilder); } if (nonDefaultParsers.Length > 1) { Logger.WarnFormat(" " + Resources.SeveralCustomReportBuildersWithSameReportType, reportBuilderGroup.Key); } if (nonDefaultParsers.Length < reportBuilderGroup.Count()) { Logger.WarnFormat(" " + Resources.DefaultReportBuilderReplaced, reportBuilderGroup.Key); } } } foreach (var reportBuilder in result) { reportBuilder.TargetDirectory = targetDirectory; } return(result); }