diff options
Diffstat (limited to 'src/WixToolset.Core.Burn/Bundles/GetPackageFacadesCommand.cs')
-rw-r--r-- | src/WixToolset.Core.Burn/Bundles/GetPackageFacadesCommand.cs | 78 |
1 files changed, 43 insertions, 35 deletions
diff --git a/src/WixToolset.Core.Burn/Bundles/GetPackageFacadesCommand.cs b/src/WixToolset.Core.Burn/Bundles/GetPackageFacadesCommand.cs index 1ed37046..71e4cfea 100644 --- a/src/WixToolset.Core.Burn/Bundles/GetPackageFacadesCommand.cs +++ b/src/WixToolset.Core.Burn/Bundles/GetPackageFacadesCommand.cs | |||
@@ -3,61 +3,69 @@ | |||
3 | namespace WixToolset.Core.Burn.Bundles | 3 | namespace WixToolset.Core.Burn.Bundles |
4 | { | 4 | { |
5 | using System.Collections.Generic; | 5 | using System.Collections.Generic; |
6 | using System.Linq; | ||
6 | using WixToolset.Data; | 7 | using WixToolset.Data; |
8 | using WixToolset.Data.Tuples; | ||
7 | 9 | ||
8 | internal class GetPackageFacadesCommand | 10 | internal class GetPackageFacadesCommand |
9 | { | 11 | { |
10 | #if TODO | 12 | public GetPackageFacadesCommand(IEnumerable<WixBundlePackageTuple> chainPackageTuples, IntermediateSection section) |
11 | public Table PackageTable { private get; set; } | 13 | { |
12 | 14 | this.ChainPackageTuples = chainPackageTuples; | |
13 | public Table ExePackageTable { private get; set; } | 15 | this.Section = section; |
14 | 16 | } | |
15 | public Table MsiPackageTable { private get; set; } | ||
16 | 17 | ||
17 | public Table MspPackageTable { private get; set; } | 18 | private IEnumerable<WixBundlePackageTuple> ChainPackageTuples { get; } |
18 | 19 | ||
19 | public Table MsuPackageTable { private get; set; } | 20 | private IntermediateSection Section { get; } |
20 | 21 | ||
21 | public IDictionary<string, PackageFacade> PackageFacades { get; private set; } | 22 | public IDictionary<string, PackageFacade> PackageFacades { get; private set; } |
22 | 23 | ||
23 | public void Execute() | 24 | public void Execute() |
24 | { | 25 | { |
25 | RowDictionary<WixBundleExePackageRow> exePackages = new RowDictionary<WixBundleExePackageRow>(this.ExePackageTable); | 26 | var exePackages = this.Section.Tuples.OfType<WixBundleExePackageTuple>().ToDictionary(t => t.Id.Id); |
26 | RowDictionary<WixBundleMsiPackageRow> msiPackages = new RowDictionary<WixBundleMsiPackageRow>(this.MsiPackageTable); | 27 | var msiPackages = this.Section.Tuples.OfType<WixBundleMsiPackageTuple>().ToDictionary(t => t.Id.Id); |
27 | RowDictionary<WixBundleMspPackageRow> mspPackages = new RowDictionary<WixBundleMspPackageRow>(this.MspPackageTable); | 28 | var mspPackages = this.Section.Tuples.OfType<WixBundleMspPackageTuple>().ToDictionary(t => t.Id.Id); |
28 | RowDictionary<WixBundleMsuPackageRow> msuPackages = new RowDictionary<WixBundleMsuPackageRow>(this.MsuPackageTable); | 29 | var msuPackages = this.Section.Tuples.OfType<WixBundleMsuPackageTuple>().ToDictionary(t => t.Id.Id); |
29 | 30 | ||
30 | Dictionary<string, PackageFacade> facades = new Dictionary<string, PackageFacade>(this.PackageTable.Rows.Count); | 31 | var facades = new Dictionary<string, PackageFacade>(); |
31 | 32 | ||
32 | foreach (WixBundlePackageRow package in this.PackageTable.Rows) | 33 | foreach (var package in this.ChainPackageTuples) |
33 | { | 34 | { |
34 | string id = package.WixChainItemId; | 35 | var id = package.Id.Id; |
35 | PackageFacade facade = null; | ||
36 | |||
37 | switch (package.Type) | 36 | switch (package.Type) |
38 | { | 37 | { |
39 | case WixBundlePackageType.Exe: | 38 | case WixBundlePackageType.Exe: |
40 | facade = new PackageFacade(package, exePackages.Get(id)); | 39 | if (exePackages.TryGetValue(id, out var exePackage)) |
41 | break; | 40 | { |
42 | 41 | facades.Add(id, new PackageFacade(package, exePackage)); | |
43 | case WixBundlePackageType.Msi: | 42 | } |
44 | facade = new PackageFacade(package, msiPackages.Get(id)); | 43 | break; |
45 | break; | 44 | |
46 | 45 | case WixBundlePackageType.Msi: | |
47 | case WixBundlePackageType.Msp: | 46 | if (msiPackages.TryGetValue(id, out var msiPackage)) |
48 | facade = new PackageFacade(package, mspPackages.Get(id)); | 47 | { |
49 | break; | 48 | facades.Add(id, new PackageFacade(package, msiPackage)); |
50 | 49 | } | |
51 | case WixBundlePackageType.Msu: | 50 | break; |
52 | facade = new PackageFacade(package, msuPackages.Get(id)); | 51 | |
53 | break; | 52 | case WixBundlePackageType.Msp: |
53 | if (mspPackages.TryGetValue(id, out var mspPackage)) | ||
54 | { | ||
55 | facades.Add(id, new PackageFacade(package, mspPackage)); | ||
56 | } | ||
57 | break; | ||
58 | |||
59 | case WixBundlePackageType.Msu: | ||
60 | if (msuPackages.TryGetValue(id, out var msuPackage)) | ||
61 | { | ||
62 | facades.Add(id, new PackageFacade(package, msuPackage)); | ||
63 | } | ||
64 | break; | ||
54 | } | 65 | } |
55 | |||
56 | facades.Add(id, facade); | ||
57 | } | 66 | } |
58 | 67 | ||
59 | this.PackageFacades = facades; | 68 | this.PackageFacades = facades; |
60 | } | 69 | } |
61 | #endif | ||
62 | } | 70 | } |
63 | } | 71 | } |