main
cs 54 lines 2.02 KB
Raw
1 // 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.
2
3 namespace WixToolset.Core.Burn.Bundles
4 {
5 using System.Collections.Generic;
6 using System.Linq;
7 using WixToolset.Data;
8
9 internal class PackageFacades
10 {
11 private Dictionary<string, PackageFacade> FacadesByPackageId { get; } = new Dictionary<string, PackageFacade>();
12
13 private Dictionary<string, List<PackageFacade>> FacadesByPackagePayloadId { get; } = new Dictionary<string, List<PackageFacade>>();
14
15 private List<PackageFacade> OrderedFacades { get; } = new List<PackageFacade>();
16
17 public void Add(PackageFacade item)
18 {
19 this.FacadesByPackageId.Add(item.PackageId, item);
20
21 if (!this.FacadesByPackagePayloadId.TryGetValue(item.PackageSymbol.PayloadRef, out var facades))
22 {
23 facades = new List<PackageFacade>();
24 this.FacadesByPackagePayloadId.Add(item.PackageSymbol.PayloadRef, facades);
25 }
26
27 facades.Add(item);
28 }
29
30 public void AddOrdered(PackageFacade item)
31 {
32 if (!this.FacadesByPackageId.ContainsKey(item.PackageId))
33 {
34 throw new WixException("Ordered PackageFacade must already exist");
35 }
36
37 this.OrderedFacades.Add(item);
38 }
39
40 public IReadOnlyCollection<PackageFacade> OrderedValues => this.OrderedFacades.AsReadOnly();
41
42 public IEnumerable<PackageFacade> Values => this.FacadesByPackageId.Values;
43
44 public bool TryGetFacadeByPackageId(string packageId, out PackageFacade facade)
45 {
46 return this.FacadesByPackageId.TryGetValue(packageId, out facade);
47 }
48
49 public bool TryGetFacadesByPackagePayloadId(string packagePayloadId, out List<PackageFacade> facades)
50 {
51 return this.FacadesByPackagePayloadId.TryGetValue(packagePayloadId, out facades);
52 }
53 }
54 }