Ejemplo n.º 1
0
        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);
            }
        }