internal void SetProductsSettings(List <ProductSettings> productsSettings) { int maxOptionalProducts = ConfigParser.GetConfig().GetIntValue("//RemoteConfiguration/FlowSettings/MaxProducts", int.MaxValue); maxOptionalProducts = maxOptionalProducts == -1 ? int.MaxValue : maxOptionalProducts; int optionalProducts = 0; foreach (ProductSettings prodSettings in productsSettings) { if (packageDictionary.ContainsKey(prodSettings.Name)) { continue; } if (prodSettings.IsOptional && (optionalProducts >= maxOptionalProducts)) { #if DEBUG Logger.GetLogger().Info($"[{prodSettings.Name}] product will not be shown since the limit of optional products to show is: {maxOptionalProducts}"); #endif continue; } if ((prodSettings.PreInstall.RequirementList != null) && (prodSettings.PreInstall.RequirementsList != null)) { RequirementHandlers reqHandlers = new RequirementHandlers(); #if DEBUG Logger.GetLogger().Info("[" + prodSettings.Name + "] Checking requirements for product:"); #endif ProductSettings tmpProdSettings = prodSettings; bool res = default; if (productClasses.Contains(tmpProdSettings.Class)) { res = false; #if DEBUG Logger.GetLogger().Info($"Class ({tmpProdSettings.Class}) <Exists> [{string.Join(", ", productClasses)}] => False"); #endif tmpProdSettings.PreInstall.UnfulfilledRequirementType = "Class"; } else { res = reqHandlers.HandlersResult(ref tmpProdSettings.PreInstall); } if (!res) { OnDiscardPackage(null, tmpProdSettings); continue; } } if (!string.IsNullOrEmpty(prodSettings.Class)) { productClasses.Add(prodSettings.Class); } if (prodSettings.IsOptional) { optionalProducts++; } InstallationPackage pkg = CreatePackage(prodSettings.Behavior, prodSettings.Name); productLayoutManager.AddProductSettings(prodSettings); OnCreatePackage(pkg, prodSettings); } }