summaryrefslogtreecommitdiff
path: root/src/tools/heat/IIsFinalizeHarvesterMutator.cs
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2022-07-26 17:20:39 -0700
committerRob Mensching <rob@firegiant.com>2022-08-01 20:25:19 -0700
commita627ca9b720047e633a8fe72003ab9bee31006c5 (patch)
tree2bc8a924bb4141ab718e74d08f6459a0ffe8d573 /src/tools/heat/IIsFinalizeHarvesterMutator.cs
parent521eb3c9cf38823a2c4019abb85dc0b3200b92cb (diff)
downloadwix-a627ca9b720047e633a8fe72003ab9bee31006c5.tar.gz
wix-a627ca9b720047e633a8fe72003ab9bee31006c5.tar.bz2
wix-a627ca9b720047e633a8fe72003ab9bee31006c5.zip
Create WixToolset.Heat.nupkg to distribute heat.exe and Heat targets
Moves Heat functionality to the "tools" layer and packages it all up in WixToolset.Heat.nupkg for distribution in WiX v4. Completes 6838
Diffstat (limited to 'src/tools/heat/IIsFinalizeHarvesterMutator.cs')
-rw-r--r--src/tools/heat/IIsFinalizeHarvesterMutator.cs160
1 files changed, 160 insertions, 0 deletions
diff --git a/src/tools/heat/IIsFinalizeHarvesterMutator.cs b/src/tools/heat/IIsFinalizeHarvesterMutator.cs
new file mode 100644
index 00000000..cfe90272
--- /dev/null
+++ b/src/tools/heat/IIsFinalizeHarvesterMutator.cs
@@ -0,0 +1,160 @@
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
3namespace WixToolset.Harvesters
4{
5 using System;
6 using System.Collections;
7 using System.Collections.Specialized;
8 using WixToolset.Harvesters.Data;
9 using WixToolset.Harvesters.Extensibility;
10 using Wix = WixToolset.Harvesters.Serialize;
11 using IIs = Serialize.IIs;
12
13 /// <summary>
14 /// The finalize harvester mutator for the WiX Toolset Internet Information Services Extension.
15 /// </summary>
16 public sealed class IIsFinalizeHarvesterMutator : BaseMutatorExtension
17 {
18 private Hashtable directoryPaths;
19 private Hashtable filePaths;
20 private ArrayList webFilters;
21 private ArrayList webSites;
22 private ArrayList webVirtualDirs;
23
24 /// <summary>
25 /// Instantiate a new IIsFinalizeHarvesterMutator.
26 /// </summary>
27 public IIsFinalizeHarvesterMutator()
28 {
29 this.directoryPaths = CollectionsUtil.CreateCaseInsensitiveHashtable();
30 this.filePaths = CollectionsUtil.CreateCaseInsensitiveHashtable();
31 this.webFilters = new ArrayList();
32 this.webSites = new ArrayList();
33 this.webVirtualDirs = new ArrayList();
34 }
35
36 /// <summary>
37 /// Gets the sequence of this mutator extension.
38 /// </summary>
39 /// <value>The sequence of this mutator extension.</value>
40 public override int Sequence
41 {
42 get { return 1900; }
43 }
44
45 /// <summary>
46 /// Mutate a WiX document.
47 /// </summary>
48 /// <param name="wix">The Wix document element.</param>
49 public override void Mutate(Wix.Wix wix)
50 {
51 this.directoryPaths.Clear();
52 this.filePaths.Clear();
53 this.webFilters.Clear();
54 this.webSites.Clear();
55 this.webVirtualDirs.Clear();
56
57 this.IndexElement(wix);
58
59 this.MutateWebFilters();
60 this.MutateWebSites();
61 this.MutateWebVirtualDirs();
62 }
63
64 /// <summary>
65 /// Index an element.
66 /// </summary>
67 /// <param name="element">The element to index.</param>
68 private void IndexElement(Wix.ISchemaElement element)
69 {
70 if (element is IIs.WebFilter)
71 {
72 this.webFilters.Add(element);
73 }
74 else if (element is IIs.WebSite)
75 {
76 this.webSites.Add(element);
77 }
78 else if (element is IIs.WebVirtualDir)
79 {
80 this.webVirtualDirs.Add(element);
81 }
82 else if (element is Wix.Directory)
83 {
84 Wix.Directory directory = (Wix.Directory)element;
85
86 if (null != directory.Id && null != directory.FileSource)
87 {
88 this.directoryPaths.Add(directory.FileSource, directory.Id);
89 }
90 }
91 else if (element is Wix.File)
92 {
93 Wix.File file = (Wix.File)element;
94
95 if (null != file.Id && null != file.Source)
96 {
97 this.filePaths[file.Source] = String.Concat("[#", file.Id, "]");
98 }
99 }
100
101 // index the child elements
102 if (element is Wix.IParentElement)
103 {
104 foreach (Wix.ISchemaElement childElement in ((Wix.IParentElement)element).Children)
105 {
106 this.IndexElement(childElement);
107 }
108 }
109 }
110
111 /// <summary>
112 /// Mutate the WebFilters.
113 /// </summary>
114 private void MutateWebFilters()
115 {
116 foreach (IIs.WebFilter webFilter in this.webFilters)
117 {
118 webFilter.Path = (string)this.filePaths[webFilter.Path];
119 }
120 }
121
122 /// <summary>
123 /// Mutate the WebSites.
124 /// </summary>
125 private void MutateWebSites()
126 {
127 foreach (IIs.WebSite webSite in this.webSites)
128 {
129 string path = (string)this.directoryPaths[webSite.Directory];
130 if (null == path)
131 {
132 this.Core.Messaging.Write(HarvesterWarnings.EncounteredNullDirectoryForWebSite(path));
133 }
134 else
135 {
136 webSite.Directory = path;
137 }
138 }
139 }
140
141 /// <summary>
142 /// Mutate the WebVirtualDirs.
143 /// </summary>
144 private void MutateWebVirtualDirs()
145 {
146 foreach (IIs.WebVirtualDir webVirtualDir in this.webVirtualDirs)
147 {
148 string path = (string)this.directoryPaths[webVirtualDir.Directory];
149 if (null == path)
150 {
151 this.Core.Messaging.Write(HarvesterWarnings.EncounteredNullDirectoryForWebSite(path));
152 }
153 else
154 {
155 webVirtualDir.Directory = path;
156 }
157 }
158 }
159 }
160}