/// <summary> /// Loads the input file, converts to an internal model, and organises the data for efficient analysis. /// Restricts installations to consider with an IInstallationFilter and passes the results to an ILicenseAssesor for analysis. /// License requirements are summed for the input file and returned. /// </summary> /// <param name="fileName">The report file to load.</param> /// <param name="installationFilter">The filter used to identify installations of interest.</param> /// <returns>The summed license requirements.</returns> public int LoadAndAnalyse(string fileName, IInstallationFilter installationFilter) { var installationDataCollection = _reportLoader.LoadReportData(fileName); var installations = _reportToModelConverter.ConvertReportData(installationDataCollection); _installationCatalog.AddInstallationsByUser(installations); var licenseCount = _installationCatalog.CountLicensesByUser(installationFilter, _licenseAssessor); return(licenseCount); }
/// <summary> /// Counts licenses that are tracked on a per-user basis. /// Filters the installations for each user, then assesses how many licenses are required for that installation set. /// The installs for all users are summed and returned. /// </summary> /// <param name="installationFilter">Filter used to isolate the installations to consider; applied to each user's installations prior to assessment.</param> /// <param name="licenseAssessor">Assessor used to count the licenses required for each user's filtered installations.</param> /// <returns>The sum of required licenses across all users.</returns> public int CountLicensesByUser(IInstallationFilter installationFilter, ILicenseAssessor licenseAssessor) { // Walk the dictionary, considering each user individually. var licensesRequiredTotal = 0; foreach (var userInstallations in _indexMap.Values) { var considerInstallations = userInstallations.Where(installationFilter.Filter); licensesRequiredTotal += licenseAssessor.AssessInstallationLicenses(considerInstallations); } return(licensesRequiredTotal); }