aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Data.WindowsInstaller/Rows
diff options
context:
space:
mode:
Diffstat (limited to 'src/WixToolset.Data.WindowsInstaller/Rows')
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/BBControlRow.cs113
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/ComponentRow.cs245
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/ContainerType.cs13
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/ControlRow.cs143
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/FileRow.cs640
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/MediaRow.cs80
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/PropertyRow.cs42
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/SummaryInfoRowCollection.cs42
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/SymbolPathType.cs17
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/UpgradeRow.cs90
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixActionRow.cs374
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixActionRowCollection.cs222
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixApprovedExeForElevationRow.cs79
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundleCatalogRow.cs50
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundleContainerRow.cs78
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundleExePackageRow.cs103
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsiFeatureRow.cs93
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsiPackageRow.cs138
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsiPropertyRow.cs58
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMspPackageRow.cs101
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsuPackageRow.cs57
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePackageCommandLineRow.cs82
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePackageExitCodeRow.cs53
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePackageRow.cs228
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePatchTargetCodeRow.cs81
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePayloadRow.cs185
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundleRelatedPackageRow.cs87
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundleRollbackBoundaryRow.cs59
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundleRow.cs228
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundleSlipstreamMspRow.cs48
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundleUpdateRow.cs38
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixBundleVariableRow.cs80
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixChainItemRow.cs39
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixChainRow.cs65
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixComplexReferenceRow.cs204
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixDeltaPatchFileRow.cs142
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixDeltaPatchSymbolPathsRow.cs58
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixFileRow.cs163
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixGroupRow.cs62
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixMediaRow.cs60
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixMediaTemplateRow.cs81
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixMergeRow.cs149
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixPayloadPropertiesRow.cs81
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixPropertyRow.cs118
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixRelatedBundleRow.cs52
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixSimpleReferenceRow.cs63
-rw-r--r--src/WixToolset.Data.WindowsInstaller/Rows/WixUpdateRegistrationRow.cs62
47 files changed, 5346 insertions, 0 deletions
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/BBControlRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/BBControlRow.cs
new file mode 100644
index 00000000..d0f08662
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/BBControlRow.cs
@@ -0,0 +1,113 @@
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.Data.Rows
4{
5 using System.Diagnostics.CodeAnalysis;
6
7 /// <summary>
8 /// Specialization of a row for the Control table.
9 /// </summary>
10 public sealed class BBControlRow : Row
11 {
12 /// <summary>
13 /// Creates a Control row that belongs to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="table">Table this Control row belongs to and should get its column definitions from.</param>
17 public BBControlRow(SourceLineNumber sourceLineNumbers, Table table) :
18 base(sourceLineNumbers, table)
19 {
20 }
21
22 /// <summary>
23 /// Gets or sets the dialog of the Control row.
24 /// </summary>
25 /// <value>Primary key of the Control row.</value>
26 public string Billboard
27 {
28 get { return (string)this.Fields[0].Data; }
29 set { this.Fields[0].Data = value; }
30 }
31
32 /// <summary>
33 /// Gets or sets the identifier for this Control row.
34 /// </summary>
35 /// <value>Identifier for this Control row.</value>
36 public string BBControl
37 {
38 get { return (string)this.Fields[1].Data; }
39 set { this.Fields[1].Data = value; }
40 }
41
42 /// <summary>
43 /// Gets or sets the type of the BBControl.
44 /// </summary>
45 /// <value>Name of the BBControl.</value>
46 [SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods")]
47 public string Type
48 {
49 get { return this.Fields[2].AsString(); }
50 set { this.Fields[2].Data = value; }
51 }
52
53 /// <summary>
54 /// Gets or sets the X location of the BBControl.
55 /// </summary>
56 /// <value>X location of the BBControl.</value>
57 public string X
58 {
59 get { return this.Fields[3].AsString(); }
60 set { this.Fields[3].Data = value; }
61 }
62
63 /// <summary>
64 /// Gets or sets the Y location of the BBControl.
65 /// </summary>
66 /// <value>Y location of the BBControl.</value>
67 public string Y
68 {
69 get { return this.Fields[4].AsString(); }
70 set { this.Fields[4].Data = value; }
71 }
72
73 /// <summary>
74 /// Gets or sets the width of the BBControl.
75 /// </summary>
76 /// <value>Width of the BBControl.</value>
77 public string Width
78 {
79 get { return this.Fields[5].AsString(); }
80 set { this.Fields[5].Data = value; }
81 }
82
83 /// <summary>
84 /// Gets or sets the height of the BBControl.
85 /// </summary>
86 /// <value>Height of the BBControl.</value>
87 public string Height
88 {
89 get { return this.Fields[6].AsString(); }
90 set { this.Fields[6].Data = value; }
91 }
92
93 /// <summary>
94 /// Gets or sets the attributes for the BBControl.
95 /// </summary>
96 /// <value>Attributes for the BBControl.</value>
97 public int Attributes
98 {
99 get { return (int)this.Fields[7].Data; }
100 set { this.Fields[7].Data = value; }
101 }
102
103 /// <summary>
104 /// Gets or sets the text of the BBControl.
105 /// </summary>
106 /// <value>Text of the BBControl.</value>
107 public string Text
108 {
109 get { return (string)this.Fields[8].Data; }
110 set { this.Fields[8].Data = value; }
111 }
112 }
113}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/ComponentRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/ComponentRow.cs
new file mode 100644
index 00000000..3ff10175
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/ComponentRow.cs
@@ -0,0 +1,245 @@
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.Data.Rows
4{
5 using System;
6 using WixToolset.Data.Msi;
7
8 /// <summary>
9 /// Specialization of a row for the Component table.
10 /// </summary>
11 public sealed class ComponentRow : Row
12 {
13 private string sourceFile;
14
15 /// <summary>
16 /// Creates a Control row that belongs to a table.
17 /// </summary>
18 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
19 /// <param name="table">Table this Component row belongs to and should get its column definitions from.</param>
20 public ComponentRow(SourceLineNumber sourceLineNumbers, Table table) :
21 base(sourceLineNumbers, table)
22 {
23 }
24
25 /// <summary>
26 /// Gets or sets the identifier for this Component row.
27 /// </summary>
28 /// <value>Identifier for this Component row.</value>
29 public string Component
30 {
31 get { return (string)this.Fields[0].Data; }
32 set { this.Fields[0].Data = value; }
33 }
34
35 /// <summary>
36 /// Gets or sets the ComponentId for this Component row.
37 /// </summary>
38 /// <value>guid for this Component row.</value>
39 public string Guid
40 {
41 get { return (string)this.Fields[1].Data; }
42 set { this.Fields[1].Data = value; }
43 }
44
45 /// <summary>
46 /// Gets or sets the Directory_ of the Component.
47 /// </summary>
48 /// <value>Directory of the Component.</value>
49 public string Directory
50 {
51 get { return (string)this.Fields[2].Data; }
52 set { this.Fields[2].Data = value; }
53 }
54
55 /// <summary>
56 /// Gets or sets the local only attribute of the Component.
57 /// </summary>
58 /// <value>Local only attribute of the component.</value>
59 public bool IsLocalOnly
60 {
61 get { return MsiInterop.MsidbComponentAttributesLocalOnly == ((int)this.Fields[3].Data & MsiInterop.MsidbComponentAttributesLocalOnly); }
62 set
63 {
64 if (value)
65 {
66 this.Fields[3].Data = (int)this.Fields[3].Data | MsiInterop.MsidbComponentAttributesLocalOnly;
67 }
68 else
69 {
70 this.Fields[3].Data = (int)this.Fields[3].Data & ~MsiInterop.MsidbComponentAttributesLocalOnly;
71 }
72 }
73 }
74
75 /// <summary>
76 /// Gets or sets the source only attribute of the Component.
77 /// </summary>
78 /// <value>Source only attribute of the component.</value>
79 public bool IsSourceOnly
80 {
81 get { return MsiInterop.MsidbComponentAttributesSourceOnly == ((int)this.Fields[3].Data & MsiInterop.MsidbComponentAttributesSourceOnly); }
82 set
83 {
84 if (value)
85 {
86 this.Fields[3].Data = (int)this.Fields[3].Data | MsiInterop.MsidbComponentAttributesSourceOnly;
87 }
88 else
89 {
90 this.Fields[3].Data = (int)this.Fields[3].Data & ~MsiInterop.MsidbComponentAttributesSourceOnly;
91 }
92 }
93 }
94
95 /// <summary>
96 /// Gets or sets the optional attribute of the Component.
97 /// </summary>
98 /// <value>Optional attribute of the component.</value>
99 public bool IsOptional
100 {
101 get { return MsiInterop.MsidbComponentAttributesOptional == ((int)this.Fields[3].Data & MsiInterop.MsidbComponentAttributesOptional); }
102 set
103 {
104 if (value)
105 {
106 this.Fields[3].Data = (int)this.Fields[3].Data | MsiInterop.MsidbComponentAttributesOptional;
107 }
108 else
109 {
110 this.Fields[3].Data = (int)this.Fields[3].Data & ~MsiInterop.MsidbComponentAttributesOptional;
111 }
112 }
113 }
114
115 /// <summary>
116 /// Gets or sets the registry key path attribute of the Component.
117 /// </summary>
118 /// <value>Registry key path attribute of the component.</value>
119 public bool IsRegistryKeyPath
120 {
121 get { return MsiInterop.MsidbComponentAttributesRegistryKeyPath == ((int)this.Fields[3].Data & MsiInterop.MsidbComponentAttributesRegistryKeyPath); }
122 set
123 {
124 if (value)
125 {
126 this.Fields[3].Data = (int)this.Fields[3].Data | MsiInterop.MsidbComponentAttributesRegistryKeyPath;
127 }
128 else
129 {
130 this.Fields[3].Data = (int)this.Fields[3].Data & ~MsiInterop.MsidbComponentAttributesRegistryKeyPath;
131 }
132 }
133 }
134
135 /// <summary>
136 /// Gets or sets the shared dll ref count attribute of the Component.
137 /// </summary>
138 /// <value>Shared dll ref countattribute of the component.</value>
139 public bool IsSharedDll
140 {
141 get { return MsiInterop.MsidbComponentAttributesSharedDllRefCount == ((int)this.Fields[3].Data & MsiInterop.MsidbComponentAttributesSharedDllRefCount); }
142 set
143 {
144 if (value)
145 {
146 this.Fields[3].Data = (int)this.Fields[3].Data | MsiInterop.MsidbComponentAttributesSharedDllRefCount;
147 }
148 else
149 {
150 this.Fields[3].Data = (int)this.Fields[3].Data & ~MsiInterop.MsidbComponentAttributesSharedDllRefCount;
151 }
152 }
153 }
154
155 /// <summary>
156 /// Gets or sets the permanent attribute of the Component.
157 /// </summary>
158 /// <value>Permanent attribute of the component.</value>
159 public bool IsPermanent
160 {
161 get { return MsiInterop.MsidbComponentAttributesPermanent == ((int)this.Fields[3].Data & MsiInterop.MsidbComponentAttributesPermanent); }
162 set
163 {
164 if (value)
165 {
166 this.Fields[3].Data = (int)this.Fields[3].Data | MsiInterop.MsidbComponentAttributesPermanent;
167 }
168 else
169 {
170 this.Fields[3].Data = (int)this.Fields[3].Data & ~MsiInterop.MsidbComponentAttributesPermanent;
171 }
172 }
173 }
174
175 /// <summary>
176 /// Gets or sets the ODBC data source key path attribute of the Component.
177 /// </summary>
178 /// <value>ODBC data source key path attribute of the component.</value>
179 public bool IsOdbcDataSourceKeyPath
180 {
181 get { return MsiInterop.MsidbComponentAttributesODBCDataSource == ((int)this.Fields[3].Data & MsiInterop.MsidbComponentAttributesODBCDataSource); }
182 set
183 {
184 if (value)
185 {
186 this.Fields[3].Data = (int)this.Fields[3].Data | MsiInterop.MsidbComponentAttributesODBCDataSource;
187 }
188 else
189 {
190 this.Fields[3].Data = (int)this.Fields[3].Data & ~MsiInterop.MsidbComponentAttributesODBCDataSource;
191 }
192 }
193 }
194
195 /// <summary>
196 /// Gets or sets the 64 bit attribute of the Component.
197 /// </summary>
198 /// <value>64-bitness of the component.</value>
199 public bool Is64Bit
200 {
201 get { return MsiInterop.MsidbComponentAttributes64bit == ((int)this.Fields[3].Data & MsiInterop.MsidbComponentAttributes64bit); }
202 set
203 {
204 if (value)
205 {
206 this.Fields[3].Data = (int)this.Fields[3].Data | MsiInterop.MsidbComponentAttributes64bit;
207 }
208 else
209 {
210 this.Fields[3].Data = (int)this.Fields[3].Data & ~MsiInterop.MsidbComponentAttributes64bit;
211 }
212 }
213 }
214
215 /// <summary>
216 /// Gets or sets the condition of the Component.
217 /// </summary>
218 /// <value>Condition of the Component.</value>
219 public string Condition
220 {
221 get { return (string)this.Fields[4].Data; }
222 set { this.Fields[4].Data = value; }
223 }
224
225 /// <summary>
226 /// Gets or sets the key path of the Component.
227 /// </summary>
228 /// <value>Key path of the Component.</value>
229 public string KeyPath
230 {
231 get { return (string)this.Fields[5].Data; }
232 set { this.Fields[5].Data = value; }
233 }
234
235 /// <summary>
236 /// Gets or sets the source location to the file to fill in the Text of the control.
237 /// </summary>
238 /// <value>Source location to the file to fill in the Text of the control.</value>
239 public string SourceFile
240 {
241 get { return this.sourceFile; }
242 set { this.sourceFile = value; }
243 }
244 }
245}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/ContainerType.cs b/src/WixToolset.Data.WindowsInstaller/Rows/ContainerType.cs
new file mode 100644
index 00000000..55a74235
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/ContainerType.cs
@@ -0,0 +1,13 @@
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.Data.Rows
4{
5 /// <summary>
6 /// Types of bundle packages.
7 /// </summary>
8 public enum ContainerType
9 {
10 Attached,
11 Detached,
12 }
13}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/ControlRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/ControlRow.cs
new file mode 100644
index 00000000..8fa3f633
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/ControlRow.cs
@@ -0,0 +1,143 @@
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.Data.Rows
4{
5 using System.Diagnostics.CodeAnalysis;
6
7 /// <summary>
8 /// Specialization of a row for the Control table.
9 /// </summary>
10 public sealed class ControlRow : Row
11 {
12 /// <summary>
13 /// Creates a Control row that belongs to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="table">Table this Control row belongs to and should get its column definitions from.</param>
17 public ControlRow(SourceLineNumber sourceLineNumbers, Table table) :
18 base(sourceLineNumbers, table)
19 {
20 }
21
22 /// <summary>
23 /// Gets or sets the dialog of the Control row.
24 /// </summary>
25 /// <value>Primary key of the Control row.</value>
26 public string Dialog
27 {
28 get { return (string)this.Fields[0].Data; }
29 set { this.Fields[0].Data = value; }
30 }
31
32 /// <summary>
33 /// Gets or sets the identifier for this Control row.
34 /// </summary>
35 /// <value>Identifier for this Control row.</value>
36 public string Control
37 {
38 get { return (string)this.Fields[1].Data; }
39 set { this.Fields[1].Data = value; }
40 }
41
42 /// <summary>
43 /// Gets or sets the type of the control.
44 /// </summary>
45 /// <value>Name of the control.</value>
46 [SuppressMessage("Microsoft.Naming", "CA1721:PropertyNamesShouldNotMatchGetMethods")]
47 public string Type
48 {
49 get { return (string)this.Fields[2].Data; }
50 set { this.Fields[2].Data = value; }
51 }
52
53 /// <summary>
54 /// Gets or sets the X location of the control.
55 /// </summary>
56 /// <value>X location of the control.</value>
57 public string X
58 {
59 get { return this.Fields[3].AsString(); }
60 set { this.Fields[3].Data = value; }
61 }
62
63 /// <summary>
64 /// Gets or sets the Y location of the control.
65 /// </summary>
66 /// <value>Y location of the control.</value>
67 public string Y
68 {
69 get { return this.Fields[4].AsString(); }
70 set { this.Fields[4].Data = value; }
71 }
72
73 /// <summary>
74 /// Gets or sets the width of the control.
75 /// </summary>
76 /// <value>Width of the control.</value>
77 public string Width
78 {
79 get { return this.Fields[5].AsString(); }
80 set { this.Fields[5].Data = value; }
81 }
82
83 /// <summary>
84 /// Gets or sets the height of the control.
85 /// </summary>
86 /// <value>Height of the control.</value>
87 public string Height
88 {
89 get { return this.Fields[6].AsString(); }
90 set { this.Fields[6].Data = value; }
91 }
92
93 /// <summary>
94 /// Gets or sets the attributes for the control.
95 /// </summary>
96 /// <value>Attributes for the control.</value>
97 public int Attributes
98 {
99 get { return (int)this.Fields[7].Data; }
100 set { this.Fields[7].Data = value; }
101 }
102
103 /// <summary>
104 /// Gets or sets the Property associated with the control.
105 /// </summary>
106 /// <value>Property associated with the control.</value>
107 public string Property
108 {
109 get { return (string)this.Fields[8].Data; }
110 set { this.Fields[8].Data = value; }
111 }
112
113 /// <summary>
114 /// Gets or sets the text of the control.
115 /// </summary>
116 /// <value>Text of the control.</value>
117 public string Text
118 {
119 get { return (string)this.Fields[9].Data; }
120 set { this.Fields[9].Data = value; }
121 }
122
123 /// <summary>
124 /// Gets or sets the next control.
125 /// </summary>
126 /// <value>Next control.</value>
127 public string Next
128 {
129 get { return (string)this.Fields[10].Data; }
130 set { this.Fields[10].Data = value; }
131 }
132
133 /// <summary>
134 /// Gets or sets the help for the control.
135 /// </summary>
136 /// <value>Help for the control.</value>
137 public string Help
138 {
139 get { return (string)this.Fields[11].Data; }
140 set { this.Fields[11].Data = value; }
141 }
142 }
143}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/FileRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/FileRow.cs
new file mode 100644
index 00000000..de5d5652
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/FileRow.cs
@@ -0,0 +1,640 @@
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.Data.Rows
4{
5 using System;
6 using System.Diagnostics;
7 using System.Globalization;
8 using WixToolset.Data.Msi;
9
10 /// <summary>
11 /// Specialization of a row for the file table.
12 /// </summary>
13 public sealed class FileRow : Row //, IComparable
14 {
15 //private string assemblyApplication;
16 //private string assemblyManifest;
17 //private FileAssemblyType assemblyType;
18 //private string directory;
19 //private int diskId;
20 //private bool fromModule;
21 //private bool isGeneratedShortFileName;
22 //private int patchGroup;
23 //private string processorArchitecture;
24 //private string source;
25 //private Row hashRow;
26 //private List<Row> assemblyNameRows;
27 //private string[] previousSource;
28 //private string symbols;
29 //private string[] previousSymbols;
30 //private PatchAttributeType patchAttributes;
31 //private string retainOffsets;
32 //private string retainLengths;
33 //private string ignoreOffsets;
34 //private string ignoreLengths;
35 //private string[] previousRetainOffsets;
36 //private string[] previousRetainLengths;
37 //private string[] previousIgnoreOffsets;
38 //private string[] previousIgnoreLengths;
39 //private string patch;
40
41 /// <summary>
42 /// Creates a File row that belongs to a table.
43 /// </summary>
44 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
45 /// <param name="table">Table this File row belongs to and should get its column definitions from.</param>
46 public FileRow(SourceLineNumber sourceLineNumbers, Table table)
47 : base(sourceLineNumbers, table)
48 {
49 //this.assemblyType = FileAssemblyType.NotAnAssembly;
50 //this.previousSource = new string[1];
51 //this.previousSymbols = new string[1];
52 //this.previousRetainOffsets = new string[1];
53 //this.previousRetainLengths = new string[1];
54 //this.previousIgnoreOffsets = new string[1];
55 //this.previousIgnoreLengths = new string[1];
56 }
57
58 /// <summary>
59 /// Creates a File row that does not belong to a table.
60 /// </summary>
61 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
62 /// <param name="tableDefinition">TableDefinition this Media row belongs to and should get its column definitions from.</param>
63 public FileRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDefinition)
64 : base(sourceLineNumbers, tableDefinition)
65 {
66 //this.assemblyType = FileAssemblyType.NotAnAssembly;
67 //this.previousSource = new string[1];
68 //this.previousSymbols = new string[1];
69 //this.previousRetainOffsets = new string[1];
70 //this.previousRetainLengths = new string[1];
71 //this.previousIgnoreOffsets = new string[1];
72 //this.previousIgnoreLengths = new string[1];
73 }
74
75 /// <summary>
76 /// Gets or sets the primary key of the file row.
77 /// </summary>
78 /// <value>Primary key of the file row.</value>
79 public string File
80 {
81 get { return (string)this.Fields[0].Data; }
82 set { this.Fields[0].Data = value; }
83 }
84
85 /// <summary>
86 /// Gets or sets the component this file row belongs to.
87 /// </summary>
88 /// <value>Component this file row belongs to.</value>
89 public string Component
90 {
91 get { return (string)this.Fields[1].Data; }
92 set { this.Fields[1].Data = value; }
93 }
94
95 /// <summary>
96 /// Gets or sets the name of the file.
97 /// </summary>
98 /// <value>Name of the file.</value>
99 public string FileName
100 {
101 get { return (string)this.Fields[2].Data; }
102 set { this.Fields[2].Data = value; }
103 }
104
105 /// <summary>
106 /// Gets or sets the real filesystem name of the file (without a pipe). This is typically the long name of the file.
107 /// However, if no long name is available, falls back to the short name.
108 /// </summary>
109 /// <value>Long Name of the file - or if no long name is available, falls back to the short name.</value>
110 public string LongFileName
111 {
112 get
113 {
114 string fileName = this.FileName;
115 int index = fileName.IndexOf('|');
116
117 // If it doesn't contain a pipe, just return the whole string
118 if (-1 == index)
119 {
120 return fileName;
121 }
122 else // otherwise, extract the part of the string after the pipe
123 {
124 return fileName.Substring(index + 1);
125 }
126 }
127 }
128
129 /// <summary>
130 /// Gets or sets the size of the file.
131 /// </summary>
132 /// <value>Size of the file.</value>
133 public int FileSize
134 {
135 get { return (int)this.Fields[3].Data; }
136 set { this.Fields[3].Data = value; }
137 }
138
139 /// <summary>
140 /// Gets or sets the version of the file.
141 /// </summary>
142 /// <value>Version of the file.</value>
143 public string Version
144 {
145 get { return (string)this.Fields[4].Data; }
146 set { this.Fields[4].Data = value; }
147 }
148
149 /// <summary>
150 /// Gets or sets the LCID of the file.
151 /// </summary>
152 /// <value>LCID of the file.</value>
153 public string Language
154 {
155 get { return (string)this.Fields[5].Data; }
156 set { this.Fields[5].Data = value; }
157 }
158
159 /// <summary>
160 /// Gets or sets the attributes on a file.
161 /// </summary>
162 /// <value>Attributes on a file.</value>
163 public int Attributes
164 {
165 get { return Convert.ToInt32(this.Fields[6].Data, CultureInfo.InvariantCulture); }
166 set { this.Fields[6].Data = value; }
167 }
168
169 /// <summary>
170 /// Gets or sets whether this file should be compressed.
171 /// </summary>
172 /// <value>Whether this file should be compressed.</value>
173 public YesNoType Compressed
174 {
175 get
176 {
177 bool compressedFlag = (0 < (this.Attributes & MsiInterop.MsidbFileAttributesCompressed));
178 bool noncompressedFlag = (0 < (this.Attributes & MsiInterop.MsidbFileAttributesNoncompressed));
179
180 if (compressedFlag && noncompressedFlag)
181 {
182 throw new WixException(WixDataErrors.IllegalFileCompressionAttributes(this.SourceLineNumbers));
183 }
184 else if (compressedFlag)
185 {
186 return YesNoType.Yes;
187 }
188 else if (noncompressedFlag)
189 {
190 return YesNoType.No;
191 }
192 else
193 {
194 return YesNoType.NotSet;
195 }
196 }
197
198 set
199 {
200 if (YesNoType.Yes == value)
201 {
202 // these are mutually exclusive
203 this.Attributes |= MsiInterop.MsidbFileAttributesCompressed;
204 this.Attributes &= ~MsiInterop.MsidbFileAttributesNoncompressed;
205 }
206 else if (YesNoType.No == value)
207 {
208 // these are mutually exclusive
209 this.Attributes |= MsiInterop.MsidbFileAttributesNoncompressed;
210 this.Attributes &= ~MsiInterop.MsidbFileAttributesCompressed;
211 }
212 else // not specified
213 {
214 Debug.Assert(YesNoType.NotSet == value);
215
216 // clear any compression bits
217 this.Attributes &= ~MsiInterop.MsidbFileAttributesCompressed;
218 this.Attributes &= ~MsiInterop.MsidbFileAttributesNoncompressed;
219 }
220 }
221 }
222
223 /// <summary>
224 /// Gets or sets the sequence of the file row.
225 /// </summary>
226 /// <value>Sequence of the file row.</value>
227 public int Sequence
228 {
229 get { return (int)this.Fields[7].Data; }
230 set { this.Fields[7].Data = value; }
231 }
232
233 /////// <summary>
234 /////// Gets or sets the type of assembly of file row.
235 /////// </summary>
236 /////// <value>Assembly type for file row.</value>
237 ////public FileAssemblyType AssemblyType
238 ////{
239 //// get { return this.assemblyType; }
240 //// set { this.assemblyType = value; }
241 ////}
242
243 /////// <summary>
244 /////// Gets or sets the identifier for the assembly application.
245 /////// </summary>
246 /////// <value>Identifier for the assembly application.</value>
247 ////public string AssemblyApplication
248 ////{
249 //// get { return this.assemblyApplication; }
250 //// set { this.assemblyApplication = value; }
251 ////}
252
253 /////// <summary>
254 /////// Gets or sets the identifier for the assembly manifest.
255 /////// </summary>
256 /////// <value>Identifier for the assembly manifest.</value>
257 ////public string AssemblyManifest
258 ////{
259 //// get { return this.assemblyManifest; }
260 //// set { this.assemblyManifest = value; }
261 ////}
262
263 /////// <summary>
264 /////// Gets or sets the directory of the file.
265 /////// </summary>
266 /////// <value>Directory of the file.</value>
267 ////public string Directory
268 ////{
269 //// get { return this.directory; }
270 //// set { this.directory = value; }
271 ////}
272
273 /////// <summary>
274 /////// Gets or sets the disk id for this file.
275 /////// </summary>
276 /////// <value>Disk id for the file.</value>
277 ////public int DiskId
278 ////{
279 //// get { return this.diskId; }
280 //// set { this.diskId = value; }
281 ////}
282
283 /////// <summary>
284 /////// Gets or sets the source location to the file.
285 /////// </summary>
286 /////// <value>Source location to the file.</value>
287 ////public string Source
288 ////{
289 //// get { return this.source; }
290 //// set { this.source = value; }
291 ////}
292
293 /////// <summary>
294 /////// Gets or sets the source location to the previous file.
295 /////// </summary>
296 /////// <value>Source location to the previous file.</value>
297 ////public string PreviousSource
298 ////{
299 //// get { return this.previousSource[0]; }
300 //// set { this.previousSource[0] = value; }
301 ////}
302
303 /////// <summary>
304 /////// Gets the source location to the previous files.
305 /////// </summary>
306 /////// <value>Source location to the previous files.</value>
307 ////[SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
308 ////public string[] PreviousSourceArray
309 ////{
310 //// get { return this.previousSource; }
311 ////}
312
313 /////// <summary>
314 /////// Gets or sets the architecture the file executes on.
315 /////// </summary>
316 /////// <value>Architecture the file executes on.</value>
317 ////public string ProcessorArchitecture
318 ////{
319 //// get { return this.processorArchitecture; }
320 //// set { this.processorArchitecture = value; }
321 ////}
322
323 /////// <summary>
324 /////// Gets of sets the patch group of a patch-added file.
325 /////// </summary>
326 /////// <value>The patch group of a patch-added file.</value>
327 ////public int PatchGroup
328 ////{
329 //// get { return this.patchGroup; }
330 //// set { this.patchGroup = value; }
331 ////}
332
333 /////// <summary>
334 /////// Gets or sets the patch header of the file.
335 /////// </summary>
336 /////// <value>Patch header of the file.</value>
337 ////public string Patch
338 ////{
339 //// get { return this.patch; }
340 //// set { this.patch = value; }
341 ////}
342
343 /////// <summary>
344 /////// Gets or sets the locations to find the file's symbols.
345 /////// </summary>
346 /////// <value>Symbol paths for the file.</value>
347 ////public string Symbols
348 ////{
349 //// get { return this.symbols; }
350 //// set { this.symbols = value; }
351 ////}
352
353 /////// <summary>
354 /////// Gets or sets the locations to find the file's previous symbols.
355 /////// </summary>
356 /////// <value>Symbol paths for the previous file.</value>
357 ////public string PreviousSymbols
358 ////{
359 //// get { return this.previousSymbols[0]; }
360 //// set { this.previousSymbols[0] = value; }
361 ////}
362
363 /////// <summary>
364 /////// Gets the locations to find the files' previous symbols.
365 /////// </summary>
366 /////// <value>Symbol paths for the previous files.</value>
367 ////[SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
368 ////public string[] PreviousSymbolsArray
369 ////{
370 //// get { return this.previousSymbols; }
371 ////}
372
373 /////// <summary>
374 /////// Gets or sets the generated short file name attribute.
375 /////// </summary>
376 /////// <value>The generated short file name attribute.</value>
377 ////public bool IsGeneratedShortFileName
378 ////{
379 //// get { return this.isGeneratedShortFileName; }
380
381 //// set { this.isGeneratedShortFileName = value; }
382 ////}
383
384 /////// <summary>
385 /////// Gets or sets whether this row came from a merge module.
386 /////// </summary>
387 /////// <value>Whether this row came from a merge module.</value>
388 ////public bool FromModule
389 ////{
390 //// get { return this.fromModule; }
391 //// set { this.fromModule = value; }
392 ////}
393
394 /////// <summary>
395 /////// Gets or sets the MsiFileHash row created for this FileRow.
396 /////// </summary>
397 /////// <value>Row for MsiFileHash table.</value>
398 ////public Row HashRow
399 ////{
400 //// get { return this.hashRow; }
401 //// set { this.hashRow = value; }
402 ////}
403
404 /////// <summary>
405 /////// Gets or sets the set of MsiAssemblyName rows created for this FileRow.
406 /////// </summary>
407 /////// <value>RowCollection of MsiAssemblyName table.</value>
408 ////[SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
409 ////public List<Row> AssemblyNameRows
410 ////{
411 //// get { return this.assemblyNameRows; }
412 //// set { this.assemblyNameRows = value; }
413 ////}
414
415 /////// <summary>
416 /////// Gets or sets the patching attributes to the file.
417 /////// </summary>
418 /////// <value>Patching attributes of the file.</value>
419 ////public PatchAttributeType PatchAttributes
420 ////{
421 //// get { return this.patchAttributes; }
422 //// set { this.patchAttributes = value; }
423 ////}
424
425 /////// <summary>
426 /////// Gets or sets the delta patch retain-length list for the file.
427 /////// </summary>
428 /////// <value>RetainLength list for the file.</value>
429 ////public string RetainLengths
430 ////{
431 //// get { return this.retainLengths; }
432 //// set { this.retainLengths = value; }
433 ////}
434
435 /////// <summary>
436 /////// Gets or sets the delta patch ignore-offset list for the file.
437 /////// </summary>
438 /////// <value>IgnoreOffset list for the file.</value>
439 ////public string IgnoreOffsets
440 ////{
441 //// get { return this.ignoreOffsets; }
442 //// set { this.ignoreOffsets = value; }
443 ////}
444
445 /////// <summary>
446 /////// Gets or sets the delta patch ignore-length list for the file.
447 /////// </summary>
448 /////// <value>IgnoreLength list for the file.</value>
449 ////public string IgnoreLengths
450 ////{
451 //// get { return this.ignoreLengths; }
452 //// set { this.ignoreLengths = value; }
453 ////}
454
455 /////// <summary>
456 /////// Gets or sets the delta patch retain-offset list for the file.
457 /////// </summary>
458 /////// <value>RetainOffset list for the file.</value>
459 ////public string RetainOffsets
460 ////{
461 //// get { return this.retainOffsets; }
462 //// set { this.retainOffsets = value; }
463 ////}
464
465 /////// <summary>
466 /////// Gets or sets the delta patch retain-length list for the previous file.
467 /////// </summary>
468 /////// <value>RetainLength list for the previous file.</value>
469 ////public string PreviousRetainLengths
470 ////{
471 //// get { return this.previousRetainLengths[0]; }
472 //// set { this.previousRetainLengths[0] = value; }
473 ////}
474
475 /////// <summary>
476 /////// Gets the delta patch retain-length list for the previous files.
477 /////// </summary>
478 /////// <value>RetainLength list for the previous files.</value>
479 ////[SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
480 ////public string[] PreviousRetainLengthsArray
481 ////{
482 //// get { return this.previousRetainLengths; }
483 ////}
484
485 /////// <summary>
486 /////// Gets or sets the delta patch ignore-offset list for the previous file.
487 /////// </summary>
488 /////// <value>IgnoreOffset list for the previous file.</value>
489 ////public string PreviousIgnoreOffsets
490 ////{
491 //// get { return this.previousIgnoreOffsets[0]; }
492 //// set { this.previousIgnoreOffsets[0] = value; }
493 ////}
494
495 /////// <summary>
496 /////// Gets the delta patch ignore-offset list for the previous files.
497 /////// </summary>
498 /////// <value>IgnoreOffset list for the previous files.</value>
499 ////[SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
500 ////public string[] PreviousIgnoreOffsetsArray
501 ////{
502 //// get { return this.previousIgnoreOffsets; }
503 ////}
504
505 /////// <summary>
506 /////// Gets or sets the delta patch ignore-length list for the previous file.
507 /////// </summary>
508 /////// <value>IgnoreLength list for the previous file.</value>
509 ////public string PreviousIgnoreLengths
510 ////{
511 //// get { return this.previousIgnoreLengths[0]; }
512 //// set { this.previousIgnoreLengths[0] = value; }
513 ////}
514
515 /////// <summary>
516 /////// Gets the delta patch ignore-length list for the previous files.
517 /////// </summary>
518 /////// <value>IgnoreLength list for the previous files.</value>
519 ////[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
520 ////public string[] PreviousIgnoreLengthsArray
521 ////{
522 //// get { return this.previousIgnoreLengths; }
523 ////}
524
525 /////// <summary>
526 /////// Gets or sets the delta patch retain-offset list for the previous file.
527 /////// </summary>
528 /////// <value>RetainOffset list for the previous file.</value>
529 ////public string PreviousRetainOffsets
530 ////{
531 //// get { return this.previousRetainOffsets[0]; }
532 //// set { this.previousRetainOffsets[0] = value; }
533 ////}
534
535 /////// <summary>
536 /////// Gets the delta patch retain-offset list for the previous files.
537 /////// </summary>
538 /////// <value>RetainOffset list for the previous files.</value>
539 ////[SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
540 ////public string[] PreviousRetainOffsetsArray
541 ////{
542 //// get { return this.previousRetainOffsets; }
543 ////}
544
545 /////// <summary>
546 /////// Compares the current FileRow with another object of the same type.
547 /////// </summary>
548 /////// <param name="obj">An object to compare with this instance.</param>
549 /////// <returns>An integer that indicates the relative order of the comparands.</returns>
550 ////[SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", MessageId = "System.ArgumentException.#ctor(System.String)")]
551 ////[SuppressMessage("Microsoft.Globalization", "CA1309:UseOrdinalStringComparison")]
552 ////public int CompareTo(object obj)
553 ////{
554 //// if (this == obj)
555 //// {
556 //// return 0;
557 //// }
558
559 //// FileRow fileRow = obj as FileRow;
560 //// if (null == fileRow)
561 //// {
562 //// throw new ArgumentException(WixDataStrings.EXP_OtherObjectIsNotFileRow);
563 //// }
564
565 //// int compared = this.DiskId - fileRow.DiskId;
566 //// if (0 == compared)
567 //// {
568 //// compared = this.patchGroup - fileRow.patchGroup;
569
570 //// if (0 == compared)
571 //// {
572 //// compared = String.Compare(this.File, fileRow.File, StringComparison.InvariantCulture);
573 //// }
574 //// }
575
576 //// return compared;
577 ////}
578
579 /////// <summary>
580 /////// Copies data from another FileRow object.
581 /////// </summary>
582 /////// <param name="src">An row to get data from.</param>
583 ////public void CopyFrom(FileRow src)
584 ////{
585 //// for (int i = 0; i < src.Fields.Length; i++)
586 //// {
587 //// this[i] = src[i];
588 //// }
589 //// this.assemblyManifest = src.assemblyManifest;
590 //// this.assemblyType = src.assemblyType;
591 //// this.directory = src.directory;
592 //// this.diskId = src.diskId;
593 //// this.fromModule = src.fromModule;
594 //// this.isGeneratedShortFileName = src.isGeneratedShortFileName;
595 //// this.patchGroup = src.patchGroup;
596 //// this.processorArchitecture = src.processorArchitecture;
597 //// this.source = src.source;
598 //// this.PreviousSource = src.PreviousSource;
599 //// this.Operation = src.Operation;
600 //// this.symbols = src.symbols;
601 //// this.PreviousSymbols = src.PreviousSymbols;
602 //// this.patchAttributes = src.patchAttributes;
603 //// this.retainOffsets = src.retainOffsets;
604 //// this.retainLengths = src.retainLengths;
605 //// this.ignoreOffsets = src.ignoreOffsets;
606 //// this.ignoreLengths = src.ignoreLengths;
607 //// this.PreviousRetainOffsets = src.PreviousRetainOffsets;
608 //// this.PreviousRetainLengths = src.PreviousRetainLengths;
609 //// this.PreviousIgnoreOffsets = src.PreviousIgnoreOffsets;
610 //// this.PreviousIgnoreLengths = src.PreviousIgnoreLengths;
611 ////}
612
613 /////// <summary>
614 /////// Appends previous data from another FileRow object.
615 /////// </summary>
616 /////// <param name="src">An row to get data from.</param>
617 ////public void AppendPreviousDataFrom(FileRow src)
618 ////{
619 //// AppendStringToArray(ref this.previousSource, src.previousSource[0]);
620 //// AppendStringToArray(ref this.previousSymbols, src.previousSymbols[0]);
621 //// AppendStringToArray(ref this.previousRetainOffsets, src.previousRetainOffsets[0]);
622 //// AppendStringToArray(ref this.previousRetainLengths, src.previousRetainLengths[0]);
623 //// AppendStringToArray(ref this.previousIgnoreOffsets, src.previousIgnoreOffsets[0]);
624 //// AppendStringToArray(ref this.previousIgnoreLengths, src.previousIgnoreLengths[0]);
625 ////}
626
627 /////// <summary>
628 /////// Helper method for AppendPreviousDataFrom.
629 /////// </summary>
630 /////// <param name="source">Destination array.</param>
631 /////// <param name="destination">Source string.</param>
632 ////private static void AppendStringToArray(ref string[] destination, string source)
633 ////{
634 //// string[] result = new string[destination.Length + 1];
635 //// destination.CopyTo(result, 0);
636 //// result[destination.Length] = source;
637 //// destination = result;
638 ////}
639 }
640}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/MediaRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/MediaRow.cs
new file mode 100644
index 00000000..f387a8d2
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/MediaRow.cs
@@ -0,0 +1,80 @@
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.Data.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the Media table.
7 /// </summary>
8 public sealed class MediaRow : Row
9 {
10 /// <summary>
11 /// Creates a Media row that belongs to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="table">Table this Media row belongs to and should get its column definitions from.</param>
15 public MediaRow(SourceLineNumber sourceLineNumbers, Table table)
16 : base(sourceLineNumbers, table)
17 {
18 }
19
20 /// <summary>
21 /// Gets or sets the disk id for this media row.
22 /// </summary>
23 /// <value>Disk id.</value>
24 public int DiskId
25 {
26 get { return (int)this.Fields[0].Data; }
27 set { this.Fields[0].Data = value; }
28 }
29
30 /// <summary>
31 /// Gets or sets the last sequence number for this media row.
32 /// </summary>
33 /// <value>Last sequence number.</value>
34 public int LastSequence
35 {
36 get { return (int)this.Fields[1].Data; }
37 set { this.Fields[1].Data = value; }
38 }
39
40 /// <summary>
41 /// Gets or sets the disk prompt for this media row.
42 /// </summary>
43 /// <value>Disk prompt.</value>
44 public string DiskPrompt
45 {
46 get { return (string)this.Fields[2].Data; }
47 set { this.Fields[2].Data = value; }
48 }
49
50 /// <summary>
51 /// Gets or sets the cabinet name for this media row.
52 /// </summary>
53 /// <value>Cabinet name.</value>
54 public string Cabinet
55 {
56 get { return (string)this.Fields[3].Data; }
57 set { this.Fields[3].Data = value; }
58 }
59
60 /// <summary>
61 /// Gets or sets the volume label for this media row.
62 /// </summary>
63 /// <value>Volume label.</value>
64 public string VolumeLabel
65 {
66 get { return (string)this.Fields[4].Data; }
67 set { this.Fields[4].Data = value; }
68 }
69
70 /// <summary>
71 /// Gets or sets the source for this media row.
72 /// </summary>
73 /// <value>Source.</value>
74 public string Source
75 {
76 get { return (string)this.Fields[5].Data; }
77 set { this.Fields[5].Data = value; }
78 }
79 }
80}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/PropertyRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/PropertyRow.cs
new file mode 100644
index 00000000..558df760
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/PropertyRow.cs
@@ -0,0 +1,42 @@
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.Data.Rows
4{
5 using System;
6
7 /// <summary>
8 /// Specialization of a row for the upgrade table.
9 /// </summary>
10 public sealed class PropertyRow : Row
11 {
12 /// <summary>
13 /// Creates an Upgrade row that belongs to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="table">Table this Upgrade row belongs to and should get its column definitions from.</param>
17 public PropertyRow(SourceLineNumber sourceLineNumbers, Table table) :
18 base(sourceLineNumbers, table)
19 {
20 }
21
22 /// <summary>
23 /// Gets and sets the upgrade code for the row.
24 /// </summary>
25 /// <value>Property identifier for the row.</value>
26 public string Property
27 {
28 get { return (string)this.Fields[0].Data; }
29 set { this.Fields[0].Data = value; }
30 }
31
32 /// <summary>
33 /// Gets and sets the value for the row.
34 /// </summary>
35 /// <value>Property value for the row.</value>
36 public string Value
37 {
38 get { return (string)this.Fields[1].Data; }
39 set { this.Fields[1].Data = value; }
40 }
41 }
42}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/SummaryInfoRowCollection.cs b/src/WixToolset.Data.WindowsInstaller/Rows/SummaryInfoRowCollection.cs
new file mode 100644
index 00000000..bc931f15
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/SummaryInfoRowCollection.cs
@@ -0,0 +1,42 @@
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.Data.Rows
4{
5 using System;
6 using System.Collections;
7 using System.Collections.ObjectModel;
8
9 /// <summary>
10 /// Indexed container class for summary information rows.
11 /// </summary>
12 public sealed class SummaryInfoRowCollection : KeyedCollection<int, Row>
13 {
14 /// <summary>
15 /// Creates the keyed collection from existing rows in a table.
16 /// </summary>
17 /// <param name="table">The summary information table to index.</param>
18 public SummaryInfoRowCollection(Table table)
19 {
20 if (0 != String.CompareOrdinal("_SummaryInformation", table.Name))
21 {
22 string message = string.Format(WixDataStrings.EXP_UnsupportedTable, table.Name);
23 throw new ArgumentException(message, "table");
24 }
25
26 foreach (Row row in table.Rows)
27 {
28 this.Add(row);
29 }
30 }
31
32 /// <summary>
33 /// Gets the summary property ID for the <paramref name="row"/>.
34 /// </summary>
35 /// <param name="row">The row to index.</param>
36 /// <returns>The summary property ID for the <paramref name="row"/>.
37 protected override int GetKeyForItem(Row row)
38 {
39 return (int)row[0];
40 }
41 }
42}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/SymbolPathType.cs b/src/WixToolset.Data.WindowsInstaller/Rows/SymbolPathType.cs
new file mode 100644
index 00000000..964e1caa
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/SymbolPathType.cs
@@ -0,0 +1,17 @@
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.Data.Rows
4{
5 /// <summary>
6 /// The types that the WixDeltaPatchSymbolPaths table can hold.
7 /// </summary>
8 /// <remarks>The order of these values is important since WixDeltaPatchSymbolPaths are sorted by this type.</remarks>
9 public enum SymbolPathType
10 {
11 File,
12 Component,
13 Directory,
14 Media,
15 Product
16 };
17}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/UpgradeRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/UpgradeRow.cs
new file mode 100644
index 00000000..807a9f93
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/UpgradeRow.cs
@@ -0,0 +1,90 @@
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.Data.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the upgrade table.
7 /// </summary>
8 public sealed class UpgradeRow : Row
9 {
10 /// <summary>
11 /// Creates an Upgrade row that belongs to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="table">Table this Upgrade row belongs to and should get its column definitions from.</param>
15 public UpgradeRow(SourceLineNumber sourceLineNumbers, Table table) :
16 base(sourceLineNumbers, table)
17 {
18 }
19
20 /// <summary>
21 /// Gets and sets the upgrade code for the row.
22 /// </summary>
23 /// <value>Upgrade code for the row.</value>
24 public string UpgradeCode
25 {
26 get { return (string)this.Fields[0].Data; }
27 set { this.Fields[0].Data = value; }
28 }
29
30 /// <summary>
31 /// Gets and sets the version minimum for the row.
32 /// </summary>
33 /// <value>Version minimum for the row.</value>
34 public string VersionMin
35 {
36 get { return (string)this.Fields[1].Data; }
37 set { this.Fields[1].Data = value; }
38 }
39
40 /// <summary>
41 /// Gets and sets the version maximum for the row.
42 /// </summary>
43 /// <value>Version maximum for the row.</value>
44 public string VersionMax
45 {
46 get { return (string)this.Fields[2].Data; }
47 set { this.Fields[2].Data = value; }
48 }
49
50 /// <summary>
51 /// Gets and sets the language for the row.
52 /// </summary>
53 /// <value>Language for the row.</value>
54 public string Language
55 {
56 get { return (string)this.Fields[3].Data; }
57 set { this.Fields[3].Data = value; }
58 }
59
60 /// <summary>
61 /// Gets and sets the attributes for the row.
62 /// </summary>
63 /// <value>Attributes for the row.</value>
64 public int Attributes
65 {
66 get { return (int)this.Fields[4].Data; }
67 set { this.Fields[4].Data = value; }
68 }
69
70 /// <summary>
71 /// Gets and sets the remove code for the row.
72 /// </summary>
73 /// <value>Remove code for the row.</value>
74 public string Remove
75 {
76 get { return (string)this.Fields[5].Data; }
77 set { this.Fields[5].Data = value; }
78 }
79
80 /// <summary>
81 /// Gets and sets the action property for the row.
82 /// </summary>
83 /// <value>Action property for the row.</value>
84 public string ActionProperty
85 {
86 get { return (string)this.Fields[6].Data; }
87 set { this.Fields[6].Data = value; }
88 }
89 }
90}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixActionRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixActionRow.cs
new file mode 100644
index 00000000..3009e59d
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixActionRow.cs
@@ -0,0 +1,374 @@
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.Data.Rows
4{
5 using System;
6 using System.Collections.Generic;
7 using System.Diagnostics;
8 using System.Globalization;
9 using System.Xml;
10 using System.Xml.Schema;
11
12 /// <summary>
13 /// The Sequence tables that actions may belong to.
14 /// </summary>
15 public enum SequenceTable
16 {
17 /// <summary>AdminUISequence</summary>
18 AdminUISequence,
19
20 /// <summary>AdminExecuteSequence</summary>
21 AdminExecuteSequence,
22
23 /// <summary>AdvtExecuteSequence</summary>
24 AdvtExecuteSequence,
25
26 /// <summary>InstallUISequence</summary>
27 InstallUISequence,
28
29 /// <summary>InstallExecuteSequence</summary>
30 InstallExecuteSequence
31 }
32
33 /// <summary>
34 /// Specialization of a row for the sequence tables.
35 /// </summary>
36 public sealed class WixActionRow : Row, IComparable
37 {
38 private WixActionRowCollection previousActionRows;
39 private WixActionRowCollection nextActionRows;
40
41 /// <summary>
42 /// Instantiates an ActionRow that belongs to a table.
43 /// </summary>
44 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
45 /// <param name="table">Table this Action row belongs to and should get its column definitions from.</param>
46 public WixActionRow(SourceLineNumber sourceLineNumbers, Table table) :
47 base(sourceLineNumbers, table)
48 {
49 }
50
51 /// <summary>
52 /// Instantiates a standard ActionRow.
53 /// </summary>
54 /// <param name="sequenceTable">The sequence table of the standard action.</param>
55 /// <param name="action">The name of the standard action.</param>
56 /// <param name="condition">The condition of the standard action.</param>
57 /// <param name="sequence">The suggested sequence number of the standard action.</param>
58 private WixActionRow(SequenceTable sequenceTable, string action, string condition, int sequence) :
59 base(null, WindowsInstallerStandard.GetTableDefinitions()["WixAction"])
60 {
61 this.SequenceTable = sequenceTable;
62 this.Action = action;
63 this.Condition = condition;
64 this.Sequence = sequence;
65 this.Overridable = true; // all standard actions are overridable by default
66 }
67
68 /// <summary>
69 /// Instantiates an ActionRow by copying data from another ActionRow.
70 /// </summary>
71 /// <param name="source">The row the data is copied from.</param>
72 /// <remarks>The previous and next action collections are not copied.</remarks>
73 private WixActionRow(WixActionRow source)
74 : base(source)
75 {
76 }
77
78 /// <summary>
79 /// Gets or sets the name of the action.
80 /// </summary>
81 /// <value>The name of the action.</value>
82 public string Action
83 {
84 get { return (string)this.Fields[1].Data; }
85 set { this.Fields[1].Data = value; }
86 }
87
88 /// <summary>
89 /// Gets the name of the action this action should be scheduled after.
90 /// </summary>
91 /// <value>The name of the action this action should be scheduled after.</value>
92 public string After
93 {
94 get { return (string)this.Fields[5].Data; }
95 set { this.Fields[5].Data = value; }
96 }
97
98 /// <summary>
99 /// Gets the name of the action this action should be scheduled before.
100 /// </summary>
101 /// <value>The name of the action this action should be scheduled before.</value>
102 public string Before
103 {
104 get { return (string)this.Fields[4].Data; }
105 set { this.Fields[4].Data = value; }
106 }
107
108 /// <summary>
109 /// Gets or sets the condition of the action.
110 /// </summary>
111 /// <value>The condition of the action.</value>
112 public string Condition
113 {
114 get { return (string)this.Fields[2].Data; }
115 set { this.Fields[2].Data = value; }
116 }
117
118 /// <summary>
119 /// Gets or sets whether this action is overridable.
120 /// </summary>
121 /// <value>Whether this action is overridable.</value>
122 public bool Overridable
123 {
124 get { return (1 == Convert.ToInt32(this.Fields[6].Data, CultureInfo.InvariantCulture)); }
125 set { this.Fields[6].Data = (value ? 1 : 0); }
126 }
127
128 /// <summary>
129 /// Gets or sets the sequence number of this action.
130 /// </summary>
131 /// <value>The sequence number of this action.</value>
132 public int Sequence
133 {
134 get { return Convert.ToInt32(this.Fields[3].Data, CultureInfo.InvariantCulture); }
135 set { this.Fields[3].Data = value; }
136 }
137
138 /// <summary>
139 /// Gets of sets the sequence table of this action.
140 /// </summary>
141 /// <value>The sequence table of this action.</value>
142 public SequenceTable SequenceTable
143 {
144 get { return (SequenceTable)Enum.Parse(typeof(SequenceTable), (string)this.Fields[0].Data); }
145 set { this.Fields[0].Data = value.ToString(); }
146 }
147
148 /// <summary>
149 /// Gets the actions that should be scheduled after this action.
150 /// </summary>
151 /// <value>The actions that should be scheduled after this action.</value>
152 public WixActionRowCollection NextActionRows
153 {
154 get
155 {
156 if (null == this.nextActionRows)
157 {
158 this.nextActionRows = new WixActionRowCollection();
159 }
160
161 return this.nextActionRows;
162 }
163 }
164
165 /// <summary>
166 /// Gets the actions that should be scheduled before this action.
167 /// </summary>
168 /// <value>The actions that should be scheduled before this action.</value>
169 public WixActionRowCollection PreviousActionRows
170 {
171 get
172 {
173 if (null == this.previousActionRows)
174 {
175 this.previousActionRows = new WixActionRowCollection();
176 }
177
178 return this.previousActionRows;
179 }
180 }
181
182 /// <summary>
183 /// Creates a clone of the action row.
184 /// </summary>
185 /// <returns>A shallow copy of the source object.</returns>
186 /// <remarks>The previous and next action collections are not copied.</remarks>
187 public WixActionRow Clone()
188 {
189 return new WixActionRow(this);
190 }
191
192 /// <summary>
193 /// Compares the current instance with another object of the same type.
194 /// </summary>
195 /// <param name="obj">Other reference to compare this one to.</param>
196 /// <returns>Returns less than 0 for less than, 0 for equals, and greater than 0 for greater.</returns>
197 public int CompareTo(object obj)
198 {
199 WixActionRow otherActionRow = (WixActionRow)obj;
200
201 return this.Sequence.CompareTo(otherActionRow.Sequence);
202 }
203
204 /// <summary>
205 /// Parses ActionRows from the Xml reader.
206 /// </summary>
207 /// <param name="reader">Xml reader that contains serialized ActionRows.</param>
208 /// <returns>The parsed ActionRows.</returns>
209 internal static WixActionRow[] Parse(XmlReader reader)
210 {
211 Debug.Assert("action" == reader.LocalName);
212
213 string id = null;
214 string condition = null;
215 bool empty = reader.IsEmptyElement;
216 int sequence = int.MinValue;
217 int sequenceCount = 0;
218 SequenceTable[] sequenceTables = new SequenceTable[Enum.GetValues(typeof(SequenceTable)).Length];
219
220 while (reader.MoveToNextAttribute())
221 {
222 switch (reader.Name)
223 {
224 case "name":
225 id = reader.Value;
226 break;
227 case "AdminExecuteSequence":
228 if (reader.Value.Equals("yes"))
229 {
230 sequenceTables[sequenceCount] = SequenceTable.AdminExecuteSequence;
231 ++sequenceCount;
232 }
233 break;
234 case "AdminUISequence":
235 if (reader.Value.Equals("yes"))
236 {
237 sequenceTables[sequenceCount] = SequenceTable.AdminUISequence;
238 ++sequenceCount;
239 }
240 break;
241 case "AdvtExecuteSequence":
242 if (reader.Value.Equals("yes"))
243 {
244 sequenceTables[sequenceCount] = SequenceTable.AdvtExecuteSequence;
245 ++sequenceCount;
246 }
247 break;
248 case "condition":
249 condition = reader.Value;
250 break;
251 case "InstallExecuteSequence":
252 if (reader.Value.Equals("yes"))
253 {
254 sequenceTables[sequenceCount] = SequenceTable.InstallExecuteSequence;
255 ++sequenceCount;
256 }
257 break;
258 case "InstallUISequence":
259 if (reader.Value.Equals("yes"))
260 {
261 sequenceTables[sequenceCount] = SequenceTable.InstallUISequence;
262 ++sequenceCount;
263 }
264 break;
265 case "sequence":
266 sequence = Convert.ToInt32(reader.Value, CultureInfo.InvariantCulture);
267 break;
268 }
269 }
270
271 if (null == id)
272 {
273 throw new XmlException();
274 }
275
276 if (int.MinValue == sequence)
277 {
278 throw new XmlException();
279 }
280 else if (1 > sequence)
281 {
282 throw new XmlException();
283 }
284
285 if (0 == sequenceCount)
286 {
287 throw new XmlException();
288 }
289
290 if (!empty && reader.Read() && XmlNodeType.EndElement != reader.MoveToContent())
291 {
292 throw new XmlException();
293 }
294
295 // create the actions
296 WixActionRow[] actionRows = new WixActionRow[sequenceCount];
297 for (int i = 0; i < sequenceCount; i++)
298 {
299 WixActionRow actionRow = new WixActionRow(sequenceTables[i], id, condition, sequence);
300 actionRows[i] = actionRow;
301 }
302
303 return actionRows;
304 }
305
306 /// <summary>
307 /// Determines whether this ActionRow contains the specified ActionRow as a child in its dependency tree.
308 /// </summary>
309 /// <param name="actionRow">The possible child ActionRow.</param>
310 /// <returns>true if the ActionRow is a child of this ActionRow; false otherwise.</returns>
311 public bool ContainsChildActionRow(WixActionRow actionRow)
312 {
313 if (null != this.previousActionRows)
314 {
315 if (this.previousActionRows.Contains(actionRow.SequenceTable, actionRow.Action))
316 {
317 return true;
318 }
319 }
320
321 if (null != this.nextActionRows)
322 {
323 if (this.nextActionRows.Contains(actionRow.SequenceTable, actionRow.Action))
324 {
325 return true;
326 }
327 }
328
329 return false;
330 }
331
332 /// <summary>
333 /// Get all the actions scheduled before this one in a particular sequence table.
334 /// </summary>
335 /// <param name="sequenceTable">The sequence table.</param>
336 /// <param name="allPreviousActionRows">A RowCollection which will contain all the previous actions.</param>
337 public void GetAllPreviousActionRows(SequenceTable sequenceTable, IList<WixActionRow> allPreviousActionRows)
338 {
339 if (null != this.previousActionRows)
340 {
341 foreach (WixActionRow actionRow in this.previousActionRows)
342 {
343 if (sequenceTable == actionRow.SequenceTable)
344 {
345 actionRow.GetAllPreviousActionRows(sequenceTable, allPreviousActionRows);
346 allPreviousActionRows.Add(actionRow);
347 actionRow.GetAllNextActionRows(sequenceTable, allPreviousActionRows);
348 }
349 }
350 }
351 }
352
353 /// <summary>
354 /// Get all the actions scheduled after this one in a particular sequence table.
355 /// </summary>
356 /// <param name="sequenceTable">The sequence table.</param>
357 /// <param name="allNextActionRows">A RowCollection which will contain all the next actions.</param>
358 public void GetAllNextActionRows(SequenceTable sequenceTable, IList<WixActionRow> allNextActionRows)
359 {
360 if (null != this.nextActionRows)
361 {
362 foreach (WixActionRow actionRow in this.nextActionRows)
363 {
364 if (sequenceTable == actionRow.SequenceTable)
365 {
366 actionRow.GetAllPreviousActionRows(sequenceTable, allNextActionRows);
367 allNextActionRows.Add(actionRow);
368 actionRow.GetAllNextActionRows(sequenceTable, allNextActionRows);
369 }
370 }
371 }
372 }
373 }
374}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixActionRowCollection.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixActionRowCollection.cs
new file mode 100644
index 00000000..513a104f
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixActionRowCollection.cs
@@ -0,0 +1,222 @@
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.Data.Rows
4{
5 using System;
6 using System.Collections;
7 using System.Diagnostics;
8 using System.Xml;
9
10 /// <summary>
11 /// A collection of action rows sorted by their sequence table and action name.
12 /// </summary>
13 public sealed class WixActionRowCollection : ICollection
14 {
15 private SortedList collection;
16
17 /// <summary>
18 /// Creates a new action table object.
19 /// </summary>
20 public WixActionRowCollection()
21 {
22 this.collection = new SortedList();
23 }
24
25 /// <summary>
26 /// Gets the number of items in the collection.
27 /// </summary>
28 /// <value>Number of items in collection.</value>
29 public int Count
30 {
31 get { return this.collection.Count; }
32 }
33
34 /// <summary>
35 /// Gets if the collection has been synchronized.
36 /// </summary>
37 /// <value>True if the collection has been synchronized.</value>
38 public bool IsSynchronized
39 {
40 get { return this.collection.IsSynchronized; }
41 }
42
43 /// <summary>
44 /// Gets the object used to synchronize the collection.
45 /// </summary>
46 /// <value>Oject used the synchronize the collection.</value>
47 public object SyncRoot
48 {
49 get { return this; }
50 }
51
52 /// <summary>
53 /// Get an ActionRow by its sequence table and action name.
54 /// </summary>
55 /// <param name="sequenceTable">The sequence table of the ActionRow.</param>
56 /// <param name="action">The action name of the ActionRow.</param>
57 public WixActionRow this[SequenceTable sequenceTable, string action]
58 {
59 get { return (WixActionRow)this.collection[GetKey(sequenceTable, action)]; }
60 }
61
62 /// <summary>
63 /// Add an ActionRow to the collection.
64 /// </summary>
65 /// <param name="actionRow">The ActionRow to add.</param>
66 /// <param name="overwrite">true to overwrite an existing ActionRow; false otherwise.</param>
67 public void Add(WixActionRow actionRow, bool overwrite)
68 {
69 string key = GetKey(actionRow.SequenceTable, actionRow.Action);
70
71 if (overwrite)
72 {
73 this.collection[key] = actionRow;
74 }
75 else
76 {
77 this.collection.Add(key, actionRow);
78 }
79 }
80
81 /// <summary>
82 /// Add an ActionRow to the collection.
83 /// </summary>
84 /// <param name="actionRow">The ActionRow to add.</param>
85 public void Add(WixActionRow actionRow)
86 {
87 this.Add(actionRow, false);
88 }
89
90 /// <summary>
91 /// Determines if the collection contains an ActionRow with a specific sequence table and name.
92 /// </summary>
93 /// <param name="sequenceTable">The sequence table of the ActionRow.</param>
94 /// <param name="action">The action name of the ActionRow.</param>
95 /// <returns>true if the ActionRow was found; false otherwise.</returns>
96 public bool Contains(SequenceTable sequenceTable, string action)
97 {
98 return this.collection.Contains(GetKey(sequenceTable, action));
99 }
100
101 /// <summary>
102 /// Copies the collection into an array.
103 /// </summary>
104 /// <param name="array">Array to copy the collection into.</param>
105 /// <param name="index">Index to start copying from.</param>
106 public void CopyTo(System.Array array, int index)
107 {
108 this.collection.Values.CopyTo(array, index);
109 }
110
111 /// <summary>
112 /// Gets the enumerator for the collection.
113 /// </summary>
114 /// <returns>The enumerator for the collection.</returns>
115 public IEnumerator GetEnumerator()
116 {
117 return this.collection.Values.GetEnumerator();
118 }
119
120 /// <summary>
121 /// Remove an ActionRow from the collection.
122 /// </summary>
123 /// <param name="sequenceTable">The sequence table of the ActionRow.</param>
124 /// <param name="action">The action name of the ActionRow.</param>
125 public void Remove(SequenceTable sequenceTable, string action)
126 {
127 this.collection.Remove(GetKey(sequenceTable, action));
128 }
129
130 /// <summary>
131 /// Load an action table from an XmlReader.
132 /// </summary>
133 /// <param name="reader">Reader to get data from.</param>
134 /// <returns>The ActionRowCollection represented by the xml.</returns>
135 internal static WixActionRowCollection Load(XmlReader reader)
136 {
137 reader.MoveToContent();
138
139 return Parse(reader);
140 }
141
142 /// <summary>
143 /// Creates a new action table object and populates it from an Xml reader.
144 /// </summary>
145 /// <param name="reader">Reader to get data from.</param>
146 /// <returns>The parsed ActionTable.</returns>
147 private static WixActionRowCollection Parse(XmlReader reader)
148 {
149 if (!reader.LocalName.Equals("actions"))
150 {
151 throw new XmlException();
152 }
153
154 WixActionRowCollection actionRows = new WixActionRowCollection();
155 bool empty = reader.IsEmptyElement;
156
157 while (reader.MoveToNextAttribute())
158 {
159 }
160
161 if (!empty)
162 {
163 bool done = false;
164
165 // loop through all the fields in a row
166 while (!done && reader.Read())
167 {
168 switch (reader.NodeType)
169 {
170 case XmlNodeType.Element:
171 switch (reader.LocalName)
172 {
173 case "action":
174 WixActionRow[] parsedActionRows = WixActionRow.Parse(reader);
175
176 foreach (WixActionRow actionRow in parsedActionRows)
177 {
178 actionRows.Add(actionRow);
179 }
180 break;
181 default:
182 throw new XmlException();
183 }
184 break;
185 case XmlNodeType.EndElement:
186 done = true;
187 break;
188 }
189 }
190
191 if (!done)
192 {
193 throw new XmlException();
194 }
195 }
196
197 return actionRows;
198 }
199
200 /// <summary>
201 /// Get the key for storing an ActionRow.
202 /// </summary>
203 /// <param name="sequenceTable">The sequence table of the ActionRow.</param>
204 /// <param name="action">The action name of the ActionRow.</param>
205 /// <returns>The string key.</returns>
206 private static string GetKey(SequenceTable sequenceTable, string action)
207 {
208 return GetKey(sequenceTable.ToString(), action);
209 }
210
211 /// <summary>
212 /// Get the key for storing an ActionRow.
213 /// </summary>
214 /// <param name="sequenceTable">The sequence table of the ActionRow.</param>
215 /// <param name="action">The action name of the ActionRow.</param>
216 /// <returns>The string key.</returns>
217 private static string GetKey(string sequenceTable, string action)
218 {
219 return String.Concat(sequenceTable, '/', action);
220 }
221 }
222}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixApprovedExeForElevationRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixApprovedExeForElevationRow.cs
new file mode 100644
index 00000000..c10a39ab
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixApprovedExeForElevationRow.cs
@@ -0,0 +1,79 @@
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.Data.Rows
4{
5
6 /// <summary>
7 /// Specialization of a row for the WixApprovedExeForElevation table.
8 /// </summary>
9 public class WixApprovedExeForElevationRow : Row
10 {
11 /// <summary>
12 /// Creates an ApprovedExeForElevation row that does not belong to a table.
13 /// </summary>
14 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
15 /// <param name="tableDef">TableDefinition this ApprovedExeForElevation row belongs to and should get its column definitions from.</param>
16 public WixApprovedExeForElevationRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
17 base(sourceLineNumbers, tableDef)
18 {
19 }
20
21 /// <summary>
22 /// Creates an ApprovedExeForElevation row that belongs to a table.
23 /// </summary>
24 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
25 /// <param name="table">Table this ApprovedExeForElevation row belongs to and should get its column definitions from.</param>
26 public WixApprovedExeForElevationRow(SourceLineNumber sourceLineNumbers, Table table)
27 : base(sourceLineNumbers, table)
28 {
29 }
30
31 /// <summary>
32 /// Gets or sets the ApprovedExeForElevation identifier.
33 /// </summary>
34 /// <value>The ApprovedExeForElevation identifier.</value>
35 public string Id
36 {
37 get { return (string)this.Fields[0].Data; }
38 set { this.Fields[0].Data = value; }
39 }
40
41 /// <summary>
42 /// Gets or sets the Key path.
43 /// </summary>
44 /// <value>The Key path.</value>
45 public string Key
46 {
47 get { return (string)this.Fields[1].Data; }
48 set { this.Fields[1].Data = value; }
49 }
50
51 /// <summary>
52 /// Gets or sets the Value name.
53 /// </summary>
54 /// <value>The Value name.</value>
55 public string ValueName
56 {
57 get { return (string)this.Fields[2].Data; }
58 set { this.Fields[2].Data = value; }
59 }
60
61 /// <summary>
62 /// Gets or sets the attibutes.
63 /// </summary>
64 /// <value>The BundleApprovedExeForElevationAttributes.</value>
65 public BundleApprovedExeForElevationAttributes Attributes
66 {
67 get { return (BundleApprovedExeForElevationAttributes)this.Fields[3].Data; }
68 set { this.Fields[3].Data = (int)value; }
69 }
70
71 /// <summary>
72 /// Gets whether this row is 64-bit.
73 /// </summary>
74 public bool Win64
75 {
76 get { return BundleApprovedExeForElevationAttributes.Win64 == (this.Attributes & BundleApprovedExeForElevationAttributes.Win64); }
77 }
78 }
79}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleCatalogRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleCatalogRow.cs
new file mode 100644
index 00000000..05c1e597
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleCatalogRow.cs
@@ -0,0 +1,50 @@
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.Data.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the WixCatalog table.
7 /// </summary>
8 public sealed class WixBundleCatalogRow : Row
9 {
10 /// <summary>
11 /// Creates a Catalog row that does not belong to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="tableDef">TableDefinition this Catalog row belongs to and should get its column definitions from.</param>
15 public WixBundleCatalogRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
16 base(sourceLineNumbers, tableDef)
17 {
18 }
19
20 /// <summary>
21 /// Creates a Catalog row that belongs to a table.
22 /// </summary>
23 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
24 /// <param name="table">Table this Catalog row belongs to and should get its column definitions from.</param>
25 public WixBundleCatalogRow(SourceLineNumber sourceLineNumbers, Table table)
26 : base(sourceLineNumbers, table)
27 {
28 }
29
30 /// <summary>
31 /// Gets or sets the catalog identifier.
32 /// </summary>
33 /// <value>The catalog identifier.</value>
34 public string Id
35 {
36 get { return (string)this.Fields[0].Data; }
37 set { this.Fields[0].Data = value; }
38 }
39
40 /// <summary>
41 /// Gets or sets the payload identifier.
42 /// </summary>
43 /// <value>The payload identifier.</value>
44 public string Payload
45 {
46 get { return (string)this.Fields[1].Data; }
47 set { this.Fields[1].Data = value; }
48 }
49 }
50}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleContainerRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleContainerRow.cs
new file mode 100644
index 00000000..7b03dcc5
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleContainerRow.cs
@@ -0,0 +1,78 @@
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.Data.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the Container table.
7 /// </summary>
8 public class WixBundleContainerRow : Row
9 {
10 /// <summary>
11 /// Creates a ContainerRow row that does not belong to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="tableDef">TableDefinition this Media row belongs to and should get its column definitions from.</param>
15 public WixBundleContainerRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
16 base(sourceLineNumbers, tableDef)
17 {
18 }
19
20 /// <summary>
21 /// Creates a ContainerRow row that belongs to a table.
22 /// </summary>
23 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
24 /// <param name="table">Table this Media row belongs to and should get its column definitions from.</param>
25 public WixBundleContainerRow(SourceLineNumber sourceLineNumbers, Table table) :
26 base(sourceLineNumbers, table)
27 {
28 }
29
30 public string Id
31 {
32 get { return (string)this.Fields[0].Data; }
33 set { this.Fields[0].Data = value; }
34 }
35
36 public string Name
37 {
38 get { return (string)this.Fields[1].Data; }
39 set { this.Fields[1].Data = value; }
40 }
41
42 public ContainerType Type
43 {
44 get { return (ContainerType)this.Fields[2].Data; }
45 set { this.Fields[2].Data = (int)value; }
46 }
47
48 public string DownloadUrl
49 {
50 get { return (string)this.Fields[3].Data; }
51 set { this.Fields[3].Data = value; }
52 }
53
54 public long Size
55 {
56 get { return (long)this.Fields[4].Data; }
57 set { this.Fields[4].Data = value; }
58 }
59
60 public string Hash
61 {
62 get { return (string)this.Fields[5].Data; }
63 set { this.Fields[5].Data = value; }
64 }
65
66 public int AttachedContainerIndex
67 {
68 get { return (null == this.Fields[6].Data) ? -1 : (int)this.Fields[6].Data; }
69 set { this.Fields[6].Data = value; }
70 }
71
72 public string WorkingPath
73 {
74 get { return (string)this.Fields[7].Data; }
75 set { this.Fields[7].Data = value; }
76 }
77 }
78}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleExePackageRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleExePackageRow.cs
new file mode 100644
index 00000000..3bf06d49
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleExePackageRow.cs
@@ -0,0 +1,103 @@
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
3using WixToolset.Data.Tuples;
4
5namespace WixToolset.Data.Rows
6{
7 /// <summary>
8 /// Specialization of a row for the WixBundleExePackage table.
9 /// </summary>
10 public sealed class WixBundleExePackageRow : Row
11 {
12 /// <summary>
13 /// Creates a WixBundleExePackage row that does not belong to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="tableDef">TableDefinition this row belongs to and should get its column definitions from.</param>
17 public WixBundleExePackageRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
18 base(sourceLineNumbers, tableDef)
19 {
20 }
21
22 /// <summary>
23 /// Creates a WixBundleExePackageRow row that belongs to a table.
24 /// </summary>
25 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
26 /// <param name="table">Table this row belongs to and should get its column definitions from.</param>
27 public WixBundleExePackageRow(SourceLineNumber sourceLineNumbers, Table table) :
28 base(sourceLineNumbers, table)
29 {
30 }
31
32 /// <summary>
33 /// Gets or sets the foreign key identifier to the ChainPackage row.
34 /// </summary>
35 public string ChainPackageId
36 {
37 get { return (string)this.Fields[0].Data; }
38 set { this.Fields[0].Data = value; }
39 }
40
41 /// <summary>
42 /// Gets or sets the raw Exe attributes of a patch.
43 /// </summary>
44 public WixBundleExePackageAttributes Attributes
45 {
46 get { return (WixBundleExePackageAttributes)this.Fields[1].Data; }
47 set { this.Fields[1].Data = value; }
48 }
49
50 /// <summary>
51 /// Gets or sets the protcol for the executable package.
52 /// </summary>
53 public string DetectCondition
54 {
55 get { return (string)this.Fields[2].Data; }
56 set { this.Fields[2].Data = value; }
57 }
58
59 /// <summary>
60 /// Gets or sets the install command for the executable package.
61 /// </summary>
62 public string InstallCommand
63 {
64 get { return (string)this.Fields[3].Data; }
65 set { this.Fields[3].Data = value; }
66 }
67
68 /// <summary>
69 /// Gets or sets the repair command for the executable package.
70 /// </summary>
71 public string RepairCommand
72 {
73 get { return (string)this.Fields[4].Data; }
74 set { this.Fields[4].Data = value; }
75 }
76
77 /// <summary>
78 /// Gets or sets the uninstall command for the executable package.
79 /// </summary>
80 public string UninstallCommand
81 {
82 get { return (string)this.Fields[5].Data; }
83 set { this.Fields[5].Data = value; }
84 }
85
86 /// <summary>
87 /// Gets or sets the protcol for the executable package.
88 /// </summary>
89 public string ExeProtocol
90 {
91 get { return (string)this.Fields[6].Data; }
92 set { this.Fields[6].Data = value; }
93 }
94
95 /// <summary>
96 /// Gets whether the executable package is repairable.
97 /// </summary>
98 public bool Repairable
99 {
100 get { return 0 != (this.Attributes & WixBundleExePackageAttributes.Repairable); }
101 }
102 }
103}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsiFeatureRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsiFeatureRow.cs
new file mode 100644
index 00000000..551eae20
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsiFeatureRow.cs
@@ -0,0 +1,93 @@
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.Data.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the MsiFeature table.
7 /// </summary>
8 public class WixBundleMsiFeatureRow : Row
9 {
10 /// <summary>
11 /// Creates a MsiFeatureRow row that does not belong to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="tableDef">TableDefinition this Media row belongs to and should get its column definitions from.</param>
15 public WixBundleMsiFeatureRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
16 base(sourceLineNumbers, tableDef)
17 {
18 }
19
20 /// <summary>
21 /// Creates a MsiFeatureRow row that belongs to a table.
22 /// </summary>
23 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
24 /// <param name="table">Table this Media row belongs to and should get its column definitions from.</param>
25 public WixBundleMsiFeatureRow(SourceLineNumber sourceLineNumbers, Table table) :
26 base(sourceLineNumbers, table)
27 {
28 }
29
30 /// <summary>
31 /// Gets or sets the foreign key identifier to the ChainPackage row.
32 /// </summary>
33 public string ChainPackageId
34 {
35 get { return (string)this.Fields[0].Data; }
36 set { this.Fields[0].Data = value; }
37 }
38
39 public string Name
40 {
41 get { return (string)this.Fields[1].Data; }
42 set { this.Fields[1].Data = value; }
43 }
44
45 public long Size
46 {
47 get { return (long)this.Fields[2].Data; }
48 set { this.Fields[2].Data = value; }
49 }
50
51 public string Parent
52 {
53 get { return (string)this.Fields[3].Data; }
54 set { this.Fields[3].Data = value; }
55 }
56
57 public string Title
58 {
59 get { return (string)this.Fields[4].Data; }
60 set { this.Fields[4].Data = value; }
61 }
62
63 public string Description
64 {
65 get { return (string)this.Fields[5].Data; }
66 set { this.Fields[5].Data = value; }
67 }
68
69 public int Display
70 {
71 get { return (int)this.Fields[6].Data; }
72 set { this.Fields[6].Data = value; }
73 }
74
75 public int Level
76 {
77 get { return (int)this.Fields[7].Data; }
78 set { this.Fields[7].Data = value; }
79 }
80
81 public string Directory
82 {
83 get { return (string)this.Fields[8].Data; }
84 set { this.Fields[8].Data = value; }
85 }
86
87 public int Attributes
88 {
89 get { return (int)this.Fields[9].Data; }
90 set { this.Fields[9].Data = value; }
91 }
92 }
93}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsiPackageRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsiPackageRow.cs
new file mode 100644
index 00000000..70d85e26
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsiPackageRow.cs
@@ -0,0 +1,138 @@
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.Data.Rows
4{
5 using System;
6 using System.Globalization;
7 using WixToolset.Data.Tuples;
8
9 /// <summary>
10 /// Specialization of a row for the WixBundleMsiPackage table.
11 /// </summary>
12 public sealed class WixBundleMsiPackageRow : Row
13 {
14 /// <summary>
15 /// Creates a WixBundleMsiPackage row that does not belong to a table.
16 /// </summary>
17 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
18 /// <param name="tableDef">TableDefinition this row belongs to and should get its column definitions from.</param>
19 public WixBundleMsiPackageRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
20 base(sourceLineNumbers, tableDef)
21 {
22 }
23
24 /// <summary>
25 /// Creates a WixBundleMsiPackageRow row that belongs to a table.
26 /// </summary>
27 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
28 /// <param name="table">Table this row belongs to and should get its column definitions from.</param>
29 public WixBundleMsiPackageRow(SourceLineNumber sourceLineNumbers, Table table) :
30 base(sourceLineNumbers, table)
31 {
32 }
33
34 /// <summary>
35 /// Gets or sets the foreign key identifier to the ChainPackage row.
36 /// </summary>
37 public string ChainPackageId
38 {
39 get { return (string)this.Fields[0].Data; }
40 set { this.Fields[0].Data = value; }
41 }
42
43 /// <summary>
44 /// Gets or sets the raw MSI attributes of a package.
45 /// </summary>
46 public WixBundleMsiPackageAttributes Attributes
47 {
48 get { return (WixBundleMsiPackageAttributes)this.Fields[1].Data; }
49 set { this.Fields[1].Data = value; }
50 }
51
52 /// <summary>
53 /// Gets or sets the MSI package's product code.
54 /// </summary>
55 public string ProductCode
56 {
57 get { return (string)this.Fields[2].Data; }
58 set { this.Fields[2].Data = value; }
59 }
60
61 /// <summary>
62 /// Gets or sets the MSI package's upgrade code.
63 /// </summary>
64 public string UpgradeCode
65 {
66 get { return (string)this.Fields[3].Data; }
67 set { this.Fields[3].Data = value; }
68 }
69
70 /// <summary>
71 /// Gets or sets the product version of the MSI package.
72 /// </summary>
73 public string ProductVersion
74 {
75 get { return (string)this.Fields[4].Data; }
76 set { this.Fields[4].Data = value; }
77 }
78
79 /// <summary>
80 /// Gets or sets the language of the MSI package.
81 /// </summary>
82 public int ProductLanguage
83 {
84 get { return Convert.ToInt32(this.Fields[5].Data, CultureInfo.InvariantCulture); }
85 set { this.Fields[5].Data = value; }
86 }
87
88 /// <summary>
89 /// Gets or sets the product name of the MSI package.
90 /// </summary>
91 public string ProductName
92 {
93 get { return (string)this.Fields[6].Data; }
94 set { this.Fields[6].Data = value; }
95 }
96
97 /// <summary>
98 /// Gets or sets the MSI package's manufacturer.
99 /// </summary>
100 public string Manufacturer
101 {
102 get { return (string)this.Fields[7].Data; }
103 set { this.Fields[7].Data = value; }
104 }
105
106 /// <summary>
107 /// Gets the display internal UI of a package.
108 /// </summary>
109 public bool DisplayInternalUI
110 {
111 get { return 0 != (this.Attributes & WixBundleMsiPackageAttributes.DisplayInternalUI); }
112 }
113
114 /// <summary>
115 /// Gets the display internal UI of a package.
116 /// </summary>
117 public bool EnableFeatureSelection
118 {
119 get { return 0 != (this.Attributes & WixBundleMsiPackageAttributes.EnableFeatureSelection); }
120 }
121
122 /// <summary>
123 /// Gets the display internal UI of a package.
124 /// </summary>
125 public bool ForcePerMachine
126 {
127 get { return 0 != (this.Attributes & WixBundleMsiPackageAttributes.ForcePerMachine); }
128 }
129
130 /// <summary>
131 /// Gets the suppress loose file payload generation of a package.
132 /// </summary>
133 public bool SuppressLooseFilePayloadGeneration
134 {
135 get { return 0 != (this.Attributes & WixBundleMsiPackageAttributes.SuppressLooseFilePayloadGeneration); }
136 }
137 }
138}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsiPropertyRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsiPropertyRow.cs
new file mode 100644
index 00000000..524f7929
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsiPropertyRow.cs
@@ -0,0 +1,58 @@
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.Data.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the WixBundleMsiProperty table.
7 /// </summary>
8 public sealed class WixBundleMsiPropertyRow : Row
9 {
10 /// <summary>
11 /// Creates an WixBundleMsiProperty row that belongs to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="table">Table this WixBundleMsiProperty row belongs to and should get its column definitions from.</param>
15 public WixBundleMsiPropertyRow(SourceLineNumber sourceLineNumbers, Table table) :
16 base(sourceLineNumbers, table)
17 {
18 }
19
20 /// <summary>
21 /// Gets or sets the foreign key identifier to the ChainPackage row.
22 /// </summary>
23 public string ChainPackageId
24 {
25 get { return (string)this.Fields[0].Data; }
26 set { this.Fields[0].Data = value; }
27 }
28
29 /// <summary>
30 /// Gets and sets the property identity.
31 /// </summary>
32 public string Name
33 {
34 get { return (string)this.Fields[1].Data; }
35 set { this.Fields[1].Data = value; }
36 }
37
38 /// <summary>
39 /// Gets and sets the value for the row.
40 /// </summary>
41 /// <value>MsiProperty value for the row.</value>
42 public string Value
43 {
44 get { return (string)this.Fields[2].Data; }
45 set { this.Fields[2].Data = value; }
46 }
47
48 /// <summary>
49 /// Gets and sets the condition for the row.
50 /// </summary>
51 /// <value>MsiProperty condition for the row.</value>
52 public string Condition
53 {
54 get { return (string)this.Fields[3].Data; }
55 set { this.Fields[3].Data = value; }
56 }
57 }
58}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMspPackageRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMspPackageRow.cs
new file mode 100644
index 00000000..053fc915
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMspPackageRow.cs
@@ -0,0 +1,101 @@
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
3using WixToolset.Data.Tuples;
4
5namespace WixToolset.Data.Rows
6{
7 /// <summary>
8 /// Specialization of a row for the ChainMspPackage table.
9 /// </summary>
10 public sealed class WixBundleMspPackageRow : Row
11 {
12 /// <summary>
13 /// Creates a ChainMspPackage row that does not belong to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="tableDef">TableDefinition this row belongs to and should get its column definitions from.</param>
17 public WixBundleMspPackageRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
18 base(sourceLineNumbers, tableDef)
19 {
20 }
21
22 /// <summary>
23 /// Creates a WixBundleMspPackage row that belongs to a table.
24 /// </summary>
25 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
26 /// <param name="table">Table this row belongs to and should get its column definitions from.</param>
27 public WixBundleMspPackageRow(SourceLineNumber sourceLineNumbers, Table table) :
28 base(sourceLineNumbers, table)
29 {
30 }
31
32 /// <summary>
33 /// Gets or sets the foreign key identifier to the ChainPackage row.
34 /// </summary>
35 public string ChainPackageId
36 {
37 get { return (string)this.Fields[0].Data; }
38 set { this.Fields[0].Data = value; }
39 }
40
41 /// <summary>
42 /// Gets or sets the raw MSP attributes of a patch.
43 /// </summary>
44 public WixBundleMspPackageAttributes Attributes
45 {
46 get { return (WixBundleMspPackageAttributes)this.Fields[1].Data; }
47 set { this.Fields[1].Data = value; }
48 }
49
50 /// <summary>
51 /// Gets or sets the patch code.
52 /// </summary>
53 public string PatchCode
54 {
55 get { return (string)this.Fields[2].Data; }
56 set { this.Fields[2].Data = value; }
57 }
58
59 /// <summary>
60 /// Gets or sets the patch's manufacturer.
61 /// </summary>
62 public string Manufacturer
63 {
64 get { return (string)this.Fields[3].Data; }
65 set { this.Fields[3].Data = value; }
66 }
67
68 /// <summary>
69 /// Gets or sets the patch's xml.
70 /// </summary>
71 public string PatchXml
72 {
73 get { return (string)this.Fields[4].Data; }
74 set { this.Fields[4].Data = value; }
75 }
76
77 /// <summary>
78 /// Gets the display internal UI of a patch.
79 /// </summary>
80 public bool DisplayInternalUI
81 {
82 get { return 0 != (this.Attributes & WixBundleMspPackageAttributes.DisplayInternalUI); }
83 }
84
85 /// <summary>
86 /// Gets whether to slipstream the patch.
87 /// </summary>
88 public bool Slipstream
89 {
90 get { return 0 != (this.Attributes & WixBundleMspPackageAttributes.Slipstream); }
91 }
92
93 /// <summary>
94 /// Gets whether the patch targets an unspecified number of packages.
95 /// </summary>
96 public bool TargetUnspecified
97 {
98 get { return 0 != (this.Attributes & WixBundleMspPackageAttributes.TargetUnspecified); }
99 }
100 }
101}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsuPackageRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsuPackageRow.cs
new file mode 100644
index 00000000..0df635c2
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsuPackageRow.cs
@@ -0,0 +1,57 @@
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.Data.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the WixBundleMsuPackage table.
7 /// </summary>
8 public sealed class WixBundleMsuPackageRow : Row
9 {
10 /// <summary>
11 /// Creates a WixBundleMsuPackage row that does not belong to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="tableDef">TableDefinition this row belongs to and should get its column definitions from.</param>
15 public WixBundleMsuPackageRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
16 base(sourceLineNumbers, tableDef)
17 {
18 }
19
20 /// <summary>
21 /// Creates a WixBundleMsuPackage row that belongs to a table.
22 /// </summary>
23 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
24 /// <param name="table">Table this row belongs to and should get its column definitions from.</param>
25 public WixBundleMsuPackageRow(SourceLineNumber sourceLineNumbers, Table table) :
26 base(sourceLineNumbers, table)
27 {
28 }
29
30 /// <summary>
31 /// Gets or sets the foreign key identifier to the ChainPackage row.
32 /// </summary>
33 public string ChainPackageId
34 {
35 get { return (string)this.Fields[0].Data; }
36 set { this.Fields[0].Data = value; }
37 }
38
39 /// <summary>
40 /// Gets or sets the detection condition the package.
41 /// </summary>
42 public string DetectCondition
43 {
44 get { return (string)this.Fields[1].Data; }
45 set { this.Fields[1].Data = value; }
46 }
47
48 /// <summary>
49 /// Gets or sets the KB of the package.
50 /// </summary>
51 public string MsuKB
52 {
53 get { return (string)this.Fields[2].Data; }
54 set { this.Fields[2].Data = value; }
55 }
56 }
57}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePackageCommandLineRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePackageCommandLineRow.cs
new file mode 100644
index 00000000..eba647d5
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePackageCommandLineRow.cs
@@ -0,0 +1,82 @@
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.Data.Rows
4{
5 using System;
6
7 /// <summary>
8 /// Specialization of a row for the WixBundlePackageCommandLine table.
9 /// </summary>
10 public class WixBundlePackageCommandLineRow : Row
11 {
12 /// <summary>
13 /// Creates a WixBundlePackageCommandLineRow row that does not belong to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="tableDef">TableDefinition this WixBundlePackageCommandLineRow row belongs to and should get its column definitions from.</param>
17 public WixBundlePackageCommandLineRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
18 base(sourceLineNumbers, tableDef)
19 {
20 }
21
22 /// <summary>
23 /// Creates an WixBundlePackageCommandLineRow row that belongs to a table.
24 /// </summary>
25 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
26 /// <param name="table">Table this WixBundlePackageCommandLineRow row belongs to and should get its column definitions from.</param>
27 public WixBundlePackageCommandLineRow(SourceLineNumber sourceLineNumbers, Table table)
28 : base(sourceLineNumbers, table)
29 {
30 }
31
32 /// <summary>
33 /// Gets or sets the package identifier.
34 /// </summary>
35 /// <value>The package identifier.</value>
36 public string ChainPackageId
37 {
38 get { return (string)this.Fields[0].Data; }
39 set { this.Fields[0].Data = value; }
40 }
41
42 /// <summary>
43 /// Gets or sets the command-line argument for installation.
44 /// </summary>
45 /// <value>The command-line argument.</value>
46 public string InstallArgument
47 {
48 get { return (string)this.Fields[1].Data; }
49 set { this.Fields[1].Data = value; }
50 }
51
52 /// <summary>
53 /// Gets or sets the command-line argument for uninstallation.
54 /// </summary>
55 /// <value>The command-line argument.</value>
56 public string UninstallArgument
57 {
58 get { return (string)this.Fields[2].Data; }
59 set { this.Fields[2].Data = value; }
60 }
61
62 /// <summary>
63 /// Gets or sets the command-line argument for repair.
64 /// </summary>
65 /// <value>The command-line argument.</value>
66 public string RepairArgument
67 {
68 get { return (string)this.Fields[3].Data; }
69 set { this.Fields[3].Data = value; }
70 }
71
72 /// <summary>
73 /// Gets or sets the condition.
74 /// </summary>
75 /// <value>The condition.</value>
76 public string Condition
77 {
78 get { return (string)this.Fields[4].Data; }
79 set { this.Fields[4].Data = value; }
80 }
81 }
82}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePackageExitCodeRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePackageExitCodeRow.cs
new file mode 100644
index 00000000..2beed8da
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePackageExitCodeRow.cs
@@ -0,0 +1,53 @@
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
3using WixToolset.Data.Tuples;
4
5namespace WixToolset.Data.Rows
6{
7 /// <summary>
8 /// Specialization of a row for the ExitCode table.
9 /// </summary>
10 public class WixBundlePackageExitCodeRow : Row
11 {
12 /// <summary>
13 /// Creates a ExitCodeRow row that does not belong to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="tableDef">TableDefinition this Media row belongs to and should get its column definitions from.</param>
17 public WixBundlePackageExitCodeRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
18 base(sourceLineNumbers, tableDef)
19 {
20 }
21
22 /// <summary>
23 /// Creates a ExitCodeRow row that belongs to a table.
24 /// </summary>
25 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
26 /// <param name="table">Table this Media row belongs to and should get its column definitions from.</param>
27 public WixBundlePackageExitCodeRow(SourceLineNumber sourceLineNumbers, Table table) :
28 base(sourceLineNumbers, table)
29 {
30 }
31
32 /// <summary>
33 /// Gets or sets the foreign key identifier to the ChainPackage row.
34 /// </summary>
35 public string ChainPackageId
36 {
37 get { return (string)this.Fields[0].Data; }
38 set { this.Fields[0].Data = value; }
39 }
40
41 public int? Code
42 {
43 get { return (null == this.Fields[1].Data) ? (int?)null : (int?)this.Fields[1].Data; }
44 set { this.Fields[1].Data = value; }
45 }
46
47 public ExitCodeBehaviorType Behavior
48 {
49 get { return (ExitCodeBehaviorType)this.Fields[2].Data; }
50 set { this.Fields[2].Data = (int)value; }
51 }
52 }
53}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePackageRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePackageRow.cs
new file mode 100644
index 00000000..973c43b9
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePackageRow.cs
@@ -0,0 +1,228 @@
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
3using WixToolset.Data.Tuples;
4
5namespace WixToolset.Data.Rows
6{
7 /// <summary>
8 /// Specialization of a row for the WixBundlePackage table.
9 /// </summary>
10 public sealed class WixBundlePackageRow : Row
11 {
12 /// <summary>
13 /// Creates a WixBundlePackage row that does not belong to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="tableDef">TableDefinition this row belongs to and should get its column definitions from.</param>
17 public WixBundlePackageRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
18 base(sourceLineNumbers, tableDef)
19 {
20 }
21
22 /// <summary>
23 /// Creates a WixBundlePackage row that belongs to a table.
24 /// </summary>
25 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
26 /// <param name="table">Table this row belongs to and should get its column definitions from.</param>
27 public WixBundlePackageRow(SourceLineNumber sourceLineNumbers, Table table) :
28 base(sourceLineNumbers, table)
29 {
30 }
31
32 /// <summary>
33 /// Gets or sets the foreign key to the WixChainItem.
34 /// </summary>
35 public string WixChainItemId
36 {
37 get { return (string)this.Fields[0].Data; }
38 set { this.Fields[0].Data = value; }
39 }
40
41 /// <summary>
42 /// Gets or sets the item type.
43 /// </summary>
44 public WixBundlePackageType Type
45 {
46 get { return (WixBundlePackageType)this.Fields[1].Data; }
47 set { this.Fields[1].Data = (int)value; }
48 }
49
50 /// <summary>
51 /// Gets or sets the indentifier of the package's payload.
52 /// </summary>
53 public string PackagePayload
54 {
55 get { return (string)this.Fields[2].Data; }
56 set { this.Fields[2].Data = value; }
57 }
58
59 /// <summary>
60 /// Gets or sets the raw attributes of a package.
61 /// </summary>
62 public WixBundlePackageAttributes Attributes
63 {
64 get { return (WixBundlePackageAttributes)this.Fields[3].Data; }
65 set { this.Fields[3].Data = value; }
66 }
67
68 /// <summary>
69 /// Gets or sets the install condition of the package.
70 /// </summary>
71 public string InstallCondition
72 {
73 get { return (string)this.Fields[4].Data; }
74 set { this.Fields[4].Data = value; }
75 }
76
77 /// <summary>
78 /// Gets or sets the language of the package.
79 /// </summary>
80 public YesNoAlwaysType Cache
81 {
82 get { return (null == this.Fields[5].Data) ? YesNoAlwaysType.NotSet : (YesNoAlwaysType)this.Fields[5].Data; }
83 set { this.Fields[5].Data = (int)value; }
84 }
85
86 /// <summary>
87 /// Gets or sets the indentifier of the package's cache.
88 /// </summary>
89 public string CacheId
90 {
91 get { return (string)this.Fields[6].Data; }
92 set { this.Fields[6].Data = value; }
93 }
94
95 /// <summary>
96 /// Gets or sets whether the package is vital.
97 /// </summary>
98 public YesNoType Vital
99 {
100 get { return (null == this.Fields[7].Data) ? YesNoType.NotSet : (YesNoType)this.Fields[7].Data; }
101 set { this.Fields[7].Data = (int)value; }
102 }
103
104 /// <summary>
105 /// Gets or sets whether the package is per-machine.
106 /// </summary>
107 public YesNoDefaultType PerMachine
108 {
109 get { return (null == this.Fields[8].Data) ? YesNoDefaultType.NotSet : (YesNoDefaultType)this.Fields[8].Data; }
110 set { this.Fields[8].Data = (int)value; }
111 }
112
113 /// <summary>
114 /// Gets or sets the variable that points to the log for the package.
115 /// </summary>
116 public string LogPathVariable
117 {
118 get { return (string)this.Fields[9].Data; }
119 set { this.Fields[9].Data = value; }
120 }
121
122 /// <summary>
123 /// Gets or sets the variable that points to the rollback log for the package.
124 /// </summary>
125 public string RollbackLogPathVariable
126 {
127 get { return (string)this.Fields[10].Data; }
128 set { this.Fields[10].Data = value; }
129 }
130
131 /// <summary>
132 /// Gets or sets the size of the package.
133 /// </summary>
134 public long Size
135 {
136 get { return (long)this.Fields[11].Data; }
137 set { this.Fields[11].Data = value; }
138 }
139
140 /// <summary>
141 /// Gets or sets the install size of the package.
142 /// </summary>
143 public long? InstallSize
144 {
145 get { return (long?)this.Fields[12].Data; }
146 set { this.Fields[12].Data = value; }
147 }
148
149 /// <summary>
150 /// Gets or sets the version of the package.
151 /// </summary>
152 public string Version
153 {
154 get { return (string)this.Fields[13].Data; }
155 set { this.Fields[13].Data = value; }
156 }
157
158 /// <summary>
159 /// Gets or sets the language of the package.
160 /// </summary>
161 public int Language
162 {
163 get { return (int)this.Fields[14].Data; }
164 set { this.Fields[14].Data = value; }
165 }
166
167 /// <summary>
168 /// Gets or sets the display name of the package.
169 /// </summary>
170 public string DisplayName
171 {
172 get { return (string)this.Fields[15].Data; }
173 set { this.Fields[15].Data = value; }
174 }
175
176 /// <summary>
177 /// Gets or sets the description of the package.
178 /// </summary>
179 public string Description
180 {
181 get { return (string)this.Fields[16].Data; }
182 set { this.Fields[16].Data = value; }
183 }
184
185 /// <summary>
186 /// Gets or sets the rollback boundary identifier for the package.
187 /// </summary>
188 public string RollbackBoundary
189 {
190 get { return (string)this.Fields[17].Data; }
191 set { this.Fields[17].Data = value; }
192 }
193
194 /// <summary>
195 /// Gets or sets the backward rollback boundary identifier for the package.
196 /// </summary>
197 public string RollbackBoundaryBackward
198 {
199 get { return (string)this.Fields[18].Data; }
200 set { this.Fields[18].Data = value; }
201 }
202
203 /// <summary>
204 /// Gets or sets whether the package is x64.
205 /// </summary>
206 public YesNoType x64
207 {
208 get { return (null == this.Fields[19].Data) ? YesNoType.NotSet : (YesNoType)this.Fields[19].Data; }
209 set { this.Fields[19].Data = (int)value; }
210 }
211
212 /// <summary>
213 /// Gets whether the package is permanent.
214 /// </summary>
215 public bool Permanent
216 {
217 get { return 0 != (this.Attributes & WixBundlePackageAttributes.Permanent); }
218 }
219
220 /// <summary>
221 /// Gets whether the package is visible.
222 /// </summary>
223 public bool Visible
224 {
225 get { return 0 != (this.Attributes & WixBundlePackageAttributes.Visible); }
226 }
227 }
228}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePatchTargetCodeRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePatchTargetCodeRow.cs
new file mode 100644
index 00000000..e25f4a55
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePatchTargetCodeRow.cs
@@ -0,0 +1,81 @@
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.Data.Rows
4{
5 using System;
6 using System.Collections.Generic;
7 using System.Text;
8
9 /// <summary>
10 /// Attributes for the PatchTargetCode table.
11 /// </summary>
12 [Flags]
13 public enum WixBundlePatchTargetCodeAttributes : int
14 {
15 None = 0,
16
17 /// <summary>
18 /// The transform targets a specific ProductCode.
19 /// </summary>
20 TargetsProductCode = 1,
21
22 /// <summary>
23 /// The transform targets a specific UpgradeCode.
24 /// </summary>
25 TargetsUpgradeCode = 2,
26 }
27
28 /// <summary>
29 /// Specialization of a row for the PatchTargetCode table.
30 /// </summary>
31 public class WixBundlePatchTargetCodeRow : Row
32 {
33 /// <summary>
34 /// Creates a PatchTargetCodeRow row that does not belong to a table.
35 /// </summary>
36 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
37 /// <param name="tableDef">TableDefinition this PatchTargetCode row belongs to and should get its column definitions from.</param>
38 public WixBundlePatchTargetCodeRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
39 base(sourceLineNumbers, tableDef)
40 {
41 }
42
43 /// <summary>
44 /// Creates a PatchTargetCodeRow row that belongs to a table.
45 /// </summary>
46 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
47 /// <param name="table">Table this PatchTargetCode row belongs to and should get its column definitions from.</param>
48 public WixBundlePatchTargetCodeRow(SourceLineNumber sourceLineNumbers, Table table) :
49 base(sourceLineNumbers, table)
50 {
51 }
52
53 public string MspPackageId
54 {
55 get { return (string)this.Fields[0].Data; }
56 set { this.Fields[0].Data = value; }
57 }
58
59 public string TargetCode
60 {
61 get { return (string)this.Fields[1].Data; }
62 set { this.Fields[1].Data = value; }
63 }
64
65 public WixBundlePatchTargetCodeAttributes Attributes
66 {
67 get { return (WixBundlePatchTargetCodeAttributes)this.Fields[2].Data; }
68 set { this.Fields[2].Data = (int)value; }
69 }
70
71 public bool TargetsProductCode
72 {
73 get { return 0 != (WixBundlePatchTargetCodeAttributes.TargetsProductCode & this.Attributes); }
74 }
75
76 public bool TargetsUpgradeCode
77 {
78 get { return 0 != (WixBundlePatchTargetCodeAttributes.TargetsUpgradeCode & this.Attributes); }
79 }
80 }
81}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePayloadRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePayloadRow.cs
new file mode 100644
index 00000000..8aac8aa0
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePayloadRow.cs
@@ -0,0 +1,185 @@
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.Data.Rows
4{
5 using System;
6 using System.IO;
7
8 /// <summary>
9 /// Specialization of a row for the PayloadInfo table.
10 /// </summary>
11 public class WixBundlePayloadRow : Row
12 {
13 /// <summary>
14 /// Creates a PayloadRow row that does not belong to a table.
15 /// </summary>
16 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
17 /// <param name="tableDef">TableDefinition this Media row belongs to and should get its column definitions from.</param>
18 public WixBundlePayloadRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
19 base(sourceLineNumbers, tableDef)
20 {
21 }
22
23 /// <summary>
24 /// Creates a PayloadRow row that belongs to a table.
25 /// </summary>
26 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
27 /// <param name="table">Table this Media row belongs to and should get its column definitions from.</param>
28 public WixBundlePayloadRow(SourceLineNumber sourceLineNumbers, Table table) :
29 base(sourceLineNumbers, table)
30 {
31 }
32
33 public string Id
34 {
35 get { return (string)this.Fields[0].Data; }
36 set { this.Fields[0].Data = value; }
37 }
38
39 public string Name
40 {
41 get { return (string)this.Fields[1].Data; }
42 set { this.Fields[1].Data = value; }
43 }
44
45 public string SourceFile
46 {
47 get { return (string)this.Fields[2].Data; }
48 set { this.Fields[2].Data = value; }
49 }
50
51 public string DownloadUrl
52 {
53 get { return (string)this.Fields[3].Data; }
54 set { this.Fields[3].Data = value; }
55 }
56
57 public YesNoDefaultType Compressed
58 {
59 get { return (YesNoDefaultType)this.Fields[4].Data; }
60 set { this.Fields[4].Data = (int)value; }
61 }
62
63 public string UnresolvedSourceFile
64 {
65 get { return (string)this.Fields[5].Data; }
66 set { this.Fields[5].Data = value; }
67 }
68
69 public string DisplayName
70 {
71 get { return (string)this.Fields[6].Data; }
72 set { this.Fields[6].Data = value; }
73 }
74
75 public string Description
76 {
77 get { return (string)this.Fields[7].Data; }
78 set { this.Fields[7].Data = value; }
79 }
80
81 public bool EnableSignatureValidation
82 {
83 get { return (null != this.Fields[8].Data) && (1 == (int)this.Fields[8].Data); }
84 set { this.Fields[8].Data = value ? 1 : 0; }
85 }
86
87 public int FileSize
88 {
89 get { return (int)this.Fields[9].Data; }
90 set { this.Fields[9].Data = value; }
91 }
92
93 public string Version
94 {
95 get { return (string)this.Fields[10].Data; }
96 set { this.Fields[10].Data = value; }
97 }
98
99 public string Hash
100 {
101 get { return (string)this.Fields[11].Data; }
102 set { this.Fields[11].Data = value; }
103 }
104
105 public string PublicKey
106 {
107 get { return (string)this.Fields[12].Data; }
108 set { this.Fields[12].Data = value; }
109 }
110
111 public string Thumbprint
112 {
113 get { return (string)this.Fields[13].Data; }
114 set { this.Fields[13].Data = value; }
115 }
116
117 public string Catalog
118 {
119 get { return (string)this.Fields[14].Data; }
120 set { this.Fields[14].Data = value; }
121 }
122
123 public string Container
124 {
125 get { return (string)this.Fields[15].Data; }
126 set { this.Fields[15].Data = value; }
127 }
128
129 public string Package
130 {
131 get { return (string)this.Fields[16].Data; }
132 set { this.Fields[16].Data = value; }
133 }
134
135 public bool ContentFile
136 {
137 get { return (null != this.Fields[17].Data) && (1 == (int)this.Fields[17].Data); }
138 set { this.Fields[17].Data = value ? 1 : 0; }
139 }
140
141 public string EmbeddedId
142 {
143 get { return (string)this.Fields[18].Data; }
144 set { this.Fields[18].Data = value; }
145 }
146
147 public bool LayoutOnly
148 {
149 get { return (null != this.Fields[19].Data) && (1 == (int)this.Fields[19].Data); }
150 set { this.Fields[19].Data = value ? 1 : 0; }
151 }
152
153 public PackagingType Packaging
154 {
155 get
156 {
157 object data = this.Fields[20].Data;
158 return (null == data) ? PackagingType.Unknown : (PackagingType)data;
159 }
160
161 set
162 {
163 if (PackagingType.Unknown == value)
164 {
165 this.Fields[20].Data = null;
166 }
167 else
168 {
169 this.Fields[20].Data = (int)value;
170 }
171 }
172 }
173
174 public string ParentPackagePayload
175 {
176 get { return (string)this.Fields[21].Data; }
177 set { this.Fields[21].Data = value; }
178 }
179
180 public string FullFileName
181 {
182 get { return String.IsNullOrEmpty(this.SourceFile) ? String.Empty : Path.GetFullPath(this.SourceFile); }
183 }
184 }
185}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleRelatedPackageRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleRelatedPackageRow.cs
new file mode 100644
index 00000000..ea9ff99e
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleRelatedPackageRow.cs
@@ -0,0 +1,87 @@
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.Data.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the RelatedPackage table.
7 /// </summary>
8 public class WixBundleRelatedPackageRow : Row
9 {
10 /// <summary>
11 /// Creates a RelatedPackageRow row that does not belong to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="tableDef">TableDefinition this Media row belongs to and should get its column definitions from.</param>
15 public WixBundleRelatedPackageRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
16 base(sourceLineNumbers, tableDef)
17 {
18 }
19
20 /// <summary>
21 /// Creates a RelatedPackageRow row that belongs to a table.
22 /// </summary>
23 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
24 /// <param name="table">Table this Media row belongs to and should get its column definitions from.</param>
25 public WixBundleRelatedPackageRow(SourceLineNumber sourceLineNumbers, Table table) :
26 base(sourceLineNumbers, table)
27 {
28 }
29
30 /// <summary>
31 /// Gets or sets the foreign key identifier to the ChainPackage row.
32 /// </summary>
33 public string ChainPackageId
34 {
35 get { return (string)this.Fields[0].Data; }
36 set { this.Fields[0].Data = value; }
37 }
38
39 public string Id
40 {
41 get { return (string)this.Fields[1].Data; }
42 set { this.Fields[1].Data = value; }
43 }
44
45 public string MinVersion
46 {
47 get { return (string)this.Fields[2].Data; }
48 set { this.Fields[2].Data = value; }
49 }
50
51 public string MaxVersion
52 {
53 get { return (string)this.Fields[3].Data; }
54 set { this.Fields[3].Data = value; }
55 }
56
57 public string Languages
58 {
59 get { return (string)this.Fields[4].Data; }
60 set { this.Fields[4].Data = value; }
61 }
62
63 public bool MinInclusive
64 {
65 get { return 1 == (int)this.Fields[5].Data; }
66 set { this.Fields[5].Data = value ? 1 : 0; }
67 }
68
69 public bool MaxInclusive
70 {
71 get { return 1 == (int)this.Fields[6].Data; }
72 set { this.Fields[6].Data = value ? 1 : 0; }
73 }
74
75 public bool LangInclusive
76 {
77 get { return 1 == (int)this.Fields[7].Data; }
78 set { this.Fields[7].Data = value ? 1 : 0; }
79 }
80
81 public bool OnlyDetect
82 {
83 get { return 1 == (int)this.Fields[8].Data; }
84 set { this.Fields[8].Data = value ? 1 : 0; }
85 }
86 }
87}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleRollbackBoundaryRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleRollbackBoundaryRow.cs
new file mode 100644
index 00000000..d0a994c0
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleRollbackBoundaryRow.cs
@@ -0,0 +1,59 @@
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.Data.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the WixBundleRollbackBoundary table.
7 /// </summary>
8 public sealed class WixBundleRollbackBoundaryRow : Row
9 {
10 /// <summary>
11 /// Creates a WixBundleRollbackBoundary row that does not belong to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="tableDef">TableDefinition this row belongs to and should get its column definitions from.</param>
15 public WixBundleRollbackBoundaryRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
16 base(sourceLineNumbers, tableDef)
17 {
18 }
19
20 /// <summary>
21 /// Creates a RollbackBoundaryRow row that belongs to a table.
22 /// </summary>
23 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
24 /// <param name="table">Table this row belongs to and should get its column definitions from.</param>
25 public WixBundleRollbackBoundaryRow(SourceLineNumber sourceLineNumbers, Table table) :
26 base(sourceLineNumbers, table)
27 {
28 }
29
30 /// <summary>
31 /// Gets or sets the foreign key identifier to the ChainPackage row.
32 /// </summary>
33 public string ChainPackageId
34 {
35 get { return (string)this.Fields[0].Data; }
36 set { this.Fields[0].Data = value; }
37 }
38
39 /// <summary>
40 /// Gets or sets whether the package is vital.
41 /// </summary>
42 /// <value>Vitality of the package.</value>
43 public YesNoType Vital
44 {
45 get { return (null == this.Fields[1].Data) ? YesNoType.NotSet : (YesNoType)this.Fields[1].Data; }
46 set { this.Fields[1].Data = (int)value; }
47 }
48
49 /// <summary>
50 /// Gets or sets whether the rollback-boundary should be installed as an MSI transaction.
51 /// </summary>
52 /// <value>Vitality of the package.</value>
53 public YesNoType Transaction
54 {
55 get { return (null == this.Fields[2].Data) ? YesNoType.NotSet : (YesNoType)this.Fields[2].Data; }
56 set { this.Fields[2].Data = (int)value; }
57 }
58 }
59}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleRow.cs
new file mode 100644
index 00000000..4c96d6cc
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleRow.cs
@@ -0,0 +1,228 @@
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.Data.Rows
4{
5 using System;
6
7 /// <summary>
8 /// Bundle info for binding Bundles.
9 /// </summary>
10 public class WixBundleRow : Row
11 {
12 /// <summary>
13 /// Creates a WixBundleRow row that does not belong to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="tableDef">TableDefinition this WixBundleRow row belongs to and should get its column definitions from.</param>
17 public WixBundleRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
18 base(sourceLineNumbers, tableDef)
19 {
20 }
21
22 /// <summary>
23 /// Creates a WixBundleRow row that belongs to a table.
24 /// </summary>
25 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
26 /// <param name="table">Table this WixBundleRow row belongs to and should get its column definitions from.</param>
27 public WixBundleRow(SourceLineNumber sourceLineNumbers, Table table) :
28 base(sourceLineNumbers, table)
29 {
30 }
31
32 public string Version
33 {
34 get { return (string)this.Fields[0].Data; }
35 set { this.Fields[0].Data = value; }
36 }
37
38 public string Copyright
39 {
40 get { return (string)this.Fields[1].Data; }
41 set { this.Fields[1].Data = value; }
42 }
43
44 public string Name
45 {
46 get { return (string)this.Fields[2].Data; }
47 set { this.Fields[2].Data = value; }
48 }
49
50 public string AboutUrl
51 {
52 get { return (string)this.Fields[3].Data; }
53 set { this.Fields[3].Data = value; }
54 }
55
56 public int DisableModify
57 {
58 get { return (null == this.Fields[4].Data) ? 0 : (int)this.Fields[4].Data; }
59 set { this.Fields[4].Data = value; }
60 }
61
62 public bool DisableRemove
63 {
64 get { return (null != this.Fields[5].Data && 0 != (int)this.Fields[5].Data); }
65 set { this.Fields[5].Data = value ? 1 : 0; }
66 }
67
68 // There is no 6. It used to be DisableRepair.
69
70 public string HelpTelephone
71 {
72 get { return (string)this.Fields[7].Data; }
73 set { this.Fields[7].Data = value; }
74 }
75
76 public string HelpLink
77 {
78 get { return (string)this.Fields[8].Data; }
79 set { this.Fields[8].Data = value; }
80 }
81
82 public string Publisher
83 {
84 get { return (string)this.Fields[9].Data; }
85 set { this.Fields[9].Data = value; }
86 }
87
88 public string UpdateUrl
89 {
90 get { return (string)this.Fields[10].Data; }
91 set { this.Fields[10].Data = value; }
92 }
93
94 public YesNoDefaultType Compressed
95 {
96 get { return (null == this.Fields[11].Data) ? YesNoDefaultType.Default : (0 == (int)this.Fields[11].Data) ? YesNoDefaultType.No : YesNoDefaultType.Yes; }
97 set { this.Fields[11].Data = (int)value; }
98 }
99
100 public PackagingType DefaultPackagingType
101 {
102 get { return (YesNoDefaultType.No == this.Compressed) ? PackagingType.External : PackagingType.Embedded; }
103 }
104
105 public string LogPathPrefixExtension
106 {
107 get { return (string)this.Fields[12].Data ?? String.Empty; }
108 set { this.Fields[12].Data = value; }
109 }
110
111 public string LogPathVariable
112 {
113 get
114 {
115 string[] logVariableAndPrefixExtension = this.LogPathPrefixExtension.Split(':');
116 return logVariableAndPrefixExtension[0];
117 }
118 }
119
120 public string LogPrefix
121 {
122 get
123 {
124 string[] logVariableAndPrefixExtension = this.LogPathPrefixExtension.Split(':');
125 if (2 > logVariableAndPrefixExtension.Length)
126 {
127 return String.Empty;
128 }
129 string logPrefixAndExtension = logVariableAndPrefixExtension[1];
130 int extensionIndex = logPrefixAndExtension.LastIndexOf('.');
131 return logPrefixAndExtension.Substring(0, extensionIndex);
132 }
133 }
134
135 public string LogExtension
136 {
137 get
138 {
139 string[] logVariableAndPrefixExtension = this.LogPathPrefixExtension.Split(':');
140 if (2 > logVariableAndPrefixExtension.Length)
141 {
142 return String.Empty;
143 }
144 string logPrefixAndExtension = logVariableAndPrefixExtension[1];
145 int extensionIndex = logPrefixAndExtension.LastIndexOf('.');
146 return logPrefixAndExtension.Substring(extensionIndex + 1);
147 }
148 }
149
150 public string IconPath
151 {
152 get { return (string)this.Fields[13].Data; }
153 set { this.Fields[13].Data = value; }
154 }
155
156 public string SplashScreenBitmapPath
157 {
158 get { return (string)this.Fields[14].Data; }
159 set { this.Fields[14].Data = value; }
160 }
161
162 public string Condition
163 {
164 get { return (string)this.Fields[15].Data; }
165 set { this.Fields[15].Data = value; }
166 }
167
168 public string Tag
169 {
170 get { return (string)this.Fields[16].Data; }
171 set { this.Fields[16].Data = value; }
172 }
173
174 public Platform Platform
175 {
176 get { return (Platform)Enum.Parse(typeof(Platform), (string)this.Fields[17].Data); }
177 set { this.Fields[17].Data = value.ToString(); }
178 }
179
180 public string ParentName
181 {
182 get { return (string)this.Fields[18].Data; }
183 set { this.Fields[18].Data = value; }
184 }
185
186 public string UpgradeCode
187 {
188 get { return (string)this.Fields[19].Data; }
189 set { this.Fields[19].Data = value; }
190 }
191
192 public Guid BundleId
193 {
194 get
195 {
196 if (null == this.Fields[20].Data)
197 {
198 this.Fields[20].Data = Guid.NewGuid().ToString("B");
199 }
200
201 return new Guid((string)this.Fields[20].Data);
202 }
203
204 set { this.Fields[20].Data = value.ToString(); }
205 }
206
207 public string ProviderKey
208 {
209 get
210 {
211 if (null == this.Fields[21].Data)
212 {
213 this.Fields[21].Data = this.BundleId.ToString("B");
214 }
215
216 return (string)this.Fields[21].Data;
217 }
218
219 set { this.Fields[21].Data = value; }
220 }
221
222 public bool PerMachine
223 {
224 get { return (null != this.Fields[22].Data && 0 != (int)this.Fields[22].Data); }
225 set { this.Fields[22].Data = value ? 1 : 0; }
226 }
227 }
228}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleSlipstreamMspRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleSlipstreamMspRow.cs
new file mode 100644
index 00000000..d11b23ef
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleSlipstreamMspRow.cs
@@ -0,0 +1,48 @@
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.Data.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the SlipstreamMsp table.
7 /// </summary>
8 public class WixBundleSlipstreamMspRow : Row
9 {
10 /// <summary>
11 /// Creates a SlipstreamMspRow row that does not belong to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="tableDef">TableDefinition this Media row belongs to and should get its column definitions from.</param>
15 public WixBundleSlipstreamMspRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
16 base(sourceLineNumbers, tableDef)
17 {
18 }
19
20 /// <summary>
21 /// Creates a SlipstreamMspRow row that belongs to a table.
22 /// </summary>
23 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
24 /// <param name="table">Table this Media row belongs to and should get its column definitions from.</param>
25 public WixBundleSlipstreamMspRow(SourceLineNumber sourceLineNumbers, Table table) :
26 base(sourceLineNumbers, table)
27 {
28 }
29
30 /// <summary>
31 /// Gets or sets the foreign key identifier to the ChainPackage row.
32 /// </summary>
33 public string ChainPackageId
34 {
35 get { return (string)this.Fields[0].Data; }
36 set { this.Fields[0].Data = value; }
37 }
38
39 /// <summary>
40 /// Gets or sets the foreign key identifier to the ChainPackage row for the MSP package.
41 /// </summary>
42 public string MspPackageId
43 {
44 get { return (string)this.Fields[1].Data; }
45 set { this.Fields[1].Data = value; }
46 }
47 }
48}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleUpdateRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleUpdateRow.cs
new file mode 100644
index 00000000..e0150685
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleUpdateRow.cs
@@ -0,0 +1,38 @@
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.Data.Rows
4{
5 using System;
6
7 /// <summary>
8 /// Bundle update info for binding Bundles.
9 /// </summary>
10 public class WixBundleUpdateRow : Row
11 {
12 /// <summary>
13 /// Creates a WixBundleUpdateRow row that does not belong to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="tableDef">TableDefinition this WixBundleUpdateRow row belongs to and should get its column definitions from.</param>
17 public WixBundleUpdateRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
18 base(sourceLineNumbers, tableDef)
19 {
20 }
21
22 /// <summary>
23 /// Creates a WixBundleUpdateRow row that belongs to a table.
24 /// </summary>
25 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
26 /// <param name="table">Table this WixBundleUpdateRow row belongs to and should get its column definitions from.</param>
27 public WixBundleUpdateRow(SourceLineNumber sourceLineNumbers, Table table) :
28 base(sourceLineNumbers, table)
29 {
30 }
31
32 public string Location
33 {
34 get { return (string)this.Fields[0].Data; }
35 set { this.Fields[0].Data = value; }
36 }
37 }
38}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleVariableRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleVariableRow.cs
new file mode 100644
index 00000000..e7ff1a4d
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixBundleVariableRow.cs
@@ -0,0 +1,80 @@
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.Data.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the Variable table.
7 /// </summary>
8 public sealed class WixBundleVariableRow : Row
9 {
10 /// <summary>
11 /// Creates a Variable row that does not belong to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="tableDef">TableDefinition this Media row belongs to and should get its column definitions from.</param>
15 public WixBundleVariableRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
16 base(sourceLineNumbers, tableDef)
17 {
18 }
19
20 /// <summary>
21 /// Creates a Variable row that belongs to a table.
22 /// </summary>
23 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
24 /// <param name="table">Table this Media row belongs to and should get its column definitions from.</param>
25 public WixBundleVariableRow(SourceLineNumber sourceLineNumbers, Table table)
26 : base(sourceLineNumbers, table)
27 {
28 }
29
30 /// <summary>
31 /// Gets or sets the variable identifier.
32 /// </summary>
33 /// <value>The variable identifier.</value>
34 public string Id
35 {
36 get { return (string)this.Fields[0].Data; }
37 set { this.Fields[0].Data = value; }
38 }
39
40 /// <summary>
41 /// Gets or sets the variable's value.
42 /// </summary>
43 /// <value>The variable's value.</value>
44 public string Value
45 {
46 get { return (string)this.Fields[1].Data; }
47 set { this.Fields[1].Data = value; }
48 }
49
50 /// <summary>
51 /// Gets or sets the variable's type.
52 /// </summary>
53 /// <value>The variable's type.</value>
54 public string Type
55 {
56 get { return (string)this.Fields[2].Data; }
57 set { this.Fields[2].Data = value; }
58 }
59
60 /// <summary>
61 /// Gets or sets whether this variable is hidden.
62 /// </summary>
63 /// <value>Whether this variable is hidden.</value>
64 public bool Hidden
65 {
66 get { return (null == this.Fields[3].Data || 0 == ((int)this.Fields[3].Data)) ? false : true; }
67 set { this.Fields[3].Data = value ? 1 : 0; }
68 }
69
70 /// <summary>
71 /// Gets or sets whether this variable is persisted.
72 /// </summary>
73 /// <value>Whether this variable is persisted.</value>
74 public bool Persisted
75 {
76 get { return (null == this.Fields[4].Data || 0 == ((int)this.Fields[4].Data)) ? false : true; }
77 set { this.Fields[4].Data = value ? 1 : 0; }
78 }
79 }
80}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixChainItemRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixChainItemRow.cs
new file mode 100644
index 00000000..12538d71
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixChainItemRow.cs
@@ -0,0 +1,39 @@
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.Data.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the WixChainItem table.
7 /// </summary>
8 public sealed class WixChainItemRow : Row
9 {
10 /// <summary>
11 /// Creates a WixChainItem row that does not belong to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="tableDef">TableDefinition this ChainItem row belongs to and should get its column definitions from.</param>
15 public WixChainItemRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
16 base(sourceLineNumbers, tableDef)
17 {
18 }
19
20 /// <summary>
21 /// Creates a WixChainItem row that belongs to a table.
22 /// </summary>
23 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
24 /// <param name="table">Table this ChainItem row belongs to and should get its column definitions from.</param>
25 public WixChainItemRow(SourceLineNumber sourceLineNumbers, Table table)
26 : base(sourceLineNumbers, table)
27 {
28 }
29
30 /// <summary>
31 /// Gets or sets the WixChainItem identifier.
32 /// </summary>
33 public string Id
34 {
35 get { return (string)this.Fields[0].Data; }
36 set { this.Fields[0].Data = value; }
37 }
38 }
39}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixChainRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixChainRow.cs
new file mode 100644
index 00000000..54fff72c
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixChainRow.cs
@@ -0,0 +1,65 @@
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
3using WixToolset.Data.Tuples;
4
5namespace WixToolset.Data.Rows
6{
7 /// <summary>
8 /// Specialization of a row for the WixChain table.
9 /// </summary>
10 public sealed class WixChainRow : Row
11 {
12 /// <summary>
13 /// Creates a WixChain row that does not belong to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="tableDef">TableDefinition this row belongs to and should get its column definitions from.</param>
17 public WixChainRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
18 base(sourceLineNumbers, tableDef)
19 {
20 }
21
22 /// <summary>
23 /// Creates a WixChainRow row that belongs to a table.
24 /// </summary>
25 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
26 /// <param name="table">Table this row belongs to and should get its column definitions from.</param>
27 public WixChainRow(SourceLineNumber sourceLineNumbers, Table table) :
28 base(sourceLineNumbers, table)
29 {
30 }
31
32 /// <summary>
33 /// Gets or sets the raw chain attributes.
34 /// </summary>
35 public WixChainAttributes Attributes
36 {
37 get { return (WixChainAttributes)this.Fields[0].Data; }
38 set { this.Fields[0].Data = value; }
39 }
40
41 /// <summary>
42 /// Gets the disable rollback state of a chain.
43 /// </summary>
44 public bool DisableRollback
45 {
46 get { return 0 != (this.Attributes & WixChainAttributes.DisableRollback); }
47 }
48
49 /// <summary>
50 /// Gets disable system restore state of a chain.
51 /// </summary>
52 public bool DisableSystemRestore
53 {
54 get { return 0 != (this.Attributes & WixChainAttributes.DisableSystemRestore); }
55 }
56
57 /// <summary>
58 /// Gets parallel cache of a chain.
59 /// </summary>
60 public bool ParallelCache
61 {
62 get { return 0 != (this.Attributes & WixChainAttributes.ParallelCache); }
63 }
64 }
65}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixComplexReferenceRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixComplexReferenceRow.cs
new file mode 100644
index 00000000..40ca4592
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixComplexReferenceRow.cs
@@ -0,0 +1,204 @@
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.Data.Rows
4{
5 using System;
6 using System.Diagnostics;
7 using System.Diagnostics.CodeAnalysis;
8 using System.Xml;
9
10 /// <summary>
11 /// Specialization of a row for the WixComplexReference table.
12 /// </summary>
13 public sealed class WixComplexReferenceRow : Row, IComparable
14 {
15 /// <summary>
16 /// Creates a WixComplexReferenceRow row that belongs to a table.
17 /// </summary>
18 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
19 /// <param name="table">Table this row belongs to and should get its column definitions from.</param>
20 public WixComplexReferenceRow(SourceLineNumber sourceLineNumbers, Table table)
21 : base(sourceLineNumbers, table)
22 {
23 }
24
25 /// <summary>
26 /// Gets the parent type of the complex reference.
27 /// </summary>
28 /// <value>Parent type of the complex reference.</value>
29 public ComplexReferenceParentType ParentType
30 {
31 get { return (ComplexReferenceParentType)Enum.ToObject(typeof(ComplexReferenceParentType), (int)this.Fields[1].Data); }
32 set { this.Fields[1].Data = (int)value; }
33 }
34
35 /// <summary>
36 /// Gets or sets the parent identifier of the complex reference.
37 /// </summary>
38 /// <value>Parent identifier of the complex reference.</value>
39 public string ParentId
40 {
41 get { return (string)this.Fields[0].Data; }
42 set { this.Fields[0].Data = value; }
43 }
44
45 /// <summary>
46 /// Gets the parent language of the complex reference.
47 /// </summary>
48 /// <value>Parent language of the complex reference.</value>
49 public string ParentLanguage
50 {
51 get { return (string)this.Fields[2].Data; }
52 set { this.Fields[2].Data = value; }
53 }
54
55 /// <summary>
56 /// Gets the child type of the complex reference.
57 /// </summary>
58 /// <value>Child type of the complex reference.</value>
59 public ComplexReferenceChildType ChildType
60 {
61 get { return (ComplexReferenceChildType)Enum.ToObject(typeof(ComplexReferenceChildType), (int)this.Fields[4].Data); }
62 set { this.Fields[4].Data = (int)value; }
63 }
64
65 /// <summary>
66 /// Gets the child identifier of the complex reference.
67 /// </summary>
68 /// <value>Child identifier of the complex reference.</value>
69 public string ChildId
70 {
71 get { return (string)this.Fields[3].Data; }
72 set { this.Fields[3].Data = value; }
73 }
74
75 /// <summary>
76 /// Gets if this is the primary complex reference.
77 /// </summary>
78 /// <value>true if primary complex reference.</value>
79 public bool IsPrimary
80 {
81 get
82 {
83 return (0x1 == ((int)this.Fields[5].Data & 0x1));
84 }
85
86 set
87 {
88 if (null == this.Fields[5].Data)
89 {
90 this.Fields[5].Data = 0;
91 }
92
93 if (value)
94 {
95 this.Fields[5].Data = (int)this.Fields[5].Data | 0x1;
96 }
97 else
98 {
99 this.Fields[5].Data = (int)this.Fields[5].Data & ~0x1;
100 }
101 }
102 }
103
104 /// <summary>
105 /// Determines if two complex references are equivalent.
106 /// </summary>
107 /// <param name="obj">Complex reference to compare.</param>
108 /// <returns>True if complex references are equivalent.</returns>
109 public override bool Equals(object obj)
110 {
111 return 0 == this.CompareTo(obj);
112 }
113
114 /// <summary>
115 /// Gets the hash code for the complex reference.
116 /// </summary>
117 /// <returns>Hash code for the complex reference.</returns>
118 public override int GetHashCode()
119 {
120 return this.ChildType.GetHashCode() ^ this.ChildId.GetHashCode() ^ this.ParentType.GetHashCode() ^ this.ParentLanguage.GetHashCode() ^ this.ParentId.GetHashCode() ^ this.IsPrimary.GetHashCode();
121 }
122
123 /// <summary>
124 /// Compares two complex references.
125 /// </summary>
126 /// <param name="obj">Complex reference to compare to.</param>
127 /// <returns>Zero if the objects are equivalent, negative number if the provided object is less, positive if greater.</returns>
128 public int CompareTo(object obj)
129 {
130 int comparison = this.CompareToWithoutConsideringPrimary(obj);
131 if (0 == comparison)
132 {
133 comparison = ((WixComplexReferenceRow)obj).IsPrimary.CompareTo(this.IsPrimary); // Note: the order of these is purposely switched to ensure that "Yes" is lower than "No" and "NotSet"
134 }
135 return comparison;
136 }
137
138 /// <summary>
139 /// Compares two complex references without considering the primary bit.
140 /// </summary>
141 /// <param name="obj">Complex reference to compare to.</param>
142 /// <returns>Zero if the objects are equivalent, negative number if the provided object is less, positive if greater.</returns>
143 [SuppressMessage("Microsoft.Globalization", "CA1303:DoNotPassLiteralsAsLocalizedParameters", MessageId = "System.ArgumentException.#ctor(System.String,System.String)")]
144 public int CompareToWithoutConsideringPrimary(object obj)
145 {
146 var other = obj as WixComplexReferenceRow ?? throw new ArgumentNullException(nameof(obj));
147
148 int comparison = this.ChildType - other.ChildType;
149 if (0 == comparison)
150 {
151 comparison = String.Compare(this.ChildId, other.ChildId, StringComparison.Ordinal);
152 if (0 == comparison)
153 {
154 comparison = this.ParentType - other.ParentType;
155 if (0 == comparison)
156 {
157 string thisParentLanguage = null == this.ParentLanguage ? String.Empty : this.ParentLanguage;
158 string otherParentLanguage = null == other.ParentLanguage ? String.Empty : other.ParentLanguage;
159 comparison = String.Compare(thisParentLanguage, otherParentLanguage, StringComparison.Ordinal);
160 if (0 == comparison)
161 {
162 comparison = String.Compare(this.ParentId, other.ParentId, StringComparison.Ordinal);
163 }
164 }
165 }
166 }
167
168 return comparison;
169 }
170
171 /// <summary>
172 /// Creates a shallow copy of the ComplexReference.
173 /// </summary>
174 /// <returns>A shallow copy of the ComplexReference.</returns>
175 public WixComplexReferenceRow Clone()
176 {
177 WixComplexReferenceRow wixComplexReferenceRow = new WixComplexReferenceRow(this.SourceLineNumbers, this.Table);
178 wixComplexReferenceRow.ParentType = this.ParentType;
179 wixComplexReferenceRow.ParentId = this.ParentId;
180 wixComplexReferenceRow.ParentLanguage = this.ParentLanguage;
181 wixComplexReferenceRow.ChildType = this.ChildType;
182 wixComplexReferenceRow.ChildId = this.ChildId;
183 wixComplexReferenceRow.IsPrimary = this.IsPrimary;
184
185 return wixComplexReferenceRow;
186 }
187
188 /// <summary>
189 /// Changes all of the parent references to point to the passed in parent reference.
190 /// </summary>
191 /// <param name="parent">New parent complex reference.</param>
192 public void Reparent(WixComplexReferenceRow parent)
193 {
194 this.ParentId = parent.ParentId;
195 this.ParentLanguage = parent.ParentLanguage;
196 this.ParentType = parent.ParentType;
197
198 if (!this.IsPrimary)
199 {
200 this.IsPrimary = parent.IsPrimary;
201 }
202 }
203 }
204}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixDeltaPatchFileRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixDeltaPatchFileRow.cs
new file mode 100644
index 00000000..000779d9
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixDeltaPatchFileRow.cs
@@ -0,0 +1,142 @@
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.Data.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the WixDeltaPatchFile table.
7 /// </summary>
8 public sealed class WixDeltaPatchFileRow : Row
9 {
10 /// <summary>
11 /// Creates a WixDeltaPatchFile row that does not belong to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="tableDef">TableDefinition this Media row belongs to and should get its column definitions from.</param>
15 public WixDeltaPatchFileRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
16 base(sourceLineNumbers, tableDef)
17 {
18 }
19
20 /// <summary>
21 /// Creates a WixDeltaPatchFile row that belongs to a table.
22 /// </summary>
23 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
24 /// <param name="table">Table this File row belongs to and should get its column definitions from.</param>
25 public WixDeltaPatchFileRow(SourceLineNumber sourceLineNumbers, Table table) :
26 base(sourceLineNumbers, table)
27 {
28 }
29
30 /// <summary>
31 /// Gets or sets the primary key of the file row.
32 /// </summary>
33 /// <value>Primary key of the file row.</value>
34 public string File
35 {
36 get { return (string)this.Fields[0].Data; }
37 set { this.Fields[0].Data = value; }
38 }
39
40 /// <summary>
41 /// Gets or sets the delta patch retain-length list for the file.
42 /// </summary>
43 /// <value>RetainLength list for the file.</value>
44 public string RetainLengths
45 {
46 get { return (string)this.Fields[1].Data; }
47 set { this.Fields[1].Data = value; }
48 }
49
50 /// <summary>
51 /// Gets or sets the previous delta patch retain-length list for the file.
52 /// </summary>
53 /// <value>Previous RetainLength list for the file.</value>
54 public string PreviousRetainLengths
55 {
56 get { return this.Fields[1].PreviousData; }
57 set { this.Fields[1].PreviousData = value; }
58 }
59
60 /// <summary>
61 /// Gets or sets the delta patch ignore-offset list for the file.
62 /// </summary>
63 /// <value>IgnoreOffset list for the file.</value>
64 public string IgnoreOffsets
65 {
66 get { return (string)this.Fields[2].Data; }
67 set { this.Fields[2].Data = value; }
68 }
69
70 /// <summary>
71 /// Gets or sets the previous delta patch ignore-offset list for the file.
72 /// </summary>
73 /// <value>Previous IgnoreOffset list for the file.</value>
74 public string PreviousIgnoreOffsets
75 {
76 get { return this.Fields[2].PreviousData; }
77 set { this.Fields[2].PreviousData = value; }
78 }
79
80 /// <summary>
81 /// Gets or sets the delta patch ignore-length list for the file.
82 /// </summary>
83 /// <value>IgnoreLength list for the file.</value>
84 public string IgnoreLengths
85 {
86 get { return (string)this.Fields[3].Data; }
87 set { this.Fields[3].Data = value; }
88 }
89
90 /// <summary>
91 /// Gets or sets the previous delta patch ignore-length list for the file.
92 /// </summary>
93 /// <value>Previous IgnoreLength list for the file.</value>
94 public string PreviousIgnoreLengths
95 {
96 get { return this.Fields[3].PreviousData; }
97 set { this.Fields[3].PreviousData = value; }
98 }
99
100 /// <summary>
101 /// Gets or sets the delta patch retain-offset list for the file.
102 /// </summary>
103 /// <value>RetainOffset list for the file.</value>
104 public string RetainOffsets
105 {
106 get { return (string)this.Fields[4].Data; }
107 set { this.Fields[4].Data = value; }
108 }
109
110 /// <summary>
111 /// Gets or sets the previous delta patch retain-offset list for the file.
112 /// </summary>
113 /// <value>PreviousRetainOffset list for the file.</value>
114 public string PreviousRetainOffsets
115 {
116 get { return this.Fields[4].PreviousData; }
117 set { this.Fields[4].PreviousData = value; }
118 }
119
120 /// <summary>
121 /// Gets or sets the symbol paths for the file.
122 /// </summary>
123 /// <value>SymbolPath list for the file.</value>
124 /// <remarks>This is set during binding.</remarks>
125 public string Symbols
126 {
127 get { return (string)this.Fields[5].Data; }
128 set { this.Fields[5].Data = value; }
129 }
130
131 /// <summary>
132 /// Gets or sets the previous symbol paths for the file.
133 /// </summary>
134 /// <value>PreviousSymbolPath list for the file.</value>
135 /// <remarks>This is set during binding.</remarks>
136 public string PreviousSymbols
137 {
138 get { return (string)this.Fields[5].PreviousData; }
139 set { this.Fields[5].PreviousData = value; }
140 }
141 }
142}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixDeltaPatchSymbolPathsRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixDeltaPatchSymbolPathsRow.cs
new file mode 100644
index 00000000..b6c0b840
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixDeltaPatchSymbolPathsRow.cs
@@ -0,0 +1,58 @@
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.Data.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the WixDeltaPatchSymbolPaths table.
7 /// </summary>
8 public sealed class WixDeltaPatchSymbolPathsRow : Row
9 {
10 /// <summary>
11 /// Creates a WixDeltaPatchSymbolPaths row that does not belong to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="tableDef">TableDefinition this row belongs to and should get its column definitions from.</param>
15 public WixDeltaPatchSymbolPathsRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
16 base(sourceLineNumbers, tableDef)
17 {
18 }
19
20 /// <summary>
21 /// Creates a WixDeltaPatchSymbolPaths row that belongs to a table.
22 /// </summary>
23 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
24 /// <param name="table">Table this row belongs to and should get its column definitions from.</param>
25 public WixDeltaPatchSymbolPathsRow(SourceLineNumber sourceLineNumbers, Table table) :
26 base(sourceLineNumbers, table)
27 {
28 }
29
30 /// <summary>
31 /// Gets or sets the identifier the symbol paths apply to.
32 /// </summary>
33 /// <value>RetainLength list for the file.</value>
34 public string Id
35 {
36 get { return (string)this.Fields[0].Data; }
37 set { this.Fields[0].Data = value; }
38 }
39
40 /// <summary>
41 /// Gets or sets the type of the identifier.
42 /// </summary>
43 public SymbolPathType Type
44 {
45 get { return (SymbolPathType)this.Fields[1].AsInteger(); }
46 set { this.Fields[1].Data = value; }
47 }
48
49 /// <summary>
50 /// Gets or sets the delta patch symbol paths.
51 /// </summary>
52 public string SymbolPaths
53 {
54 get { return (string)this.Fields[2].Data; }
55 set { this.Fields[2].Data = value; }
56 }
57 }
58}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixFileRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixFileRow.cs
new file mode 100644
index 00000000..c006355a
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixFileRow.cs
@@ -0,0 +1,163 @@
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
3using WixToolset.Data.Tuples;
4
5namespace WixToolset.Data.Rows
6{
7 /// <summary>
8 /// Specialization of a row for the WixFile table.
9 /// </summary>
10 public sealed class WixFileRow : Row
11 {
12 /// <summary>
13 /// Creates a WixFile row that does not belong to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="tableDef">TableDefinition this row belongs to and should get its column definitions from.</param>
17 public WixFileRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
18 base(sourceLineNumbers, tableDef)
19 {
20 }
21
22 /// <summary>
23 /// Creates a WixFile row that belongs to a table.
24 /// </summary>
25 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
26 /// <param name="table">Table this row belongs to and should get its column definitions from.</param>
27 public WixFileRow(SourceLineNumber sourceLineNumbers, Table table) :
28 base(sourceLineNumbers, table)
29 {
30 }
31
32 /// <summary>
33 /// Gets or sets the primary key of the file row.
34 /// </summary>
35 /// <value>Primary key of the file row.</value>
36 public string File
37 {
38 get { return (string)this.Fields[0].Data; }
39 set { this.Fields[0].Data = value; }
40 }
41
42 /// <summary>
43 /// Gets or sets the assembly type of the file row.
44 /// </summary>
45 /// <value>Assembly type of the file row.</value>
46 public FileAssemblyType AssemblyType
47 {
48 get { return (null == this.Fields[1]) ? FileAssemblyType.NotAnAssembly : (FileAssemblyType)this.Fields[1].AsInteger(); }
49 set { this.Fields[1].Data = (int)value; }
50 }
51
52 /// <summary>
53 /// Gets or sets the identifier for the assembly manifest.
54 /// </summary>
55 /// <value>Identifier for the assembly manifest.</value>
56 public string AssemblyManifest
57 {
58 get { return (string)this.Fields[2].Data; }
59 set { this.Fields[2].Data = value; }
60 }
61
62 /// <summary>
63 /// Gets or sets the application for the assembly.
64 /// </summary>
65 /// <value>Application for the assembly.</value>
66 public string AssemblyApplication
67 {
68 get { return (string)this.Fields[3].Data; }
69 set { this.Fields[3].Data = value; }
70 }
71
72 /// <summary>
73 /// Gets or sets the directory of the file.
74 /// </summary>
75 /// <value>Directory of the file.</value>
76 public string Directory
77 {
78 get { return (string)this.Fields[4].Data; }
79 set { this.Fields[4].Data = value; }
80 }
81
82 /// <summary>
83 /// Gets or sets the disk id for this file.
84 /// </summary>
85 /// <value>Disk id for the file.</value>
86 public int DiskId
87 {
88 get { return (int)this.Fields[5].Data; }
89 set { this.Fields[5].Data = value; }
90 }
91
92 /// <summary>
93 /// Gets or sets the source location to the file.
94 /// </summary>
95 /// <value>Source location to the file.</value>
96 public string Source
97 {
98 get { return (string)this.Fields[6].Data; }
99 set { this.Fields[6].Data = value; }
100 }
101
102 /// <summary>
103 /// Gets or sets the source location to the file.
104 /// </summary>
105 /// <value>Source location to the file.</value>
106 public string PreviousSource
107 {
108 get { return (string)this.Fields[6].PreviousData; }
109 set { this.Fields[6].PreviousData = value; }
110 }
111
112 /// <summary>
113 /// Gets or sets the architecture the file executes on.
114 /// </summary>
115 /// <value>Architecture the file executes on.</value>
116 public string ProcessorArchitecture
117 {
118 get { return (string)this.Fields[7].Data; }
119 set { this.Fields[7].Data = value; }
120 }
121
122 /// <summary>
123 /// Gets or sets the patch group of a patch-added file.
124 /// </summary>
125 /// <value>The patch group of a patch-added file.</value>
126 public int PatchGroup
127 {
128 get { return (null == this.Fields[8].Data) ? 0 : (int)this.Fields[8].Data; }
129 set { this.Fields[8].Data = value; }
130 }
131
132 /// <summary>
133 /// Gets or sets the attributes on a file.
134 /// </summary>
135 /// <value>Attributes on a file.</value>
136 public int Attributes
137 {
138 get { return (int)this.Fields[9].Data; }
139 set { this.Fields[9].Data = value; }
140 }
141
142 /// <summary>
143 /// Gets or sets the patching attributes to the file.
144 /// </summary>
145 /// <value>Patching attributes of the file.</value>
146 public PatchAttributeType PatchAttributes
147 {
148 get { return (PatchAttributeType)this.Fields[10].AsInteger(); }
149 set { this.Fields[10].Data = (int)value; }
150 }
151
152 /// <summary>
153 /// Gets or sets the path to the delta patch header.
154 /// </summary>
155 /// <value>Patch header path.</value>
156 /// <remarks>Set by the binder only when doing delta patching.</remarks>
157 public string DeltaPatchHeaderSource
158 {
159 get { return (string)this.Fields[11].Data; }
160 set { this.Fields[11].Data = value; }
161 }
162 }
163}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixGroupRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixGroupRow.cs
new file mode 100644
index 00000000..d36338d1
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixGroupRow.cs
@@ -0,0 +1,62 @@
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.Data.Rows
4{
5 using System;
6
7 /// <summary>
8 /// Specialization of a row for the WixGroup table.
9 /// </summary>
10 public sealed class WixGroupRow : Row
11 {
12 /// <summary>
13 /// Creates a WixGroupRow row that belongs to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="table">Table this row belongs to and should get its column definitions from.</param>
17 public WixGroupRow(SourceLineNumber sourceLineNumbers, Table table)
18 : base(sourceLineNumbers, table)
19 {
20 }
21
22 /// <summary>
23 /// Gets or sets the parent identifier of the complex reference.
24 /// </summary>
25 /// <value>Parent identifier of the complex reference.</value>
26 public string ParentId
27 {
28 get { return (string)this.Fields[0].Data; }
29 set { this.Fields[0].Data = value; }
30 }
31
32 /// <summary>
33 /// Gets the parent type of the complex reference.
34 /// </summary>
35 /// <value>Parent type of the complex reference.</value>
36 public ComplexReferenceParentType ParentType
37 {
38 get { return (ComplexReferenceParentType)Enum.Parse(typeof(ComplexReferenceParentType), (string)this.Fields[1].Data); }
39 set { this.Fields[1].Data = value.ToString(); }
40 }
41
42 /// <summary>
43 /// Gets the child identifier of the complex reference.
44 /// </summary>
45 /// <value>Child identifier of the complex reference.</value>
46 public string ChildId
47 {
48 get { return (string)this.Fields[2].Data; }
49 set { this.Fields[2].Data = value; }
50 }
51
52 /// <summary>
53 /// Gets the child type of the complex reference.
54 /// </summary>
55 /// <value>Child type of the complex reference.</value>
56 public ComplexReferenceChildType ChildType
57 {
58 get { return (ComplexReferenceChildType)Enum.Parse(typeof(ComplexReferenceChildType), (string)this.Fields[3].Data); }
59 set { this.Fields[3].Data = value.ToString(); }
60 }
61 }
62}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixMediaRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixMediaRow.cs
new file mode 100644
index 00000000..c1b3e155
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixMediaRow.cs
@@ -0,0 +1,60 @@
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.Data.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the WixMedia table.
7 /// </summary>
8 public sealed class WixMediaRow : Row
9 {
10 /// <summary>
11 /// Creates a WixMedia row that does not belong to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="tableDef">TableDefinition this Media row belongs to and should get its column definitions from.</param>
15 public WixMediaRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
16 base(sourceLineNumbers, tableDef)
17 {
18 }
19
20 /// <summary>
21 /// Creates a WixMedia row that belongs to a table.
22 /// </summary>
23 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
24 /// <param name="table">Table this Media row belongs to and should get its column definitions from.</param>
25 public WixMediaRow(SourceLineNumber sourceLineNumbers, Table table) :
26 base(sourceLineNumbers, table)
27 {
28 }
29
30 /// <summary>
31 /// Gets or sets the disk id for this media.
32 /// </summary>
33 /// <value>Disk id for the media.</value>
34 public int DiskId
35 {
36 get { return (int)this.Fields[0].Data; }
37 set { this.Fields[0].Data = value; }
38 }
39
40 /// <summary>
41 /// Gets or sets the compression level for this media row.
42 /// </summary>
43 /// <value>Compression level.</value>
44 public CompressionLevel? CompressionLevel
45 {
46 get { return (CompressionLevel?)this.Fields[1].AsNullableInteger(); }
47 set { this.Fields[1].Data = value; }
48 }
49
50 /// <summary>
51 /// Gets or sets the layout location for this media row.
52 /// </summary>
53 /// <value>Layout location to the root of the media.</value>
54 public string Layout
55 {
56 get { return (string)this.Fields[2].Data; }
57 set { this.Fields[2].Data = value; }
58 }
59 }
60}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixMediaTemplateRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixMediaTemplateRow.cs
new file mode 100644
index 00000000..27c5ccce
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixMediaTemplateRow.cs
@@ -0,0 +1,81 @@
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.Data.Rows
4{
5 /// <summary>
6 /// Specialization of a row for the MediaTemplate table.
7 /// </summary>
8 public sealed class WixMediaTemplateRow : Row
9 {
10 /// <summary>
11 /// Creates a MediaTemplate row that belongs to a table.
12 /// </summary>
13 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
14 /// <param name="table">Table this MediaTeplate row belongs to and should get its column definitions from.</param>
15 public WixMediaTemplateRow(SourceLineNumber sourceLineNumbers, Table table)
16 : base(sourceLineNumbers, table)
17 {
18 }
19
20 /// <summary>
21 /// Gets or sets the cabinet template name for this media template row.
22 /// </summary>
23 /// <value>Cabinet name.</value>
24 public string CabinetTemplate
25 {
26 get { return (string)this.Fields[0].Data; }
27 set { this.Fields[0].Data = value; }
28 }
29
30 /// <summary>
31 /// Gets or sets the compression level for this media template row.
32 /// </summary>
33 /// <value>Compression level.</value>
34 public CompressionLevel? CompressionLevel
35 {
36 get { return (CompressionLevel?)this.Fields[1].AsNullableInteger(); }
37 set { this.Fields[1].Data = value; }
38 }
39
40 /// <summary>
41 /// Gets or sets the disk prompt for this media template row.
42 /// </summary>
43 /// <value>Disk prompt.</value>
44 public string DiskPrompt
45 {
46 get { return (string)this.Fields[2].Data; }
47 set { this.Fields[2].Data = value; }
48 }
49
50
51 /// <summary>
52 /// Gets or sets the volume label for this media template row.
53 /// </summary>
54 /// <value>Volume label.</value>
55 public string VolumeLabel
56 {
57 get { return (string)this.Fields[3].Data; }
58 set { this.Fields[3].Data = value; }
59 }
60
61 /// <summary>
62 /// Gets or sets the maximum uncompressed media size for this media template row.
63 /// </summary>
64 /// <value>Disk id.</value>
65 public int MaximumUncompressedMediaSize
66 {
67 get { return (int)this.Fields[4].Data; }
68 set { this.Fields[4].Data = value; }
69 }
70
71 /// <summary>
72 /// Gets or sets the Maximum Cabinet Size For Large File Splitting for this media template row.
73 /// </summary>
74 /// <value>Disk id.</value>
75 public int MaximumCabinetSizeForLargeFileSplitting
76 {
77 get { return (int)this.Fields[5].Data; }
78 set { this.Fields[5].Data = value; }
79 }
80 }
81}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixMergeRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixMergeRow.cs
new file mode 100644
index 00000000..54f2125c
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixMergeRow.cs
@@ -0,0 +1,149 @@
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.Data.Rows
4{
5 using System;
6 using System.Globalization;
7 using System.Text;
8 using System.Xml;
9
10 /// <summary>
11 /// Specialization of a row for tracking merge statements.
12 /// </summary>
13 public sealed class WixMergeRow : Row
14 {
15 /// <summary>
16 /// Creates a Merge row that does not belong to a table.
17 /// </summary>
18 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
19 /// <param name="tableDef">TableDefinition this Merge row belongs to and should get its column definitions from.</param>
20 public WixMergeRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
21 base(sourceLineNumbers, tableDef)
22 {
23 }
24
25 /// <summary>Creates a Merge row that belongs to a table.</summary>
26 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
27 /// <param name="table">Table this Merge row belongs to and should get its column definitions from.</param>
28 public WixMergeRow(SourceLineNumber sourceLineNumbers, Table table) :
29 base(sourceLineNumbers, table)
30 {
31 }
32
33 /// <summary>
34 /// Gets and sets the id for a merge row.
35 /// </summary>
36 /// <value>Id for the row.</value>
37 public string Id
38 {
39 get { return (string)this.Fields[0].Data; }
40 set { this.Fields[0].Data = value; }
41 }
42
43 /// <summary>
44 /// Gets and sets the language for a merge row.
45 /// </summary>
46 /// <value>Language for the row.</value>
47 public string Language
48 {
49 get { return (string)this.Fields[1].Data; }
50 set { this.Fields[1].Data = value; }
51 }
52
53 /// <summary>
54 /// Gets and sets the directory for a merge row.
55 /// </summary>
56 /// <value>Direcotory for the row.</value>
57 public string Directory
58 {
59 get { return (string)this.Fields[2].Data; }
60 set { this.Fields[2].Data = value; }
61 }
62
63 /// <summary>
64 /// Gets and sets the path to the merge module for a merge row.
65 /// </summary>
66 /// <value>Source path for the row.</value>
67 public string SourceFile
68 {
69 get { return (string)this.Fields[3].Data; }
70 set { this.Fields[3].Data = value; }
71 }
72
73 /// <summary>
74 /// Gets and sets the disk id the merge module should be placed on for a merge row.
75 /// </summary>
76 /// <value>Disk identifier for row.</value>
77 public int DiskId
78 {
79 get { return (int)this.Fields[4].Data; }
80 set { this.Fields[4].Data = value; }
81 }
82
83 /// <summary>
84 /// Gets and sets the compression value for a merge row.
85 /// </summary>
86 /// <value>Compression for a merge row.</value>
87 public YesNoType FileCompression
88 {
89 get
90 {
91 if (null == this.Fields[5].Data)
92 {
93 return YesNoType.NotSet;
94 }
95 else if (1 == (int)this.Fields[5].Data)
96 {
97 return YesNoType.Yes;
98 }
99 else if (0 == (int)this.Fields[5].Data)
100 {
101 return YesNoType.No;
102 }
103 else
104 {
105 throw new InvalidOperationException(String.Format(CultureInfo.CurrentUICulture, WixDataStrings.EXP_MergeTableFileCompressionColumnContainsInvalidValue, this.Fields[5].Data));
106 }
107 }
108 set
109 {
110 if (YesNoType.Yes == value)
111 {
112 this.Fields[5].Data = 1;
113 }
114 else if (YesNoType.No == value)
115 {
116 this.Fields[5].Data = 0;
117 }
118 else if (YesNoType.NotSet == value)
119 {
120 this.Fields[5].Data = null;
121 }
122 else
123 {
124 throw new InvalidOperationException(String.Format(CultureInfo.CurrentUICulture, WixDataStrings.EXP_CannotSetMergeTableFileCompressionColumnToInvalidValue, value));
125 }
126 }
127 }
128
129 /// <summary>
130 /// Gets and sets the configuration data for a merge row.
131 /// </summary>
132 /// <value>Comma delimited string of "name=value" pairs.</value>
133 public string ConfigurationData
134 {
135 get { return (string)this.Fields[6].Data; }
136 set { this.Fields[6].Data = value; }
137 }
138
139 /// <summary>
140 /// Gets and sets the primary feature for a merge row.
141 /// </summary>
142 /// <value>The primary feature for a merge row.</value>
143 public string Feature
144 {
145 get { return (string)this.Fields[7].Data; }
146 set { this.Fields[7].Data = value; }
147 }
148 }
149}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixPayloadPropertiesRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixPayloadPropertiesRow.cs
new file mode 100644
index 00000000..2e5f53ad
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixPayloadPropertiesRow.cs
@@ -0,0 +1,81 @@
1//-------------------------------------------------------------------------------------------------
2// <copyright file="WixPayloadPropertiesRow.cs" company="Outercurve Foundation">
3// Copyright (c) 2004, Outercurve Foundation.
4// This software is released under Microsoft Reciprocal License (MS-RL).
5// The license and further copyright text can be found in the file
6// LICENSE.TXT at the root directory of the distribution.
7// </copyright>
8//-------------------------------------------------------------------------------------------------
9
10namespace WixToolset.Data.Rows
11{
12 using System;
13
14 /// <summary>
15 /// Specialization of a row for the WixPayloadProperties table.
16 /// </summary>
17 public class WixPayloadPropertiesRow : Row
18 {
19 /// <summary>
20 /// Creates a WixPayloadProperties row that does not belong to a table.
21 /// </summary>
22 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
23 /// <param name="tableDef">TableDefinition this WixPayloadProperties row belongs to and should get its column definitions from.</param>
24 public WixPayloadPropertiesRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
25 base(sourceLineNumbers, tableDef)
26 {
27 }
28
29 /// <summary>
30 /// Creates a WixPayloadProperties row that belongs to a table.
31 /// </summary>
32 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
33 /// <param name="table">Table this WixPayloadProperties row belongs to and should get its column definitions from.</param>
34 public WixPayloadPropertiesRow(SourceLineNumber sourceLineNumbers, Table table) :
35 base(sourceLineNumbers, table)
36 {
37 }
38
39 public string Id
40 {
41 get { return (string)this.Fields[0].Data; }
42 set { this.Fields[0].Data = value; }
43 }
44
45 public string Package
46 {
47 get { return (string)this.Fields[1].Data; }
48 set { this.Fields[1].Data = value; }
49 }
50
51 public string Container
52 {
53 get { return (string)this.Fields[2].Data; }
54 set { this.Fields[2].Data = value; }
55 }
56
57 public string Name
58 {
59 get { return (string)this.Fields[3].Data; }
60 set { this.Fields[3].Data = value; }
61 }
62
63 public string Size
64 {
65 get { return (string)this.Fields[4].Data; }
66 set { this.Fields[4].Data = value; }
67 }
68
69 public string DownloadUrl
70 {
71 get { return (string)this.Fields[5].Data; }
72 set { this.Fields[5].Data = value; }
73 }
74
75 public string LayoutOnly
76 {
77 get { return (string)this.Fields[6].Data; }
78 set { this.Fields[6].Data = value; }
79 }
80 }
81}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixPropertyRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixPropertyRow.cs
new file mode 100644
index 00000000..5285195c
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixPropertyRow.cs
@@ -0,0 +1,118 @@
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.Data.Rows
4{
5 using System;
6 using System.Globalization;
7
8 /// <summary>
9 /// Specialization of a row for the WixProperty table.
10 /// </summary>
11 public sealed class WixPropertyRow : Row
12 {
13 /// <summary>Creates a WixProperty row that belongs to a table.</summary>
14 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
15 /// <param name="table">Table this WixProperty row belongs to and should get its column definitions from.</param>
16 public WixPropertyRow(SourceLineNumber sourceLineNumbers, Table table) :
17 base(sourceLineNumbers, table)
18 {
19 }
20
21 /// <summary>
22 /// Gets and sets the id for this property row.
23 /// </summary>
24 /// <value>Id for the property.</value>
25 public string Id
26 {
27 get { return (string)this.Fields[0].Data; }
28 set { this.Fields[0].Data = value; }
29 }
30
31 /// <summary>
32 /// Gets and sets if this is an admin property row.
33 /// </summary>
34 /// <value>Flag if this is an admin property.</value>
35 public bool Admin
36 {
37 get
38 {
39 return (0x1 == (Convert.ToInt32(this.Fields[1].Data, CultureInfo.InvariantCulture) & 0x1));
40 }
41
42 set
43 {
44 if (null == this.Fields[1].Data)
45 {
46 this.Fields[1].Data = 0;
47 }
48
49 if (value)
50 {
51 this.Fields[1].Data = (int)this.Fields[1].Data | 0x1;
52 }
53 else
54 {
55 this.Fields[1].Data = (int)this.Fields[1].Data & ~0x1;
56 }
57 }
58 }
59
60 /// <summary>
61 /// Gets and sets if this is a hidden property row.
62 /// </summary>
63 /// <value>Flag if this is a hidden property.</value>
64 public bool Hidden
65 {
66 get
67 {
68 return (0x2 == (Convert.ToInt32(this.Fields[1].Data, CultureInfo.InvariantCulture) & 0x2));
69 }
70
71 set
72 {
73 if (null == this.Fields[1].Data)
74 {
75 this.Fields[1].Data = 0;
76 }
77
78 if (value)
79 {
80 this.Fields[1].Data = (int)this.Fields[1].Data | 0x2;
81 }
82 else
83 {
84 this.Fields[1].Data = (int)this.Fields[1].Data & ~0x2;
85 }
86 }
87 }
88
89 /// <summary>
90 /// Gets and sets if this is a secure property row.
91 /// </summary>
92 /// <value>Flag if this is a secure property.</value>
93 public bool Secure
94 {
95 get
96 {
97 return (0x4 == (Convert.ToInt32(this.Fields[1].Data, CultureInfo.InvariantCulture) & 0x4));
98 }
99
100 set
101 {
102 if (null == this.Fields[1].Data)
103 {
104 this.Fields[1].Data = 0;
105 }
106
107 if (value)
108 {
109 this.Fields[1].Data = (int)this.Fields[1].Data | 0x4;
110 }
111 else
112 {
113 this.Fields[1].Data = (int)this.Fields[1].Data & ~0x4;
114 }
115 }
116 }
117 }
118}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixRelatedBundleRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixRelatedBundleRow.cs
new file mode 100644
index 00000000..95fffde5
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixRelatedBundleRow.cs
@@ -0,0 +1,52 @@
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.Data.Rows
4{
5 using Serialize = WixToolset.Data.Serialize;
6
7 /// <summary>
8 /// Specialization of a row for the RelatedBundle table.
9 /// </summary>
10 public sealed class WixRelatedBundleRow : Row
11 {
12 /// <summary>
13 /// Creates a RelatedBundle row that does not belong to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="tableDef">TableDefinition this RelatedBundle row belongs to and should get its column definitions from.</param>
17 public WixRelatedBundleRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
18 base(sourceLineNumbers, tableDef)
19 {
20 }
21
22 /// <summary>
23 /// Creates a RelatedBundle row that belongs to a table.
24 /// </summary>
25 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
26 /// <param name="table">Table this RelatedBundle row belongs to and should get its column definitions from.</param>
27 public WixRelatedBundleRow(SourceLineNumber sourceLineNumbers, Table table)
28 : base(sourceLineNumbers, table)
29 {
30 }
31
32 /// <summary>
33 /// Gets or sets the related bundle identifier.
34 /// </summary>
35 /// <value>The related bundle identifier.</value>
36 public string Id
37 {
38 get { return (string)this.Fields[0].Data; }
39 set { this.Fields[0].Data = value; }
40 }
41
42 /// <summary>
43 /// Gets or sets the related bundle action.
44 /// </summary>
45 /// <value>The related bundle action.</value>
46 public Serialize.RelatedBundle.ActionType Action
47 {
48 get { return (Serialize.RelatedBundle.ActionType)this.Fields[1].Data; }
49 set { this.Fields[1].Data = (int)value; }
50 }
51 }
52}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixSimpleReferenceRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixSimpleReferenceRow.cs
new file mode 100644
index 00000000..3a2cf8f1
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixSimpleReferenceRow.cs
@@ -0,0 +1,63 @@
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.Data.Rows
4{
5 using System;
6 using System.Diagnostics;
7 using System.Xml;
8
9 /// <summary>
10 /// Specialization of a row for the WixSimpleReference table.
11 /// </summary>
12 public sealed class WixSimpleReferenceRow : Row
13 {
14 /// <summary>
15 /// Creates a WixSimpleReferenceRow that belongs to a table.
16 /// </summary>
17 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
18 /// <param name="table">Table this row belongs to and should get its column definitions from.</param>
19 public WixSimpleReferenceRow(SourceLineNumber sourceLineNumbers, Table table)
20 : base(sourceLineNumbers, table)
21 {
22 }
23
24 /// <summary>
25 /// Creates a WixSimpleReferenceRow that belongs to a table.
26 /// </summary>
27 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
28 /// <param name="tableDefinitions">Table definitions for this row.</param>
29 public WixSimpleReferenceRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDefinitions)
30 : base(sourceLineNumbers, tableDefinitions)
31 {
32 }
33
34 /// <summary>
35 /// Gets or sets the primary keys of the simple reference.
36 /// </summary>
37 /// <value>The primary keys of the simple reference.</value>
38 public string PrimaryKeys
39 {
40 get { return (string)this.Fields[1].Data; }
41 set { this.Fields[1].Data = value; }
42 }
43
44 /// <summary>
45 /// Gets the symbolic name.
46 /// </summary>
47 /// <value>Symbolic name.</value>
48 public string SymbolicName
49 {
50 get { return String.Concat(this.TableName, ":", this.PrimaryKeys); }
51 }
52
53 /// <summary>
54 /// Gets or sets the table name of the simple reference.
55 /// </summary>
56 /// <value>The table name of the simple reference.</value>
57 public string TableName
58 {
59 get { return (string)this.Fields[0].Data; }
60 set { this.Fields[0].Data = value; }
61 }
62 }
63}
diff --git a/src/WixToolset.Data.WindowsInstaller/Rows/WixUpdateRegistrationRow.cs b/src/WixToolset.Data.WindowsInstaller/Rows/WixUpdateRegistrationRow.cs
new file mode 100644
index 00000000..8d86f970
--- /dev/null
+++ b/src/WixToolset.Data.WindowsInstaller/Rows/WixUpdateRegistrationRow.cs
@@ -0,0 +1,62 @@
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.Data.Rows
4{
5 using System;
6
7 /// <summary>
8 /// Update registration information for Binding.
9 /// </summary>
10 public class WixUpdateRegistrationRow : Row
11 {
12 /// <summary>
13 /// Creates a WixUpdateRegistrationRow row that does not belong to a table.
14 /// </summary>
15 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
16 /// <param name="tableDef">TableDefinition this WixUpdateRegistrationRow row belongs to and should get its column definitions from.</param>
17 public WixUpdateRegistrationRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
18 base(sourceLineNumbers, tableDef)
19 {
20 }
21
22 /// <summary>
23 /// Creates a WixUpdateRegistrationRow row that belongs to a table.
24 /// </summary>
25 /// <param name="sourceLineNumbers">Original source lines for this row.</param>
26 /// <param name="table">Table this WixUpdateRegistrationRow row belongs to and should get its column definitions from.</param>
27 public WixUpdateRegistrationRow(SourceLineNumber sourceLineNumbers, Table table) :
28 base(sourceLineNumbers, table)
29 {
30 }
31
32 public string Manufacturer
33 {
34 get { return (string)this.Fields[0].Data; }
35 set { this.Fields[0].Data = value; }
36 }
37
38 public string Department
39 {
40 get { return (string)this.Fields[1].Data; }
41 set { this.Fields[1].Data = value; }
42 }
43
44 public string ProductFamily
45 {
46 get { return (string)this.Fields[2].Data; }
47 set { this.Fields[2].Data = value; }
48 }
49
50 public string Name
51 {
52 get { return (string)this.Fields[3].Data; }
53 set { this.Fields[3].Data = value; }
54 }
55
56 public string Classification
57 {
58 get { return (string)this.Fields[4].Data; }
59 set { this.Fields[4].Data = value; }
60 }
61 }
62}