From 8cbfc326cccf8d9b3b63cb6f752fc770f7dee0fc Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Tue, 29 Jun 2021 19:14:02 -0500 Subject: Expose overridable variable APIs in balutil and Mba.Core. Fixes #4777 --- .../WixToolset.Mba.Core/OverridableVariables.cs | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/api/burn/WixToolset.Mba.Core/OverridableVariables.cs (limited to 'src/api/burn/WixToolset.Mba.Core/OverridableVariables.cs') diff --git a/src/api/burn/WixToolset.Mba.Core/OverridableVariables.cs b/src/api/burn/WixToolset.Mba.Core/OverridableVariables.cs new file mode 100644 index 00000000..855ce9a9 --- /dev/null +++ b/src/api/burn/WixToolset.Mba.Core/OverridableVariables.cs @@ -0,0 +1,51 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolset.Mba.Core +{ + using System; + using System.Collections.Generic; + using System.Xml; + using System.Xml.XPath; + + /// + /// Default implementation of . + /// + public class OverridableVariablesInfo : IOverridableVariables + { + /// + public IDictionary Variables { get; internal set; } + + internal OverridableVariablesInfo() { } + + /// + /// Parses the overridable variable info from the BA manifest. + /// + /// XML root + /// The parsed information. + public static IOverridableVariables ParseFromXml(XPathNavigator root) + { + XmlNamespaceManager namespaceManager = new XmlNamespaceManager(root.NameTable); + namespaceManager.AddNamespace("p", BootstrapperApplicationData.XMLNamespace); + XPathNodeIterator nodes = root.Select("/p:BootstrapperApplicationData/p:WixStdbaOverridableVariable", namespaceManager); + + var overridableVariables = new OverridableVariablesInfo(); + overridableVariables.Variables = new Dictionary(); + + foreach (XPathNavigator node in nodes) + { + var variable = new OverridableVariableInfo(); + + string name = BootstrapperApplicationData.GetAttribute(node, "Name"); + if (name == null) + { + throw new Exception("Failed to get name for overridable variable."); + } + variable.Name = name; + + overridableVariables.Variables.Add(variable.Name, variable); + } + + return overridableVariables; + } + } +} -- cgit v1.2.3-55-g6feb