public void EvalCustomVariables(XmlNode productCustomVars) { if (productCustomVars != null && productCustomVars.HasChildNodes) { RequirementHandlers reqHandlers = new RequirementHandlers(); foreach (XmlNode CustomVar in productCustomVars.ChildNodes) { ProductSettings.ProductRequirement requirement = new ProductSettings.ProductRequirement { Type = XmlParser.GetStringValue(CustomVar, "Type"), LogicalOperator = XmlParser.GetStringAttribute(CustomVar, "Keys", "logicalOp") }; if (string.IsNullOrEmpty(requirement.LogicalOperator)) { requirement.LogicalOperator = Enum.GetName(typeof(RequirementHandlers.LogicalOperatorType), RequirementHandlers.LogicalOperatorType.AND); //default value } requirement.Keys = new List <ProductSettings.RequirementKey>(); foreach (XmlNode requirementKey in CustomVar.SelectNodes("Keys/Key")) { ProductSettings.RequirementKey reqKey; reqKey.KeyValue = XmlParser.GetStringValue(requirementKey); reqKey.KeyType = XmlParser.GetStringAttribute(requirementKey, "type"); requirement.Keys.Add(reqKey); } string newElementName = XmlParser.GetStringAttribute(CustomVar, "name"); if (newElementName != "") { XmlElement elem = xmlDoc.CreateElement(newElementName); elem.InnerText = reqHandlers.EvalRequirement(requirement); productCustomVars.AppendChild(elem); } } } }
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); } }