From 4a8dc1f4d55278abdff056bb2a332ffec0f60c90 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Wed, 3 Jun 2020 02:04:35 -0700 Subject: Redesign CustomTable tuples to enable file resolution in Core --- src/WixToolset.Data/Tuples/TupleDefinitions.cs | 12 +- src/WixToolset.Data/Tuples/WixCustomRowTuple.cs | 56 ------- .../Tuples/WixCustomTableCellTuple.cs | 68 ++++++++ .../Tuples/WixCustomTableColumnTuple.cs | 173 +++++++++++++++++++++ src/WixToolset.Data/Tuples/WixCustomTableTuple.cs | 92 +---------- .../WindowsInstallerTableDefinitions.cs | 38 ----- 6 files changed, 253 insertions(+), 186 deletions(-) delete mode 100644 src/WixToolset.Data/Tuples/WixCustomRowTuple.cs create mode 100644 src/WixToolset.Data/Tuples/WixCustomTableCellTuple.cs create mode 100644 src/WixToolset.Data/Tuples/WixCustomTableColumnTuple.cs (limited to 'src') diff --git a/src/WixToolset.Data/Tuples/TupleDefinitions.cs b/src/WixToolset.Data/Tuples/TupleDefinitions.cs index 67393f04..a91b3f8f 100644 --- a/src/WixToolset.Data/Tuples/TupleDefinitions.cs +++ b/src/WixToolset.Data/Tuples/TupleDefinitions.cs @@ -144,8 +144,9 @@ namespace WixToolset.Data WixComplexReference, WixComponentGroup, WixComponentSearch, - WixCustomRow, WixCustomTable, + WixCustomTableCell, + WixCustomTableColumn, WixDeltaPatchFile, WixDeltaPatchSymbolPaths, WixDependencyProvider, @@ -613,12 +614,15 @@ namespace WixToolset.Data case TupleDefinitionType.WixComponentSearch: return TupleDefinitions.WixComponentSearch; - case TupleDefinitionType.WixCustomRow: - return TupleDefinitions.WixCustomRow; - case TupleDefinitionType.WixCustomTable: return TupleDefinitions.WixCustomTable; + case TupleDefinitionType.WixCustomTableCell: + return TupleDefinitions.WixCustomTableCell; + + case TupleDefinitionType.WixCustomTableColumn: + return TupleDefinitions.WixCustomTableColumn; + case TupleDefinitionType.WixDeltaPatchFile: return TupleDefinitions.WixDeltaPatchFile; diff --git a/src/WixToolset.Data/Tuples/WixCustomRowTuple.cs b/src/WixToolset.Data/Tuples/WixCustomRowTuple.cs deleted file mode 100644 index c51089e8..00000000 --- a/src/WixToolset.Data/Tuples/WixCustomRowTuple.cs +++ /dev/null @@ -1,56 +0,0 @@ -// 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. - -namespace WixToolset.Data -{ - using WixToolset.Data.Tuples; - - public static partial class TupleDefinitions - { - public static readonly IntermediateTupleDefinition WixCustomRow = new IntermediateTupleDefinition( - TupleDefinitionType.WixCustomRow, - new[] - { - new IntermediateFieldDefinition(nameof(WixCustomRowTupleFields.Table), IntermediateFieldType.String), - new IntermediateFieldDefinition(nameof(WixCustomRowTupleFields.FieldData), IntermediateFieldType.String), - }, - typeof(WixCustomRowTuple)); - } -} - -namespace WixToolset.Data.Tuples -{ - public enum WixCustomRowTupleFields - { - Table, - FieldData, - } - - public class WixCustomRowTuple : IntermediateTuple - { - public const char FieldSeparator = '\x85'; - - public WixCustomRowTuple() : base(TupleDefinitions.WixCustomRow, null, null) - { - } - - public WixCustomRowTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(TupleDefinitions.WixCustomRow, sourceLineNumber, id) - { - } - - public IntermediateField this[WixCustomRowTupleFields index] => this.Fields[(int)index]; - - public string Table - { - get => (string)this.Fields[(int)WixCustomRowTupleFields.Table]; - set => this.Set((int)WixCustomRowTupleFields.Table, value); - } - - public string FieldData - { - get => (string)this.Fields[(int)WixCustomRowTupleFields.FieldData]; - set => this.Set((int)WixCustomRowTupleFields.FieldData, value); - } - - public string[] FieldDataSeparated => this.FieldData.Split(FieldSeparator); - } -} diff --git a/src/WixToolset.Data/Tuples/WixCustomTableCellTuple.cs b/src/WixToolset.Data/Tuples/WixCustomTableCellTuple.cs new file mode 100644 index 00000000..18be675e --- /dev/null +++ b/src/WixToolset.Data/Tuples/WixCustomTableCellTuple.cs @@ -0,0 +1,68 @@ +// 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. + +namespace WixToolset.Data +{ + using WixToolset.Data.Tuples; + + public static partial class TupleDefinitions + { + public static readonly IntermediateTupleDefinition WixCustomTableCell = new IntermediateTupleDefinition( + TupleDefinitionType.WixCustomTableCell, + new[] + { + new IntermediateFieldDefinition(nameof(WixCustomTableCellTupleFields.TableRef), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixCustomTableCellTupleFields.ColumnRef), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixCustomTableCellTupleFields.RowId), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixCustomTableCellTupleFields.Data), IntermediateFieldType.String), + }, + typeof(WixCustomTableCellTuple)); + } +} + +namespace WixToolset.Data.Tuples +{ + public enum WixCustomTableCellTupleFields + { + TableRef, + ColumnRef, + RowId, + Data, + } + + public class WixCustomTableCellTuple : IntermediateTuple + { + public WixCustomTableCellTuple() : base(TupleDefinitions.WixCustomTableCell, null, null) + { + } + + public WixCustomTableCellTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(TupleDefinitions.WixCustomTableCell, sourceLineNumber, id) + { + } + + public IntermediateField this[WixCustomTableCellTupleFields index] => this.Fields[(int)index]; + + public string TableRef + { + get => (string)this.Fields[(int)WixCustomTableCellTupleFields.TableRef]; + set => this.Set((int)WixCustomTableCellTupleFields.TableRef, value); + } + + public string ColumnRef + { + get => (string)this.Fields[(int)WixCustomTableCellTupleFields.ColumnRef]; + set => this.Set((int)WixCustomTableCellTupleFields.ColumnRef, value); + } + + public string RowId + { + get => (string)this.Fields[(int)WixCustomTableCellTupleFields.RowId]; + set => this.Set((int)WixCustomTableCellTupleFields.RowId, value); + } + + public string Data + { + get => (string)this.Fields[(int)WixCustomTableCellTupleFields.Data]; + set => this.Set((int)WixCustomTableCellTupleFields.Data, value); + } + } +} diff --git a/src/WixToolset.Data/Tuples/WixCustomTableColumnTuple.cs b/src/WixToolset.Data/Tuples/WixCustomTableColumnTuple.cs new file mode 100644 index 00000000..66d3e48f --- /dev/null +++ b/src/WixToolset.Data/Tuples/WixCustomTableColumnTuple.cs @@ -0,0 +1,173 @@ +// 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. + +namespace WixToolset.Data +{ + using WixToolset.Data.Tuples; + + public static partial class TupleDefinitions + { + public static readonly IntermediateTupleDefinition WixCustomTableColumn = new IntermediateTupleDefinition( + TupleDefinitionType.WixCustomTableColumn, + new[] + { + new IntermediateFieldDefinition(nameof(WixCustomTableColumnTupleFields.TableRef), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixCustomTableColumnTupleFields.Name), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixCustomTableColumnTupleFields.Type), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixCustomTableColumnTupleFields.Attributes), IntermediateFieldType.Number), + new IntermediateFieldDefinition(nameof(WixCustomTableColumnTupleFields.Width), IntermediateFieldType.Number), + new IntermediateFieldDefinition(nameof(WixCustomTableColumnTupleFields.MinValue), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixCustomTableColumnTupleFields.MaxValue), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixCustomTableColumnTupleFields.KeyTable), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixCustomTableColumnTupleFields.KeyColumn), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixCustomTableColumnTupleFields.Category), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixCustomTableColumnTupleFields.Set), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixCustomTableColumnTupleFields.Description), IntermediateFieldType.String), + new IntermediateFieldDefinition(nameof(WixCustomTableColumnTupleFields.Modularize), IntermediateFieldType.Number) + }, + typeof(WixCustomTableColumnTuple)); + } +} + +namespace WixToolset.Data.Tuples +{ + using System; + + public enum WixCustomTableColumnTupleFields + { + TableRef, + Name, + Type, + Attributes, + Width, + MinValue, + MaxValue, + KeyTable, + KeyColumn, + Category, + Set, + Description, + Modularize, + } + + [Flags] + public enum WixCustomTableColumnTupleAttributes + { + None, + PrimaryKey, + Localizable, + Nullable, + Unreal, + } + + public enum WixCustomTableColumnModularizeType + { + None, + Column, + CompanionFile, + Condition, + ControlEventArgument, + ControlText, + Icon, + Property, + SemicolonDelimited, + } + + public class WixCustomTableColumnTuple : IntermediateTuple + { + public WixCustomTableColumnTuple() : base(TupleDefinitions.WixCustomTableColumn, null, null) + { + } + + public WixCustomTableColumnTuple(SourceLineNumber sourceLineNumber, Identifier id = null) : base(TupleDefinitions.WixCustomTableColumn, sourceLineNumber, id) + { + } + + public IntermediateField this[WixCustomTableColumnTupleFields index] => this.Fields[(int)index]; + + public string TableRef + { + get => (string)this.Fields[(int)WixCustomTableColumnTupleFields.TableRef]; + set => this.Set((int)WixCustomTableColumnTupleFields.TableRef, value); + } + + public string Name + { + get => (string)this.Fields[(int)WixCustomTableColumnTupleFields.Name]; + set => this.Set((int)WixCustomTableColumnTupleFields.Name, value); + } + + public IntermediateFieldType Type + { + get => (IntermediateFieldType)this.Fields[(int)WixCustomTableColumnTupleFields.Type].AsNumber(); + set => this.Set((int)WixCustomTableColumnTupleFields.Type, (int)value); + } + + public WixCustomTableColumnTupleAttributes Attributes + { + get => (WixCustomTableColumnTupleAttributes)this.Fields[(int)WixCustomTableColumnTupleFields.Attributes].AsNumber(); + set => this.Set((int)WixCustomTableColumnTupleFields.Attributes, (int)value); + } + + public int Width + { + get => (int)this.Fields[(int)WixCustomTableColumnTupleFields.Width]; + set => this.Set((int)WixCustomTableColumnTupleFields.Width, value); + } + + public long? MinValue + { + get => (long?)this.Fields[(int)WixCustomTableColumnTupleFields.MinValue]; + set => this.Set((int)WixCustomTableColumnTupleFields.MinValue, value); + } + + public long? MaxValue + { + get => (long?)this.Fields[(int)WixCustomTableColumnTupleFields.MaxValue]; + set => this.Set((int)WixCustomTableColumnTupleFields.MaxValue, value); + } + + public string KeyTable + { + get => (string)this.Fields[(int)WixCustomTableColumnTupleFields.KeyTable]; + set => this.Set((int)WixCustomTableColumnTupleFields.KeyTable, value); + } + + public int? KeyColumn + { + get => (int?)this.Fields[(int)WixCustomTableColumnTupleFields.KeyColumn]; + set => this.Set((int)WixCustomTableColumnTupleFields.KeyColumn, value); + } + + public string Category + { + get => (string)this.Fields[(int)WixCustomTableColumnTupleFields.Category]; + set => this.Set((int)WixCustomTableColumnTupleFields.Category, value); + } + + public string Set + { + get => (string)this.Fields[(int)WixCustomTableColumnTupleFields.Set]; + set => this.Set((int)WixCustomTableColumnTupleFields.Set, value); + } + + public string Description + { + get => (string)this.Fields[(int)WixCustomTableColumnTupleFields.Description]; + set => this.Set((int)WixCustomTableColumnTupleFields.Description, value); + } + + public WixCustomTableColumnModularizeType? Modularize + { + get => (WixCustomTableColumnModularizeType?)this.Fields[(int)WixCustomTableColumnTupleFields.Modularize].AsNullableNumber(); + set => this.Set((int)WixCustomTableColumnTupleFields.Modularize, (int?)value); + } + + public bool PrimaryKey => (this.Attributes & WixCustomTableColumnTupleAttributes.PrimaryKey) == WixCustomTableColumnTupleAttributes.PrimaryKey; + + public bool Localizable => (this.Attributes & WixCustomTableColumnTupleAttributes.Localizable) == WixCustomTableColumnTupleAttributes.Localizable; + + public bool Nullable => (this.Attributes & WixCustomTableColumnTupleAttributes.Nullable) == WixCustomTableColumnTupleAttributes.Nullable; + + public bool Unreal => (this.Attributes & WixCustomTableColumnTupleAttributes.Unreal) == WixCustomTableColumnTupleAttributes.Unreal; + } +} diff --git a/src/WixToolset.Data/Tuples/WixCustomTableTuple.cs b/src/WixToolset.Data/Tuples/WixCustomTableTuple.cs index bfb2031a..b0d12a63 100644 --- a/src/WixToolset.Data/Tuples/WixCustomTableTuple.cs +++ b/src/WixToolset.Data/Tuples/WixCustomTableTuple.cs @@ -10,18 +10,7 @@ namespace WixToolset.Data TupleDefinitionType.WixCustomTable, new[] { - new IntermediateFieldDefinition(nameof(WixCustomTableTupleFields.ColumnCount), IntermediateFieldType.Number), new IntermediateFieldDefinition(nameof(WixCustomTableTupleFields.ColumnNames), IntermediateFieldType.String), - new IntermediateFieldDefinition(nameof(WixCustomTableTupleFields.ColumnTypes), IntermediateFieldType.String), - new IntermediateFieldDefinition(nameof(WixCustomTableTupleFields.PrimaryKeys), IntermediateFieldType.String), - new IntermediateFieldDefinition(nameof(WixCustomTableTupleFields.MinValues), IntermediateFieldType.String), - new IntermediateFieldDefinition(nameof(WixCustomTableTupleFields.MaxValues), IntermediateFieldType.String), - new IntermediateFieldDefinition(nameof(WixCustomTableTupleFields.KeyTables), IntermediateFieldType.String), - new IntermediateFieldDefinition(nameof(WixCustomTableTupleFields.KeyColumns), IntermediateFieldType.String), - new IntermediateFieldDefinition(nameof(WixCustomTableTupleFields.Categories), IntermediateFieldType.String), - new IntermediateFieldDefinition(nameof(WixCustomTableTupleFields.Sets), IntermediateFieldType.String), - new IntermediateFieldDefinition(nameof(WixCustomTableTupleFields.Descriptions), IntermediateFieldType.String), - new IntermediateFieldDefinition(nameof(WixCustomTableTupleFields.Modularizations), IntermediateFieldType.String), new IntermediateFieldDefinition(nameof(WixCustomTableTupleFields.Unreal), IntermediateFieldType.Bool), }, typeof(WixCustomTableTuple)); @@ -32,23 +21,14 @@ namespace WixToolset.Data.Tuples { public enum WixCustomTableTupleFields { - ColumnCount, ColumnNames, - ColumnTypes, - PrimaryKeys, - MinValues, - MaxValues, - KeyTables, - KeyColumns, - Categories, - Sets, - Descriptions, - Modularizations, Unreal, } public class WixCustomTableTuple : IntermediateTuple { + public const char ColumnNamesSeparator = '\x85'; + public WixCustomTableTuple() : base(TupleDefinitions.WixCustomTable, null, null) { } @@ -59,82 +39,18 @@ namespace WixToolset.Data.Tuples public IntermediateField this[WixCustomTableTupleFields index] => this.Fields[(int)index]; - public int ColumnCount - { - get => (int)this.Fields[(int)WixCustomTableTupleFields.ColumnCount]; - set => this.Set((int)WixCustomTableTupleFields.ColumnCount, value); - } - public string ColumnNames { get => (string)this.Fields[(int)WixCustomTableTupleFields.ColumnNames]; set => this.Set((int)WixCustomTableTupleFields.ColumnNames, value); } - public string ColumnTypes - { - get => (string)this.Fields[(int)WixCustomTableTupleFields.ColumnTypes]; - set => this.Set((int)WixCustomTableTupleFields.ColumnTypes, value); - } - - public string PrimaryKeys - { - get => (string)this.Fields[(int)WixCustomTableTupleFields.PrimaryKeys]; - set => this.Set((int)WixCustomTableTupleFields.PrimaryKeys, value); - } - - public string MinValues - { - get => (string)this.Fields[(int)WixCustomTableTupleFields.MinValues]; - set => this.Set((int)WixCustomTableTupleFields.MinValues, value); - } - - public string MaxValues - { - get => (string)this.Fields[(int)WixCustomTableTupleFields.MaxValues]; - set => this.Set((int)WixCustomTableTupleFields.MaxValues, value); - } - - public string KeyTables - { - get => (string)this.Fields[(int)WixCustomTableTupleFields.KeyTables]; - set => this.Set((int)WixCustomTableTupleFields.KeyTables, value); - } - - public string KeyColumns - { - get => (string)this.Fields[(int)WixCustomTableTupleFields.KeyColumns]; - set => this.Set((int)WixCustomTableTupleFields.KeyColumns, value); - } - - public string Categories - { - get => (string)this.Fields[(int)WixCustomTableTupleFields.Categories]; - set => this.Set((int)WixCustomTableTupleFields.Categories, value); - } - - public string Sets - { - get => (string)this.Fields[(int)WixCustomTableTupleFields.Sets]; - set => this.Set((int)WixCustomTableTupleFields.Sets, value); - } - - public string Descriptions - { - get => (string)this.Fields[(int)WixCustomTableTupleFields.Descriptions]; - set => this.Set((int)WixCustomTableTupleFields.Descriptions, value); - } - - public string Modularizations - { - get => (string)this.Fields[(int)WixCustomTableTupleFields.Modularizations]; - set => this.Set((int)WixCustomTableTupleFields.Modularizations, value); - } - public bool Unreal { get => (bool)this.Fields[(int)WixCustomTableTupleFields.Unreal]; set => this.Set((int)WixCustomTableTupleFields.Unreal, value); } + + public string[] ColumnNamesSeparated => this.ColumnNames.Split(ColumnNamesSeparator); } } diff --git a/src/WixToolset.Data/WindowsInstaller/WindowsInstallerTableDefinitions.cs b/src/WixToolset.Data/WindowsInstaller/WindowsInstallerTableDefinitions.cs index ceeaf2fa..86db0f0a 100644 --- a/src/WixToolset.Data/WindowsInstaller/WindowsInstallerTableDefinitions.cs +++ b/src/WixToolset.Data/WindowsInstaller/WindowsInstallerTableDefinitions.cs @@ -1733,42 +1733,6 @@ namespace WixToolset.Data.WindowsInstaller tupleIdIsPrimaryKey: false ); - public static readonly TableDefinition WixCustomRow = new TableDefinition( - "WixCustomRow", - TupleDefinitions.WixCustomRow, - new[] - { - new ColumnDefinition("Table", ColumnType.String, 62, primaryKey: false, nullable: false, ColumnCategory.Unknown), - new ColumnDefinition("FieldData", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Unknown), - }, - unreal: true, - tupleIdIsPrimaryKey: false - ); - - public static readonly TableDefinition WixCustomTable = new TableDefinition( - "WixCustomTable", - TupleDefinitions.WixCustomTable, - new[] - { - new ColumnDefinition("Table", ColumnType.String, 62, primaryKey: true, nullable: false, ColumnCategory.Unknown), - new ColumnDefinition("ColumnCount", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown), - new ColumnDefinition("ColumnNames", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Unknown), - new ColumnDefinition("ColumnTypes", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Unknown), - new ColumnDefinition("PrimaryKeys", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Unknown), - new ColumnDefinition("MinValues", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Unknown), - new ColumnDefinition("MaxValues", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Unknown), - new ColumnDefinition("KeyTables", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Unknown), - new ColumnDefinition("KeyColumns", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Unknown), - new ColumnDefinition("Categories", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Unknown), - new ColumnDefinition("Sets", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Unknown), - new ColumnDefinition("Descriptions", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Unknown), - new ColumnDefinition("Modularizations", ColumnType.String, 0, primaryKey: false, nullable: false, ColumnCategory.Unknown), - new ColumnDefinition("BootstrapperApplicationData", ColumnType.Number, 2, primaryKey: false, nullable: false, ColumnCategory.Unknown), - }, - unreal: true, - tupleIdIsPrimaryKey: true - ); - public static readonly TableDefinition WixDirectory = new TableDefinition( "WixDirectory", null, @@ -2325,8 +2289,6 @@ namespace WixToolset.Data.WindowsInstaller WixComplexReference, WixComponentGroup, WixControl, - WixCustomRow, - WixCustomTable, WixDirectory, WixEnsureTable, WixFeatureGroup, -- cgit v1.2.3-55-g6feb