From 9010bd828e70e91523ed74733cc371eec09f58bb Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Fri, 15 May 2020 17:18:36 +1000 Subject: WIXFEAT:6164 Update BAL_INFO_PACKAGE with bal specific data. --- src/WixToolset.Mba.Core/BundleInfo.cs | 8 ++--- src/WixToolset.Mba.Core/IBundleInfo.cs | 2 +- src/WixToolset.Mba.Core/IPackageInfo.cs | 6 +++- src/WixToolset.Mba.Core/PackageInfo.cs | 64 +++++++++++++++++++++++++++++---- 4 files changed, 66 insertions(+), 14 deletions(-) (limited to 'src/WixToolset.Mba.Core') diff --git a/src/WixToolset.Mba.Core/BundleInfo.cs b/src/WixToolset.Mba.Core/BundleInfo.cs index e6d2f6e6..e1a56878 100644 --- a/src/WixToolset.Mba.Core/BundleInfo.cs +++ b/src/WixToolset.Mba.Core/BundleInfo.cs @@ -20,10 +20,11 @@ namespace WixToolset.Mba.Core this.Packages = new Dictionary(); } - public void AddRelatedBundleAsPackage(DetectRelatedBundleEventArgs e) + public IPackageInfo AddRelatedBundleAsPackage(DetectRelatedBundleEventArgs e) { var package = PackageInfo.GetRelatedBundleAsPackage(e.ProductCode, e.RelationType, e.PerMachine, e.Version); this.Packages.Add(package.Id, package); + return package; } public static IBundleInfo ParseBundleFromStream(Stream stream) @@ -56,10 +57,7 @@ namespace WixToolset.Mba.Core bundle.LogVariable = BootstrapperApplicationData.GetAttribute(bundleNode, "LogPathVariable"); - foreach (var package in PackageInfo.ParsePackagesFromXml(root)) - { - bundle.Packages.Add(package.Id, package); - } + bundle.Packages = PackageInfo.ParsePackagesFromXml(root); return bundle; } diff --git a/src/WixToolset.Mba.Core/IBundleInfo.cs b/src/WixToolset.Mba.Core/IBundleInfo.cs index 3d5b067e..d471c677 100644 --- a/src/WixToolset.Mba.Core/IBundleInfo.cs +++ b/src/WixToolset.Mba.Core/IBundleInfo.cs @@ -11,6 +11,6 @@ namespace WixToolset.Mba.Core IDictionary Packages { get; } bool PerMachine { get; } - void AddRelatedBundleAsPackage(DetectRelatedBundleEventArgs e); + IPackageInfo AddRelatedBundleAsPackage(DetectRelatedBundleEventArgs e); } } \ No newline at end of file diff --git a/src/WixToolset.Mba.Core/IPackageInfo.cs b/src/WixToolset.Mba.Core/IPackageInfo.cs index 5afe4b38..a82e81ea 100644 --- a/src/WixToolset.Mba.Core/IPackageInfo.cs +++ b/src/WixToolset.Mba.Core/IPackageInfo.cs @@ -5,12 +5,16 @@ namespace WixToolset.Mba.Core public interface IPackageInfo { CacheType CacheType { get; } + object CustomData { get; set; } string Description { get; } - bool DisplayInternalUI { get; } + string DisplayInternalUICondition { get; } string DisplayName { get; } string Id { get; } string InstallCondition { get; } bool Permanent { get; } + bool PrereqPackage { get; } + string PrereqLicenseFile { get; } + string PrereqLicenseUrl { get; } string ProductCode { get; } PackageType Type { get; } string UpgradeCode { get; } diff --git a/src/WixToolset.Mba.Core/PackageInfo.cs b/src/WixToolset.Mba.Core/PackageInfo.cs index 46894d2e..d3199c08 100644 --- a/src/WixToolset.Mba.Core/PackageInfo.cs +++ b/src/WixToolset.Mba.Core/PackageInfo.cs @@ -34,17 +34,22 @@ namespace WixToolset.Mba.Core public PackageType Type { get; internal set; } public bool Permanent { get; internal set; } public bool Vital { get; internal set; } - public bool DisplayInternalUI { get; internal set; } + public string DisplayInternalUICondition { get; internal set; } public string ProductCode { get; internal set; } public string UpgradeCode { get; internal set; } public string Version { get; internal set; } public string InstallCondition { get; internal set; } public CacheType CacheType { get; internal set; } + public bool PrereqPackage { get; internal set; } + public string PrereqLicenseFile { get; internal set; } + public string PrereqLicenseUrl { get; internal set; } + public object CustomData { get; set; } internal PackageInfo() { } - public static IEnumerable ParsePackagesFromXml(XPathNavigator root) + public static IDictionary ParsePackagesFromXml(XPathNavigator root) { + var packagesById = new Dictionary(); XmlNamespaceManager namespaceManager = new XmlNamespaceManager(root.NameTable); namespaceManager.AddNamespace("p", BootstrapperApplicationData.XMLNamespace); XPathNodeIterator nodes = root.Select("/p:BootstrapperApplicationData/p:WixPackageProperties", namespaceManager); @@ -85,9 +90,6 @@ namespace WixToolset.Mba.Core } package.Vital = vital.Value; - bool? displayInternalUI = BootstrapperApplicationData.GetYesNoAttribute(node, "DisplayInternalUI"); - package.DisplayInternalUI = displayInternalUI.HasValue && displayInternalUI.Value; - package.ProductCode = BootstrapperApplicationData.GetAttribute(node, "ProductCode"); package.UpgradeCode = BootstrapperApplicationData.GetAttribute(node, "UpgradeCode"); @@ -96,8 +98,11 @@ namespace WixToolset.Mba.Core package.InstallCondition = BootstrapperApplicationData.GetAttribute(node, "InstallCondition"); - yield return package; + packagesById.Add(package.Id, package); } + + ParseBalPackageInfoFromXml(root, namespaceManager, packagesById); + return packagesById; } public static CacheType? GetCacheTypeAttribute(XPathNavigator node, string attributeName) @@ -154,7 +159,7 @@ namespace WixToolset.Mba.Core } } - public static PackageInfo GetRelatedBundleAsPackage(string id, RelationType relationType, bool perMachine, Version version) + public static IPackageInfo GetRelatedBundleAsPackage(string id, RelationType relationType, bool perMachine, Version version) { PackageInfo package = new PackageInfo(); package.Id = id; @@ -177,5 +182,50 @@ namespace WixToolset.Mba.Core return package; } + + internal static void ParseBalPackageInfoFromXml(XPathNavigator root, XmlNamespaceManager namespaceManager, Dictionary packagesById) + { + XPathNodeIterator nodes = root.Select("/p:BootstrapperApplicationData/p:WixBalPackageInfo", namespaceManager); + + foreach (XPathNavigator node in nodes) + { + string id = BootstrapperApplicationData.GetAttribute(node, "PackageId"); + if (id == null) + { + throw new Exception("Failed to get package identifier for WixBalPackageInfo."); + } + + if (!packagesById.TryGetValue(id, out var ipackage)) + { + throw new Exception(string.Format("Failed to find package specified in WixBalPackageInfo: {0}", id)); + } + + var package = (PackageInfo)ipackage; + + package.DisplayInternalUICondition = BootstrapperApplicationData.GetAttribute(node, "DisplayInternalUICondition"); + } + + nodes = root.Select("/p:BootstrapperApplicationData/p:WixMbaPrereqInformation", namespaceManager); + + foreach (XPathNavigator node in nodes) + { + string id = BootstrapperApplicationData.GetAttribute(node, "PackageId"); + if (id == null) + { + throw new Exception("Failed to get package identifier for WixMbaPrereqInformation."); + } + + if (!packagesById.TryGetValue(id, out var ipackage)) + { + throw new Exception(string.Format("Failed to find package specified in WixMbaPrereqInformation: {0}", id)); + } + + var package = (PackageInfo)ipackage; + + package.PrereqPackage = true; + package.PrereqLicenseFile = BootstrapperApplicationData.GetAttribute(node, "LicenseFile"); + package.PrereqLicenseUrl = BootstrapperApplicationData.GetAttribute(node, "LicenseUrl"); + } + } } } -- cgit v1.2.3-55-g6feb