예제 #1
0
        /// <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);
        }