main
cs 108 lines 4.31 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
4 {
5 using System;
6 using System.Collections.Generic;
7 using System.Text;
8 using System.Xml.Linq;
9 using WixToolset.Data;
10 using WixToolset.Data.Symbols;
11
12 internal class CompilerPackagePayload
13 {
14 public CompilerPackagePayload(CompilerPayload compilerPayload, WixBundlePackageType packageType)
15 {
16 this.CompilerPayload = compilerPayload;
17 this.PackageType = packageType;
18 }
19
20 private CompilerCore Core => this.CompilerPayload.Core;
21
22 private XElement Element => this.CompilerPayload.Element;
23
24 private SourceLineNumber SourceLineNumbers => this.CompilerPayload.SourceLineNumbers;
25
26 public CompilerPayload CompilerPayload { get; }
27
28 private WixBundlePackageType PackageType { get; }
29
30 public BundlePackagePayloadGenerationType? PayloadGenerationType { get; set; }
31
32 public IntermediateSymbol CreatePackagePayloadSymbol(ComplexReferenceParentType parentType, string parentId)
33 {
34 var payload = this.CompilerPayload.CreatePayloadSymbol(parentType, parentId);
35 if (payload == null)
36 {
37 return null;
38 }
39
40 IntermediateSymbol packagePayload;
41
42 switch (this.PackageType)
43 {
44 case WixBundlePackageType.Bundle:
45 packagePayload = this.Core.AddSymbol(new WixBundleBundlePackagePayloadSymbol(payload.SourceLineNumbers, payload.Id)
46 {
47 PayloadGeneration = this.PayloadGenerationType ?? BundlePackagePayloadGenerationType.ExternalWithoutDownloadUrl,
48 });
49 break;
50
51 case WixBundlePackageType.Exe:
52 packagePayload = this.Core.AddSymbol(new WixBundleExePackagePayloadSymbol(payload.SourceLineNumbers, payload.Id));
53 break;
54
55 case WixBundlePackageType.Msi:
56 packagePayload = this.Core.AddSymbol(new WixBundleMsiPackagePayloadSymbol(payload.SourceLineNumbers, payload.Id));
57 break;
58
59 case WixBundlePackageType.Msp:
60 packagePayload = this.Core.AddSymbol(new WixBundleMspPackagePayloadSymbol(payload.SourceLineNumbers, payload.Id));
61 break;
62
63 case WixBundlePackageType.Msu:
64 packagePayload = this.Core.AddSymbol(new WixBundleMsuPackagePayloadSymbol(payload.SourceLineNumbers, payload.Id));
65 break;
66
67 default:
68 throw new NotImplementedException();
69 }
70
71 this.Core.CreateGroupAndOrderingRows(payload.SourceLineNumbers, parentType, parentId, ComplexReferenceChildType.PackagePayload, payload.Id?.Id, ComplexReferenceChildType.Unknown, null);
72
73 return packagePayload;
74 }
75
76 public bool ParsePayloadGeneration(XAttribute attrib)
77 {
78 if (this.PackageType != WixBundlePackageType.Bundle)
79 {
80 return false;
81 }
82
83 var value = this.Core.GetAttributeValue(this.SourceLineNumbers, attrib);
84 switch (value)
85 {
86 case "none":
87 this.PayloadGenerationType = BundlePackagePayloadGenerationType.None;
88 break;
89 case "externalWithoutDownloadUrl":
90 this.PayloadGenerationType = BundlePackagePayloadGenerationType.ExternalWithoutDownloadUrl;
91 break;
92 case "external":
93 this.PayloadGenerationType = BundlePackagePayloadGenerationType.External;
94 break;
95 case "all":
96 this.PayloadGenerationType = BundlePackagePayloadGenerationType.All;
97 break;
98 case "":
99 break;
100 default:
101 this.Core.Write(ErrorMessages.IllegalAttributeValue(this.SourceLineNumbers, this.Element.Name.LocalName, attrib.Name.LocalName, value, "none", "externalWithoutDownloadUrl", "external", "all"));
102 break;
103 }
104
105 return true;
106 }
107 }
108 }