@joebigelow / wix / commits / 49f12090

Support MSI backends creating custom tables and remove WixToolset.Data.WindowsInstaller

Rob Mensching committed Dec 7, 2017 at 14:19 UTC 49f1209035aac1fcfad5dbbe25f7b2306d3be86c
102 files changed +894 -9258
src/WixToolset.Core.Burn/RowIndexedList.cs renamed
+2 -1
@@ -1,9 +1,10 @@
1 // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3 -namespace WixToolset.Data
3 +namespace WixToolset.Core.Burn
4 {
5 using System;
6 using System.Collections.Generic;
7 + using WixToolset.Data.WindowsInstaller;
8
9 /// <summary>
10 /// A list of rows indexed by their primary key. Unlike a <see cref="RowDictionary"/>
src/WixToolset.Core.Burn/TableExtensions.cs renamed
+2 -1
@@ -1,9 +1,10 @@
1 // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3 -namespace WixToolset.Data
3 +namespace WixToolset.Core.Burn
4 {
5 using System.Collections.Generic;
6 using System.Linq;
7 + using WixToolset.Data.WindowsInstaller;
8
9 /// <summary>
10 /// Methods that extend <see cref="Table"/>.
src/WixToolset.Core.WindowsInstaller/Bind/BindDatabaseCommand.cs
+7 -11
@@ -10,6 +10,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
10 using WixToolset.Data;
11 using WixToolset.Data.Bind;
12 using WixToolset.Data.Tuples;
13 + using WixToolset.Data.WindowsInstaller;
14 using WixToolset.Extensibility;
15 using WixToolset.Extensibility.Services;
16
@@ -21,7 +22,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
22 // As outlined in RFC 4122, this is our namespace for generating name-based (version 3) UUIDs.
23 internal static readonly Guid WixComponentGuidNamespace = new Guid("{3064E5C6-FB63-4FE9-AC49-E446A792EFA5}");
24
24 - public BindDatabaseCommand(IBindContext context, Validator validator)
25 + public BindDatabaseCommand(IBindContext context, IEnumerable<IWindowsInstallerBackendExtension> backendExtension, Validator validator)
26 {
27 this.TableDefinitions = WindowsInstallerStandardInternal.GetTableDefinitions();
28
@@ -40,7 +41,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
41 this.Validator = validator;
42 this.WixVariableResolver = context.WixVariableResolver;
43
43 - this.BackendExtensions = context.ExtensionManager.Create<IWindowsInstallerBackendExtension>();
44 + this.BackendExtensions = backendExtension;
45 }
46
47 private IEnumerable<BindPath> BindPaths { get; }
@@ -298,7 +299,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
299 // Try to put as much above here as possible, updating the IR is better.
300 Output output;
301 {
301 - var command = new CreateOutputFromIRCommand(section, this.TableDefinitions);
302 + var command = new CreateOutputFromIRCommand(section, this.TableDefinitions, this.BackendExtensions);
303 command.Execute();
304
305 output = command.Output;
@@ -313,13 +314,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
314 // Modularize identifiers and add tables with real streams to the import tables.
315 if (OutputType.Module == output.Type)
316 {
316 - // Gather all the suppress modularization identifiers
317 - var suppressModularizationIdentifiers = new HashSet<string>(section.Tuples.OfType<WixSuppressModularizationTuple>().Select(s => s.WixSuppressModularization));
318 -
319 - foreach (var table in output.Tables)
320 - {
321 - table.Modularize(modularizationGuid, suppressModularizationIdentifiers);
322 - }
317 + var command = new ModularaizeCommand(output, modularizationGuid, section.Tuples.OfType<WixSuppressModularizationTuple>());
318 + command.Execute();
319 }
320
321 #if TODO_FINISH_UPDATE
@@ -897,7 +893,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
893 {
894 Dictionary<string, bool> componentGuidConditions = new Dictionary<string, bool>(componentTable.Rows.Count);
895
900 - foreach (Data.Rows.ComponentRow row in componentTable.Rows)
896 + foreach (Data.WindowsInstaller.Rows.ComponentRow row in componentTable.Rows)
897 {
898 // we don't care about unmanaged components and if there's a * GUID remaining,
899 // there's already an error that prevented it from being replaced with a real GUID.
src/WixToolset.Core.WindowsInstaller/Bind/BindTransformCommand.cs
+1
@@ -10,6 +10,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
10 using WixToolset.Extensibility;
11 using WixToolset.Msi;
12 using WixToolset.Core.Native;
13 + using WixToolset.Data.WindowsInstaller;
14
15 internal class BindTransformCommand
16 {
src/WixToolset.Core.WindowsInstaller/Bind/CopyTransformDataCommand.cs
+5 -4
@@ -5,12 +5,13 @@ namespace WixToolset.Core.WindowsInstaller.Bind
5 using System;
6 using System.Collections.Generic;
7 using System.Diagnostics;
8 - using WixToolset.Data;
9 - using WixToolset.Data.Rows;
10 - using WixToolset.Extensibility;
11 - using WixToolset.Core.Native;
8 using WixToolset.Core.Bind;
9 + using WixToolset.Core.Native;
10 + using WixToolset.Data;
11 using WixToolset.Data.Tuples;
12 + using WixToolset.Data.WindowsInstaller;
13 + using WixToolset.Data.WindowsInstaller.Rows;
14 + using WixToolset.Extensibility;
15
16 internal class CopyTransformDataCommand
17 {
src/WixToolset.Core.WindowsInstaller/Bind/CreateCabinetsCommand.cs
+2 -1
@@ -12,8 +12,9 @@ namespace WixToolset.Core.WindowsInstaller.Bind
12 using WixToolset.Core.Bind;
13 using WixToolset.Data;
14 using WixToolset.Data.Bind;
15 - using WixToolset.Data.Rows;
15 using WixToolset.Data.Tuples;
16 + using WixToolset.Data.WindowsInstaller;
17 + using WixToolset.Data.WindowsInstaller.Rows;
18 using WixToolset.Extensibility;
19
20 /// <summary>
src/WixToolset.Core.WindowsInstaller/Bind/CreateIdtFileCommand.cs new
+228
@@ -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 +
3 +namespace WixToolset.Core.WindowsInstaller.Bind
4 +{
5 + using System;
6 + using System.Globalization;
7 + using System.IO;
8 + using System.Text;
9 + using WixToolset.Data;
10 + using WixToolset.Data.WindowsInstaller;
11 +
12 + internal class CreateIdtFileCommand
13 + {
14 + public CreateIdtFileCommand(Table table, int codepage, string intermediateFolder, bool keepAddedColumns)
15 + {
16 + this.Table = table;
17 + this.Codepage = codepage;
18 + this.IntermediateFolder = intermediateFolder;
19 + this.KeepAddedColumns = keepAddedColumns;
20 + }
21 +
22 + private Table Table { get; }
23 +
24 + private int Codepage { get; set; }
25 +
26 + private string IntermediateFolder { get; }
27 +
28 + private bool KeepAddedColumns { get; }
29 +
30 + public string IdtPath { get; private set; }
31 +
32 + public void Execute()
33 + {
34 + // write out the table to an IDT file
35 + Encoding encoding;
36 +
37 + // If UTF8 encoding, use the UTF8-specific constructor to avoid writing
38 + // the byte order mark at the beginning of the file
39 + if (this.Codepage == Encoding.UTF8.CodePage)
40 + {
41 + encoding = new UTF8Encoding(false, true);
42 + }
43 + else
44 + {
45 + if (this.Codepage == 0)
46 + {
47 + this.Codepage = Encoding.ASCII.CodePage;
48 + }
49 +
50 + encoding = Encoding.GetEncoding(this.Codepage, new EncoderExceptionFallback(), new DecoderExceptionFallback());
51 + }
52 +
53 + this.IdtPath = Path.Combine(this.IntermediateFolder, String.Concat(this.Table.Name, ".idt"));
54 +
55 + using (var idtWriter = new StreamWriter(this.IdtPath, false, encoding))
56 + {
57 + this.TableToIdtDefinition(this.Table, idtWriter, this.KeepAddedColumns);
58 + }
59 + }
60 +
61 + private void TableToIdtDefinition(Table table, StreamWriter writer, bool keepAddedColumns)
62 + {
63 + if (table.Definition.Unreal)
64 + {
65 + return;
66 + }
67 +
68 + if (TableDefinition.MaxColumnsInRealTable < table.Definition.Columns.Count)
69 + {
70 + throw new WixException(WixDataErrors.TooManyColumnsInRealTable(table.Definition.Name, table.Definition.Columns.Count, TableDefinition.MaxColumnsInRealTable));
71 + }
72 +
73 + // Tack on the table header, and flush before we start writing bytes directly to the stream.
74 + var header = this.TableDefinitionToIdtDefinition(table.Definition, keepAddedColumns);
75 + writer.Write(header);
76 + writer.Flush();
77 +
78 + using (var binary = new BinaryWriter(writer.BaseStream, writer.Encoding, true))
79 + {
80 + // Create an encoding that replaces characters with question marks, and doesn't throw. We'll
81 + // use this in case of errors
82 + Encoding convertEncoding = Encoding.GetEncoding(writer.Encoding.CodePage);
83 +
84 + foreach (Row row in table.Rows)
85 + {
86 + if (row.Redundant)
87 + {
88 + continue;
89 + }
90 +
91 + string rowString = this.RowToIdtDefinition(row, keepAddedColumns);
92 + byte[] rowBytes;
93 +
94 + try
95 + {
96 + // GetBytes will throw an exception if any character doesn't match our current encoding
97 + rowBytes = writer.Encoding.GetBytes(rowString);
98 + }
99 + catch (EncoderFallbackException)
100 + {
101 + Messaging.Instance.OnMessage(WixDataErrors.InvalidStringForCodepage(row.SourceLineNumbers, Convert.ToString(writer.Encoding.WindowsCodePage, CultureInfo.InvariantCulture)));
102 +
103 + rowBytes = convertEncoding.GetBytes(rowString);
104 + }
105 +
106 + binary.Write(rowBytes, 0, rowBytes.Length);
107 + }
108 + }
109 + }
110 +
111 + private string TableDefinitionToIdtDefinition(TableDefinition definition, bool keepAddedColumns)
112 + {
113 + var first = true;
114 + var columnString = new StringBuilder();
115 + var dataString = new StringBuilder();
116 + var tableString = new StringBuilder();
117 +
118 + tableString.Append(definition.Name);
119 + foreach (var column in definition.Columns)
120 + {
121 + // conditionally keep columns added in a transform; otherwise,
122 + // break because columns can only be added at the end
123 + if (column.Added && !keepAddedColumns)
124 + {
125 + break;
126 + }
127 +
128 + if (!first)
129 + {
130 + columnString.Append('\t');
131 + dataString.Append('\t');
132 + }
133 +
134 + columnString.Append(column.Name);
135 + dataString.Append(ColumnIdtType(column));
136 +
137 + if (column.PrimaryKey)
138 + {
139 + tableString.AppendFormat("\t{0}", column.Name);
140 + }
141 +
142 + first = false;
143 + }
144 + columnString.Append("\r\n");
145 + columnString.Append(dataString);
146 + columnString.Append("\r\n");
147 + columnString.Append(tableString);
148 + columnString.Append("\r\n");
149 +
150 + return columnString.ToString();
151 + }
152 +
153 + private string RowToIdtDefinition(Row row, bool keepAddedColumns)
154 + {
155 + var first = true;
156 + var sb = new StringBuilder();
157 +
158 + foreach (var field in row.Fields)
159 + {
160 + // Conditionally keep columns added in a transform; otherwise,
161 + // break because columns can only be added at the end.
162 + if (field.Column.Added && !keepAddedColumns)
163 + {
164 + break;
165 + }
166 +
167 + if (first)
168 + {
169 + first = false;
170 + }
171 + else
172 + {
173 + sb.Append('\t');
174 + }
175 +
176 + sb.Append(this.FieldToIdtValue(field));
177 + }
178 + sb.Append("\r\n");
179 +
180 + return sb.ToString();
181 + }
182 +
183 + private string FieldToIdtValue(Field field)
184 + {
185 + var data = field.AsString();
186 +
187 + if (String.IsNullOrEmpty(data))
188 + {
189 + return data;
190 + }
191 +
192 + // Special field value idt-specific escaping.
193 + return data.Replace('\t', '\x10')
194 + .Replace('\r', '\x11')
195 + .Replace('\n', '\x19');
196 + }
197 +
198 +
199 + /// <summary>
200 + /// Gets the type of the column in IDT format.
201 + /// </summary>
202 + /// <value>IDT format for column type.</value>
203 + private static string ColumnIdtType(ColumnDefinition column)
204 + {
205 + char typeCharacter;
206 + switch (column.Type)
207 + {
208 + case ColumnType.Number:
209 + typeCharacter = column.Nullable ? 'I' : 'i';
210 + break;
211 + case ColumnType.Preserved:
212 + case ColumnType.String:
213 + typeCharacter = column.Nullable ? 'S' : 's';
214 + break;
215 + case ColumnType.Localized:
216 + typeCharacter = column.Nullable ? 'L' : 'l';
217 + break;
218 + case ColumnType.Object:
219 + typeCharacter = column.Nullable ? 'V' : 'v';
220 + break;
221 + default:
222 + throw new InvalidOperationException(String.Format(CultureInfo.CurrentUICulture, WixDataStrings.EXP_UnknownColumnType, column.Type));
223 + }
224 +
225 + return String.Concat(typeCharacter, column.Length);
226 + }
227 + }
228 +}
src/WixToolset.Core.WindowsInstaller/Bind/CreateOutputFromIRCommand.cs
+23 -2
@@ -3,20 +3,26 @@
3 namespace WixToolset.Core.WindowsInstaller.Bind
4 {
5 using System;
6 + using System.Collections.Generic;
7 using System.Linq;
8 using WixToolset.Core.Native;
9 using WixToolset.Data;
9 - using WixToolset.Data.Rows;
10 using WixToolset.Data.Tuples;
11 + using WixToolset.Data.WindowsInstaller;
12 + using WixToolset.Data.WindowsInstaller.Rows;
13 + using WixToolset.Extensibility;
14
15 internal class CreateOutputFromIRCommand
16 {
14 - public CreateOutputFromIRCommand(IntermediateSection section, TableDefinitionCollection tableDefinitions)
17 + public CreateOutputFromIRCommand(IntermediateSection section, TableDefinitionCollection tableDefinitions, IEnumerable<IWindowsInstallerBackendExtension> backendExtensions)
18 {
19 this.Section = section;
20 this.TableDefinitions = tableDefinitions;
21 + this.BackendExtensions = backendExtensions;
22 }
23
24 + private IEnumerable<IWindowsInstallerBackendExtension> BackendExtensions { get; }
25 +
26 private TableDefinitionCollection TableDefinitions { get; }
27
28 private IntermediateSection Section { get; }
@@ -60,6 +66,10 @@ namespace WixToolset.Core.WindowsInstaller.Bind
66 // Ignored.
67 break;
68
69 + case TupleDefinitionType.MustBeFromAnExtension:
70 + this.AddTupleFromExtension(tuple, output);
71 + break;
72 +
73 default:
74 this.AddTupleDefaultly(tuple, output);
75 break;
@@ -206,6 +216,17 @@ namespace WixToolset.Core.WindowsInstaller.Bind
216 }
217 }
218
219 + private void AddTupleFromExtension(IntermediateTuple tuple, Output output)
220 + {
221 + foreach (var extension in this.BackendExtensions)
222 + {
223 + if (extension.TryAddTupleToOutput(tuple, output))
224 + {
225 + break;
226 + }
227 + }
228 + }
229 +
230 private void AddTupleDefaultly(IntermediateTuple tuple, Output output)
231 {
232 if (!this.TableDefinitions.TryGet(tuple.Definition.Name, out var tableDefinition))
src/WixToolset.Core.WindowsInstaller/Bind/GenerateDatabaseCommand.cs
+51 -4
@@ -12,6 +12,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
12 using WixToolset.Extensibility;
13 using WixToolset.Msi;
14 using WixToolset.Core.Native;
15 + using WixToolset.Data.WindowsInstaller;
16
17 internal class GenerateDatabaseCommand
18 {
@@ -44,14 +45,56 @@ namespace WixToolset.Core.WindowsInstaller.Bind
45 // Add the _Validation rows.
46 if (!this.SuppressAddingValidationRows)
47 {
47 - Table validationTable = this.Output.EnsureTable(this.TableDefinitions["_Validation"]);
48 + var validationTable = this.Output.EnsureTable(this.TableDefinitions["_Validation"]);
49
49 - foreach (Table table in this.Output.Tables)
50 + foreach (var table in this.Output.Tables)
51 {
52 if (!table.Definition.Unreal)
53 {
54 // Add the validation rows for this table.
54 - table.Definition.AddValidationRows(validationTable);
55 + foreach (ColumnDefinition columnDef in table.Definition.Columns)
56 + {
57 + var row = validationTable.CreateRow(null);
58 +
59 + row[0] = table.Name;
60 +
61 + row[1] = columnDef.Name;
62 +
63 + if (columnDef.Nullable)
64 + {
65 + row[2] = "Y";
66 + }
67 + else
68 + {
69 + row[2] = "N";
70 + }
71 +
72 + if (columnDef.MinValue.HasValue)
73 + {
74 + row[3] = columnDef.MinValue.Value;
75 + }
76 +
77 + if (columnDef.MaxValue.HasValue)
78 + {
79 + row[4] = columnDef.MaxValue.Value;
80 + }
81 +
82 + row[5] = columnDef.KeyTable;
83 +
84 + if (columnDef.KeyColumn.HasValue)
85 + {
86 + row[6] = columnDef.KeyColumn.Value;
87 + }
88 +
89 + if (ColumnCategory.Unknown != columnDef.Category)
90 + {
91 + row[7] = columnDef.Category.ToString();
92 + }
93 +
94 + row[8] = columnDef.Possibilities;
95 +
96 + row[9] = columnDef.Description;
97 + }
98 }
99 }
100 }
@@ -133,7 +176,11 @@ namespace WixToolset.Core.WindowsInstaller.Bind
176 {
177 try
178 {
136 - db.ImportTable(this.Output.Codepage, importTable, baseDirectory, this.KeepAddedColumns);
179 + //db.ImportTable(this.Output.Codepage, importTable, baseDirectory, this.KeepAddedColumns);
180 + var command = new CreateIdtFileCommand(importTable, this.Output.Codepage, baseDirectory, this.KeepAddedColumns);
181 + command.Execute();
182 +
183 + db.Import(command.IdtPath);
184 }
185 catch (WixInvalidIdtException)
186 {
src/WixToolset.Core.WindowsInstaller/Bind/MergeModulesCommand.cs
+4 -3
@@ -8,12 +8,13 @@ namespace WixToolset.Core.WindowsInstaller.Bind
8 using System.IO;
9 using System.Runtime.InteropServices;
10 using System.Text;
11 + using WixToolset.Core.Bind;
12 + using WixToolset.Core.Native;
13 using WixToolset.Data;
12 - using WixToolset.Data.Rows;
14 + using WixToolset.Data.WindowsInstaller;
15 + using WixToolset.Data.WindowsInstaller.Rows;
16 using WixToolset.MergeMod;
17 using WixToolset.Msi;
15 - using WixToolset.Core.Native;
16 - using WixToolset.Core.Bind;
18
19 /// <summary>
20 /// Update file information.
src/WixToolset.Core.WindowsInstaller/Bind/ModularaizeCommand.cs new
+238
@@ -0,0 +1,238 @@
1 +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 +
3 +namespace WixToolset.Core.WindowsInstaller.Bind
4 +{
5 + using System;
6 + using System.Collections.Generic;
7 + using System.Diagnostics;
8 + using System.Globalization;
9 + using System.Linq;
10 + using System.Text;
11 + using System.Text.RegularExpressions;
12 + using WixToolset.Data;
13 + using WixToolset.Data.Tuples;
14 + using WixToolset.Data.WindowsInstaller;
15 +
16 + internal class ModularaizeCommand
17 + {
18 + public ModularaizeCommand(Output output, string modularizationGuid, IEnumerable<WixSuppressModularizationTuple> suppressTuples)
19 + {
20 + this.Output = output;
21 + this.ModularizationGuid = modularizationGuid;
22 +
23 + // Gather all the unique suppress modularization identifiers.
24 + this.SuppressModularizationIdentifiers = new HashSet<string>(suppressTuples.Select(s => s.WixSuppressModularization));
25 + }
26 +
27 + private Output Output { get; }
28 +
29 + private string ModularizationGuid { get; }
30 +
31 + private HashSet<string> SuppressModularizationIdentifiers { get; }
32 +
33 + public void Execute()
34 + {
35 + foreach (var table in this.Output.Tables)
36 + {
37 + this.ModularizeTable(table);
38 + }
39 + }
40 +
41 + /// <summary>
42 + /// Modularize the table.
43 + /// </summary>
44 + /// <param name="modularizationGuid">String containing the GUID of the Merge Module, if appropriate.</param>
45 + /// <param name="suppressModularizationIdentifiers">Optional collection of identifiers that should not be modularized.</param>
46 + public void ModularizeTable(Table table)
47 + {
48 + var modularizedColumns = new List<int>();
49 +
50 + // find the modularized columns
51 + for (var i = 0; i < table.Definition.Columns.Count; ++i)
52 + {
53 + if (ColumnModularizeType.None != table.Definition.Columns[i].ModularizeType)
54 + {
55 + modularizedColumns.Add(i);
56 + }
57 + }
58 +
59 + if (0 < modularizedColumns.Count)
60 + {
61 + foreach (var row in table.Rows)
62 + {
63 + foreach (var modularizedColumn in modularizedColumns)
64 + {
65 + var field = row.Fields[modularizedColumn];
66 +
67 + if (field.Data != null)
68 + {
69 + field.Data = this.ModularizedRowFieldValue(row, field);
70 + }
71 + }
72 + }
73 + }
74 + }
75 +
76 + private string ModularizedRowFieldValue(Row row, Field field)
77 + {
78 + var fieldData = field.AsString();
79 +
80 + if (!(WindowsInstallerStandard.IsStandardAction(fieldData) || WindowsInstallerStandard.IsStandardProperty(fieldData)))
81 + {
82 + ColumnModularizeType modularizeType = field.Column.ModularizeType;
83 +
84 + // special logic for the ControlEvent table's Argument column
85 + // this column requires different modularization methods depending upon the value of the Event column
86 + if (ColumnModularizeType.ControlEventArgument == field.Column.ModularizeType)
87 + {
88 + switch (row[2].ToString())
89 + {
90 + case "CheckExistingTargetPath": // redirectable property name
91 + case "CheckTargetPath":
92 + case "DoAction": // custom action name
93 + case "NewDialog": // dialog name
94 + case "SelectionBrowse":
95 + case "SetTargetPath":
96 + case "SpawnDialog":
97 + case "SpawnWaitDialog":
98 + if (Common.IsIdentifier(fieldData))
99 + {
100 + modularizeType = ColumnModularizeType.Column;
101 + }
102 + else
103 + {
104 + modularizeType = ColumnModularizeType.Property;
105 + }
106 + break;
107 + default: // formatted
108 + modularizeType = ColumnModularizeType.Property;
109 + break;
110 + }
111 + }
112 + else if (ColumnModularizeType.ControlText == field.Column.ModularizeType)
113 + {
114 + // icons are stored in the Binary table, so they get column-type modularization
115 + if (("Bitmap" == row[2].ToString() || "Icon" == row[2].ToString()) && Common.IsIdentifier(fieldData))
116 + {
117 + modularizeType = ColumnModularizeType.Column;
118 + }
119 + else
120 + {
121 + modularizeType = ColumnModularizeType.Property;
122 + }
123 + }
124 +
125 + switch (modularizeType)
126 + {
127 + case ColumnModularizeType.Column:
128 + // ensure the value is an identifier (otherwise it shouldn't be modularized this way)
129 + if (!Common.IsIdentifier(fieldData))
130 + {
131 + throw new InvalidOperationException(String.Format(CultureInfo.CurrentUICulture, WixDataStrings.EXP_CannotModularizeIllegalID, fieldData));
132 + }
133 +
134 + // if we're not supposed to suppress modularization of this identifier
135 + if (!this.SuppressModularizationIdentifiers.Contains(fieldData))
136 + {
137 + fieldData = String.Concat(fieldData, ".", this.ModularizationGuid);
138 + }
139 + break;
140 +
141 + case ColumnModularizeType.Property:
142 + case ColumnModularizeType.Condition:
143 + Regex regex;
144 + if (ColumnModularizeType.Property == modularizeType)
145 + {
146 + regex = new Regex(@"\[(?<identifier>[#$!]?[a-zA-Z_][a-zA-Z0-9_\.]*)]", RegexOptions.Singleline | RegexOptions.ExplicitCapture);
147 + }
148 + else
149 + {
150 + Debug.Assert(ColumnModularizeType.Condition == modularizeType);
151 +
152 + // This heinous looking regular expression is actually quite an elegant way
153 + // to shred the entire condition into the identifiers that need to be
154 + // modularized. Let's break it down piece by piece:
155 + //
156 + // 1. Look for the operators: NOT, EQV, XOR, OR, AND, IMP (plus a space). Note that the
157 + // regular expression is case insensitive so we don't have to worry about
158 + // all the permutations of these strings.
159 + // 2. Look for quoted strings. Quoted strings are just text and are ignored
160 + // outright.
161 + // 3. Look for environment variables. These look like identifiers we might
162 + // otherwise be interested in but start with a percent sign. Like quoted
163 + // strings these enviroment variable references are ignored outright.
164 + // 4. Match all identifiers that are things that need to be modularized. Note
165 + // the special characters (!, $, ?, &) that denote Component and Feature states.
166 + regex = new Regex(@"NOT\s|EQV\s|XOR\s|OR\s|AND\s|IMP\s|"".*?""|%[a-zA-Z_][a-zA-Z0-9_\.]*|(?<identifier>[!$\?&]?[a-zA-Z_][a-zA-Z0-9_\.]*)", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);
167 +
168 + // less performant version of the above with captures showing where everything lives
169 + // regex = new Regex(@"(?<operator>NOT|EQV|XOR|OR|AND|IMP)|(?<string>"".*?"")|(?<environment>%[a-zA-Z_][a-zA-Z0-9_\.]*)|(?<identifier>[!$\?&]?[a-zA-Z_][a-zA-Z0-9_\.]*)",RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);
170 + }
171 +
172 + var matches = regex.Matches(fieldData);
173 +
174 + var sb = new StringBuilder(fieldData);
175 +
176 + // Notice how this code walks backward through the list
177 + // because it modifies the string as we through it.
178 + for (var i = matches.Count - 1; 0 <= i; i--)
179 + {
180 + var group = matches[i].Groups["identifier"];
181 + if (group.Success)
182 + {
183 + var identifier = group.Value;
184 + if (!WindowsInstallerStandard.IsStandardProperty(identifier) && !this.SuppressModularizationIdentifiers.Contains(identifier))
185 + {
186 + sb.Insert(group.Index + group.Length, '.');
187 + sb.Insert(group.Index + group.Length + 1, this.ModularizationGuid);
188 + }
189 + }
190 + }
191 +
192 + fieldData = sb.ToString();
193 + break;
194 +
195 + case ColumnModularizeType.CompanionFile:
196 + // if we're not supposed to ignore this identifier and the value does not start with
197 + // a digit, we must have a companion file so modularize it
198 + if (!this.SuppressModularizationIdentifiers.Contains(fieldData) &&
199 + 0 < fieldData.Length && !Char.IsDigit(fieldData, 0))
200 + {
201 + fieldData = String.Concat(fieldData, ".", this.ModularizationGuid);
202 + }
203 + break;
204 +
205 + case ColumnModularizeType.Icon:
206 + if (!this.SuppressModularizationIdentifiers.Contains(fieldData))
207 + {
208 + var start = fieldData.LastIndexOf(".", StringComparison.Ordinal);
209 + if (-1 == start)
210 + {
211 + fieldData = String.Concat(fieldData, ".", this.ModularizationGuid);
212 + }
213 + else
214 + {
215 + fieldData = String.Concat(fieldData.Substring(0, start), ".", this.ModularizationGuid, fieldData.Substring(start));
216 + }
217 + }
218 + break;
219 +
220 + case ColumnModularizeType.SemicolonDelimited:
221 + var keys = fieldData.Split(';');
222 + for (var i = 0; i < keys.Length; ++i)
223 + {
224 + if (!String.IsNullOrEmpty(keys[i]))
225 + {
226 + keys[i] = String.Concat(keys[i], ".", this.ModularizationGuid);
227 + }
228 + }
229 +
230 + fieldData = String.Join(";", keys);
231 + break;
232 + }
233 + }
234 +
235 + return fieldData;
236 + }
237 + }
238 +}
src/WixToolset.Core.WindowsInstaller/Bind/UpdateControlTextCommand.cs
+2 -1
@@ -5,7 +5,8 @@ namespace WixToolset.Core.WindowsInstaller.Bind
5 using System;
6 using System.IO;
7 using WixToolset.Data;
8 - using WixToolset.Data.Rows;
8 + using WixToolset.Data.WindowsInstaller;
9 + using WixToolset.Data.WindowsInstaller.Rows;
10
11 internal class UpdateControlTextCommand
12 {
src/WixToolset.Core.WindowsInstaller/Bind/UpdateFileFacadesCommand.cs
+1
@@ -14,6 +14,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
14 using WixToolset.Core.Bind;
15 using WixToolset.Data;
16 using WixToolset.Data.Tuples;
17 + using WixToolset.Data.WindowsInstaller;
18 using WixToolset.Msi;
19
20 /// <summary>
src/WixToolset.Core.WindowsInstaller/Bind/UpdateMediaSequencesCommand.cs
+2 -2
@@ -2,13 +2,13 @@
2
3 namespace WixToolset.Core.WindowsInstaller.Bind
4 {
5 - using System;
5 using System.Collections.Generic;
6 using System.Linq;
7 using WixToolset.Core.Bind;
8 using WixToolset.Data;
10 - using WixToolset.Data.Rows;
9 using WixToolset.Data.Tuples;
10 + using WixToolset.Data.WindowsInstaller;
11 + using WixToolset.Data.WindowsInstaller.Rows;
12
13 internal class UpdateMediaSequencesCommand
14 {
src/WixToolset.Core.WindowsInstaller/Data/actions.xml renamed
src/WixToolset.Core.WindowsInstaller/Data/tables.xml renamed
src/WixToolset.Core.WindowsInstaller/Differ.cs
+3 -3
@@ -1,14 +1,14 @@
1 // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3 -namespace WixToolset
3 +namespace WixToolset.Core.WindowsInstaller
4 {
5 using System;
6 using System.Collections;
7 using System.Collections.Generic;
8 using System.Globalization;
9 - using WixToolset.Core;
9 using WixToolset.Data;
11 - using WixToolset.Data.Rows;
10 + using WixToolset.Data.WindowsInstaller;
11 + using WixToolset.Data.WindowsInstaller.Rows;
12 using WixToolset.Extensibility;
13 using WixToolset.Msi;
14
src/WixToolset.Core.WindowsInstaller/Inscribe/InscribeMsiPackageCommand.cs
+10 -2
@@ -9,7 +9,9 @@ namespace WixToolset.Core.WindowsInstaller.Inscribe
9 using System.Runtime.InteropServices;
10 using System.Security.Cryptography.X509Certificates;
11 using WixToolset.Core.Native;
12 + using WixToolset.Core.WindowsInstaller.Bind;
13 using WixToolset.Data;
14 + using WixToolset.Data.WindowsInstaller;
15 using WixToolset.Extensibility;
16 using WixToolset.Msi;
17
@@ -250,13 +252,19 @@ namespace WixToolset.Core.WindowsInstaller.Inscribe
252
253 if (digitalCertificateTable.Rows.Count > 0)
254 {
253 - database.ImportTable(codepage, digitalCertificateTable, this.Context.IntermediateFolder, true);
255 + var command = new CreateIdtFileCommand(digitalCertificateTable, codepage, this.Context.IntermediateFolder, true);
256 + command.Execute();
257 +
258 + database.Import(command.IdtPath);
259 shouldCommit = true;
260 }
261
262 if (digitalSignatureTable.Rows.Count > 0)
263 {
259 - database.ImportTable(codepage, digitalSignatureTable, this.Context.IntermediateFolder, true);
264 + var command = new CreateIdtFileCommand(digitalSignatureTable, codepage, this.Context.IntermediateFolder, true);
265 + command.Execute();
266 +
267 + database.Import(command.IdtPath);
268 shouldCommit = true;
269 }
270
src/WixToolset.Core.WindowsInstaller/Msi/Database.cs
+6 -59
@@ -3,13 +3,11 @@
3 namespace WixToolset.Msi
4 {
5 using System;
6 - using System.ComponentModel;
6 using System.Globalization;
7 using System.IO;
9 - using System.Text;
8 using System.Threading;
11 - using WixToolset.Data;
9 using WixToolset.Core.Native;
10 + using WixToolset.Data;
11
12 /// <summary>
13 /// Wrapper class for managing MSI API database handles.
@@ -25,8 +23,7 @@ namespace WixToolset.Msi
23 /// <param name="type">Persist mode to use when opening the database.</param>
24 public Database(string path, OpenDatabase type)
25 {
28 - uint handle = 0;
29 - int error = MsiInterop.MsiOpenDatabase(path, new IntPtr((int)type), out handle);
26 + int error = MsiInterop.MsiOpenDatabase(path, new IntPtr((int)type), out var handle);
27 if (0 != error)
28 {
29 throw new MsiException(error);
@@ -153,9 +150,9 @@ namespace WixToolset.Msi
150 /// <param name="fileName">Specifies the name of the exported table archive file.</param>
151 public void Export(string tableName, string folderPath, string fileName)
152 {
156 - if (null == folderPath || 0 == folderPath.Length)
153 + if (String.IsNullOrEmpty(folderPath))
154 {
158 - folderPath = System.Environment.CurrentDirectory;
155 + folderPath = Environment.CurrentDirectory;
156 }
157
158 int error = MsiInterop.MsiDatabaseExport(this.Handle, tableName, folderPath, fileName);
@@ -241,63 +238,13 @@ namespace WixToolset.Msi
238 /// primary key columns for a specified table.</returns>
239 public Record PrimaryKeys(string tableName)
240 {
244 - uint recordHandle;
245 - int error = MsiInterop.MsiDatabaseGetPrimaryKeys(this.Handle, tableName, out recordHandle);
246 - if (0 != error)
241 + var error = MsiInterop.MsiDatabaseGetPrimaryKeys(this.Handle, tableName, out var recordHandle);
242 + if (error != 0)
243 {
244 throw new MsiException(error);
245 }
246
247 return new Record(recordHandle);
248 }
253 -
254 - /// <summary>
255 - /// Imports a table into the database.
256 - /// </summary>
257 - /// <param name="codepage">Codepage of the database to import table to.</param>
258 - /// <param name="table">Table to import into database.</param>
259 - /// <param name="baseDirectory">The base directory where intermediate files are created.</param>
260 - /// <param name="keepAddedColumns">Whether to keep columns added in a transform.</param>
261 - public void ImportTable(int codepage, Table table, string baseDirectory, bool keepAddedColumns)
262 - {
263 - // write out the table to an IDT file
264 - string idtPath = Path.Combine(baseDirectory, String.Concat(table.Name, ".idt"));
265 - Encoding encoding;
266 -
267 - // If UTF8 encoding, use the UTF8-specific constructor to avoid writing
268 - // the byte order mark at the beginning of the file
269 - if (Encoding.UTF8.CodePage == codepage)
270 - {
271 - encoding = new UTF8Encoding(false, true);
272 - }
273 - else
274 - {
275 - if (0 == codepage)
276 - {
277 - codepage = Encoding.ASCII.CodePage;
278 - }
279 -
280 - encoding = Encoding.GetEncoding(codepage, new EncoderExceptionFallback(), new DecoderExceptionFallback());
281 - }
282 -
283 - using (StreamWriter idtWriter = new StreamWriter(idtPath, false, encoding))
284 - {
285 - table.ToIdtDefinition(idtWriter, keepAddedColumns);
286 - }
287 -
288 - // try to import the table into the MSI
289 - try
290 - {
291 - this.Import(idtPath);
292 - }
293 - catch (WixInvalidIdtException)
294 - {
295 - table.ValidateRows();
296 -
297 - // If ValidateRows finds anything it doesn't like, it throws. Otherwise, we'll
298 - // throw WixInvalidIdtException here which is caught in light and turns off tidy.
299 - throw new WixInvalidIdtException(idtPath, table.Name);
300 - }
301 - }
249 }
250 }
src/WixToolset.Core.WindowsInstaller/Msi/WixInvalidIdtException.cs renamed
+2 -1
@@ -1,8 +1,9 @@
1 // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3 -namespace WixToolset.Data
3 +namespace WixToolset.Msi
4 {
5 using System;
6 + using WixToolset.Data;
7
8 /// <summary>
9 /// WiX invalid idt exception.
src/WixToolset.Core.WindowsInstaller/MsiBackend.cs
+16 -2
@@ -14,12 +14,26 @@ namespace WixToolset.Core.WindowsInstaller
14 {
15 public BindResult Bind(IBindContext context)
16 {
17 + var backendExtensions = context.ExtensionManager.Create<IWindowsInstallerBackendExtension>();
18 +
19 + foreach (var extension in backendExtensions)
20 + {
21 + extension.PreBackendBind(context);
22 + }
23 +
24 var validator = Validator.CreateFromContext(context, "darice.cub");
25
19 - var command = new BindDatabaseCommand(context, validator);
26 + var command = new BindDatabaseCommand(context, backendExtensions, validator);
27 command.Execute();
28
22 - return new BindResult(command.FileTransfers, command.ContentFilePaths);
29 + var result = new BindResult(command.FileTransfers, command.ContentFilePaths);
30 +
31 + foreach (var extension in backendExtensions)
32 + {
33 + extension.PostBackendBind(result);
34 + }
35 +
36 + return result;
37 }
38
39 public bool Inscribe(IInscribeContext context)
src/WixToolset.Core.WindowsInstaller/MsmBackend.cs
+16 -2
@@ -13,12 +13,26 @@ namespace WixToolset.Core.WindowsInstaller
13 {
14 public BindResult Bind(IBindContext context)
15 {
16 + var backendExtensions = context.ExtensionManager.Create<IWindowsInstallerBackendExtension>();
17 +
18 + foreach (var extension in backendExtensions)
19 + {
20 + extension.PreBackendBind(context);
21 + }
22 +
23 var validator = Validator.CreateFromContext(context, "mergemod.cub");
24
18 - var command = new BindDatabaseCommand(context, validator);
25 + var command = new BindDatabaseCommand(context, backendExtensions, validator);
26 command.Execute();
27
21 - return new BindResult(command.FileTransfers, command.ContentFilePaths);
28 + var result = new BindResult(command.FileTransfers, command.ContentFilePaths);
29 +
30 + foreach (var extension in backendExtensions)
31 + {
32 + extension.PostBackendBind(result);
33 + }
34 +
35 + return result;
36 }
37
38 public bool Inscribe(IInscribeContext context)
src/WixToolset.Core.WindowsInstaller/Patch.cs
+2 -5
@@ -3,14 +3,11 @@
3 namespace WixToolset.Data
4 {
5 using System;
6 - using System.Collections;
6 using System.Collections.Generic;
7 using System.Diagnostics.CodeAnalysis;
9 - using System.Globalization;
10 - using WixToolset.Data.Rows;
8 + using WixToolset.Core.WindowsInstaller;
9 + using WixToolset.Data.WindowsInstaller;
10 using WixToolset.Extensibility;
12 - using WixToolset.Core.Native;
13 - using WixToolset.Msi;
11
12 /// <summary>
13 /// Contains output tables and logic for building an MSP package.
src/WixToolset.Core.WindowsInstaller/RowDictionary.cs renamed
+2 -1
@@ -1,9 +1,10 @@
1 // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3 -namespace WixToolset.Data
3 +namespace WixToolset.Core.WindowsInstaller
4 {
5 using System;
6 using System.Collections.Generic;
7 + using WixToolset.Data.WindowsInstaller;
8
9 /// <summary>
10 /// A dictionary of rows. Unlike the <see cref="RowIndexedCollection"/> this
src/WixToolset.Core.WindowsInstaller/Rows/WixActionRowCollection.cs renamed
+108 -3
@@ -1,17 +1,19 @@
1 // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3 -namespace WixToolset.Data.Rows
3 +namespace WixToolset.Core.WindowsInstaller.Rows
4 {
5 using System;
6 using System.Collections;
7 using System.Diagnostics;
8 + using System.Globalization;
9 using System.Xml;
10 using WixToolset.Data.Tuples;
11 + using WixToolset.Data.WindowsInstaller.Rows;
12
13 /// <summary>
14 /// A collection of action rows sorted by their sequence table and action name.
15 /// </summary>
14 - public sealed class WixActionRowCollection : ICollection
16 + internal sealed class WixActionRowCollection : ICollection
17 {
18 private SortedList collection;
19
@@ -172,7 +174,7 @@ namespace WixToolset.Data.Rows
174 switch (reader.LocalName)
175 {
176 case "action":
175 - WixActionRow[] parsedActionRows = WixActionRow.Parse(reader);
177 + WixActionRow[] parsedActionRows = ParseActions(reader);
178
179 foreach (WixActionRow actionRow in parsedActionRows)
180 {
@@ -219,5 +221,108 @@ namespace WixToolset.Data.Rows
221 {
222 return String.Concat(sequenceTable, '/', action);
223 }
224 +
225 + /// <summary>
226 + /// Parses ActionRows from the Xml reader.
227 + /// </summary>
228 + /// <param name="reader">Xml reader that contains serialized ActionRows.</param>
229 + /// <returns>The parsed ActionRows.</returns>
230 + internal static WixActionRow[] ParseActions(XmlReader reader)
231 + {
232 + Debug.Assert("action" == reader.LocalName);
233 +
234 + string id = null;
235 + string condition = null;
236 + bool empty = reader.IsEmptyElement;
237 + int sequence = int.MinValue;
238 + int sequenceCount = 0;
239 + SequenceTable[] sequenceTables = new SequenceTable[Enum.GetValues(typeof(SequenceTable)).Length];
240 +
241 + while (reader.MoveToNextAttribute())
242 + {
243 + switch (reader.Name)
244 + {
245 + case "name":
246 + id = reader.Value;
247 + break;
248 + case "AdminExecuteSequence":
249 + if (reader.Value.Equals("yes"))
250 + {
251 + sequenceTables[sequenceCount] = SequenceTable.AdminExecuteSequence;
252 + ++sequenceCount;
253 + }
254 + break;
255 + case "AdminUISequence":
256 + if (reader.Value.Equals("yes"))
257 + {
258 + sequenceTables[sequenceCount] = SequenceTable.AdminUISequence;
259 + ++sequenceCount;
260 + }
261 + break;
262 + case "AdvtExecuteSequence":
263 + if (reader.Value.Equals("yes"))
264 + {
265 + sequenceTables[sequenceCount] = SequenceTable.AdvtExecuteSequence;
266 + ++sequenceCount;
267 + }
268 + break;
269 + case "condition":
270 + condition = reader.Value;
271 + break;
272 + case "InstallExecuteSequence":
273 + if (reader.Value.Equals("yes"))
274 + {
275 + sequenceTables[sequenceCount] = SequenceTable.InstallExecuteSequence;
276 + ++sequenceCount;
277 + }
278 + break;
279 + case "InstallUISequence":
280 + if (reader.Value.Equals("yes"))
281 + {
282 + sequenceTables[sequenceCount] = SequenceTable.InstallUISequence;
283 + ++sequenceCount;
284 + }
285 + break;
286 + case "sequence":
287 + sequence = Convert.ToInt32(reader.Value, CultureInfo.InvariantCulture);
288 + break;
289 + }
290 + }
291 +
292 + if (null == id)
293 + {
294 + throw new XmlException();
295 + }
296 +
297 + if (int.MinValue == sequence)
298 + {
299 + throw new XmlException();
300 + }
301 + else if (1 > sequence)
302 + {
303 + throw new XmlException();
304 + }
305 +
306 + if (0 == sequenceCount)
307 + {
308 + throw new XmlException();
309 + }
310 +
311 + if (!empty && reader.Read() && XmlNodeType.EndElement != reader.MoveToContent())
312 + {
313 + throw new XmlException();
314 + }
315 +
316 + // create the actions
317 + WixActionRow[] actionRows = new WixActionRow[sequenceCount];
318 + for (int i = 0; i < sequenceCount; i++)
319 + {
320 + //WixActionRow actionRow = new WixActionRow(sequenceTables[i], id, condition, sequence);
321 + //actionRows[i] = actionRow;
322 + throw new NotImplementedException();
323 + }
324 +
325 + return actionRows;
326 + }
327 }
328 }
src/WixToolset.Core.WindowsInstaller/Unbind/ExtractCabinetsCommand.cs
+2 -1
@@ -9,7 +9,8 @@ namespace WixToolset.Core.WindowsInstaller.Unbind
9 using System.IO;
10 using WixToolset.Core.Native;
11 using WixToolset.Data;
12 - using WixToolset.Data.Rows;
12 + using WixToolset.Data.WindowsInstaller;
13 + using WixToolset.Data.WindowsInstaller.Rows;
14 using WixToolset.Msi;
15
16 internal class ExtractCabinetsCommand
src/WixToolset.Core.WindowsInstaller/Unbind/UnbindDatabaseCommand.cs
+13 -18
@@ -10,7 +10,8 @@ namespace WixToolset.Core.WindowsInstaller.Unbind
10 using System.Text.RegularExpressions;
11 using WixToolset.Core.Native;
12 using WixToolset.Data;
13 - using WixToolset.Data.Rows;
13 + using WixToolset.Data.WindowsInstaller;
14 + using WixToolset.Data.WindowsInstaller.Rows;
15 using WixToolset.Msi;
16
17 internal class UnbindDatabaseCommand
@@ -155,13 +156,10 @@ namespace WixToolset.Core.WindowsInstaller.Unbind
156 ColumnCategory columnCategory = ColumnCategory.Unknown;
157 ColumnModularizeType columnModularizeType = ColumnModularizeType.None;
158 bool primary = tablePrimaryKeys.Contains(columnName);
158 - bool minValueSet = false;
159 - int minValue = -1;
160 - bool maxValueSet = false;
161 - int maxValue = -1;
159 + int? minValue = null;
160 + int? maxValue = null;
161 string keyTable = null;
163 - bool keyColumnSet = false;
164 - int keyColumn = -1;
162 + int? keyColumn = null;
163 string category = null;
164 string set = null;
165 string description = null;
@@ -205,16 +203,13 @@ namespace WixToolset.Core.WindowsInstaller.Unbind
203 if (null != validationRecord)
204 {
205 string validationNullable = validationRecord.GetString(3);
208 - minValueSet = !validationRecord.IsNull(4);
209 - minValue = (minValueSet ? validationRecord.GetInteger(4) : -1);
210 - maxValueSet = !validationRecord.IsNull(5);
211 - maxValue = (maxValueSet ? validationRecord.GetInteger(5) : -1);
212 - keyTable = (!validationRecord.IsNull(6) ? validationRecord.GetString(6) : null);
213 - keyColumnSet = !validationRecord.IsNull(7);
214 - keyColumn = (keyColumnSet ? validationRecord.GetInteger(7) : -1);
215 - category = (!validationRecord.IsNull(8) ? validationRecord.GetString(8) : null);
216 - set = (!validationRecord.IsNull(9) ? validationRecord.GetString(9) : null);
217 - description = (!validationRecord.IsNull(10) ? validationRecord.GetString(10) : null);
206 + minValue = validationRecord.IsNull(4) ? null : (int?)validationRecord.GetInteger(4);
207 + maxValue = validationRecord.IsNull(5) ? null : (int?)validationRecord.GetInteger(5);
208 + keyTable = validationRecord.IsNull(6) ? null : validationRecord.GetString(6);
209 + keyColumn = validationRecord.IsNull(7) ? null : (int?)validationRecord.GetInteger(7);
210 + category = validationRecord.IsNull(8) ? null : validationRecord.GetString(8);
211 + set = validationRecord.IsNull(9) ? null : validationRecord.GetString(9);
212 + description = validationRecord.IsNull(10) ? null : validationRecord.GetString(10);
213
214 // check the validation nullable value against the column definition
215 if (null == validationNullable)
@@ -264,7 +259,7 @@ namespace WixToolset.Core.WindowsInstaller.Unbind
259 columnModularizeType = ColumnModularizeType.Column;
260 }
261
267 - columns.Add(new ColumnDefinition(columnName, columnType, length, primary, nullable, columnModularizeType, (ColumnType.Localized == columnType), minValueSet, minValue, maxValueSet, maxValue, keyTable, keyColumnSet, keyColumn, columnCategory, set, description, true, true));
262 + columns.Add(new ColumnDefinition(columnName, columnType, length, primary, nullable, columnCategory, minValue, maxValue, keyTable, keyColumn, set, description, columnModularizeType, (ColumnType.Localized == columnType), true));
263 }
264 }
265
src/WixToolset.Core.WindowsInstaller/Unbind/UnbindTranformCommand.cs
+1
@@ -11,6 +11,7 @@ namespace WixToolset.Core.WindowsInstaller.Unbind
11 using WixToolset.Core.Native;
12 using WixToolset.Core.WindowsInstaller.Bind;
13 using WixToolset.Data;
14 + using WixToolset.Data.WindowsInstaller;
15 using WixToolset.Extensibility;
16 using WixToolset.Msi;
17
src/WixToolset.Core.WindowsInstaller/Validator.cs
+5 -4
@@ -9,14 +9,15 @@ namespace WixToolset.Core.WindowsInstaller
9 using System.Diagnostics.CodeAnalysis;
10 using System.Globalization;
11 using System.IO;
12 + using System.Linq;
13 + using System.Reflection;
14 using System.Threading;
15 + using WixToolset.Core.Native;
16 using WixToolset.Data;
17 + using WixToolset.Data.WindowsInstaller;
18 using WixToolset.Extensibility;
15 - using WixToolset.Core.Native;
16 - using WixToolset.Msi;
17 - using System.Linq;
18 - using System.Reflection;
19 using WixToolset.Extensibility.Services;
20 + using WixToolset.Msi;
21
22 /// <summary>
23 /// Runs internal consistency evaluators (ICEs) from cub files against a database.
src/WixToolset.Core.WindowsInstaller/ValidatorExtension.cs
+1
@@ -5,6 +5,7 @@ namespace WixToolset.Extensibility
5 using System;
6 using System.Collections;
7 using WixToolset.Data;
8 + using WixToolset.Data.WindowsInstaller;
9
10 /// <summary>
11 /// Base class for creating a validator extension. This default implementation
src/WixToolset.Core.WindowsInstaller/WindowsInstallerStandardInternal.cs renamed
+10 -5
@@ -1,15 +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
3 -namespace WixToolset.Data
3 +namespace WixToolset.Core.WindowsInstaller
4 {
5 + using System;
6 using System.Reflection;
7 using System.Xml;
7 - using WixToolset.Data.Rows;
8 + using WixToolset.Core.WindowsInstaller.Rows;
9 + using WixToolset.Data.WindowsInstaller;
10
11 /// <summary>
12 /// Represents the Windows Installer standard objects.
13 /// </summary>
12 - public static class WindowsInstallerStandardInternal
14 + internal static class WindowsInstallerStandardInternal
15 {
16 private static readonly object lockObject = new object();
17
@@ -26,7 +28,7 @@ namespace WixToolset.Data
28 {
29 if (null == WindowsInstallerStandardInternal.tableDefinitions)
30 {
29 - using (XmlReader reader = XmlReader.Create(Assembly.GetExecutingAssembly().GetManifestResourceStream("WixToolset.Data.WindowsInstaller.Data.tables.xml")))
31 + using (XmlReader reader = XmlReader.Create(Assembly.GetExecutingAssembly().GetManifestResourceStream("WixToolset.Core.WindowsInstaller.Data.tables.xml")))
32 {
33 WindowsInstallerStandardInternal.tableDefinitions = TableDefinitionCollection.Load(reader);
34 }
@@ -42,11 +44,12 @@ namespace WixToolset.Data
44 /// <returns>Collection of standard actions in this assembly.</returns>
45 public static WixActionRowCollection GetStandardActionRows()
46 {
47 +#if REVISIT_FOR_PATCHING
48 lock (lockObject)
49 {
50 if (null == WindowsInstallerStandardInternal.standardActions)
51 {
49 - using (XmlReader reader = XmlReader.Create(Assembly.GetExecutingAssembly().GetManifestResourceStream("WixToolset.Data.WindowsInstaller.Data.actions.xml")))
52 + using (XmlReader reader = XmlReader.Create(Assembly.GetExecutingAssembly().GetManifestResourceStream("WixToolset.Core.WindowsInstaller.Data.actions.xml")))
53 {
54 WindowsInstallerStandardInternal.standardActions = WixActionRowCollection.Load(reader);
55 }
@@ -54,6 +57,8 @@ namespace WixToolset.Data
57 }
58
59 return WindowsInstallerStandardInternal.standardActions;
60 +#endif
61 + throw new NotImplementedException();
62 }
63 }
64 }
src/WixToolset.Core.WindowsInstaller/WixToolset.Core.WindowsInstaller.csproj
+5 -2
@@ -12,6 +12,11 @@
12 <NoWarn>NU1701</NoWarn>
13 </PropertyGroup>
14
15 + <ItemGroup>
16 + <EmbeddedResource Include="Data\actions.xml" />
17 + <EmbeddedResource Include="Data\tables.xml" />
18 + </ItemGroup>
19 +
20 <ItemGroup>
21 <ProjectReference Include="$(WixToolsetRootFolder)\Data\src\WixToolset.Data\WixToolset.Data.csproj" Condition=" '$(Configuration)' == 'Debug' And Exists('$(WixToolsetRootFolder)\Data\src\WixToolset.Data\WixToolset.Data.csproj') " />
22 <PackageReference Include="WixToolset.Data" Version="4.0.*" Condition=" '$(Configuration)' == 'Release' Or !Exists('$(WixToolsetRootFolder)\Data\src\WixToolset.Data\WixToolset.Data.csproj') " />
@@ -22,8 +27,6 @@
27 <ProjectReference Include="$(WixToolsetRootFolder)\Core.Native\src\WixToolset.Core.Native\WixToolset.Core.Native.csproj" Condition=" '$(Configuration)' == 'Debug' And Exists('$(WixToolsetRootFolder)\Core.Native\src\WixToolset.Core.Native\WixToolset.Core.Native.csproj') " />
28
29 <ProjectReference Include="..\WixToolset.Core\WixToolset.Core.csproj" />
25 -
26 - <ProjectReference Include="..\WixToolset.Data.WindowsInstaller\WixToolset.Data.WindowsInstaller.csproj" />
30 <PackageReference Include="WixToolset.Core.Native" Version="4.0.*" Condition=" '$(Configuration)' == 'Release' Or !Exists('$(WixToolsetRootFolder)\Core.Native\src\WixToolset.Core.Native\WixToolset.Core.Native.csproj') " />
31 </ItemGroup>
32
src/WixToolset.Core/ExtensibilityServices/WindowsInstallerBackendHelper.cs new
+53
@@ -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 +
3 +namespace WixToolset.Core.ExtensibilityServices
4 +{
5 + using System;
6 + using System.Linq;
7 + using WixToolset.Data;
8 + using WixToolset.Data.WindowsInstaller;
9 + using WixToolset.Extensibility.Services;
10 +
11 + internal class WindowsInstallerBackendHelper : IWindowsInstallerBackendHelper
12 + {
13 + public WindowsInstallerBackendHelper(IServiceProvider serviceProvider)
14 + {
15 + this.ServiceProvider = serviceProvider;
16 + }
17 +
18 + private IServiceProvider ServiceProvider { get; }
19 +
20 + public bool TryAddTupleToOutputMatchingTableDefinitions(IntermediateTuple tuple, Output output, TableDefinition[] tableDefinitions)
21 + {
22 + var tableDefinition = tableDefinitions.FirstOrDefault(t => t.Name == tuple.Definition.Name);
23 +
24 + if (tableDefinition == null)
25 + {
26 + return false;
27 + }
28 +
29 + var table = output.EnsureTable(tableDefinition);
30 + var row = table.CreateRow(tuple.SourceLineNumbers);
31 + for (var i = 0; i < tuple.Fields.Length; ++i)
32 + {
33 + if (i < tableDefinition.Columns.Count)
34 + {
35 + var column = tableDefinition.Columns[i];
36 +
37 + switch (column.Type)
38 + {
39 + case ColumnType.Number:
40 + row[i] = tuple.AsNumber(i);
41 + break;
42 +
43 + default:
44 + row[i] = tuple.AsString(i);
45 + break;
46 + }
47 + }
48 + }
49 +
50 + return true;
51 + }
52 + }
53 +}
src/WixToolset.Core/WixToolsetServiceProvider.cs
+6
@@ -14,6 +14,7 @@ namespace WixToolset.Core
14 private ParseHelper parseHelper;
15 private PreprocessHelper preprocessHelper;
16 private TupleDefinitionCreator tupleDefinitionCreator;
17 + private WindowsInstallerBackendHelper windowsInstallerBackendHelper;
18
19 public object GetService(Type serviceType)
20 {
@@ -76,6 +77,11 @@ namespace WixToolset.Core
77 return this.preprocessHelper = this.preprocessHelper ?? new PreprocessHelper(this);
78 }
79
80 + if (serviceType == typeof(IWindowsInstallerBackendHelper))
81 + {
82 + return this.windowsInstallerBackendHelper = this.windowsInstallerBackendHelper ?? new WindowsInstallerBackendHelper(this);
83 + }
84 +
85 throw new ArgumentException($"Unknown service type: {serviceType.Name}", nameof(serviceType));
86 }
87 }
src/WixToolset.Data.WindowsInstaller/ColumnDefinition.cs deleted
-1033
@@ -1,1033 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.Data
4 -{
5 - using System;
6 - using System.Globalization;
7 - using System.Xml;
8 -
9 - /// <summary>
10 - /// Defines MSI column types.
11 - /// </summary>
12 - public enum ColumnType
13 - {
14 - /// <summary>Unknown column type, default and invalid.</summary>
15 - Unknown,
16 -
17 - /// <summary>Column is a string.</summary>
18 - String,
19 -
20 - /// <summary>Column is a localizable string.</summary>
21 - Localized,
22 -
23 - /// <summary>Column is a number.</summary>
24 - Number,
25 -
26 - /// <summary>Column is a binary stream.</summary>
27 - Object,
28 -
29 - /// <summary>Column is a string that is preserved in transforms (like Object).</summary>
30 - Preserved,
31 - }
32 -
33 - /// <summary>
34 - /// Specifies if the column should be modularized.
35 - /// </summary>
36 - public enum ColumnModularizeType
37 - {
38 - /// <summary>Column should not be modularized.</summary>
39 - None,
40 -
41 - /// <summary>Column should be modularized.</summary>
42 - Column,
43 -
44 - /// <summary>When the column is an primary or foreign key to the Icon table it should be modularized special.</summary>
45 - Icon,
46 -
47 - /// <summary>When the column is a companion file it should be modularized.</summary>
48 - CompanionFile,
49 -
50 - /// <summary>Column is a condition and should be modularized.</summary>
51 - Condition,
52 -
53 - /// <summary>Special modularization type for the ControlEvent table's Argument column.</summary>
54 - ControlEventArgument,
55 -
56 - /// <summary>Special modularization type for the Control table's Text column.</summary>
57 - ControlText,
58 -
59 - /// <summary>Any Properties in the column should be modularized.</summary>
60 - Property,
61 -
62 - /// <summary>Semi-colon list of keys, all of which need to be modularized.</summary>
63 - SemicolonDelimited,
64 - }
65 -
66 - /// <summary>
67 - /// Column validation category type
68 - /// </summary>
69 - public enum ColumnCategory
70 - {
71 - /// <summary>Unknown category, default and invalid.</summary>
72 - Unknown,
73 -
74 - /// <summary>Text category.</summary>
75 - Text,
76 -
77 - /// <summary>UpperCase category.</summary>
78 - UpperCase,
79 -
80 - /// <summary>LowerCase category.</summary>
81 - LowerCase,
82 -
83 - /// <summary>Integer category.</summary>
84 - Integer,
85 -
86 - /// <summary>DoubleInteger category.</summary>
87 - DoubleInteger,
88 -
89 - /// <summary>TimeDate category.</summary>
90 - TimeDate,
91 -
92 - /// <summary>Identifier category.</summary>
93 - Identifier,
94 -
95 - /// <summary>Property category.</summary>
96 - Property,
97 -
98 - /// <summary>Filename category.</summary>
99 - Filename,
100 -
101 - /// <summary>WildCardFilename category.</summary>
102 - WildCardFilename,
103 -
104 - /// <summary>Path category.</summary>
105 - Path,
106 -
107 - /// <summary>Paths category.</summary>
108 - Paths,
109 -
110 - /// <summary>AnyPath category.</summary>
111 - AnyPath,
112 -
113 - /// <summary>DefaultDir category.</summary>
114 - DefaultDir,
115 -
116 - /// <summary>RegPath category.</summary>
117 - RegPath,
118 -
119 - /// <summary>Formatted category.</summary>
120 - Formatted,
121 -
122 - /// <summary>Template category.</summary>
123 - Template,
124 -
125 - /// <summary>Condition category.</summary>
126 - Condition,
127 -
128 - /// <summary>Guid category.</summary>
129 - Guid,
130 -
131 - /// <summary>Version category.</summary>
132 - Version,
133 -
134 - /// <summary>Language category.</summary>
135 - Language,
136 -
137 - /// <summary>Binary category.</summary>
138 - Binary,
139 -
140 - /// <summary>CustomSource category.</summary>
141 - CustomSource,
142 -
143 - /// <summary>Cabinet category.</summary>
144 - Cabinet,
145 -
146 - /// <summary>Shortcut category.</summary>
147 - Shortcut,
148 -
149 - /// <summary>Formatted SDDL category.</summary>
150 - FormattedSDDLText,
151 - }
152 -
153 - /// <summary>
154 - /// Definition of a table's column.
155 - /// </summary>
156 - public sealed class ColumnDefinition : IComparable<ColumnDefinition>
157 - {
158 - private string name;
159 - private ColumnType type;
160 - private int length;
161 - private bool primaryKey;
162 - private bool nullable;
163 - private ColumnModularizeType modularize;
164 - private bool localizable;
165 - private bool added;
166 -
167 - private bool minValueSet;
168 - private long minValue;
169 - private bool maxValueSet;
170 - private long maxValue;
171 - private string keyTable;
172 - private bool keyColumnSet;
173 - private int keyColumn;
174 - private ColumnCategory category;
175 - private string possibilities;
176 - private string description;
177 - private bool escapeIdtCharacters;
178 - private bool useCData;
179 -
180 - /// <summary>
181 - /// Creates a new column definition.
182 - /// </summary>
183 - /// <param name="name">Name of column.</param>
184 - /// <param name="type">Type of column</param>
185 - /// <param name="length">Length of column.</param>
186 - /// <param name="primaryKey">If column is primary key.</param>
187 - /// <param name="nullable">If column is nullable.</param>
188 - /// <param name="modularizeType">Type of modularization for column</param>
189 - /// <param name="localizable">If the column is localizable.</param>
190 - /// <param name="minValueSet">If the minimum of the value was set.</param>
191 - /// <param name="minValue">Minimum value for the column.</param>
192 - /// <param name="maxValueSet">If the maximum value was set.</param>
193 - /// <param name="maxValue">Maximum value for the colum.</param>
194 - /// <param name="keyTable">Optional name of table for foreign key.</param>
195 - /// <param name="keyColumnSet">If the key column was set.</param>
196 - /// <param name="keyColumn">Optional name of column for foreign key.</param>
197 - /// <param name="category">Validation category for column.</param>
198 - /// <param name="possibilities">Set of possible values for column.</param>
199 - /// <param name="description">Description of column in vaidation table.</param>
200 - /// <param name="escapeIdtCharacters">If characters should be escaped in IDT.</param>
201 - /// <param name="useCData">If whitespace should be preserved in a CDATA node.</param>
202 - public ColumnDefinition(string name, ColumnType type, int length, bool primaryKey, bool nullable, ColumnModularizeType modularizeType, bool localizable, bool minValueSet, long minValue, bool maxValueSet, long maxValue, string keyTable, bool keyColumnSet, int keyColumn, ColumnCategory category, string possibilities, string description, bool escapeIdtCharacters, bool useCData)
203 - {
204 - this.name = name;
205 - this.type = type;
206 - this.length = length;
207 - this.primaryKey = primaryKey;
208 - this.nullable = nullable;
209 - this.modularize = modularizeType;
210 - this.localizable = localizable;
211 - this.minValueSet = minValueSet;
212 - this.minValue = minValue;
213 - this.maxValueSet = maxValueSet;
214 - this.maxValue = maxValue;
215 - this.keyTable = keyTable;
216 - this.keyColumnSet = keyColumnSet;
217 - this.keyColumn = keyColumn;
218 - this.category = category;
219 - this.possibilities = possibilities;
220 - this.description = description;
221 - this.escapeIdtCharacters = escapeIdtCharacters;
222 - this.useCData = useCData;
223 - }
224 -
225 - /// <summary>
226 - /// Gets whether this column was added via a transform.
227 - /// </summary>
228 - /// <value>Whether this column was added via a transform.</value>
229 - public bool Added
230 - {
231 - get { return this.added; }
232 - set { this.added = value; }
233 - }
234 -
235 - /// <summary>
236 - /// Gets the name of the column.
237 - /// </summary>
238 - /// <value>Name of column.</value>
239 - public string Name
240 - {
241 - get { return this.name; }
242 - }
243 -
244 - /// <summary>
245 - /// Gets the type of the column.
246 - /// </summary>
247 - /// <value>Type of column.</value>
248 - public ColumnType Type
249 - {
250 - get { return this.type; }
251 - }
252 -
253 - /// <summary>
254 - /// Gets the length of the column.
255 - /// </summary>
256 - /// <value>Length of column.</value>
257 - public int Length
258 - {
259 - get { return this.length; }
260 - }
261 -
262 - /// <summary>
263 - /// Gets if the column is a primary key.
264 - /// </summary>
265 - /// <value>true if column is primary key.</value>
266 - public bool PrimaryKey
267 - {
268 - get { return this.primaryKey; }
269 - }
270 -
271 - /// <summary>
272 - /// Gets if the column is nullable.
273 - /// </summary>
274 - /// <value>true if column is nullable.</value>
275 - public bool Nullable
276 - {
277 - get { return this.nullable; }
278 - }
279 -
280 - /// <summary>
281 - /// Gets the type of modularization for this column.
282 - /// </summary>
283 - /// <value>Column's modularization type.</value>
284 - public ColumnModularizeType ModularizeType
285 - {
286 - get { return this.modularize; }
287 - }
288 -
289 - /// <summary>
290 - /// Gets if the column is localizable. Can be because the type is localizable, or because the column
291 - /// was explicitly set to be so.
292 - /// </summary>
293 - /// <value>true if column is localizable.</value>
294 - public bool IsLocalizable
295 - {
296 - get { return this.localizable || ColumnType.Localized == this.Type; }
297 - }
298 -
299 - /// <summary>
300 - /// Gets if the minimum value of the column is set.
301 - /// </summary>
302 - /// <value>true if minimum value is set.</value>
303 - public bool IsMinValueSet
304 - {
305 - get { return this.minValueSet; }
306 - }
307 -
308 - /// <summary>
309 - /// Gets the minimum value for the column, only valid if IsMinValueSet returns true.
310 - /// </summary>
311 - /// <value>Minimum value for the column.</value>
312 - public long MinValue
313 - {
314 - get { return this.minValue; }
315 - }
316 -
317 - /// <summary>
318 - /// Gets if the maximum value of the column is set.
319 - /// </summary>
320 - /// <value>true if maximum value is set.</value>
321 - public bool IsMaxValueSet
322 - {
323 - get { return this.maxValueSet; }
324 - }
325 -
326 - /// <summary>
327 - /// Gets the maximum value for the column, only valid if IsMinValueSet returns true.
328 - /// </summary>
329 - /// <value>Maximum value for the column.</value>
330 - public long MaxValue
331 - {
332 - get { return this.maxValue; }
333 - }
334 -
335 - /// <summary>
336 - /// Gets the table that has the foreign key for this column
337 - /// </summary>
338 - /// <value>Foreign key table name.</value>
339 - public string KeyTable
340 - {
341 - get { return this.keyTable; }
342 - }
343 -
344 - /// <summary>
345 - /// Gets if the key column is set.
346 - /// </summary>
347 - /// <value>True if the key column is set.</value>
348 - public bool IsKeyColumnSet
349 - {
350 - get { return this.keyColumnSet; }
351 - }
352 -
353 - /// <summary>
354 - /// Gets the foreign key column that this column refers to.
355 - /// </summary>
356 - /// <value>Foreign key column.</value>
357 - public int KeyColumn
358 - {
359 - get { return this.keyColumn; }
360 - }
361 -
362 - /// <summary>
363 - /// Gets the validation category for this column.
364 - /// </summary>
365 - /// <value>Validation category.</value>
366 - public ColumnCategory Category
367 - {
368 - get { return this.category; }
369 - }
370 -
371 - /// <summary>
372 - /// Gets the set of possibilities for this column.
373 - /// </summary>
374 - /// <value>Set of possibilities for this column.</value>
375 - public string Possibilities
376 - {
377 - get { return this.possibilities; }
378 - }
379 -
380 - /// <summary>
381 - /// Gets the description for this column.
382 - /// </summary>
383 - /// <value>Description of column.</value>
384 - public string Description
385 - {
386 - get { return this.description; }
387 - }
388 -
389 - /// <summary>
390 - /// Gets if characters should be escaped to fit into IDT.
391 - /// </summary>
392 - /// <value>true if data should be escaped when adding to IDT.</value>
393 - public bool EscapeIdtCharacters
394 - {
395 - get { return this.escapeIdtCharacters; }
396 - }
397 -
398 - /// <summary>
399 - /// Gets if whitespace should be preserved in a CDATA node.
400 - /// </summary>
401 - /// <value>true if whitespace should be preserved in a CDATA node.</value>
402 - public bool UseCData
403 - {
404 - get { return this.useCData; }
405 - }
406 -
407 - /// <summary>
408 - /// Gets the type of the column in IDT format.
409 - /// </summary>
410 - /// <value>IDT format for column type.</value>
411 - public string IdtType
412 - {
413 - get
414 - {
415 - char typeCharacter;
416 - switch (this.type)
417 - {
418 - case ColumnType.Number:
419 - typeCharacter = this.nullable ? 'I' : 'i';
420 - break;
421 - case ColumnType.Preserved:
422 - case ColumnType.String:
423 - typeCharacter = this.nullable ? 'S' : 's';
424 - break;
425 - case ColumnType.Localized:
426 - typeCharacter = this.nullable ? 'L' : 'l';
427 - break;
428 - case ColumnType.Object:
429 - typeCharacter = this.nullable ? 'V' : 'v';
430 - break;
431 - default:
432 - throw new InvalidOperationException(String.Format(CultureInfo.CurrentUICulture, WixDataStrings.EXP_UnknownColumnType, this.type));
433 - }
434 -
435 - return String.Concat(typeCharacter, this.length);
436 - }
437 - }
438 -
439 - /// <summary>
440 - /// Parses a column definition in a table definition.
441 - /// </summary>
442 - /// <param name="reader">Reader to get data from.</param>
443 - /// <returns>The ColumnDefintion represented by the Xml.</returns>
444 - internal static ColumnDefinition Read(XmlReader reader)
445 - {
446 - if (!reader.LocalName.Equals("columnDefinition"))
447 - {
448 - throw new XmlException();
449 - }
450 -
451 - bool added = false;
452 - ColumnCategory category = ColumnCategory.Unknown;
453 - string description = null;
454 - bool empty = reader.IsEmptyElement;
455 - bool escapeIdtCharacters = false;
456 - int keyColumn = -1;
457 - bool keyColumnSet = false;
458 - string keyTable = null;
459 - int length = -1;
460 - bool localizable = false;
461 - long maxValue = 0;
462 - bool maxValueSet = false;
463 - long minValue = 0;
464 - bool minValueSet = false;
465 - ColumnModularizeType modularize = ColumnModularizeType.None;
466 - string name = null;
467 - bool nullable = false;
468 - string possibilities = null;
469 - bool primaryKey = false;
470 - ColumnType type = ColumnType.Unknown;
471 - bool useCData = false;
472 -
473 - // parse the attributes
474 - while (reader.MoveToNextAttribute())
475 - {
476 - switch (reader.LocalName)
477 - {
478 - case "added":
479 - added = reader.Value.Equals("yes");
480 - break;
481 - case "category":
482 - switch (reader.Value)
483 - {
484 - case "anyPath":
485 - category = ColumnCategory.AnyPath;
486 - break;
487 - case "binary":
488 - category = ColumnCategory.Binary;
489 - break;
490 - case "cabinet":
491 - category = ColumnCategory.Cabinet;
492 - break;
493 - case "condition":
494 - category = ColumnCategory.Condition;
495 - break;
496 - case "customSource":
497 - category = ColumnCategory.CustomSource;
498 - break;
499 - case "defaultDir":
500 - category = ColumnCategory.DefaultDir;
501 - break;
502 - case "doubleInteger":
503 - category = ColumnCategory.DoubleInteger;
504 - break;
505 - case "filename":
506 - category = ColumnCategory.Filename;
507 - break;
508 - case "formatted":
509 - category = ColumnCategory.Formatted;
510 - break;
511 - case "formattedSddl":
512 - category = ColumnCategory.FormattedSDDLText;
513 - break;
514 - case "guid":
515 - category = ColumnCategory.Guid;
516 - break;
517 - case "identifier":
518 - category = ColumnCategory.Identifier;
519 - break;
520 - case "integer":
521 - category = ColumnCategory.Integer;
522 - break;
523 - case "language":
524 - category = ColumnCategory.Language;
525 - break;
526 - case "lowerCase":
527 - category = ColumnCategory.LowerCase;
528 - break;
529 - case "path":
530 - category = ColumnCategory.Path;
531 - break;
532 - case "paths":
533 - category = ColumnCategory.Paths;
534 - break;
535 - case "property":
536 - category = ColumnCategory.Property;
537 - break;
538 - case "regPath":
539 - category = ColumnCategory.RegPath;
540 - break;
541 - case "shortcut":
542 - category = ColumnCategory.Shortcut;
543 - break;
544 - case "template":
545 - category = ColumnCategory.Template;
546 - break;
547 - case "text":
548 - category = ColumnCategory.Text;
549 - break;
550 - case "timeDate":
551 - category = ColumnCategory.TimeDate;
552 - break;
553 - case "upperCase":
554 - category = ColumnCategory.UpperCase;
555 - break;
556 - case "version":
557 - category = ColumnCategory.Version;
558 - break;
559 - case "wildCardFilename":
560 - category = ColumnCategory.WildCardFilename;
561 - break;
562 - default:
563 - throw new InvalidOperationException();
564 - }
565 - break;
566 - case "description":
567 - description = reader.Value;
568 - break;
569 - case "escapeIdtCharacters":
570 - escapeIdtCharacters = reader.Value.Equals("yes");
571 - break;
572 - case "keyColumn":
573 - keyColumnSet = true;
574 - keyColumn = Convert.ToInt32(reader.Value, 10);
575 - break;
576 - case "keyTable":
577 - keyTable = reader.Value;
578 - break;
579 - case "length":
580 - length = Convert.ToInt32(reader.Value, 10);
581 - break;
582 - case "localizable":
583 - localizable = reader.Value.Equals("yes");
584 - break;
585 - case "maxValue":
586 - maxValueSet = true;
587 - maxValue = Convert.ToInt32(reader.Value, 10);
588 - break;
589 - case "minValue":
590 - minValueSet = true;
591 - minValue = Convert.ToInt32(reader.Value, 10);
592 - break;
593 - case "modularize":
594 - switch (reader.Value)
595 - {
596 - case "column":
597 - modularize = ColumnModularizeType.Column;
598 - break;
599 - case "companionFile":
600 - modularize = ColumnModularizeType.CompanionFile;
601 - break;
602 - case "condition":
603 - modularize = ColumnModularizeType.Condition;
604 - break;
605 - case "controlEventArgument":
606 - modularize = ColumnModularizeType.ControlEventArgument;
607 - break;
608 - case "controlText":
609 - modularize = ColumnModularizeType.ControlText;
610 - break;
611 - case "icon":
612 - modularize = ColumnModularizeType.Icon;
613 - break;
614 - case "none":
615 - modularize = ColumnModularizeType.None;
616 - break;
617 - case "property":
618 - modularize = ColumnModularizeType.Property;
619 - break;
620 - case "semicolonDelimited":
621 - modularize = ColumnModularizeType.SemicolonDelimited;
622 - break;
623 - default:
624 - throw new XmlException();
625 - }
626 - break;
627 - case "name":
628 - switch (reader.Value)
629 - {
630 - case "CREATE":
631 - case "DELETE":
632 - case "DROP":
633 - case "INSERT":
634 - throw new XmlException();
635 - default:
636 - name = reader.Value;
637 - break;
638 - }
639 - break;
640 - case "nullable":
641 - nullable = reader.Value.Equals("yes");
642 - break;
643 - case "primaryKey":
644 - primaryKey = reader.Value.Equals("yes");
645 - break;
646 - case "set":
647 - possibilities = reader.Value;
648 - break;
649 - case "type":
650 - switch (reader.Value)
651 - {
652 - case "localized":
653 - type = ColumnType.Localized;
654 - break;
655 - case "number":
656 - type = ColumnType.Number;
657 - break;
658 - case "object":
659 - type = ColumnType.Object;
660 - break;
661 - case "string":
662 - type = ColumnType.String;
663 - break;
664 - case "preserved":
665 - type = ColumnType.Preserved;
666 - break;
667 - default:
668 - throw new XmlException();
669 - }
670 - break;
671 - case "useCData":
672 - useCData = reader.Value.Equals("yes");
673 - break;
674 - }
675 - }
676 -
677 - // parse the child elements (there should be none)
678 - if (!empty)
679 - {
680 - bool done = false;
681 -
682 - while (!done && reader.Read())
683 - {
684 - switch (reader.NodeType)
685 - {
686 - case XmlNodeType.Element:
687 - throw new XmlException();
688 - case XmlNodeType.EndElement:
689 - done = true;
690 - break;
691 - }
692 - }
693 -
694 - if (!done)
695 - {
696 - throw new XmlException();
697 - }
698 - }
699 -
700 - ColumnDefinition columnDefinition = new ColumnDefinition(name, type, length, primaryKey, nullable, modularize, localizable, minValueSet, minValue, maxValueSet, maxValue, keyTable, keyColumnSet, keyColumn, category, possibilities, description, escapeIdtCharacters, useCData);
701 - columnDefinition.Added = added;
702 -
703 - return columnDefinition;
704 - }
705 -
706 - /// <summary>
707 - /// Persists a ColumnDefinition in an XML format.
708 - /// </summary>
709 - /// <param name="writer">XmlWriter where the Output should persist itself as XML.</param>
710 - internal void Write(XmlWriter writer)
711 - {
712 - writer.WriteStartElement("columnDefinition", TableDefinitionCollection.XmlNamespaceUri);
713 -
714 - writer.WriteAttributeString("name", this.name);
715 -
716 - switch (this.type)
717 - {
718 - case ColumnType.Localized:
719 - writer.WriteAttributeString("type", "localized");
720 - break;
721 - case ColumnType.Number:
722 - writer.WriteAttributeString("type", "number");
723 - break;
724 - case ColumnType.Object:
725 - writer.WriteAttributeString("type", "object");
726 - break;
727 - case ColumnType.String:
728 - writer.WriteAttributeString("type", "string");
729 - break;
730 - case ColumnType.Preserved:
731 - writer.WriteAttributeString("type", "preserved");
732 - break;
733 - }
734 -
735 - writer.WriteAttributeString("length", this.length.ToString(CultureInfo.InvariantCulture.NumberFormat));
736 -
737 - if (this.primaryKey)
738 - {
739 - writer.WriteAttributeString("primaryKey", "yes");
740 - }
741 -
742 - if (this.nullable)
743 - {
744 - writer.WriteAttributeString("nullable", "yes");
745 - }
746 -
747 - if (this.localizable)
748 - {
749 - writer.WriteAttributeString("localizable", "yes");
750 - }
751 -
752 - if (this.added)
753 - {
754 - writer.WriteAttributeString("added", "yes");
755 - }
756 -
757 - switch (this.modularize)
758 - {
759 - case ColumnModularizeType.Column:
760 - writer.WriteAttributeString("modularize", "column");
761 - break;
762 - case ColumnModularizeType.CompanionFile:
763 - writer.WriteAttributeString("modularize", "companionFile");
764 - break;
765 - case ColumnModularizeType.Condition:
766 - writer.WriteAttributeString("modularize", "condition");
767 - break;
768 - case ColumnModularizeType.ControlEventArgument:
769 - writer.WriteAttributeString("modularize", "controlEventArgument");
770 - break;
771 - case ColumnModularizeType.ControlText:
772 - writer.WriteAttributeString("modularize", "controlText");
773 - break;
774 - case ColumnModularizeType.Icon:
775 - writer.WriteAttributeString("modularize", "icon");
776 - break;
777 - case ColumnModularizeType.None:
778 - // this is the default value
779 - break;
780 - case ColumnModularizeType.Property:
781 - writer.WriteAttributeString("modularize", "property");
782 - break;
783 - case ColumnModularizeType.SemicolonDelimited:
784 - writer.WriteAttributeString("modularize", "semicolonDelimited");
785 - break;
786 - }
787 -
788 - if (this.minValueSet)
789 - {
790 - writer.WriteAttributeString("minValue", this.minValue.ToString(CultureInfo.InvariantCulture.NumberFormat));
791 - }
792 -
793 - if (this.maxValueSet)
794 - {
795 - writer.WriteAttributeString("maxValue", this.maxValue.ToString(CultureInfo.InvariantCulture.NumberFormat));
796 - }
797 -
798 - if (!String.IsNullOrEmpty(this.keyTable))
799 - {
800 - writer.WriteAttributeString("keyTable", this.keyTable);
801 - }
802 -
803 - if (this.keyColumnSet)
804 - {
805 - writer.WriteAttributeString("keyColumn", this.keyColumn.ToString(CultureInfo.InvariantCulture.NumberFormat));
806 - }
807 -
808 - switch (this.category)
809 - {
810 - case ColumnCategory.AnyPath:
811 - writer.WriteAttributeString("category", "anyPath");
812 - break;
813 - case ColumnCategory.Binary:
814 - writer.WriteAttributeString("category", "binary");
815 - break;
816 - case ColumnCategory.Cabinet:
817 - writer.WriteAttributeString("category", "cabinet");
818 - break;
819 - case ColumnCategory.Condition:
820 - writer.WriteAttributeString("category", "condition");
821 - break;
822 - case ColumnCategory.CustomSource:
823 - writer.WriteAttributeString("category", "customSource");
824 - break;
825 - case ColumnCategory.DefaultDir:
826 - writer.WriteAttributeString("category", "defaultDir");
827 - break;
828 - case ColumnCategory.DoubleInteger:
829 - writer.WriteAttributeString("category", "doubleInteger");
830 - break;
831 - case ColumnCategory.Filename:
832 - writer.WriteAttributeString("category", "filename");
833 - break;
834 - case ColumnCategory.Formatted:
835 - writer.WriteAttributeString("category", "formatted");
836 - break;
837 - case ColumnCategory.FormattedSDDLText:
838 - writer.WriteAttributeString("category", "formattedSddl");
839 - break;
840 - case ColumnCategory.Guid:
841 - writer.WriteAttributeString("category", "guid");
842 - break;
843 - case ColumnCategory.Identifier:
844 - writer.WriteAttributeString("category", "identifier");
845 - break;
846 - case ColumnCategory.Integer:
847 - writer.WriteAttributeString("category", "integer");
848 - break;
849 - case ColumnCategory.Language:
850 - writer.WriteAttributeString("category", "language");
851 - break;
852 - case ColumnCategory.LowerCase:
853 - writer.WriteAttributeString("category", "lowerCase");
854 - break;
855 - case ColumnCategory.Path:
856 - writer.WriteAttributeString("category", "path");
857 - break;
858 - case ColumnCategory.Paths:
859 - writer.WriteAttributeString("category", "paths");
860 - break;
861 - case ColumnCategory.Property:
862 - writer.WriteAttributeString("category", "property");
863 - break;
864 - case ColumnCategory.RegPath:
865 - writer.WriteAttributeString("category", "regPath");
866 - break;
867 - case ColumnCategory.Shortcut:
868 - writer.WriteAttributeString("category", "shortcut");
869 - break;
870 - case ColumnCategory.Template:
871 - writer.WriteAttributeString("category", "template");
872 - break;
873 - case ColumnCategory.Text:
874 - writer.WriteAttributeString("category", "text");
875 - break;
876 - case ColumnCategory.TimeDate:
877 - writer.WriteAttributeString("category", "timeDate");
878 - break;
879 - case ColumnCategory.UpperCase:
880 - writer.WriteAttributeString("category", "upperCase");
881 - break;
882 - case ColumnCategory.Version:
883 - writer.WriteAttributeString("category", "version");
884 - break;
885 - case ColumnCategory.WildCardFilename:
886 - writer.WriteAttributeString("category", "wildCardFilename");
887 - break;
888 - }
889 -
890 - if (!String.IsNullOrEmpty(this.possibilities))
891 - {
892 - writer.WriteAttributeString("set", this.possibilities);
893 - }
894 -
895 - if (!String.IsNullOrEmpty(this.description))
896 - {
897 - writer.WriteAttributeString("description", this.description);
898 - }
899 -
900 - if (this.escapeIdtCharacters)
901 - {
902 - writer.WriteAttributeString("escapeIdtCharacters", "yes");
903 - }
904 -
905 - if (this.useCData)
906 - {
907 - writer.WriteAttributeString("useCData", "yes");
908 - }
909 -
910 - writer.WriteEndElement();
911 - }
912 -
913 - /// <summary>
914 - /// Validate a value for this column.
915 - /// </summary>
916 - /// <param name="value">The value to validate.</param>
917 - /// <returns>Validated value.</returns>
918 - internal object ValidateValue(object value)
919 - {
920 - if (null == value)
921 - {
922 - if (!this.nullable)
923 - {
924 - throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Cannot set column '{0}' with a null value because this is a required field.", this.name));
925 - }
926 - }
927 - else // check numerical values against their specified minimum and maximum values.
928 - {
929 - if (ColumnType.Number == this.type && !this.IsLocalizable)
930 - {
931 - // For now all enums in the tables can be represented by integers. This if statement would need to
932 - // be enhanced if that ever changes.
933 - if (value is int || value.GetType().IsEnum)
934 - {
935 - int intValue = (int)value;
936 -
937 - // validate the value against the minimum allowed value
938 - if (this.minValueSet && this.minValue > intValue)
939 - {
940 - throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Cannot set column '{0}' with value {1} because it is less than the minimum allowed value for this column, {2}.", this.name, intValue, this.minValue));
941 - }
942 -
943 - // validate the value against the maximum allowed value
944 - if (this.maxValueSet && this.maxValue < intValue)
945 - {
946 - throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Cannot set column '{0}' with value {1} because it is greater than the maximum allowed value for this column, {2}.", this.name, intValue, this.maxValue));
947 - }
948 -
949 - return intValue;
950 - }
951 - else if (value is long)
952 - {
953 - long longValue = (long)value;
954 -
955 - // validate the value against the minimum allowed value
956 - if (this.minValueSet && this.minValue > longValue)
957 - {
958 - throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Cannot set column '{0}' with value {1} because it is less than the minimum allowed value for this column, {2}.", this.name, longValue, this.minValue));
959 - }
960 -
961 - // validate the value against the maximum allowed value
962 - if (this.maxValueSet && this.maxValue < longValue)
963 - {
964 - throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Cannot set column '{0}' with value {1} because it is greater than the maximum allowed value for this column, {2}.", this.name, longValue, this.maxValue));
965 - }
966 -
967 - return longValue;
968 - }
969 - else
970 - {
971 - throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Cannot set number column '{0}' with a value of type '{1}'.", this.name, value.GetType().ToString()));
972 - }
973 - }
974 - else
975 - {
976 - if (!(value is string))
977 - {
978 - //throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "Cannot set string column '{0}' with a value of type '{1}'.", this.name, value.GetType().ToString()));
979 - return value.ToString();
980 - }
981 - }
982 - }
983 -
984 - return value;
985 - }
986 -
987 - /// <summary>
988 - /// Compare this column definition to another column definition.
989 - /// </summary>
990 - /// <remarks>
991 - /// Only Windows Installer traits are compared, allowing for updates to WiX-specific table definitions.
992 - /// </remarks>
993 - /// <param name="other">The <see cref="ColumnDefinition"/> to compare with this one.</param>
994 - /// <returns>0 if the columns' core propeties are the same; otherwise, non-0.</returns>
995 - public int CompareTo(ColumnDefinition other)
996 - {
997 - // by definition, this object is greater than null
998 - if (null == other)
999 - {
1000 - return 1;
1001 - }
1002 -
1003 - // compare column names
1004 - int ret = String.Compare(this.Name, other.Name, StringComparison.Ordinal);
1005 -
1006 - // compare column types
1007 - if (0 == ret)
1008 - {
1009 - ret = this.Type == other.Type ? 0 : -1;
1010 -
1011 - // compare column lengths
1012 - if (0 == ret)
1013 - {
1014 - ret = this.Length == other.Length ? 0 : -1;
1015 -
1016 - // compare whether both are primary keys
1017 - if (0 == ret)
1018 - {
1019 - ret = this.PrimaryKey == other.PrimaryKey ? 0 : -1;
1020 -
1021 - // compare nullability
1022 - if (0 == ret)
1023 - {
1024 - ret = this.Nullable == other.Nullable ? 0 : -1;
1025 - }
1026 - }
1027 - }
1028 - }
1029 -
1030 - return ret;
1031 - }
1032 - }
1033 -}
src/WixToolset.Data.WindowsInstaller/Common.cs deleted
-25
@@ -1,25 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.Data
4 -{
5 - using System;
6 - using System.Text.RegularExpressions;
7 -
8 - internal static class Common
9 - {
10 - private static readonly Regex LegalIdentifierCharacters = new Regex(@"^[_A-Za-z][0-9A-Za-z_\.]*$", RegexOptions.Compiled);
11 -
12 - public static bool IsIdentifier(string value)
13 - {
14 - if (!String.IsNullOrEmpty(value))
15 - {
16 - if (LegalIdentifierCharacters.IsMatch(value))
17 - {
18 - return true;
19 - }
20 - }
21 -
22 - return false;
23 - }
24 - }
25 -}
src/WixToolset.Data.WindowsInstaller/Field.cs deleted
-266
@@ -1,266 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.Data
4 -{
5 - using System;
6 - using System.Diagnostics;
7 - using System.Globalization;
8 - using System.Xml;
9 -
10 - /// <summary>
11 - /// Field containing data for a column in a row.
12 - /// </summary>
13 - public class Field
14 - {
15 - private object data;
16 -
17 - /// <summary>
18 - /// Instantiates a new Field.
19 - /// </summary>
20 - /// <param name="columnDefinition">Column definition for this field.</param>
21 - protected Field(ColumnDefinition columnDefinition)
22 - {
23 - this.Column = columnDefinition;
24 - }
25 -
26 - /// <summary>
27 - /// Gets or sets the column definition for this field.
28 - /// </summary>
29 - /// <value>Column definition.</value>
30 - public ColumnDefinition Column { get; private set; }
31 -
32 - /// <summary>
33 - /// Gets or sets the data for this field.
34 - /// </summary>
35 - /// <value>Data in the field.</value>
36 - public object Data
37 - {
38 - get
39 - {
40 - return this.data;
41 - }
42 -
43 - set
44 - {
45 - // Validate the value before setting it.
46 - this.data = this.Column.ValidateValue(value);
47 - }
48 - }
49 -
50 - /// <summary>
51 - /// Gets or sets whether this field is modified.
52 - /// </summary>
53 - /// <value>Whether this field is modified.</value>
54 - public bool Modified { get; set; }
55 -
56 - /// <summary>
57 - /// Gets or sets the previous data.
58 - /// </summary>
59 - /// <value>The previous data.</value>
60 - public string PreviousData { get; set; }
61 -
62 - /// <summary>
63 - /// Instantiate a new Field object of the correct type.
64 - /// </summary>
65 - /// <param name="columnDefinition">The column definition for the field.</param>
66 - /// <returns>The new Field object.</returns>
67 - public static Field Create(ColumnDefinition columnDefinition)
68 - {
69 - return (ColumnType.Object == columnDefinition.Type) ? new ObjectField(columnDefinition) : new Field(columnDefinition);
70 - }
71 -
72 - /// <summary>
73 - /// Sets the value of a particular field in the row without validating.
74 - /// </summary>
75 - /// <param name="field">field index.</param>
76 - /// <param name="value">Value of a field in the row.</param>
77 - /// <returns>True if successful, false if validation failed.</returns>
78 - public bool BestEffortSet(object value)
79 - {
80 - bool success = true;
81 - object bestEffortValue = value;
82 -
83 - try
84 - {
85 - bestEffortValue = this.Column.ValidateValue(value);
86 - }
87 - catch (InvalidOperationException)
88 - {
89 - success = false;
90 - }
91 -
92 - this.data = bestEffortValue;
93 - return success;
94 - }
95 -
96 - /// <summary>
97 - /// Determine if this field is identical to another field.
98 - /// </summary>
99 - /// <param name="field">The other field to compare to.</param>
100 - /// <returns>true if they are equal; false otherwise.</returns>
101 - public bool IsIdentical(Field field)
102 - {
103 - return (this.Column.Name == field.Column.Name &&
104 - ((null != this.data && this.data.Equals(field.data)) || (null == this.data && null == field.data)));
105 - }
106 -
107 - /// <summary>
108 - /// Overrides the built in object implementation to return the field's data as a string.
109 - /// </summary>
110 - /// <returns>Field's data as a string.</returns>
111 - public override string ToString()
112 - {
113 - return this.AsString();
114 - }
115 -
116 - /// <summary>
117 - /// Gets the field as an integer.
118 - /// </summary>
119 - /// <returns>Field's data as an integer.</returns>
120 - public int AsInteger()
121 - {
122 - return (this.data is int) ? (int)this.data : Convert.ToInt32(this.data, CultureInfo.InvariantCulture);
123 - }
124 -
125 - /// <summary>
126 - /// Gets the field as an integer that could be null.
127 - /// </summary>
128 - /// <returns>Field's data as an integer that could be null.</returns>
129 - public int? AsNullableInteger()
130 - {
131 - return (null == this.data) ? (int?)null : (this.data is int) ? (int)this.data : Convert.ToInt32(this.data, CultureInfo.InvariantCulture);
132 - }
133 -
134 - /// <summary>
135 - /// Gets the field as a string.
136 - /// </summary>
137 - /// <returns>Field's data as a string.</returns>
138 - public string AsString()
139 - {
140 - return (null == this.data) ? null : Convert.ToString(this.data, CultureInfo.InvariantCulture);
141 - }
142 -
143 - /// <summary>
144 - /// Parse a field from the xml.
145 - /// </summary>
146 - /// <param name="reader">XmlReader where the intermediate is persisted.</param>
147 - internal virtual void Read(XmlReader reader)
148 - {
149 - Debug.Assert("field" == reader.LocalName);
150 -
151 - bool empty = reader.IsEmptyElement;
152 -
153 - while (reader.MoveToNextAttribute())
154 - {
155 - switch (reader.LocalName)
156 - {
157 - case "modified":
158 - this.Modified = reader.Value.Equals("yes");
159 - break;
160 - case "previousData":
161 - this.PreviousData = reader.Value;
162 - break;
163 - }
164 - }
165 -
166 - if (!empty)
167 - {
168 - bool done = false;
169 -
170 - while (!done && reader.Read())
171 - {
172 - switch (reader.NodeType)
173 - {
174 - case XmlNodeType.Element:
175 - throw new XmlException();
176 - case XmlNodeType.CDATA:
177 - case XmlNodeType.Text:
178 - case XmlNodeType.SignificantWhitespace:
179 - if (0 < reader.Value.Length)
180 - {
181 - if (ColumnType.Number == this.Column.Type && !this.Column.IsLocalizable)
182 - {
183 - // older wix files could persist data as a long value (which would overflow an int)
184 - // since the Convert class always throws exceptions for overflows, read in integral
185 - // values as a long to avoid the overflow, then cast it to an int (this operation can
186 - // overflow without throwing an exception inside an unchecked block)
187 - this.data = unchecked((int)Convert.ToInt64(reader.Value, CultureInfo.InvariantCulture));
188 - }
189 - else
190 - {
191 - this.data = reader.Value;
192 - }
193 - }
194 - break;
195 - case XmlNodeType.EndElement:
196 - done = true;
197 - break;
198 - }
199 - }
200 -
201 - if (!done)
202 - {
203 - throw new XmlException();
204 - }
205 - }
206 - }
207 -
208 - /// <summary>
209 - /// Persists a field in an XML format.
210 - /// </summary>
211 - /// <param name="writer">XmlWriter where the Field should persist itself as XML.</param>
212 - internal virtual void Write(XmlWriter writer)
213 - {
214 - writer.WriteStartElement("field", Intermediate.XmlNamespaceUri);
215 -
216 - if (this.Modified)
217 - {
218 - writer.WriteAttributeString("modified", "yes");
219 - }
220 -
221 - if (null != this.PreviousData)
222 - {
223 - writer.WriteAttributeString("previousData", this.PreviousData);
224 - }
225 -
226 - // Convert the data to a string that will persist nicely (nulls as String.Empty).
227 - string text = Convert.ToString(this.data, CultureInfo.InvariantCulture);
228 - if (this.Column.UseCData)
229 - {
230 - writer.WriteCData(text);
231 - }
232 - else
233 - {
234 - writer.WriteString(text);
235 - }
236 -
237 - writer.WriteEndElement();
238 - }
239 -
240 - /// <summary>
241 - /// Returns the field data in a format usable in IDT files.
242 - /// </summary>
243 - /// <returns>Field data in string IDT format.</returns>
244 - internal string ToIdtValue()
245 - {
246 - if (null == this.data)
247 - {
248 - return null;
249 - }
250 - else
251 - {
252 - string fieldData = Convert.ToString(this.data, CultureInfo.InvariantCulture);
253 -
254 - // special idt-specific escaping
255 - if (this.Column.EscapeIdtCharacters)
256 - {
257 - fieldData = fieldData.Replace('\t', '\x10');
258 - fieldData = fieldData.Replace('\r', '\x11');
259 - fieldData = fieldData.Replace('\n', '\x19');
260 - }
261 -
262 - return fieldData;
263 - }
264 - }
265 - }
266 -}
src/WixToolset.Data.WindowsInstaller/ObjectField.cs deleted
-183
@@ -1,183 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.Data
4 -{
5 - using System;
6 - using System.Diagnostics;
7 - using System.Globalization;
8 - using System.Xml;
9 -
10 - /// <summary>
11 - /// Field containing data for an object column in a row.
12 - /// </summary>
13 - public sealed class ObjectField : Field
14 - {
15 - /// <summary>
16 - /// Instantiates a new Field.
17 - /// </summary>
18 - /// <param name="columnDefinition">Column definition for this field.</param>
19 - internal ObjectField(ColumnDefinition columnDefinition) :
20 - base(columnDefinition)
21 - {
22 - }
23 -
24 - /// <summary>
25 - /// Gets or sets the index of the embedded file in a library.
26 - /// </summary>
27 - /// <value>The index of the embedded file.</value>
28 - public int? EmbeddedFileIndex { get; set; }
29 -
30 - /// <summary>
31 - /// Gets or sets the previous index of the embedded file in the library.
32 - /// </summary>
33 - /// <value>The previous index of the embedded file.</value>
34 - public int? PreviousEmbeddedFileIndex { get; set; }
35 -
36 - /// <summary>
37 - /// Gets or sets the path to the embedded cabinet of the previous file.
38 - /// </summary>
39 - /// <value>The path of the cabinet containing the previous file.</value>
40 - public Uri PreviousBaseUri { get; set; }
41 -
42 - /// <summary>
43 - /// Gets the base URI of the object field.
44 - /// </summary>
45 - /// <value>The base URI of the object field.</value>
46 - public Uri BaseUri { get; private set; }
47 -
48 - /// <summary>
49 - /// Gets or sets the unresolved data for this field.
50 - /// </summary>
51 - /// <value>Unresolved Data in the field.</value>
52 - public string UnresolvedData { get; set; }
53 -
54 - /// <summary>
55 - /// Gets or sets the unresolved previous data.
56 - /// </summary>
57 - /// <value>The unresolved previous data.</value>
58 - public string UnresolvedPreviousData { get; set; }
59 -
60 - /// <summary>
61 - /// Parse a field from the xml.
62 - /// </summary>
63 - /// <param name="reader">XmlReader where the intermediate is persisted.</param>
64 - internal override void Read(XmlReader reader)
65 - {
66 - Debug.Assert("field" == reader.LocalName);
67 -
68 - bool empty = reader.IsEmptyElement;
69 -
70 - this.BaseUri = new Uri(reader.BaseURI);
71 -
72 - while (reader.MoveToNextAttribute())
73 - {
74 - switch (reader.LocalName)
75 - {
76 - case "cabinetFileId":
77 - this.EmbeddedFileIndex = Convert.ToInt32(reader.Value);
78 - break;
79 - case "modified":
80 - this.Modified = reader.Value.Equals("yes");
81 - break;
82 - case "previousData":
83 - this.PreviousData = reader.Value;
84 - break;
85 - case "unresolvedPreviousData":
86 - this.UnresolvedPreviousData = reader.Value;
87 - break;
88 - case "unresolvedData":
89 - this.UnresolvedData = reader.Value;
90 - break;
91 - case "previousCabinetFileId":
92 - this.PreviousEmbeddedFileIndex = Convert.ToInt32(reader.Value);
93 - break;
94 - }
95 - }
96 -
97 - if (!empty)
98 - {
99 - bool done = false;
100 -
101 - while (!done && reader.Read())
102 - {
103 - switch (reader.NodeType)
104 - {
105 - case XmlNodeType.Element:
106 - throw new XmlException();
107 - case XmlNodeType.CDATA:
108 - case XmlNodeType.Text:
109 - if (0 < reader.Value.Length)
110 - {
111 - this.Data = reader.Value;
112 - }
113 - break;
114 - case XmlNodeType.EndElement:
115 - done = true;
116 - break;
117 - }
118 - }
119 -
120 - if (!done)
121 - {
122 - throw new XmlException();
123 - }
124 - }
125 - }
126 -
127 - /// <summary>
128 - /// Persists a field in an XML format.
129 - /// </summary>
130 - /// <param name="writer">XmlWriter where the Field should persist itself as XML.</param>
131 - internal override void Write(XmlWriter writer)
132 - {
133 - writer.WriteStartElement("field", Intermediate.XmlNamespaceUri);
134 -
135 - if (this.EmbeddedFileIndex.HasValue)
136 - {
137 - writer.WriteStartAttribute("cabinetFileId");
138 - writer.WriteValue(this.EmbeddedFileIndex);
139 - writer.WriteEndAttribute();
140 - }
141 -
142 - if (this.Modified)
143 - {
144 - writer.WriteAttributeString("modified", "yes");
145 - }
146 -
147 - if (null != this.UnresolvedPreviousData)
148 - {
149 - writer.WriteAttributeString("unresolvedPreviousData", this.UnresolvedPreviousData);
150 - }
151 -
152 - if (null != this.PreviousData)
153 - {
154 - writer.WriteAttributeString("previousData", this.PreviousData);
155 - }
156 -
157 - if (null != this.UnresolvedData)
158 - {
159 - writer.WriteAttributeString("unresolvedData", this.UnresolvedData);
160 - }
161 -
162 - if (this.PreviousEmbeddedFileIndex.HasValue)
163 - {
164 - writer.WriteStartAttribute("previousCabinetFileId");
165 - writer.WriteValue(this.PreviousEmbeddedFileIndex);
166 - writer.WriteEndAttribute();
167 - }
168 -
169 - // Convert the data to a string that will persist nicely (nulls as String.Empty).
170 - string text = Convert.ToString(this.Data, CultureInfo.InvariantCulture);
171 - if (this.Column.UseCData)
172 - {
173 - writer.WriteCData(text);
174 - }
175 - else
176 - {
177 - writer.WriteString(text);
178 - }
179 -
180 - writer.WriteEndElement();
181 - }
182 - }
183 -}
src/WixToolset.Data.WindowsInstaller/Output.cs deleted
-337
@@ -1,337 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.Data
4 -{
5 - using System;
6 - using System.Collections.Generic;
7 - using System.Globalization;
8 - using System.IO;
9 - using System.Linq;
10 - using System.Xml;
11 -
12 - /// <summary>
13 - /// Output is generated by the linker.
14 - /// </summary>
15 - public sealed class Output
16 - {
17 - public const string XmlNamespaceUri = "http://wixtoolset.org/schemas/v4/wixout";
18 - private static readonly Version CurrentVersion = new Version("4.0.0.0");
19 -
20 - /// <summary>
21 - /// Creates a new empty output object.
22 - /// </summary>
23 - /// <param name="sourceLineNumbers">The source line information for the output.</param>
24 - public Output(SourceLineNumber sourceLineNumbers)
25 - {
26 - this.SourceLineNumbers = sourceLineNumbers;
27 - this.SubStorages = new List<SubStorage>();
28 - this.Tables = new TableIndexedCollection();
29 - }
30 -
31 - /// <summary>
32 - /// Gets the type of the output.
33 - /// </summary>
34 - /// <value>Type of the output.</value>
35 - public OutputType Type { get; set; }
36 -
37 - /// <summary>
38 - /// Gets or sets the codepage for this output.
39 - /// </summary>
40 - /// <value>Codepage of the output.</value>
41 - public int Codepage { get; set; }
42 -
43 - /// <summary>
44 - /// Gets the source line information for this output.
45 - /// </summary>
46 - /// <value>The source line information for this output.</value>
47 - public SourceLineNumber SourceLineNumbers { get; private set; }
48 -
49 - /// <summary>
50 - /// Gets the substorages in this output.
51 - /// </summary>
52 - /// <value>The substorages in this output.</value>
53 - public ICollection<SubStorage> SubStorages { get; private set; }
54 -
55 - /// <summary>
56 - /// Gets the tables contained in this output.
57 - /// </summary>
58 - /// <value>Collection of tables.</value>
59 - public TableIndexedCollection Tables { get; private set; }
60 -
61 - /// <summary>
62 - /// Gets the output type corresponding to a given output filename extension.
63 - /// </summary>
64 - /// <param name="extension">Case-insensitive output filename extension.</param>
65 - /// <returns>Output type for the extension.</returns>
66 - public static OutputType GetOutputType(string extension)
67 - {
68 - if (extension.Equals(".exe", StringComparison.OrdinalIgnoreCase))
69 - {
70 - return OutputType.Bundle;
71 - }
72 - if (extension.Equals(".msi", StringComparison.OrdinalIgnoreCase))
73 - {
74 - return OutputType.Product;
75 - }
76 - else if (extension.Equals(".msm", StringComparison.OrdinalIgnoreCase))
77 - {
78 - return OutputType.Module;
79 - }
80 - else if (extension.Equals(".msp", StringComparison.OrdinalIgnoreCase))
81 - {
82 - return OutputType.Patch;
83 - }
84 - else if (extension.Equals(".mst", StringComparison.OrdinalIgnoreCase))
85 - {
86 - return OutputType.Transform;
87 - }
88 - else if (extension.Equals(".pcp", StringComparison.OrdinalIgnoreCase))
89 - {
90 - return OutputType.PatchCreation;
91 - }
92 - else
93 - {
94 - return OutputType.Unknown;
95 - }
96 - }
97 -
98 - /// <summary>
99 - /// Gets the filename extension corresponding to a given output type.
100 - /// </summary>
101 - /// <param name="type">One of the WiX output types.</param>
102 - /// <returns>Filename extension for the output type, for example ".msi".</returns>
103 - public static string GetExtension(OutputType type)
104 - {
105 - switch (type)
106 - {
107 - case OutputType.Bundle:
108 - return ".exe";
109 - case OutputType.Product:
110 - return ".msi";
111 - case OutputType.Module:
112 - return ".msm";
113 - case OutputType.Patch:
114 - return ".msp";
115 - case OutputType.Transform:
116 - return ".mst";
117 - case OutputType.PatchCreation:
118 - return ".pcp";
119 - default:
120 - return ".wix";
121 - }
122 - }
123 -
124 - /// <summary>
125 - /// Loads an output from a path on disk.
126 - /// </summary>
127 - /// <param name="path">Path to output file saved on disk.</param>
128 - /// <param name="suppressVersionCheck">Suppresses wix.dll version mismatch check.</param>
129 - /// <returns>Output object.</returns>
130 - public static Output Load(string path, bool suppressVersionCheck)
131 - {
132 - using (FileStream stream = File.OpenRead(path))
133 - using (FileStructure fs = FileStructure.Read(stream))
134 - {
135 - if (FileFormat.Wixout != fs.FileFormat)
136 - {
137 - throw new WixUnexpectedFileFormatException(path, FileFormat.Wixout, fs.FileFormat);
138 - }
139 -
140 - Uri uri = new Uri(Path.GetFullPath(path));
141 - using (XmlReader reader = XmlReader.Create(fs.GetDataStream(), null, uri.AbsoluteUri))
142 - {
143 - try
144 - {
145 - reader.MoveToContent();
146 - return Output.Read(reader, suppressVersionCheck);
147 - }
148 - catch (XmlException xe)
149 - {
150 - throw new WixCorruptFileException(path, fs.FileFormat, xe);
151 - }
152 - }
153 - }
154 - }
155 -
156 - /// <summary>
157 - /// Saves an output to a path on disk.
158 - /// </summary>
159 - /// <param name="path">Path to save output file to on disk.</param>
160 - public void Save(string path)
161 - {
162 - Directory.CreateDirectory(Path.GetDirectoryName(Path.GetFullPath(path)));
163 -
164 - using (FileStream stream = File.Create(path))
165 - using (FileStructure fs = FileStructure.Create(stream, FileFormat.Wixout, null))
166 - using (XmlWriter writer = XmlWriter.Create(fs.GetDataStream()))
167 - {
168 - writer.WriteStartDocument();
169 - this.Write(writer);
170 - writer.WriteEndDocument();
171 - }
172 - }
173 -
174 - /// <summary>
175 - /// Processes an XmlReader and builds up the output object.
176 - /// </summary>
177 - /// <param name="reader">Reader to get data from.</param>
178 - /// <param name="suppressVersionCheck">Suppresses wix.dll version mismatch check.</param>
179 - /// <returns>The Output represented by the Xml.</returns>
180 - internal static Output Read(XmlReader reader, bool suppressVersionCheck)
181 - {
182 - if (!reader.LocalName.Equals("wixOutput"))
183 - {
184 - throw new XmlException();
185 - }
186 -
187 - bool empty = reader.IsEmptyElement;
188 - Output output = new Output(SourceLineNumber.CreateFromUri(reader.BaseURI));
189 - Version version = null;
190 -
191 - while (reader.MoveToNextAttribute())
192 - {
193 - switch (reader.LocalName)
194 - {
195 - case "codepage":
196 - output.Codepage = Convert.ToInt32(reader.Value, CultureInfo.InvariantCulture.NumberFormat);
197 - break;
198 - case "type":
199 - switch (reader.Value)
200 - {
201 - case "Bundle":
202 - output.Type = OutputType.Bundle;
203 - break;
204 - case "Module":
205 - output.Type = OutputType.Module;
206 - break;
207 - case "Patch":
208 - output.Type = OutputType.Patch;
209 - break;
210 - case "PatchCreation":
211 - output.Type = OutputType.PatchCreation;
212 - break;
213 - case "Product":
214 - output.Type = OutputType.Product;
215 - break;
216 - case "Transform":
217 - output.Type = OutputType.Transform;
218 - break;
219 - default:
220 - throw new XmlException();
221 - }
222 - break;
223 - case "version":
224 - version = new Version(reader.Value);
225 - break;
226 - }
227 - }
228 -
229 - if (!suppressVersionCheck && null != version && !Output.CurrentVersion.Equals(version))
230 - {
231 - throw new WixException(WixDataErrors.VersionMismatch(SourceLineNumber.CreateFromUri(reader.BaseURI), "wixOutput", version.ToString(), Output.CurrentVersion.ToString()));
232 - }
233 -
234 - // loop through the rest of the xml building up the Output object
235 - TableDefinitionCollection tableDefinitions = null;
236 - List<Table> tables = new List<Table>();
237 - if (!empty)
238 - {
239 - bool done = false;
240 -
241 - // loop through all the fields in a row
242 - while (!done && reader.Read())
243 - {
244 - switch (reader.NodeType)
245 - {
246 - case XmlNodeType.Element:
247 - switch (reader.LocalName)
248 - {
249 - case "subStorage":
250 - output.SubStorages.Add(SubStorage.Read(reader));
251 - break;
252 - case "table":
253 - if (null == tableDefinitions)
254 - {
255 - throw new XmlException();
256 - }
257 - tables.Add(Table.Read(reader, tableDefinitions));
258 - break;
259 - case "tableDefinitions":
260 - tableDefinitions = TableDefinitionCollection.Read(reader);
261 - break;
262 - default:
263 - throw new XmlException();
264 - }
265 - break;
266 - case XmlNodeType.EndElement:
267 - done = true;
268 - break;
269 - }
270 - }
271 -
272 - if (!done)
273 - {
274 - throw new XmlException();
275 - }
276 - }
277 -
278 - output.Tables = new TableIndexedCollection(tables);
279 - return output;
280 - }
281 -
282 - /// <summary>
283 - /// Ensure this output contains a particular table.
284 - /// </summary>
285 - /// <param name="tableDefinition">Definition of the table that should exist.</param>
286 - /// <param name="section">Optional section to use for the table. If one is not provided, the entry section will be used.</param>
287 - /// <returns>The table in this output.</returns>
288 - public Table EnsureTable(TableDefinition tableDefinition)
289 - {
290 - if (!this.Tables.TryGetTable(tableDefinition.Name, out Table table))
291 - {
292 - table = new Table(tableDefinition);
293 - this.Tables.Add(table);
294 - }
295 -
296 - return table;
297 - }
298 -
299 - /// <summary>
300 - /// Persists an output in an XML format.
301 - /// </summary>
302 - /// <param name="writer">XmlWriter where the Output should persist itself as XML.</param>
303 - internal void Write(XmlWriter writer)
304 - {
305 - writer.WriteStartElement("wixOutput", XmlNamespaceUri);
306 -
307 - writer.WriteAttributeString("type", this.Type.ToString());
308 -
309 - if (0 != this.Codepage)
310 - {
311 - writer.WriteAttributeString("codepage", this.Codepage.ToString(CultureInfo.InvariantCulture));
312 - }
313 -
314 - writer.WriteAttributeString("version", Output.CurrentVersion.ToString());
315 -
316 - // Collect all the table definitions and write them.
317 - TableDefinitionCollection tableDefinitions = new TableDefinitionCollection();
318 - foreach (Table table in this.Tables)
319 - {
320 - tableDefinitions.Add(table.Definition);
321 - }
322 - tableDefinitions.Write(writer);
323 -
324 - foreach (Table table in this.Tables.OrderBy(t => t.Name))
325 - {
326 - table.Write(writer);
327 - }
328 -
329 - foreach (SubStorage subStorage in this.SubStorages)
330 - {
331 - subStorage.Write(writer);
332 - }
333 -
334 - writer.WriteEndElement();
335 - }
336 - }
337 -}
src/WixToolset.Data.WindowsInstaller/Pdb.cs deleted
-163
@@ -1,163 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.Data
4 -{
5 - using System;
6 - using System.IO;
7 - using System.Xml;
8 -
9 - /// <summary>
10 - /// Pdb generated by the binder.
11 - /// </summary>
12 - public sealed class Pdb
13 - {
14 - public const string XmlNamespaceUri = "http://wixtoolset.org/schemas/v4/wixpdb";
15 - private static readonly Version CurrentVersion = new Version("4.0.0.0");
16 -
17 - /// <summary>
18 - /// Creates a new empty pdb object.
19 - /// </summary>
20 - /// <param name="sourceLineNumbers">The source line information for the pdb.</param>
21 - public Pdb()
22 - {
23 - }
24 -
25 - /// <summary>
26 - /// Gets or sets the output that is a part of this pdb.
27 - /// </summary>
28 - /// <value>Type of the output.</value>
29 - public Output Output { get; set; }
30 -
31 - /// <summary>
32 - /// Loads a pdb from a path on disk.
33 - /// </summary>
34 - /// <param name="path">Path to pdb file saved on disk.</param>
35 - /// <param name="suppressVersionCheck">Suppresses wix.dll version mismatch check.</param>
36 - /// <returns>Pdb pdb.</returns>
37 - public static Pdb Load(string path, bool suppressVersionCheck)
38 - {
39 - using (FileStream stream = File.OpenRead(path))
40 - using (FileStructure fs = FileStructure.Read(stream))
41 - {
42 - if (FileFormat.Wixpdb != fs.FileFormat)
43 - {
44 - throw new WixUnexpectedFileFormatException(path, FileFormat.Wixpdb, fs.FileFormat);
45 - }
46 -
47 - Uri uri = new Uri(Path.GetFullPath(path));
48 - using (XmlReader reader = XmlReader.Create(fs.GetDataStream(), null, uri.AbsoluteUri))
49 - {
50 - try
51 - {
52 - reader.MoveToContent();
53 - return Pdb.Read(reader, suppressVersionCheck);
54 - }
55 - catch (XmlException xe)
56 - {
57 - throw new WixCorruptFileException(path, fs.FileFormat, xe);
58 - }
59 - }
60 - }
61 - }
62 -
63 - /// <summary>
64 - /// Saves a pdb to a path on disk.
65 - /// </summary>
66 - /// <param name="path">Path to save pdb file to on disk.</param>
67 - public void Save(string path)
68 - {
69 - Directory.CreateDirectory(Path.GetDirectoryName(Path.GetFullPath(path)));
70 -
71 - using (FileStream stream = File.Create(path))
72 - using (FileStructure fs = FileStructure.Create(stream, FileFormat.Wixpdb, null))
73 - using (XmlWriter writer = XmlWriter.Create(fs.GetDataStream()))
74 - {
75 - writer.WriteStartDocument();
76 - this.Write(writer);
77 - writer.WriteEndDocument();
78 - }
79 - }
80 -
81 - /// <summary>
82 - /// Processes an XmlReader and builds up the pdb object.
83 - /// </summary>
84 - /// <param name="reader">Reader to get data from.</param>
85 - /// <param name="suppressVersionCheck">Suppresses wix.dll version mismatch check.</param>
86 - /// <returns>The Pdb represented by the Xml.</returns>
87 - internal static Pdb Read(XmlReader reader, bool suppressVersionCheck)
88 - {
89 - if ("wixPdb" != reader.LocalName)
90 - {
91 - throw new XmlException();
92 - }
93 -
94 - bool empty = reader.IsEmptyElement;
95 - Pdb pdb = new Pdb();
96 - Version version = null;
97 -
98 - while (reader.MoveToNextAttribute())
99 - {
100 - switch (reader.LocalName)
101 - {
102 - case "version":
103 - version = new Version(reader.Value);
104 - break;
105 - }
106 - }
107 -
108 - if (!suppressVersionCheck && null != version && !Pdb.CurrentVersion.Equals(version))
109 - {
110 - throw new WixException(WixDataErrors.VersionMismatch(SourceLineNumber.CreateFromUri(reader.BaseURI), "wixPdb", version.ToString(), Pdb.CurrentVersion.ToString()));
111 - }
112 -
113 - // loop through the rest of the pdb building up the Output object
114 - if (!empty)
115 - {
116 - bool done = false;
117 -
118 - // loop through all the fields in a row
119 - while (!done && reader.Read())
120 - {
121 - switch (reader.NodeType)
122 - {
123 - case XmlNodeType.Element:
124 - switch (reader.LocalName)
125 - {
126 - case "wixOutput":
127 - pdb.Output = Output.Read(reader, suppressVersionCheck);
128 - break;
129 - default:
130 - throw new XmlException();
131 - }
132 - break;
133 - case XmlNodeType.EndElement:
134 - done = true;
135 - break;
136 - }
137 - }
138 -
139 - if (!done)
140 - {
141 - throw new XmlException();
142 - }
143 - }
144 -
145 - return pdb;
146 - }
147 -
148 - /// <summary>
149 - /// Persists a pdb in an XML format.
150 - /// </summary>
151 - /// <param name="writer">XmlWriter where the Pdb should persist itself as XML.</param>
152 - internal void Write(XmlWriter writer)
153 - {
154 - writer.WriteStartElement("wixPdb", XmlNamespaceUri);
155 -
156 - writer.WriteAttributeString("version", Pdb.CurrentVersion.ToString());
157 -
158 - this.Output.Write(writer);
159 -
160 - writer.WriteEndElement();
161 - }
162 - }
163 -}
src/WixToolset.Data.WindowsInstaller/Row.cs deleted
-620
@@ -1,620 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.Data
4 -{
5 - using System;
6 - using System.Collections.Generic;
7 - using System.Diagnostics;
8 - using System.Diagnostics.CodeAnalysis;
9 - using System.Globalization;
10 - using System.Text;
11 - using System.Text.RegularExpressions;
12 - using System.Xml;
13 -
14 - /// <summary>
15 - /// Row containing data for a table.
16 - /// </summary>
17 - public class Row
18 - {
19 - private static long rowCount;
20 -
21 - private Field[] fields;
22 -
23 - /// <summary>
24 - /// Creates a 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 row belongs to and should get its column definitions from.</param>
28 - /// <remarks>The compiler should use this constructor exclusively.</remarks>
29 - public Row(SourceLineNumber sourceLineNumbers, Table table)
30 - : this(sourceLineNumbers, table.Definition)
31 - {
32 - this.Table = table;
33 - }
34 -
35 - /// <summary>
36 - /// Creates a row that does not belong to a table.
37 - /// </summary>
38 - /// <param name="sourceLineNumbers">Original source lines for this row.</param>
39 - /// <param name="tableDefinition">TableDefinition this row should get its column definitions from.</param>
40 - /// <remarks>This constructor is used in cases where there isn't a clear owner of the row. The linker uses this constructor for the rows it generates.</remarks>
41 - public Row(SourceLineNumber sourceLineNumbers, TableDefinition tableDefinition)
42 - {
43 - this.Number = rowCount++;
44 - this.SourceLineNumbers = sourceLineNumbers;
45 - this.fields = new Field[tableDefinition.Columns.Count];
46 - this.TableDefinition = tableDefinition;
47 -
48 - for (int i = 0; i < this.fields.Length; ++i)
49 - {
50 - this.fields[i] = Field.Create(this.TableDefinition.Columns[i]);
51 - }
52 - }
53 -
54 - /// <summary>
55 - /// Creates a shallow copy of a row from another row.
56 - /// </summary>
57 - /// <param name="source">The row the data is copied from.</param>
58 - protected Row(Row source)
59 - {
60 - this.Table = source.Table;
61 - this.TableDefinition = source.TableDefinition;
62 - this.Number = source.Number;
63 - this.Access = source.Access;
64 - this.Operation = source.Operation;
65 - this.Redundant = source.Redundant;
66 - this.SectionId = source.SectionId;
67 - this.SourceLineNumbers = source.SourceLineNumbers;
68 - this.fields = source.fields;
69 - }
70 -
71 - /// <summary>
72 - /// Gets or sets the access to the row's primary key.
73 - /// </summary>
74 - /// <value>The row access modifier.</value>
75 - public AccessModifier Access { get; set; }
76 -
77 - /// <summary>
78 - /// Gets or sets the row transform operation.
79 - /// </summary>
80 - /// <value>The row transform operation.</value>
81 - public RowOperation Operation { get; set; }
82 -
83 - /// <summary>
84 - /// Gets or sets wether the row is a duplicate of another row thus redundant.
85 - /// </summary>
86 - public bool Redundant { get; set; }
87 -
88 - /// <summary>
89 - /// Gets or sets the SectionId property on the row.
90 - /// </summary>
91 - /// <value>The SectionId property on the row.</value>
92 - public string SectionId { get; set; }
93 -
94 - /// <summary>
95 - /// Gets the source file and line number for the row.
96 - /// </summary>
97 - /// <value>Source file and line number.</value>
98 - public SourceLineNumber SourceLineNumbers { get; private set; }
99 -
100 - /// <summary>
101 - /// Gets the table this row belongs to.
102 - /// </summary>
103 - /// <value>null if Row does not belong to a Table, or owner Table otherwise.</value>
104 - public Table Table { get; private set; }
105 -
106 - /// <summary>
107 - /// Gets the table definition for this row.
108 - /// </summary>
109 - /// <remarks>A Row always has a TableDefinition, even if the Row does not belong to a Table.</remarks>
110 - /// <value>TableDefinition for Row.</value>
111 - public TableDefinition TableDefinition { get; private set; }
112 -
113 - /// <summary>
114 - /// Gets the fields contained by this row.
115 - /// </summary>
116 - /// <value>Array of field objects</value>
117 - [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1819:PropertiesShouldNotReturnArrays")]
118 - public Field[] Fields
119 - {
120 - get { return this.fields; }
121 - }
122 -
123 - /// <summary>
124 - /// Gets the unique number for the row.
125 - /// </summary>
126 - /// <value>Number for row.</value>
127 - public long Number { get; private set; }
128 -
129 - /// <summary>
130 - /// Gets or sets the value of a particular field in the row.
131 - /// </summary>
132 - /// <param name="field">field index.</param>
133 - /// <value>Value of a field in the row.</value>
134 - public object this[int field]
135 - {
136 - get { return this.fields[field].Data; }
137 - set { this.fields[field].Data = value; }
138 - }
139 -
140 - /// <summary>
141 - /// Gets the field as an integer.
142 - /// </summary>
143 - /// <returns>Field's data as an integer.</returns>
144 - public int FieldAsInteger(int field)
145 - {
146 - return this.fields[field].AsInteger();
147 - }
148 -
149 - /// <summary>
150 - /// Gets the field as an integer that could be null.
151 - /// </summary>
152 - /// <returns>Field's data as an integer that could be null.</returns>
153 - public int? FieldAsNullableInteger(int field)
154 - {
155 - return this.fields[field].AsNullableInteger();
156 - }
157 -
158 - /// <summary>
159 - /// Gets the field as a string.
160 - /// </summary>
161 - /// <returns>Field's data as a string.</returns>
162 - public string FieldAsString(int field)
163 - {
164 - return this.fields[field].AsString();
165 - }
166 -
167 - /// <summary>
168 - /// Sets the value of a particular field in the row without validating.
169 - /// </summary>
170 - /// <param name="field">field index.</param>
171 - /// <param name="value">Value of a field in the row.</param>
172 - /// <returns>True if successful, false if validation failed.</returns>
173 - public bool BestEffortSetField(int field, object value)
174 - {
175 - return this.fields[field].BestEffortSet(value);
176 - }
177 -
178 - /// <summary>
179 - /// Get the value used to represent the row in a keyed row collection.
180 - /// </summary>
181 - /// <returns>Primary key or row number if no primary key is available.</returns>
182 - public string GetKey()
183 - {
184 - return this.GetPrimaryKey() ?? Convert.ToString(this.Number, CultureInfo.InvariantCulture);
185 - }
186 -
187 - /// <summary>
188 - /// Get the primary key of this row.
189 - /// </summary>
190 - /// <param name="delimiter">Delimiter character for multiple column primary keys.</param>
191 - /// <returns>The primary key or null if the row's table has no primary key columns.</returns>
192 - public string GetPrimaryKey(char delimiter = '/')
193 - {
194 - return this.GetPrimaryKey(delimiter, String.Empty);
195 - }
196 -
197 - /// <summary>
198 - /// Get the primary key of this row.
199 - /// </summary>
200 - /// <param name="delimiter">Delimiter character for multiple column primary keys.</param>
201 - /// <param name="nullReplacement">String to represent null values in the primary key.</param>
202 - /// <returns>The primary key or null if the row's table has no primary key columns.</returns>
203 - public string GetPrimaryKey(char delimiter, string nullReplacement)
204 - {
205 - bool foundPrimaryKey = false;
206 - StringBuilder primaryKey = new StringBuilder();
207 -
208 - foreach (Field field in this.fields)
209 - {
210 - if (field.Column.PrimaryKey)
211 - {
212 - if (foundPrimaryKey)
213 - {
214 - primaryKey.Append(delimiter);
215 - }
216 -
217 - primaryKey.Append((null == field.Data) ? nullReplacement : Convert.ToString(field.Data, CultureInfo.InvariantCulture));
218 -
219 - foundPrimaryKey = true;
220 - }
221 - else // primary keys must be the first columns of a row so the first non-primary key means we can stop looking.
222 - {
223 - break;
224 - }
225 - }
226 -
227 - return foundPrimaryKey ? primaryKey.ToString() : null;
228 - }
229 -
230 - /// <summary>
231 - /// Returns true if the specified field is null or an empty string.
232 - /// </summary>
233 - /// <param name="field">Index of the field to check.</param>
234 - /// <returns>true if the specified field is null or an empty string, false otherwise.</returns>
235 - public bool IsColumnEmpty(int field)
236 - {
237 - if (null == this.fields[field].Data)
238 - {
239 - return true;
240 - }
241 -
242 - string dataString = this.fields[field].Data as string;
243 - if (null != dataString && 0 == dataString.Length)
244 - {
245 - return true;
246 - }
247 -
248 - return false;
249 - }
250 -
251 - /// <summary>
252 - /// Tests if the passed in row is identical.
253 - /// </summary>
254 - /// <param name="row">Row to compare against.</param>
255 - /// <returns>True if two rows are identical.</returns>
256 - public bool IsIdentical(Row row)
257 - {
258 - bool identical = (this.TableDefinition.Name == row.TableDefinition.Name && this.fields.Length == row.fields.Length);
259 -
260 - for (int i = 0; identical && i < this.fields.Length; ++i)
261 - {
262 - if (!(this.fields[i].IsIdentical(row.fields[i])))
263 - {
264 - identical = false;
265 - }
266 - }
267 -
268 - return identical;
269 - }
270 -
271 - /// <summary>
272 - /// Returns a string representation of the Row.
273 - /// </summary>
274 - /// <returns>A string representation of the Row.</returns>
275 - public override string ToString()
276 - {
277 - return String.Join("/", (object[])this.fields);
278 - }
279 -
280 - /// <summary>
281 - /// Creates a Row from the XmlReader.
282 - /// </summary>
283 - /// <param name="reader">Reader to get data from.</param>
284 - /// <param name="table">Table for this row.</param>
285 - /// <returns>New row object.</returns>
286 - internal static Row Read(XmlReader reader, Table table)
287 - {
288 - Debug.Assert("row" == reader.LocalName);
289 -
290 - bool empty = reader.IsEmptyElement;
291 - AccessModifier access = AccessModifier.Public;
292 - RowOperation operation = RowOperation.None;
293 - bool redundant = false;
294 - string sectionId = null;
295 - SourceLineNumber sourceLineNumbers = null;
296 -
297 - while (reader.MoveToNextAttribute())
298 - {
299 - switch (reader.LocalName)
300 - {
301 - case "access":
302 - access = (AccessModifier)Enum.Parse(typeof(AccessModifier), reader.Value, true);
303 - break;
304 - case "op":
305 - operation = (RowOperation)Enum.Parse(typeof(RowOperation), reader.Value, true);
306 - break;
307 - case "redundant":
308 - redundant = reader.Value.Equals("yes");
309 - break;
310 - case "sectionId":
311 - sectionId = reader.Value;
312 - break;
313 - case "sourceLineNumber":
314 - sourceLineNumbers = SourceLineNumber.CreateFromEncoded(reader.Value);
315 - break;
316 - }
317 - }
318 -
319 - Row row = table.CreateRow(sourceLineNumbers);
320 - row.Access = access;
321 - row.Operation = operation;
322 - row.Redundant = redundant;
323 - row.SectionId = sectionId;
324 -
325 - // loop through all the fields in a row
326 - if (!empty)
327 - {
328 - bool done = false;
329 - int field = 0;
330 -
331 - // loop through all the fields in a row
332 - while (!done && reader.Read())
333 - {
334 - switch (reader.NodeType)
335 - {
336 - case XmlNodeType.Element:
337 - switch (reader.LocalName)
338 - {
339 - case "field":
340 - if (row.Fields.Length <= field)
341 - {
342 - if (!reader.IsEmptyElement)
343 - {
344 - throw new XmlException();
345 - }
346 - }
347 - else
348 - {
349 - row.fields[field].Read(reader);
350 - }
351 - ++field;
352 - break;
353 - default:
354 - throw new XmlException();
355 - }
356 - break;
357 - case XmlNodeType.EndElement:
358 - done = true;
359 - break;
360 - }
361 - }
362 -
363 - if (!done)
364 - {
365 - throw new XmlException();
366 - }
367 - }
368 -
369 - return row;
370 - }
371 -
372 - /// <summary>
373 - /// Returns the row in a format usable in IDT files.
374 - /// </summary>
375 - /// <param name="keepAddedColumns">Whether to keep columns added in a transform.</param>
376 - /// <returns>String with tab delimited field values.</returns>
377 - internal string ToIdtDefinition(bool keepAddedColumns)
378 - {
379 - bool first = true;
380 - StringBuilder sb = new StringBuilder();
381 -
382 - foreach (Field field in this.fields)
383 - {
384 - // Conditionally keep columns added in a transform; otherwise,
385 - // break because columns can only be added at the end.
386 - if (field.Column.Added && !keepAddedColumns)
387 - {
388 - break;
389 - }
390 -
391 - if (first)
392 - {
393 - first = false;
394 - }
395 - else
396 - {
397 - sb.Append('\t');
398 - }
399 -
400 - sb.Append(field.ToIdtValue());
401 - }
402 - sb.Append("\r\n");
403 -
404 - return sb.ToString();
405 - }
406 -
407 - /// <summary>
408 - /// Gets the modularized version of the field data.
409 - /// </summary>
410 - /// <param name="field">The field to modularize.</param>
411 - /// <param name="modularizationGuid">String containing the GUID of the Merge Module to append the the field value, if appropriate.</param>
412 - /// <param name="suppressModularizationIdentifiers">Optional collection of identifiers that should not be modularized.</param>
413 - /// <remarks>moduleGuid is expected to be null when not being used to compile a Merge Module.</remarks>
414 - /// <returns>The modularized version of the field data.</returns>
415 - internal string GetModularizedValue(Field field, string modularizationGuid, ISet<string> suppressModularizationIdentifiers)
416 - {
417 - Debug.Assert(null != field.Data && 0 < ((string)field.Data).Length);
418 - string fieldData = Convert.ToString(field.Data, CultureInfo.InvariantCulture);
419 -
420 - if (null != modularizationGuid && ColumnModularizeType.None != field.Column.ModularizeType && !(WindowsInstallerStandard.IsStandardAction(fieldData) || WindowsInstallerStandard.IsStandardProperty(fieldData)))
421 - {
422 - StringBuilder sb;
423 - int start;
424 - ColumnModularizeType modularizeType = field.Column.ModularizeType;
425 -
426 - // special logic for the ControlEvent table's Argument column
427 - // this column requires different modularization methods depending upon the value of the Event column
428 - if (ColumnModularizeType.ControlEventArgument == field.Column.ModularizeType)
429 - {
430 - switch (this[2].ToString())
431 - {
432 - case "CheckExistingTargetPath": // redirectable property name
433 - case "CheckTargetPath":
434 - case "DoAction": // custom action name
435 - case "NewDialog": // dialog name
436 - case "SelectionBrowse":
437 - case "SetTargetPath":
438 - case "SpawnDialog":
439 - case "SpawnWaitDialog":
440 - if (Common.IsIdentifier(fieldData))
441 - {
442 - modularizeType = ColumnModularizeType.Column;
443 - }
444 - else
445 - {
446 - modularizeType = ColumnModularizeType.Property;
447 - }
448 - break;
449 - default: // formatted
450 - modularizeType = ColumnModularizeType.Property;
451 - break;
452 - }
453 - }
454 - else if (ColumnModularizeType.ControlText == field.Column.ModularizeType)
455 - {
456 - // icons are stored in the Binary table, so they get column-type modularization
457 - if (("Bitmap" == this[2].ToString() || "Icon" == this[2].ToString()) && Common.IsIdentifier(fieldData))
458 - {
459 - modularizeType = ColumnModularizeType.Column;
460 - }
461 - else
462 - {
463 - modularizeType = ColumnModularizeType.Property;
464 - }
465 - }
466 -
467 - switch (modularizeType)
468 - {
469 - case ColumnModularizeType.Column:
470 - // ensure the value is an identifier (otherwise it shouldn't be modularized this way)
471 - if (!Common.IsIdentifier(fieldData))
472 - {
473 - throw new InvalidOperationException(String.Format(CultureInfo.CurrentUICulture, WixDataStrings.EXP_CannotModularizeIllegalID, fieldData));
474 - }
475 -
476 - // if we're not supposed to suppress modularization of this identifier
477 - if (null == suppressModularizationIdentifiers || !suppressModularizationIdentifiers.Contains(fieldData))
478 - {
479 - fieldData = String.Concat(fieldData, ".", modularizationGuid);
480 - }
481 - break;
482 -
483 - case ColumnModularizeType.Property:
484 - case ColumnModularizeType.Condition:
485 - Regex regex;
486 - if (ColumnModularizeType.Property == modularizeType)
487 - {
488 - regex = new Regex(@"\[(?<identifier>[#$!]?[a-zA-Z_][a-zA-Z0-9_\.]*)]", RegexOptions.Singleline | RegexOptions.ExplicitCapture);
489 - }
490 - else
491 - {
492 - Debug.Assert(ColumnModularizeType.Condition == modularizeType);
493 -
494 - // This heinous looking regular expression is actually quite an elegant way
495 - // to shred the entire condition into the identifiers that need to be
496 - // modularized. Let's break it down piece by piece:
497 - //
498 - // 1. Look for the operators: NOT, EQV, XOR, OR, AND, IMP (plus a space). Note that the
499 - // regular expression is case insensitive so we don't have to worry about
500 - // all the permutations of these strings.
501 - // 2. Look for quoted strings. Quoted strings are just text and are ignored
502 - // outright.
503 - // 3. Look for environment variables. These look like identifiers we might
504 - // otherwise be interested in but start with a percent sign. Like quoted
505 - // strings these enviroment variable references are ignored outright.
506 - // 4. Match all identifiers that are things that need to be modularized. Note
507 - // the special characters (!, $, ?, &) that denote Component and Feature states.
508 - regex = new Regex(@"NOT\s|EQV\s|XOR\s|OR\s|AND\s|IMP\s|"".*?""|%[a-zA-Z_][a-zA-Z0-9_\.]*|(?<identifier>[!$\?&]?[a-zA-Z_][a-zA-Z0-9_\.]*)", RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);
509 -
510 - // less performant version of the above with captures showing where everything lives
511 - // regex = new Regex(@"(?<operator>NOT|EQV|XOR|OR|AND|IMP)|(?<string>"".*?"")|(?<environment>%[a-zA-Z_][a-zA-Z0-9_\.]*)|(?<identifier>[!$\?&]?[a-zA-Z_][a-zA-Z0-9_\.]*)",RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);
512 - }
513 -
514 - MatchCollection matches = regex.Matches(fieldData);
515 -
516 - sb = new StringBuilder(fieldData);
517 -
518 - // notice how this code walks backward through the list
519 - // because it modifies the string as we through it
520 - for (int i = matches.Count - 1; 0 <= i; i--)
521 - {
522 - Group group = matches[i].Groups["identifier"];
523 - if (group.Success)
524 - {
525 - string identifier = group.Value;
526 - if (!WindowsInstallerStandard.IsStandardProperty(identifier) && (null == suppressModularizationIdentifiers || !suppressModularizationIdentifiers.Contains(identifier)))
527 - {
528 - sb.Insert(group.Index + group.Length, '.');
529 - sb.Insert(group.Index + group.Length + 1, modularizationGuid);
530 - }
531 - }
532 - }
533 -
534 - fieldData = sb.ToString();
535 - break;
536 -
537 - case ColumnModularizeType.CompanionFile:
538 - // if we're not supposed to ignore this identifier and the value does not start with
539 - // a digit, we must have a companion file so modularize it
540 - if ((null == suppressModularizationIdentifiers || !suppressModularizationIdentifiers.Contains(fieldData)) &&
541 - 0 < fieldData.Length && !Char.IsDigit(fieldData, 0))
542 - {
543 - fieldData = String.Concat(fieldData, ".", modularizationGuid);
544 - }
545 - break;
546 -
547 - case ColumnModularizeType.Icon:
548 - if (null == suppressModularizationIdentifiers || !suppressModularizationIdentifiers.Contains(fieldData))
549 - {
550 - start = fieldData.LastIndexOf(".", StringComparison.Ordinal);
551 - if (-1 == start)
552 - {
553 - fieldData = String.Concat(fieldData, ".", modularizationGuid);
554 - }
555 - else
556 - {
557 - fieldData = String.Concat(fieldData.Substring(0, start), ".", modularizationGuid, fieldData.Substring(start));
558 - }
559 - }
560 - break;
561 -
562 - case ColumnModularizeType.SemicolonDelimited:
563 - string[] keys = fieldData.Split(';');
564 - for (int i = 0; i < keys.Length; ++i)
565 - {
566 - keys[i] = String.Concat(keys[i], ".", modularizationGuid);
567 - }
568 - fieldData = String.Join(";", keys);
569 - break;
570 - }
571 - }
572 -
573 - return fieldData;
574 - }
575 -
576 - /// <summary>
577 - /// Persists a row in an XML format.
578 - /// </summary>
579 - /// <param name="writer">XmlWriter where the Row should persist itself as XML.</param>
580 - [SuppressMessage("Microsoft.Globalization", "CA1308:NormalizeStringsToUppercase", Justification = "Changing the way this string normalizes would result " +
581 - "in a change to the way intermediate files are generated, potentially causing extra churn in patches on an MSI built from an older version of WiX. " +
582 - "Furthermore, there is no security hole here, as the strings won't need to make a round trip")]
583 - internal void Write(XmlWriter writer)
584 - {
585 - writer.WriteStartElement("row", Intermediate.XmlNamespaceUri);
586 -
587 - if (AccessModifier.Public != this.Access)
588 - {
589 - writer.WriteAttributeString("access", this.Access.ToString().ToLowerInvariant());
590 - }
591 -
592 - if (RowOperation.None != this.Operation)
593 - {
594 - writer.WriteAttributeString("op", this.Operation.ToString().ToLowerInvariant());
595 - }
596 -
597 - if (this.Redundant)
598 - {
599 - writer.WriteAttributeString("redundant", "yes");
600 - }
601 -
602 - if (null != this.SectionId)
603 - {
604 - writer.WriteAttributeString("sectionId", this.SectionId);
605 - }
606 -
607 - if (null != this.SourceLineNumbers)
608 - {
609 - writer.WriteAttributeString("sourceLineNumber", this.SourceLineNumbers.GetEncoded());
610 - }
611 -
612 - for (int i = 0; i < this.fields.Length; ++i)
613 - {
614 - this.fields[i].Write(writer);
615 - }
616 -
617 - writer.WriteEndElement();
618 - }
619 - }
620 -}
src/WixToolset.Data.WindowsInstaller/RowOperation.cs deleted
-30
@@ -1,30 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.Data
4 -{
5 - /// <summary>
6 - /// The row transform operations.
7 - /// </summary>
8 - public enum RowOperation
9 - {
10 - /// <summary>
11 - /// No operation.
12 - /// </summary>
13 - None,
14 -
15 - /// <summary>
16 - /// Added row.
17 - /// </summary>
18 - Add,
19 -
20 - /// <summary>
21 - /// Deleted row.
22 - /// </summary>
23 - Delete,
24 -
25 - /// <summary>
26 - /// Modified row.
27 - /// </summary>
28 - Modify
29 - }
30 -}
src/WixToolset.Data.WindowsInstaller/Rows/BBControlRow.cs deleted
-113
@@ -1,113 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/ComponentRow.cs deleted
-245
@@ -1,245 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/ContainerType.cs deleted
-13
@@ -1,13 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.Data.Rows
4 -{
5 - /// <summary>
6 - /// Types of bundle packages.
7 - /// </summary>
8 - public enum ContainerType
9 - {
10 - Attached,
11 - Detached,
12 - }
13 -}
src/WixToolset.Data.WindowsInstaller/Rows/ControlRow.cs deleted
-143
@@ -1,143 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/FileRow.cs deleted
-640
@@ -1,640 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/MediaRow.cs deleted
-80
@@ -1,80 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/PropertyRow.cs deleted
-42
@@ -1,42 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/SummaryInfoRowCollection.cs deleted
-42
@@ -1,42 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/UpgradeRow.cs deleted
-90
@@ -1,90 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixActionRow.cs deleted
-378
@@ -1,378 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 - using WixToolset.Data.Tuples;
12 -
13 - /// <summary>
14 - /// The Sequence tables that actions may belong to.
15 - /// </summary>
16 - //public enum SequenceTable
17 - //{
18 - // /// <summary>AdminUISequence</summary>
19 - // AdminUISequence,
20 -
21 - // /// <summary>AdminExecuteSequence</summary>
22 - // AdminExecuteSequence,
23 -
24 - // /// <summary>AdvtExecuteSequence</summary>
25 - // AdvtExecuteSequence,
26 -
27 - // /// <summary>InstallUISequence</summary>
28 - // InstallUISequence,
29 -
30 - // /// <summary>InstallExecuteSequence</summary>
31 - // InstallExecuteSequence
32 - //}
33 -
34 - /// <summary>
35 - /// Specialization of a row for the sequence tables.
36 - /// </summary>
37 - public sealed class WixActionRow : Row, IComparable
38 - {
39 - private WixActionRowCollection previousActionRows;
40 - private WixActionRowCollection nextActionRows;
41 -
42 - /// <summary>
43 - /// Instantiates an ActionRow that belongs to a table.
44 - /// </summary>
45 - /// <param name="sourceLineNumbers">Original source lines for this row.</param>
46 - /// <param name="table">Table this Action row belongs to and should get its column definitions from.</param>
47 - public WixActionRow(SourceLineNumber sourceLineNumbers, Table table) :
48 - base(sourceLineNumbers, table)
49 - {
50 - }
51 -
52 - /// <summary>
53 - /// Instantiates a standard ActionRow.
54 - /// </summary>
55 - /// <param name="sequenceTable">The sequence table of the standard action.</param>
56 - /// <param name="action">The name of the standard action.</param>
57 - /// <param name="condition">The condition of the standard action.</param>
58 - /// <param name="sequence">The suggested sequence number of the standard action.</param>
59 - //private WixActionRow(SequenceTable sequenceTable, string action, string condition, int sequence) :
60 - // base(null, WindowsInstallerStandard.GetTableDefinitions()["WixAction"])
61 - //{
62 - // this.SequenceTable = sequenceTable;
63 - // this.Action = action;
64 - // this.Condition = condition;
65 - // this.Sequence = sequence;
66 - // this.Overridable = true; // all standard actions are overridable by default
67 - //}
68 -
69 - /// <summary>
70 - /// Instantiates an ActionRow by copying data from another ActionRow.
71 - /// </summary>
72 - /// <param name="source">The row the data is copied from.</param>
73 - /// <remarks>The previous and next action collections are not copied.</remarks>
74 - private WixActionRow(WixActionRow source)
75 - : base(source)
76 - {
77 - }
78 -
79 - /// <summary>
80 - /// Gets or sets the name of the action.
81 - /// </summary>
82 - /// <value>The name of the action.</value>
83 - public string Action
84 - {
85 - get { return (string)this.Fields[1].Data; }
86 - set { this.Fields[1].Data = value; }
87 - }
88 -
89 - /// <summary>
90 - /// Gets the name of the action this action should be scheduled after.
91 - /// </summary>
92 - /// <value>The name of the action this action should be scheduled after.</value>
93 - public string After
94 - {
95 - get { return (string)this.Fields[5].Data; }
96 - set { this.Fields[5].Data = value; }
97 - }
98 -
99 - /// <summary>
100 - /// Gets the name of the action this action should be scheduled before.
101 - /// </summary>
102 - /// <value>The name of the action this action should be scheduled before.</value>
103 - public string Before
104 - {
105 - get { return (string)this.Fields[4].Data; }
106 - set { this.Fields[4].Data = value; }
107 - }
108 -
109 - /// <summary>
110 - /// Gets or sets the condition of the action.
111 - /// </summary>
112 - /// <value>The condition of the action.</value>
113 - public string Condition
114 - {
115 - get { return (string)this.Fields[2].Data; }
116 - set { this.Fields[2].Data = value; }
117 - }
118 -
119 - /// <summary>
120 - /// Gets or sets whether this action is overridable.
121 - /// </summary>
122 - /// <value>Whether this action is overridable.</value>
123 - public bool Overridable
124 - {
125 - get { return (1 == Convert.ToInt32(this.Fields[6].Data, CultureInfo.InvariantCulture)); }
126 - set { this.Fields[6].Data = (value ? 1 : 0); }
127 - }
128 -
129 - /// <summary>
130 - /// Gets or sets the sequence number of this action.
131 - /// </summary>
132 - /// <value>The sequence number of this action.</value>
133 - public int Sequence
134 - {
135 - get { return Convert.ToInt32(this.Fields[3].Data, CultureInfo.InvariantCulture); }
136 - set { this.Fields[3].Data = value; }
137 - }
138 -
139 - /// <summary>
140 - /// Gets of sets the sequence table of this action.
141 - /// </summary>
142 - /// <value>The sequence table of this action.</value>
143 - public SequenceTable SequenceTable
144 - {
145 - get { return (SequenceTable)Enum.Parse(typeof(SequenceTable), (string)this.Fields[0].Data); }
146 - set { this.Fields[0].Data = value.ToString(); }
147 - }
148 -
149 - /// <summary>
150 - /// Gets the actions that should be scheduled after this action.
151 - /// </summary>
152 - /// <value>The actions that should be scheduled after this action.</value>
153 - public WixActionRowCollection NextActionRows
154 - {
155 - get
156 - {
157 - if (null == this.nextActionRows)
158 - {
159 - this.nextActionRows = new WixActionRowCollection();
160 - }
161 -
162 - return this.nextActionRows;
163 - }
164 - }
165 -
166 - /// <summary>
167 - /// Gets the actions that should be scheduled before this action.
168 - /// </summary>
169 - /// <value>The actions that should be scheduled before this action.</value>
170 - public WixActionRowCollection PreviousActionRows
171 - {
172 - get
173 - {
174 - if (null == this.previousActionRows)
175 - {
176 - this.previousActionRows = new WixActionRowCollection();
177 - }
178 -
179 - return this.previousActionRows;
180 - }
181 - }
182 -
183 - /// <summary>
184 - /// Creates a clone of the action row.
185 - /// </summary>
186 - /// <returns>A shallow copy of the source object.</returns>
187 - /// <remarks>The previous and next action collections are not copied.</remarks>
188 - public WixActionRow Clone()
189 - {
190 - return new WixActionRow(this);
191 - }
192 -
193 - /// <summary>
194 - /// Compares the current instance with another object of the same type.
195 - /// </summary>
196 - /// <param name="obj">Other reference to compare this one to.</param>
197 - /// <returns>Returns less than 0 for less than, 0 for equals, and greater than 0 for greater.</returns>
198 - public int CompareTo(object obj)
199 - {
200 - WixActionRow otherActionRow = (WixActionRow)obj;
201 -
202 - return this.Sequence.CompareTo(otherActionRow.Sequence);
203 - }
204 -
205 - /// <summary>
206 - /// Parses ActionRows from the Xml reader.
207 - /// </summary>
208 - /// <param name="reader">Xml reader that contains serialized ActionRows.</param>
209 - /// <returns>The parsed ActionRows.</returns>
210 - internal static WixActionRow[] Parse(XmlReader reader)
211 - {
212 - Debug.Assert("action" == reader.LocalName);
213 -
214 - string id = null;
215 - string condition = null;
216 - bool empty = reader.IsEmptyElement;
217 - int sequence = int.MinValue;
218 - int sequenceCount = 0;
219 - SequenceTable[] sequenceTables = new SequenceTable[Enum.GetValues(typeof(SequenceTable)).Length];
220 -
221 - while (reader.MoveToNextAttribute())
222 - {
223 - switch (reader.Name)
224 - {
225 - case "name":
226 - id = reader.Value;
227 - break;
228 - case "AdminExecuteSequence":
229 - if (reader.Value.Equals("yes"))
230 - {
231 - sequenceTables[sequenceCount] = SequenceTable.AdminExecuteSequence;
232 - ++sequenceCount;
233 - }
234 - break;
235 - case "AdminUISequence":
236 - if (reader.Value.Equals("yes"))
237 - {
238 - sequenceTables[sequenceCount] = SequenceTable.AdminUISequence;
239 - ++sequenceCount;
240 - }
241 - break;
242 - case "AdvtExecuteSequence":
243 - if (reader.Value.Equals("yes"))
244 - {
245 - sequenceTables[sequenceCount] = SequenceTable.AdvtExecuteSequence;
246 - ++sequenceCount;
247 - }
248 - break;
249 - case "condition":
250 - condition = reader.Value;
251 - break;
252 - case "InstallExecuteSequence":
253 - if (reader.Value.Equals("yes"))
254 - {
255 - sequenceTables[sequenceCount] = SequenceTable.InstallExecuteSequence;
256 - ++sequenceCount;
257 - }
258 - break;
259 - case "InstallUISequence":
260 - if (reader.Value.Equals("yes"))
261 - {
262 - sequenceTables[sequenceCount] = SequenceTable.InstallUISequence;
263 - ++sequenceCount;
264 - }
265 - break;
266 - case "sequence":
267 - sequence = Convert.ToInt32(reader.Value, CultureInfo.InvariantCulture);
268 - break;
269 - }
270 - }
271 -
272 - if (null == id)
273 - {
274 - throw new XmlException();
275 - }
276 -
277 - if (int.MinValue == sequence)
278 - {
279 - throw new XmlException();
280 - }
281 - else if (1 > sequence)
282 - {
283 - throw new XmlException();
284 - }
285 -
286 - if (0 == sequenceCount)
287 - {
288 - throw new XmlException();
289 - }
290 -
291 - if (!empty && reader.Read() && XmlNodeType.EndElement != reader.MoveToContent())
292 - {
293 - throw new XmlException();
294 - }
295 -
296 - // create the actions
297 - WixActionRow[] actionRows = new WixActionRow[sequenceCount];
298 - for (int i = 0; i < sequenceCount; i++)
299 - {
300 - //WixActionRow actionRow = new WixActionRow(sequenceTables[i], id, condition, sequence);
301 - //actionRows[i] = actionRow;
302 - throw new NotImplementedException();
303 - }
304 -
305 - return actionRows;
306 - }
307 -
308 -#if DEAD_CODE
309 - /// <summary>
310 - /// Determines whether this ActionRow contains the specified ActionRow as a child in its dependency tree.
311 - /// </summary>
312 - /// <param name="actionRow">The possible child ActionRow.</param>
313 - /// <returns>true if the ActionRow is a child of this ActionRow; false otherwise.</returns>
314 - public bool ContainsChildActionRow(WixActionRow actionRow)
315 - {
316 - if (null != this.previousActionRows)
317 - {
318 - if (this.previousActionRows.Contains(actionRow.SequenceTable, actionRow.Action))
319 - {
320 - return true;
321 - }
322 - }
323 -
324 - if (null != this.nextActionRows)
325 - {
326 - if (this.nextActionRows.Contains(actionRow.SequenceTable, actionRow.Action))
327 - {
328 - return true;
329 - }
330 - }
331 -
332 - return false;
333 - }
334 -
335 - /// <summary>
336 - /// Get all the actions scheduled before this one in a particular sequence table.
337 - /// </summary>
338 - /// <param name="sequenceTable">The sequence table.</param>
339 - /// <param name="allPreviousActionRows">A RowCollection which will contain all the previous actions.</param>
340 - public void GetAllPreviousActionRows(SequenceTable sequenceTable, IList<WixActionRow> allPreviousActionRows)
341 - {
342 - if (null != this.previousActionRows)
343 - {
344 - foreach (WixActionRow actionRow in this.previousActionRows)
345 - {
346 - if (sequenceTable == actionRow.SequenceTable)
347 - {
348 - actionRow.GetAllPreviousActionRows(sequenceTable, allPreviousActionRows);
349 - allPreviousActionRows.Add(actionRow);
350 - actionRow.GetAllNextActionRows(sequenceTable, allPreviousActionRows);
351 - }
352 - }
353 - }
354 - }
355 -
356 - /// <summary>
357 - /// Get all the actions scheduled after this one in a particular sequence table.
358 - /// </summary>
359 - /// <param name="sequenceTable">The sequence table.</param>
360 - /// <param name="allNextActionRows">A RowCollection which will contain all the next actions.</param>
361 - public void GetAllNextActionRows(SequenceTable sequenceTable, IList<WixActionRow> allNextActionRows)
362 - {
363 - if (null != this.nextActionRows)
364 - {
365 - foreach (WixActionRow actionRow in this.nextActionRows)
366 - {
367 - if (sequenceTable == actionRow.SequenceTable)
368 - {
369 - actionRow.GetAllPreviousActionRows(sequenceTable, allNextActionRows);
370 - allNextActionRows.Add(actionRow);
371 - actionRow.GetAllNextActionRows(sequenceTable, allNextActionRows);
372 - }
373 - }
374 - }
375 - }
376 -#endif
377 - }
378 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixApprovedExeForElevationRow.cs deleted
-79
@@ -1,79 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundleCatalogRow.cs deleted
-50
@@ -1,50 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundleContainerRow.cs deleted
-78
@@ -1,78 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundleExePackageRow.cs deleted
-103
@@ -1,103 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -using WixToolset.Data.Tuples;
4 -
5 -namespace 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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsiFeatureRow.cs deleted
-93
@@ -1,93 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsiPackageRow.cs deleted
-138
@@ -1,138 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsiPropertyRow.cs deleted
-58
@@ -1,58 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMspPackageRow.cs deleted
-101
@@ -1,101 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -using WixToolset.Data.Tuples;
4 -
5 -namespace 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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundleMsuPackageRow.cs deleted
-57
@@ -1,57 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePackageCommandLineRow.cs deleted
-82
@@ -1,82 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePackageExitCodeRow.cs deleted
-53
@@ -1,53 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -using WixToolset.Data.Tuples;
4 -
5 -namespace 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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePackageRow.cs deleted
-228
@@ -1,228 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -using WixToolset.Data.Tuples;
4 -
5 -namespace 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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePatchTargetCodeRow.cs deleted
-81
@@ -1,81 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundlePayloadRow.cs deleted
-185
@@ -1,185 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundleRelatedPackageRow.cs deleted
-87
@@ -1,87 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundleRollbackBoundaryRow.cs deleted
-59
@@ -1,59 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundleRow.cs deleted
-228
@@ -1,228 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundleSlipstreamMspRow.cs deleted
-48
@@ -1,48 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundleUpdateRow.cs deleted
-38
@@ -1,38 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixBundleVariableRow.cs deleted
-80
@@ -1,80 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixChainItemRow.cs deleted
-39
@@ -1,39 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixChainRow.cs deleted
-65
@@ -1,65 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -using WixToolset.Data.Tuples;
4 -
5 -namespace 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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixComplexReferenceRow.cs deleted
-204
@@ -1,204 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixDeltaPatchFileRow.cs deleted
-142
@@ -1,142 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixDeltaPatchSymbolPathsRow.cs deleted
-60
@@ -1,60 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.Data.Rows
4 -{
5 - using WixToolset.Data.Tuples;
6 -
7 - /// <summary>
8 - /// Specialization of a row for the WixDeltaPatchSymbolPaths table.
9 - /// </summary>
10 - public sealed class WixDeltaPatchSymbolPathsRow : Row
11 - {
12 - /// <summary>
13 - /// Creates a WixDeltaPatchSymbolPaths 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 WixDeltaPatchSymbolPathsRow(SourceLineNumber sourceLineNumbers, TableDefinition tableDef) :
18 - base(sourceLineNumbers, tableDef)
19 - {
20 - }
21 -
22 - /// <summary>
23 - /// Creates a WixDeltaPatchSymbolPaths 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 WixDeltaPatchSymbolPathsRow(SourceLineNumber sourceLineNumbers, Table table) :
28 - base(sourceLineNumbers, table)
29 - {
30 - }
31 -
32 - /// <summary>
33 - /// Gets or sets the identifier the symbol paths apply to.
34 - /// </summary>
35 - /// <value>RetainLength list for the file.</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 type of the identifier.
44 - /// </summary>
45 - public SymbolPathType Type
46 - {
47 - get { return (SymbolPathType)this.Fields[1].AsInteger(); }
48 - set { this.Fields[1].Data = value; }
49 - }
50 -
51 - /// <summary>
52 - /// Gets or sets the delta patch symbol paths.
53 - /// </summary>
54 - public string SymbolPaths
55 - {
56 - get { return (string)this.Fields[2].Data; }
57 - set { this.Fields[2].Data = value; }
58 - }
59 - }
60 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixFileRow.cs deleted
-163
@@ -1,163 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -using WixToolset.Data.Tuples;
4 -
5 -namespace 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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixGroupRow.cs deleted
-62
@@ -1,62 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixMediaRow.cs deleted
-60
@@ -1,60 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixMediaTemplateRow.cs deleted
-81
@@ -1,81 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixMergeRow.cs deleted
-149
@@ -1,149 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixPayloadPropertiesRow.cs deleted
-81
@@ -1,81 +0,0 @@
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 -
10 -namespace 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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixPropertyRow.cs deleted
-118
@@ -1,118 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixRelatedBundleRow.cs deleted
-52
@@ -1,52 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixSimpleReferenceRow.cs deleted
-63
@@ -1,63 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/Rows/WixUpdateRegistrationRow.cs deleted
-62
@@ -1,62 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.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 -}
src/WixToolset.Data.WindowsInstaller/SubStorage.cs deleted
-109
@@ -1,109 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.Data
4 -{
5 - using System.Xml;
6 -
7 - /// <summary>
8 - /// Substorage inside an output.
9 - /// </summary>
10 - public sealed class SubStorage
11 - {
12 - /// <summary>
13 - /// Instantiate a new substorage.
14 - /// </summary>
15 - /// <param name="name">The substorage name.</param>
16 - /// <param name="data">The substorage data.</param>
17 - public SubStorage(string name, Output data)
18 - {
19 - this.Name = name;
20 - this.Data = data;
21 - }
22 -
23 - /// <summary>
24 - /// Gets the substorage name.
25 - /// </summary>
26 - /// <value>The substorage name.</value>
27 - public string Name { get; private set; }
28 -
29 - /// <summary>
30 - /// Gets the substorage data.
31 - /// </summary>
32 - /// <value>The substorage data.</value>
33 - public Output Data { get; private set; }
34 -
35 - /// <summary>
36 - /// Creates a SubStorage from the XmlReader.
37 - /// </summary>
38 - /// <param name="reader">Reader to get data from.</param>
39 - /// <returns>New SubStorage object.</returns>
40 - internal static SubStorage Read(XmlReader reader)
41 - {
42 - if (!reader.LocalName.Equals("subStorage" == reader.LocalName))
43 - {
44 - throw new XmlException();
45 - }
46 -
47 - Output data = null;
48 - bool empty = reader.IsEmptyElement;
49 - string name = null;
50 -
51 - while (reader.MoveToNextAttribute())
52 - {
53 - switch (reader.LocalName)
54 - {
55 - case "name":
56 - name = reader.Value;
57 - break;
58 - }
59 - }
60 -
61 - if (!empty)
62 - {
63 - bool done = false;
64 -
65 - while (!done && reader.Read())
66 - {
67 - switch (reader.NodeType)
68 - {
69 - case XmlNodeType.Element:
70 - switch (reader.LocalName)
71 - {
72 - case "wixOutput":
73 - data = Output.Read(reader, true);
74 - break;
75 - default:
76 - throw new XmlException();
77 - }
78 - break;
79 - case XmlNodeType.EndElement:
80 - done = true;
81 - break;
82 - }
83 - }
84 -
85 - if (!done)
86 - {
87 - throw new XmlException();
88 - }
89 - }
90 -
91 - return new SubStorage(name, data);
92 - }
93 -
94 - /// <summary>
95 - /// Persists a SubStorage in an XML format.
96 - /// </summary>
97 - /// <param name="writer">XmlWriter where the SubStorage should persist itself as XML.</param>
98 - internal void Write(XmlWriter writer)
99 - {
100 - writer.WriteStartElement("subStorage", Output.XmlNamespaceUri);
101 -
102 - writer.WriteAttributeString("name", this.Name);
103 -
104 - this.Data.Write(writer);
105 -
106 - writer.WriteEndElement();
107 - }
108 - }
109 -}
src/WixToolset.Data.WindowsInstaller/Table.cs deleted
-435
@@ -1,435 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.Data
4 -{
5 - using System;
6 - using System.Collections.Generic;
7 - using System.Diagnostics;
8 - using System.Diagnostics.CodeAnalysis;
9 - using System.Globalization;
10 - using System.IO;
11 - using System.Text;
12 - using System.Xml;
13 - using WixToolset.Data.Rows;
14 -
15 - /// <summary>
16 - /// Object that represents a table in a database.
17 - /// </summary>
18 - public sealed class Table
19 - {
20 - /// <summary>
21 - /// Creates a table in a section.
22 - /// </summary>
23 - /// <param name="section">Section to add table to.</param>
24 - /// <param name="tableDefinition">Definition of the table.</param>
25 - public Table(TableDefinition tableDefinition)
26 - {
27 - this.Definition = tableDefinition;
28 - this.Rows = new List<Row>();
29 - }
30 -
31 - /// <summary>
32 - /// Gets the table definition.
33 - /// </summary>
34 - /// <value>Definition of the table.</value>
35 - public TableDefinition Definition { get; private set; }
36 -
37 - /// <summary>
38 - /// Gets the name of the table.
39 - /// </summary>
40 - /// <value>Name of the table.</value>
41 - public string Name
42 - {
43 - get { return this.Definition.Name; }
44 - }
45 -
46 - /// <summary>
47 - /// Gets or sets the table transform operation.
48 - /// </summary>
49 - /// <value>The table transform operation.</value>
50 - public TableOperation Operation { get; set; }
51 -
52 - /// <summary>
53 - /// Gets the rows contained in the table.
54 - /// </summary>
55 - /// <value>Rows contained in the table.</value>
56 - public IList<Row> Rows { get; private set; }
57 -
58 - /// <summary>
59 - /// Creates a new row in the table.
60 - /// </summary>
61 - /// <param name="sourceLineNumbers">Original source lines for this row.</param>
62 - /// <param name="add">Specifies whether to only create the row or add it to the table automatically.</param>
63 - /// <returns>Row created in table.</returns>
64 - public Row CreateRow(SourceLineNumber sourceLineNumbers, bool add = true)
65 - {
66 - Row row;
67 -
68 - switch (this.Name)
69 - {
70 - case "BBControl":
71 - row = new BBControlRow(sourceLineNumbers, this);
72 - break;
73 - case "WixBundlePackage":
74 - row = new WixBundlePackageRow(sourceLineNumbers, this);
75 - break;
76 - case "WixBundleExePackage":
77 - row = new WixBundleExePackageRow(sourceLineNumbers, this);
78 - break;
79 - case "WixBundleMsiPackage":
80 - row = new WixBundleMsiPackageRow(sourceLineNumbers, this);
81 - break;
82 - case "WixBundleMspPackage":
83 - row = new WixBundleMspPackageRow(sourceLineNumbers, this);
84 - break;
85 - case "WixBundleMsuPackage":
86 - row = new WixBundleMsuPackageRow(sourceLineNumbers, this);
87 - break;
88 - case "Component":
89 - row = new ComponentRow(sourceLineNumbers, this);
90 - break;
91 - case "WixBundleContainer":
92 - row = new WixBundleContainerRow(sourceLineNumbers, this);
93 - break;
94 - case "Control":
95 - row = new ControlRow(sourceLineNumbers, this);
96 - break;
97 - case "File":
98 - row = new FileRow(sourceLineNumbers, this);
99 - break;
100 - case "WixBundleMsiFeature":
101 - row = new WixBundleMsiFeatureRow(sourceLineNumbers, this);
102 - break;
103 - case "WixBundleMsiProperty":
104 - row = new WixBundleMsiPropertyRow(sourceLineNumbers, this);
105 - break;
106 - case "Media":
107 - row = new MediaRow(sourceLineNumbers, this);
108 - break;
109 - case "WixBundlePayload":
110 - row = new WixBundlePayloadRow(sourceLineNumbers, this);
111 - break;
112 - case "Property":
113 - row = new PropertyRow(sourceLineNumbers, this);
114 - break;
115 - case "WixRelatedBundle":
116 - row = new WixRelatedBundleRow(sourceLineNumbers, this);
117 - break;
118 - case "WixBundleRelatedPackage":
119 - row = new WixBundleRelatedPackageRow(sourceLineNumbers, this);
120 - break;
121 - case "WixBundleRollbackBoundary":
122 - row = new WixBundleRollbackBoundaryRow(sourceLineNumbers, this);
123 - break;
124 - case "Upgrade":
125 - row = new UpgradeRow(sourceLineNumbers, this);
126 - break;
127 - case "WixBundleVariable":
128 - row = new WixBundleVariableRow(sourceLineNumbers, this);
129 - break;
130 - case "WixAction":
131 - row = new WixActionRow(sourceLineNumbers, this);
132 - break;
133 - case "WixApprovedExeForElevation":
134 - row = new WixApprovedExeForElevationRow(sourceLineNumbers, this);
135 - break;
136 - case "WixBundle":
137 - row = new WixBundleRow(sourceLineNumbers, this);
138 - break;
139 - case "WixBundlePackageExitCode":
140 - row = new WixBundlePackageExitCodeRow(sourceLineNumbers, this);
141 - break;
142 - case "WixBundlePatchTargetCode":
143 - row = new WixBundlePatchTargetCodeRow(sourceLineNumbers, this);
144 - break;
145 - case "WixBundleSlipstreamMsp":
146 - row = new WixBundleSlipstreamMspRow(sourceLineNumbers, this);
147 - break;
148 - case "WixBundleUpdate":
149 - row = new WixBundleUpdateRow(sourceLineNumbers, this);
150 - break;
151 - case "WixBundleCatalog":
152 - row = new WixBundleCatalogRow(sourceLineNumbers, this);
153 - break;
154 - case "WixChain":
155 - row = new WixChainRow(sourceLineNumbers, this);
156 - break;
157 - case "WixChainItem":
158 - row = new WixChainItemRow(sourceLineNumbers, this);
159 - break;
160 - case "WixBundlePackageCommandLine":
161 - row = new WixBundlePackageCommandLineRow(sourceLineNumbers, this);
162 - break;
163 - case "WixComplexReference":
164 - row = new WixComplexReferenceRow(sourceLineNumbers, this);
165 - break;
166 - case "WixDeltaPatchFile":
167 - row = new WixDeltaPatchFileRow(sourceLineNumbers, this);
168 - break;
169 - case "WixDeltaPatchSymbolPaths":
170 - row = new WixDeltaPatchSymbolPathsRow(sourceLineNumbers, this);
171 - break;
172 - case "WixFile":
173 - row = new WixFileRow(sourceLineNumbers, this);
174 - break;
175 - case "WixGroup":
176 - row = new WixGroupRow(sourceLineNumbers, this);
177 - break;
178 - case "WixMedia":
179 - row = new WixMediaRow(sourceLineNumbers, this);
180 - break;
181 - case "WixMediaTemplate":
182 - row = new WixMediaTemplateRow(sourceLineNumbers, this);
183 - break;
184 - case "WixMerge":
185 - row = new WixMergeRow(sourceLineNumbers, this);
186 - break;
187 - case "WixPayloadProperties":
188 - row = new WixPayloadPropertiesRow(sourceLineNumbers, this);
189 - break;
190 - case "WixProperty":
191 - row = new WixPropertyRow(sourceLineNumbers, this);
192 - break;
193 - case "WixSimpleReference":
194 - row = new WixSimpleReferenceRow(sourceLineNumbers, this);
195 - break;
196 - case "WixUpdateRegistration":
197 - row = new WixUpdateRegistrationRow(sourceLineNumbers, this);
198 - break;
199 -
200 - default:
201 - row = new Row(sourceLineNumbers, this);
202 - break;
203 - }
204 -
205 - if (add)
206 - {
207 - this.Rows.Add(row);
208 - }
209 -
210 - return row;
211 - }
212 -
213 - /// <summary>
214 - /// Parse a table from the xml.
215 - /// </summary>
216 - /// <param name="reader">XmlReader where the intermediate is persisted.</param>
217 - /// <param name="section">Section to populate with persisted data.</param>
218 - /// <param name="tableDefinitions">TableDefinitions to use in the intermediate.</param>
219 - /// <returns>The parsed table.</returns>
220 - internal static Table Read(XmlReader reader, TableDefinitionCollection tableDefinitions)
221 - {
222 - Debug.Assert("table" == reader.LocalName);
223 -
224 - bool empty = reader.IsEmptyElement;
225 - TableOperation operation = TableOperation.None;
226 - string name = null;
227 -
228 - while (reader.MoveToNextAttribute())
229 - {
230 - switch (reader.LocalName)
231 - {
232 - case "name":
233 - name = reader.Value;
234 - break;
235 - case "op":
236 - switch (reader.Value)
237 - {
238 - case "add":
239 - operation = TableOperation.Add;
240 - break;
241 - case "drop":
242 - operation = TableOperation.Drop;
243 - break;
244 - default:
245 - throw new XmlException();
246 - }
247 - break;
248 - }
249 - }
250 -
251 - if (null == name)
252 - {
253 - throw new XmlException();
254 - }
255 -
256 - TableDefinition tableDefinition = tableDefinitions[name];
257 - Table table = new Table(tableDefinition);
258 - table.Operation = operation;
259 -
260 - if (!empty)
261 - {
262 - bool done = false;
263 -
264 - // loop through all the rows in a table
265 - while (!done && reader.Read())
266 - {
267 - switch (reader.NodeType)
268 - {
269 - case XmlNodeType.Element:
270 - switch (reader.LocalName)
271 - {
272 - case "row":
273 - Row.Read(reader, table);
274 - break;
275 - default:
276 - throw new XmlException();
277 - }
278 - break;
279 - case XmlNodeType.EndElement:
280 - done = true;
281 - break;
282 - }
283 - }
284 -
285 - if (!done)
286 - {
287 - throw new XmlException();
288 - }
289 - }
290 -
291 - return table;
292 - }
293 -
294 - /// <summary>
295 - /// Modularize the table.
296 - /// </summary>
297 - /// <param name="modularizationGuid">String containing the GUID of the Merge Module, if appropriate.</param>
298 - /// <param name="suppressModularizationIdentifiers">Optional collection of identifiers that should not be modularized.</param>
299 - public void Modularize(string modularizationGuid, ISet<string> suppressModularizationIdentifiers)
300 - {
301 - List<int> modularizedColumns = new List<int>();
302 -
303 - // find the modularized columns
304 - for (int i = 0; i < this.Definition.Columns.Count; i++)
305 - {
306 - if (ColumnModularizeType.None != this.Definition.Columns[i].ModularizeType)
307 - {
308 - modularizedColumns.Add(i);
309 - }
310 - }
311 -
312 - if (0 < modularizedColumns.Count)
313 - {
314 - foreach (Row row in this.Rows)
315 - {
316 - foreach (int modularizedColumn in modularizedColumns)
317 - {
318 - Field field = row.Fields[modularizedColumn];
319 -
320 - if (null != field.Data)
321 - {
322 - field.Data = row.GetModularizedValue(field, modularizationGuid, suppressModularizationIdentifiers);
323 - }
324 - }
325 - }
326 - }
327 - }
328 -
329 - /// <summary>
330 - /// Persists a row in an XML format.
331 - /// </summary>
332 - /// <param name="writer">XmlWriter where the Row should persist itself as XML.</param>
333 - [SuppressMessage("Microsoft.Globalization", "CA1308:NormalizeStringsToUppercase", Justification = "Changing the way this string normalizes would result " +
334 - "in a change to the way the intermediate files are generated, potentially causing extra churn in patches on an MSI built from an older version of WiX. " +
335 - "Furthermore, there is no security hole here, as the strings won't need to make a round trip")]
336 - internal void Write(XmlWriter writer)
337 - {
338 - if (null == writer)
339 - {
340 - throw new ArgumentNullException("writer");
341 - }
342 -
343 - writer.WriteStartElement("table", Intermediate.XmlNamespaceUri);
344 - writer.WriteAttributeString("name", this.Name);
345 -
346 - if (TableOperation.None != this.Operation)
347 - {
348 - writer.WriteAttributeString("op", this.Operation.ToString().ToLowerInvariant());
349 - }
350 -
351 - foreach (Row row in this.Rows)
352 - {
353 - row.Write(writer);
354 - }
355 -
356 - writer.WriteEndElement();
357 - }
358 -
359 - /// <summary>
360 - /// Writes the table in IDT format to the provided stream.
361 - /// </summary>
362 - /// <param name="writer">Stream to write the table to.</param>
363 - /// <param name="keepAddedColumns">Whether to keep columns added in a transform.</param>
364 - public void ToIdtDefinition(StreamWriter writer, bool keepAddedColumns)
365 - {
366 - if (this.Definition.Unreal)
367 - {
368 - return;
369 - }
370 -
371 - if (TableDefinition.MaxColumnsInRealTable < this.Definition.Columns.Count)
372 - {
373 - throw new WixException(WixDataErrors.TooManyColumnsInRealTable(this.Definition.Name, this.Definition.Columns.Count, TableDefinition.MaxColumnsInRealTable));
374 - }
375 -
376 - // Tack on the table header, and flush before we start writing bytes directly to the stream.
377 - writer.Write(this.Definition.ToIdtDefinition(keepAddedColumns));
378 - writer.Flush();
379 -
380 - using (var binary = new BinaryWriter(writer.BaseStream, writer.Encoding, true))
381 - {
382 - // Create an encoding that replaces characters with question marks, and doesn't throw. We'll
383 - // use this in case of errors
384 - Encoding convertEncoding = Encoding.GetEncoding(writer.Encoding.CodePage);
385 -
386 - foreach (Row row in this.Rows)
387 - {
388 - if (row.Redundant)
389 - {
390 - continue;
391 - }
392 -
393 - string rowString = row.ToIdtDefinition(keepAddedColumns);
394 - byte[] rowBytes;
395 -
396 - try
397 - {
398 - // GetBytes will throw an exception if any character doesn't match our current encoding
399 - rowBytes = writer.Encoding.GetBytes(rowString);
400 - }
401 - catch (EncoderFallbackException)
402 - {
403 - Messaging.Instance.OnMessage(WixDataErrors.InvalidStringForCodepage(row.SourceLineNumbers, Convert.ToString(writer.Encoding.WindowsCodePage, CultureInfo.InvariantCulture)));
404 -
405 - rowBytes = convertEncoding.GetBytes(rowString);
406 - }
407 -
408 - binary.Write(rowBytes, 0, rowBytes.Length);
409 - }
410 - }
411 - }
412 -
413 - /// <summary>
414 - /// Validates the rows of this OutputTable and throws if it collides on
415 - /// primary keys.
416 - /// </summary>
417 - public void ValidateRows()
418 - {
419 - Dictionary<string, SourceLineNumber> primaryKeys = new Dictionary<string, SourceLineNumber>();
420 -
421 - foreach (Row row in this.Rows)
422 - {
423 - string primaryKey = row.GetPrimaryKey();
424 -
425 - SourceLineNumber collisionSourceLineNumber;
426 - if (primaryKeys.TryGetValue(primaryKey, out collisionSourceLineNumber))
427 - {
428 - throw new WixException(WixDataErrors.DuplicatePrimaryKey(collisionSourceLineNumber, primaryKey, this.Definition.Name));
429 - }
430 -
431 - primaryKeys.Add(primaryKey, row.SourceLineNumbers);
432 - }
433 - }
434 - }
435 -}
src/WixToolset.Data.WindowsInstaller/TableDefinition.cs deleted
-334
@@ -1,334 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.Data
4 -{
5 - using System;
6 - using System.Collections.Generic;
7 - using System.Collections.ObjectModel;
8 - using System.Text;
9 - using System.Xml;
10 -
11 - /// <summary>
12 - /// Definition of a table in a database.
13 - /// </summary>
14 - public sealed class TableDefinition : IComparable<TableDefinition>
15 - {
16 - /// <summary>
17 - /// Tracks the maximum number of columns supported in a real table.
18 - /// This is a Windows Installer limitation.
19 - /// </summary>
20 - public const int MaxColumnsInRealTable = 32;
21 -
22 - /// <summary>
23 - /// Creates a table definition.
24 - /// </summary>
25 - /// <param name="name">Name of table to create.</param>
26 - /// <param name="createSymbols">Flag if rows in this table create symbols.</param>
27 - /// <param name="unreal">Flag if table is unreal.</param>
28 - /// <param name="bootstrapperApplicationData">Flag if table is part of UX Manifest.</param>
29 - public TableDefinition(string name, IList<ColumnDefinition> columns, bool createSymbols, bool unreal, bool bootstrapperApplicationData = false)
30 - {
31 - this.Name = name;
32 - this.CreateSymbols = createSymbols;
33 - this.Unreal = unreal;
34 - this.BootstrapperApplicationData = bootstrapperApplicationData;
35 -
36 - this.Columns = new ReadOnlyCollection<ColumnDefinition>(columns);
37 - }
38 -
39 - /// <summary>
40 - /// Gets if rows in this table create symbols.
41 - /// </summary>
42 - /// <value>Flag if rows in this table create symbols.</value>
43 - public bool CreateSymbols { get; private set; }
44 -
45 - /// <summary>
46 - /// Gets the name of the table.
47 - /// </summary>
48 - /// <value>Name of the table.</value>
49 - public string Name { get; private set; }
50 -
51 - /// <summary>
52 - /// Gets if the table is unreal.
53 - /// </summary>
54 - /// <value>Flag if table is unreal.</value>
55 - public bool Unreal { get; private set; }
56 -
57 - /// <summary>
58 - /// Gets if the table is a part of the bootstrapper application data manifest.
59 - /// </summary>
60 - /// <value>Flag if table is a part of the bootstrapper application data manifest.</value>
61 - public bool BootstrapperApplicationData { get; private set; }
62 -
63 - /// <summary>
64 - /// Gets the collection of column definitions for this table.
65 - /// </summary>
66 - /// <value>Collection of column definitions for this table.</value>
67 - public IList<ColumnDefinition> Columns { get; private set; }
68 -
69 - /// <summary>
70 - /// Gets the column definition in the table by index.
71 - /// </summary>
72 - /// <param name="columnIndex">Index of column to locate.</param>
73 - /// <value>Column definition in the table by index.</value>
74 - public ColumnDefinition this[int columnIndex]
75 - {
76 - get { return this.Columns[columnIndex]; }
77 - }
78 -
79 - /// <summary>
80 - /// Gets the table definition in IDT format.
81 - /// </summary>
82 - /// <param name="keepAddedColumns">Whether to keep columns added in a transform.</param>
83 - /// <returns>Table definition in IDT format.</returns>
84 - public string ToIdtDefinition(bool keepAddedColumns)
85 - {
86 - bool first = true;
87 - StringBuilder columnString = new StringBuilder();
88 - StringBuilder dataString = new StringBuilder();
89 - StringBuilder tableString = new StringBuilder();
90 -
91 - tableString.Append(this.Name);
92 - foreach (ColumnDefinition column in this.Columns)
93 - {
94 - // conditionally keep columns added in a transform; otherwise,
95 - // break because columns can only be added at the end
96 - if (column.Added && !keepAddedColumns)
97 - {
98 - break;
99 - }
100 -
101 - if (!first)
102 - {
103 - columnString.Append('\t');
104 - dataString.Append('\t');
105 - }
106 -
107 - columnString.Append(column.Name);
108 - dataString.Append(column.IdtType);
109 -
110 - if (column.PrimaryKey)
111 - {
112 - tableString.AppendFormat("\t{0}", column.Name);
113 - }
114 -
115 - first = false;
116 - }
117 - columnString.Append("\r\n");
118 - columnString.Append(dataString);
119 - columnString.Append("\r\n");
120 - columnString.Append(tableString);
121 - columnString.Append("\r\n");
122 -
123 - return columnString.ToString();
124 - }
125 -
126 - /// <summary>
127 - /// Adds the validation rows to the _Validation table.
128 - /// </summary>
129 - /// <param name="validationTable">The _Validation table.</param>
130 - public void AddValidationRows(Table validationTable)
131 - {
132 - foreach (ColumnDefinition columnDef in this.Columns)
133 - {
134 - Row row = validationTable.CreateRow(null);
135 -
136 - row[0] = this.Name;
137 -
138 - row[1] = columnDef.Name;
139 -
140 - if (columnDef.Nullable)
141 - {
142 - row[2] = "Y";
143 - }
144 - else
145 - {
146 - row[2] = "N";
147 - }
148 -
149 - if (columnDef.IsMinValueSet)
150 - {
151 - row[3] = columnDef.MinValue;
152 - }
153 -
154 - if (columnDef.IsMaxValueSet)
155 - {
156 - row[4] = columnDef.MaxValue;
157 - }
158 -
159 - row[5] = columnDef.KeyTable;
160 -
161 - if (columnDef.IsKeyColumnSet)
162 - {
163 - row[6] = columnDef.KeyColumn;
164 - }
165 -
166 - if (ColumnCategory.Unknown != columnDef.Category)
167 - {
168 - row[7] = columnDef.Category.ToString();
169 - }
170 -
171 - row[8] = columnDef.Possibilities;
172 -
173 - row[9] = columnDef.Description;
174 - }
175 - }
176 -
177 - /// <summary>
178 - /// Compares this table definition to another table definition.
179 - /// </summary>
180 - /// <remarks>
181 - /// Only Windows Installer traits are compared, allowing for updates to WiX-specific table definitions.
182 - /// </remarks>
183 - /// <param name="updated">The updated <see cref="TableDefinition"/> to compare with this target definition.</param>
184 - /// <returns>0 if the tables' core properties are the same; otherwise, non-0.</returns>
185 - public int CompareTo(TableDefinition updated)
186 - {
187 - // by definition, this object is greater than null
188 - if (null == updated)
189 - {
190 - return 1;
191 - }
192 -
193 - // compare the table names
194 - int ret = String.Compare(this.Name, updated.Name, StringComparison.Ordinal);
195 -
196 - // compare the column count
197 - if (0 == ret)
198 - {
199 - // transforms can only add columns
200 - ret = Math.Min(0, updated.Columns.Count - this.Columns.Count);
201 -
202 - // compare name, type, and length of each column
203 - for (int i = 0; 0 == ret && this.Columns.Count > i; i++)
204 - {
205 - ColumnDefinition thisColumnDef = this.Columns[i];
206 - ColumnDefinition updatedColumnDef = updated.Columns[i];
207 -
208 - ret = thisColumnDef.CompareTo(updatedColumnDef);
209 - }
210 - }
211 -
212 - return ret;
213 - }
214 -
215 - /// <summary>
216 - /// Parses table definition from xml reader.
217 - /// </summary>
218 - /// <param name="reader">Reader to get data from.</param>
219 - /// <returns>The TableDefintion represented by the Xml.</returns>
220 - internal static TableDefinition Read(XmlReader reader)
221 - {
222 - bool empty = reader.IsEmptyElement;
223 - bool createSymbols = false;
224 - string name = null;
225 - bool unreal = false;
226 - bool bootstrapperApplicationData = false;
227 -
228 - while (reader.MoveToNextAttribute())
229 - {
230 - switch (reader.LocalName)
231 - {
232 - case "createSymbols":
233 - createSymbols = reader.Value.Equals("yes");
234 - break;
235 - case "name":
236 - name = reader.Value;
237 - break;
238 - case "unreal":
239 - unreal = reader.Value.Equals("yes");
240 - break;
241 - case "bootstrapperApplicationData":
242 - bootstrapperApplicationData = reader.Value.Equals("yes");
243 - break;
244 - }
245 - }
246 -
247 - if (null == name)
248 - {
249 - throw new XmlException();
250 - }
251 -
252 - List<ColumnDefinition> columns = new List<ColumnDefinition>();
253 - bool hasPrimaryKeyColumn = false;
254 -
255 - // parse the child elements
256 - if (!empty)
257 - {
258 - bool done = false;
259 -
260 - while (!done && reader.Read())
261 - {
262 - switch (reader.NodeType)
263 - {
264 - case XmlNodeType.Element:
265 - switch (reader.LocalName)
266 - {
267 - case "columnDefinition":
268 - ColumnDefinition columnDefinition = ColumnDefinition.Read(reader);
269 - columns.Add(columnDefinition);
270 -
271 - if (columnDefinition.PrimaryKey)
272 - {
273 - hasPrimaryKeyColumn = true;
274 - }
275 - break;
276 - default:
277 - throw new XmlException();
278 - }
279 - break;
280 - case XmlNodeType.EndElement:
281 - done = true;
282 - break;
283 - }
284 - }
285 -
286 - if (!unreal && !bootstrapperApplicationData && !hasPrimaryKeyColumn)
287 - {
288 - throw new WixException(WixDataErrors.RealTableMissingPrimaryKeyColumn(SourceLineNumber.CreateFromUri(reader.BaseURI), name));
289 - }
290 -
291 - if (!done)
292 - {
293 - throw new XmlException();
294 - }
295 - }
296 -
297 - TableDefinition tableDefinition = new TableDefinition(name, columns, createSymbols, unreal, bootstrapperApplicationData);
298 - return tableDefinition;
299 - }
300 -
301 - /// <summary>
302 - /// Persists an output in an XML format.
303 - /// </summary>
304 - /// <param name="writer">XmlWriter where the Output should persist itself as XML.</param>
305 - internal void Write(XmlWriter writer)
306 - {
307 - writer.WriteStartElement("tableDefinition", TableDefinitionCollection.XmlNamespaceUri);
308 -
309 - writer.WriteAttributeString("name", this.Name);
310 -
311 - if (this.CreateSymbols)
312 - {
313 - writer.WriteAttributeString("createSymbols", "yes");
314 - }
315 -
316 - if (this.Unreal)
317 - {
318 - writer.WriteAttributeString("unreal", "yes");
319 - }
320 -
321 - if (this.BootstrapperApplicationData)
322 - {
323 - writer.WriteAttributeString("bootstrapperApplicationData", "yes");
324 - }
325 -
326 - foreach (ColumnDefinition columnDefinition in this.Columns)
327 - {
328 - columnDefinition.Write(writer);
329 - }
330 -
331 - writer.WriteEndElement();
332 - }
333 - }
334 -}
src/WixToolset.Data.WindowsInstaller/TableDefinitionCollection.cs deleted
-240
@@ -1,240 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.Data
4 -{
5 - using System;
6 - using System.Collections;
7 - using System.Collections.Generic;
8 - using System.Linq;
9 - using System.Xml;
10 -
11 - /// <summary>
12 - /// Collection for table definitions indexed by table name.
13 - /// </summary>
14 - public sealed class TableDefinitionCollection : ICollection<TableDefinition>
15 - {
16 - public const string XmlNamespaceUri = "http://wixtoolset.org/schemas/v4/wi/tables";
17 -
18 - private Dictionary<string, TableDefinition> collection;
19 -
20 - /// <summary>
21 - /// Instantiate a new TableDefinitionCollection class.
22 - /// </summary>
23 - public TableDefinitionCollection()
24 - {
25 - this.collection = new Dictionary<string,TableDefinition>();
26 - }
27 -
28 - /// <summary>
29 - /// Creates a shallow copy of the provided table definition collection.
30 - /// </summary>
31 - public TableDefinitionCollection(TableDefinitionCollection tableDefinitions)
32 - {
33 - this.collection = new Dictionary<string, TableDefinition>(tableDefinitions.collection);
34 - }
35 -
36 - /// <summary>
37 - /// Gets the number of items in the collection.
38 - /// </summary>
39 - /// <value>Number of items in collection.</value>
40 - public int Count
41 - {
42 - get { return this.collection.Count; }
43 - }
44 -
45 - /// <summary>
46 - /// Table definition collections are never read-only.
47 - /// </summary>
48 - public bool IsReadOnly
49 - {
50 - get { return false; }
51 - }
52 -
53 - /// <summary>
54 - /// Gets a table definition by name.
55 - /// </summary>
56 - /// <param name="tableName">Name of table to locate.</param>
57 - public TableDefinition this[string tableName]
58 - {
59 - get
60 - {
61 - TableDefinition table;
62 - if (!this.collection.TryGetValue(tableName, out table))
63 - {
64 - throw new WixMissingTableDefinitionException(WixDataErrors.MissingTableDefinition(tableName));
65 - }
66 -
67 - return table;
68 - }
69 - }
70 -
71 - /// <summary>
72 - /// Tries to get a table definition by name.
73 - /// </summary>
74 - /// <param name="tableName">Name of table to locate.</param>
75 - /// <param name="table">Table definition if found.</param>
76 - /// <returns>True if table definition was found otherwise false.</returns>
77 - public bool TryGet(string tableName, out TableDefinition table)
78 - {
79 - return this.collection.TryGetValue(tableName, out table);
80 - }
81 -
82 - /// <summary>
83 - /// Load a table definition collection from an XmlReader.
84 - /// </summary>
85 - /// <param name="reader">Reader to get data from.</param>
86 - /// <param name="suppressSchema">Suppress xml schema validation while loading.</param>
87 - /// <returns>The TableDefinitionCollection represented by the xml.</returns>
88 - public static TableDefinitionCollection Load(XmlReader reader)
89 - {
90 - reader.MoveToContent();
91 -
92 - return Read(reader);
93 - }
94 -
95 - /// <summary>
96 - /// Adds a table definition to the collection.
97 - /// </summary>
98 - /// <param name="tableDefinition">Table definition to add to the collection.</param>
99 - /// <value>Indexes by table definition name.</value>
100 - public void Add(TableDefinition tableDefinition)
101 - {
102 - this.collection.Add(tableDefinition.Name, tableDefinition);
103 - }
104 -
105 - /// <summary>
106 - /// Removes all table definitions from the collection.
107 - /// </summary>
108 - public void Clear()
109 - {
110 - this.collection.Clear();
111 - }
112 -
113 - /// <summary>
114 - /// Checks if the collection contains a table name.
115 - /// </summary>
116 - /// <param name="tableName">The table to check in the collection.</param>
117 - /// <returns>True if collection contains the table.</returns>
118 - public bool Contains(string tableName)
119 - {
120 - return this.collection.ContainsKey(tableName);
121 - }
122 -
123 - /// <summary>
124 - /// Checks if the collection contains a table.
125 - /// </summary>
126 - /// <param name="table">The table to check in the collection.</param>
127 - /// <returns>True if collection contains the table.</returns>
128 - public bool Contains(TableDefinition table)
129 - {
130 - return this.collection.ContainsKey(table.Name);
131 - }
132 -
133 - /// <summary>
134 - /// Copies table definitions to an arry.
135 - /// </summary>
136 - /// <param name="array">Array to copy the table definitions to.</param>
137 - /// <param name="index">Index in the array to start copying at.</param>
138 - public void CopyTo(TableDefinition[] array, int index)
139 - {
140 - this.collection.Values.CopyTo(array, index);
141 - }
142 -
143 - /// <summary>
144 - /// Removes a table definition from the collection.
145 - /// </summary>
146 - /// <param name="table">Table to remove from the collection.</param>
147 - /// <returns>True if the table definition existed in the collection and was removed.</returns>
148 - public bool Remove(TableDefinition table)
149 - {
150 - return this.collection.Remove(table.Name);
151 - }
152 -
153 - /// <summary>
154 - /// Gets enumerator for the collection.
155 - /// </summary>
156 - /// <returns>Enumerator for the collection.</returns>
157 - public IEnumerator<TableDefinition> GetEnumerator()
158 - {
159 - return this.collection.Values.GetEnumerator();
160 - }
161 -
162 - /// <summary>
163 - /// Gets the untyped enumerator for the collection.
164 - /// </summary>
165 - /// <returns>Untyped enumerator for the collection.</returns>
166 - IEnumerator IEnumerable.GetEnumerator()
167 - {
168 - return this.collection.Values.GetEnumerator();
169 - }
170 -
171 - /// <summary>
172 - /// Loads a collection of table definitions from a XmlReader in memory.
173 - /// </summary>
174 - /// <param name="reader">Reader to get data from.</param>
175 - /// <returns>The TableDefinitionCollection represented by the xml.</returns>
176 - internal static TableDefinitionCollection Read(XmlReader reader)
177 - {
178 - if ("tableDefinitions" != reader.LocalName)
179 - {
180 - throw new XmlException();
181 - }
182 -
183 - bool empty = reader.IsEmptyElement;
184 - TableDefinitionCollection tableDefinitionCollection = new TableDefinitionCollection();
185 -
186 - while (reader.MoveToNextAttribute())
187 - {
188 - }
189 -
190 - // parse the child elements
191 - if (!empty)
192 - {
193 - bool done = false;
194 -
195 - while (!done && reader.Read())
196 - {
197 - switch (reader.NodeType)
198 - {
199 - case XmlNodeType.Element:
200 - switch (reader.LocalName)
201 - {
202 - case "tableDefinition":
203 - tableDefinitionCollection.Add(TableDefinition.Read(reader));
204 - break;
205 - default:
206 - throw new XmlException();
207 - }
208 - break;
209 - case XmlNodeType.EndElement:
210 - done = true;
211 - break;
212 - }
213 - }
214 -
215 - if (!done)
216 - {
217 - throw new XmlException();
218 - }
219 - }
220 -
221 - return tableDefinitionCollection;
222 - }
223 -
224 - /// <summary>
225 - /// Persists a TableDefinitionCollection in an XML format.
226 - /// </summary>
227 - /// <param name="writer">XmlWriter where the TableDefinitionCollection should persist itself as XML.</param>
228 - internal void Write(XmlWriter writer)
229 - {
230 - writer.WriteStartElement("tableDefinitions", XmlNamespaceUri);
231 -
232 - foreach (TableDefinition tableDefinition in this.collection.Values.OrderBy(t => t.Name))
233 - {
234 - tableDefinition.Write(writer);
235 - }
236 -
237 - writer.WriteEndElement();
238 - }
239 - }
240 -}
src/WixToolset.Data.WindowsInstaller/TableIndexedCollection.cs deleted
-153
@@ -1,153 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.Data
4 -{
5 - using System;
6 - using System.Collections.Generic;
7 - using System.Linq;
8 -
9 - /// <summary>
10 - /// Collection for tables.
11 - /// </summary>
12 - public sealed class TableIndexedCollection : ICollection<Table>
13 - {
14 - private Dictionary<string, Table> collection;
15 -
16 - /// <summary>
17 - /// Instantiate a new empty collection.
18 - /// </summary>
19 - public TableIndexedCollection()
20 - {
21 - this.collection = new Dictionary<string,Table>();
22 - }
23 -
24 - /// <summary>
25 - /// Instantiate a new collection populated with a set of tables.
26 - /// </summary>
27 - /// <param name="tables">Set of tables.</param>
28 - public TableIndexedCollection(IEnumerable<Table> tables)
29 - {
30 - this.collection = tables.ToDictionary(t => t.Name);
31 - }
32 -
33 - /// <summary>
34 - /// Gets the number of items in the collection.
35 - /// </summary>
36 - /// <value>Number of items in collection.</value>
37 - public int Count
38 - {
39 - get { return this.collection.Count; }
40 - }
41 -
42 - /// <summary>
43 - /// Table indexed collection is never read only.
44 - /// </summary>
45 - public bool IsReadOnly
46 - {
47 - get { return false; }
48 - }
49 -
50 - /// <summary>
51 - /// Adds a table to the collection.
52 - /// </summary>
53 - /// <param name="table">Table to add to the collection.</param>
54 - /// <remarks>Indexes the table by name.</remarks>
55 - public void Add(Table table)
56 - {
57 - this.collection.Add(table.Name, table);
58 - }
59 -
60 - /// <summary>
61 - /// Clear the tables from the collection.
62 - /// </summary>
63 - public void Clear()
64 - {
65 - this.collection.Clear();
66 - }
67 -
68 - /// <summary>
69 - /// Determines if a table is in the collection.
70 - /// </summary>
71 - /// <param name="table">Table to check if it is in the collection.</param>
72 - /// <returns>True if the table name is in the collection, otherwise false.</returns>
73 - public bool Contains(Table table)
74 - {
75 - return this.collection.ContainsKey(table.Name);
76 - }
77 -
78 - /// <summary>
79 - /// Copies the collection into an array.
80 - /// </summary>
81 - /// <param name="array">Array to copy the collection into.</param>
82 - /// <param name="arrayIndex">Index to start copying from.</param>
83 - public void CopyTo(Table[] array, int arrayIndex)
84 - {
85 - this.collection.Values.CopyTo(array, arrayIndex);
86 - }
87 -
88 - /// <summary>
89 - /// Remove a table from the collection by name.
90 - /// </summary>
91 - /// <param name="tableName">Table name to remove from the collection.</param>
92 - public void Remove(string tableName)
93 - {
94 - this.collection.Remove(tableName);
95 - }
96 -
97 - /// <summary>
98 - /// Remove a table from the collection.
99 - /// </summary>
100 - /// <param name="table">Table with matching name to remove from the collection.</param>
101 - public bool Remove(Table table)
102 - {
103 - return this.collection.Remove(table.Name);
104 - }
105 -
106 - /// <summary>
107 - /// Gets an enumerator over the whole collection.
108 - /// </summary>
109 - /// <returns>Collection enumerator.</returns>
110 - public IEnumerator<Table> GetEnumerator()
111 - {
112 - return this.collection.Values.GetEnumerator();
113 - }
114 -
115 - /// <summary>
116 - /// Gets an untyped enumerator over the whole collection.
117 - /// </summary>
118 - /// <returns>Untyped collection enumerator.</returns>
119 - System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
120 - {
121 - return this.collection.Values.GetEnumerator();
122 - }
123 -
124 - /// <summary>
125 - /// Gets a table by name.
126 - /// </summary>
127 - /// <param name="tableName">Name of table to locate.</param>
128 - public Table this[string tableName]
129 - {
130 - get
131 - {
132 - Table table;
133 - return this.collection.TryGetValue(tableName, out table) ? table : null;
134 - }
135 -
136 - set
137 - {
138 - this.collection[tableName] = value;
139 - }
140 - }
141 -
142 - /// <summary>
143 - /// Tries to find a table by name.
144 - /// </summary>
145 - /// <param name="tableName">Table name to locate.</param>
146 - /// <param name="table">Found table.</param>
147 - /// <returns>True if table with table name was found, otherwise false.</returns>
148 - public bool TryGetTable(string tableName, out Table table)
149 - {
150 - return this.collection.TryGetValue(tableName, out table);
151 - }
152 - }
153 -}
src/WixToolset.Data.WindowsInstaller/TableOperation.cs deleted
-25
@@ -1,25 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.Data
4 -{
5 - /// <summary>
6 - /// The table transform operations.
7 - /// </summary>
8 - public enum TableOperation
9 - {
10 - /// <summary>
11 - /// No operation.
12 - /// </summary>
13 - None,
14 -
15 - /// <summary>
16 - /// Added table.
17 - /// </summary>
18 - Add,
19 -
20 - /// <summary>
21 - /// Dropped table.
22 - /// </summary>
23 - Drop,
24 - }
25 -}
src/WixToolset.Data.WindowsInstaller/WixMissingTableDefinitionException.cs deleted
-22
@@ -1,22 +0,0 @@
1 -// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 -
3 -namespace WixToolset.Data
4 -{
5 - using System;
6 -
7 - /// <summary>
8 - /// Exception thrown when a table definition is missing.
9 - /// </summary>
10 - [Serializable]
11 - public class WixMissingTableDefinitionException : WixException
12 - {
13 - /// <summary>
14 - /// Instantiate new WixMissingTableDefinitionException.
15 - /// </summary>
16 - /// <param name="error">Localized error information.</param>
17 - public WixMissingTableDefinitionException(MessageEventArgs error)
18 - : base(error)
19 - {
20 - }
21 - }
22 -}
src/WixToolset.Data.WindowsInstaller/WixToolset.Data.WindowsInstaller.csproj deleted
-27
@@ -1,27 +0,0 @@
1 -<?xml version="1.0" encoding="utf-8"?>
2 -<!-- 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. -->
3 -
4 -<Project Sdk="Microsoft.NET.Sdk">
5 - <PropertyGroup>
6 - <TargetFramework>netstandard2.0</TargetFramework>
7 - <Description>Data for Windows Installer</Description>
8 - <Title>WiX Toolset Data Windows Installer</Title>
9 - </PropertyGroup>
10 -
11 - <ItemGroup>
12 - <EmbeddedResource Include="Data\actions.xml" />
13 - <EmbeddedResource Include="Data\tables.xml" />
14 - </ItemGroup>
15 -
16 - <ItemGroup>
17 - <ProjectReference Include="$(WixToolsetRootFolder)\Data\src\WixToolset.Data\WixToolset.Data.csproj" Condition=" '$(Configuration)' == 'Debug' And Exists('$(WixToolsetRootFolder)\Data\src\WixToolset.Data\WixToolset.Data.csproj') " />
18 - <PackageReference Include="WixToolset.Data" Version="4.0.*" Condition=" '$(Configuration)' == 'Release' Or !Exists('$(WixToolsetRootFolder)\Data\src\WixToolset.Data\WixToolset.Data.csproj') " />
19 -
20 - <ProjectReference Include="$(WixToolsetRootFolder)\Extensibility\src\WixToolset.Extensibility\WixToolset.Extensibility.csproj" Condition=" '$(Configuration)' == 'Debug' And Exists('$(WixToolsetRootFolder)\Extensibility\src\WixToolset.Extensibility\WixToolset.Extensibility.csproj') " />
21 - <PackageReference Include="WixToolset.Extensibility" Version="4.0.*" Condition=" '$(Configuration)' == 'Release' Or !Exists('$(WixToolsetRootFolder)\Extensibility\src\WixToolset.Extensibility\WixToolset.Extensibility.csproj') " />
22 - </ItemGroup>
23 -
24 - <ItemGroup>
25 - <PackageReference Include="Nerdbank.GitVersioning" Version="2.0.41" PrivateAssets="all" />
26 - </ItemGroup>
27 -</Project>
src/test/TestData/Example.Extension/ExampleExtensionData.cs
+1 -1
@@ -19,7 +19,7 @@ namespace Example.Extension
19 switch (name)
20 {
21 case "Example":
22 - tupleDefinition = TupleDefinitions.Example;
22 + tupleDefinition = ExampleTupleDefinitions.Example;
23 break;
24
25 default:
src/test/TestData/Example.Extension/ExampleExtensionFactory.cs
+4
@@ -28,6 +28,10 @@ namespace Example.Extension
28 {
29 extension = new ExampleExtensionData();
30 }
31 + else if (extensionType == typeof(IWindowsInstallerBackendExtension))
32 + {
33 + extension = new ExampleWindowsInstallerBackendExtension();
34 + }
35 else
36 {
37 extension = null;
src/test/TestData/Example.Extension/ExampleTableDefinitions.cs new
+21
@@ -0,0 +1,21 @@
1 +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 +
3 +namespace Example.Extension
4 +{
5 + using System.Collections.Generic;
6 + using WixToolset.Data.WindowsInstaller;
7 +
8 + public static class ExampleTableDefinitions
9 + {
10 + public static readonly TableDefinition ExampleTable = new TableDefinition(
11 + "Example",
12 + new List<ColumnDefinition>
13 + {
14 + new ColumnDefinition("Example", ColumnType.String, 72, true, false, ColumnCategory.Identifier),
15 + new ColumnDefinition("Value", ColumnType.String, 0, false, false, ColumnCategory.Formatted),
16 + }
17 + );
18 +
19 + public static readonly TableDefinition[] All = new[] { ExampleTable };
20 + }
21 +}
src/test/TestData/Example.Extension/ExampleTuple.cs
+2 -2
@@ -12,11 +12,11 @@ namespace Example.Extension
12
13 public class ExampleTuple : IntermediateTuple
14 {
15 - public ExampleTuple() : base(TupleDefinitions.Example, null, null)
15 + public ExampleTuple() : base(ExampleTupleDefinitions.Example, null, null)
16 {
17 }
18
19 - public ExampleTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(TupleDefinitions.Example, sourceLineNumber, id)
19 + public ExampleTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(ExampleTupleDefinitions.Example, sourceLineNumber, id)
20 {
21 }
22
src/test/TestData/Example.Extension/ExampleTupleDefinitions.cs renamed
+4 -2
@@ -4,10 +4,12 @@ namespace Example.Extension
4 {
5 using WixToolset.Data;
6
7 - public static class TupleDefinitions
7 + public static class ExampleTupleDefinitions
8 {
9 + public const string ExampleName = "Example";
10 +
11 public static readonly IntermediateTupleDefinition Example = new IntermediateTupleDefinition(
10 - "Example",
12 + ExampleName,
13 new[]
14 {
15 new IntermediateFieldDefinition(nameof(ExampleTupleFields.Example), IntermediateFieldType.String),
src/test/TestData/Example.Extension/ExampleWindowsInstallerBackendExtension.cs new
+32
@@ -0,0 +1,32 @@
1 +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2 +
3 +namespace Example.Extension
4 +{
5 + using WixToolset.Data;
6 + using WixToolset.Data.WindowsInstaller;
7 + using WixToolset.Extensibility;
8 +
9 + internal class ExampleWindowsInstallerBackendExtension : BaseWindowsInstallerBackendExtension
10 + {
11 + public override bool TryAddTupleToOutput(IntermediateTuple tuple, Output output)
12 + {
13 +#if ALTERNATIVE_TO_USING_HELPER
14 + switch (tuple.Definition.Name)
15 + {
16 + case TupleDefinitions.ExampleName:
17 + {
18 + var table = output.EnsureTable(ExampleTableDefinitions.ExampleTable);
19 + var row = table.CreateRow(tuple.SourceLineNumbers);
20 + row[0] = tuple[0].AsString();
21 + row[1] = tuple[1].AsString();
22 + }
23 + return true;
24 + }
25 +
26 + return false;
27 +#else
28 + return this.BackendHelper.TryAddTupleToOutputMatchingTableDefinitions(tuple, output, ExampleTableDefinitions.All);
29 +#endif
30 + }
31 + }
32 +}
src/test/WixToolsetTest.CoreIntegration/ProgramFixture.cs
+1
@@ -7,6 +7,7 @@ namespace WixToolsetTest.CoreIntegration
7 using WixToolset.Core;
8 using WixToolset.Data;
9 using WixToolset.Data.Tuples;
10 + using WixToolset.Data.WindowsInstaller;
11 using WixToolsetTest.CoreIntegration.Utility;
12 using Xunit;
13