From 770f6f75d5f2010d8348bd2086291ccc690b1c4b Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 9 Apr 2026 21:13:55 -0400 Subject: [PATCH] Flatten Condition out of existence --- .../MetadataExtensionsTests.cs | 2 - .../MetadataExtensions.cs | 2 - SabreTools.Data.Models/Metadata/Adjuster.cs | 41 ++++++-- SabreTools.Data.Models/Metadata/Condition.cs | 67 ------------- .../Metadata/ConfSetting.cs | 41 ++++++-- .../Metadata/Configuration.cs | 41 ++++++-- SabreTools.Data.Models/Metadata/DipSwitch.cs | 41 ++++++-- SabreTools.Data.Models/Metadata/DipValue.cs | 41 ++++++-- SabreTools.Data.Models/Metadata/Enums.cs | 1 - .../DatFileTests.FromMetadata.cs | 75 +++++++------- .../DatFileTests.ToMetadata.cs | 40 ++++---- .../FormatsTests.cs | 1 - .../Formats/Listxml.cs | 1 - .../Formats/SabreJSON.cs | 3 - SabreTools.Metadata.DatItems/DatItem.cs | 1 - .../Formats/Adjuster.cs | 65 +++++------- .../Formats/Condition.cs | 98 ------------------- .../Formats/ConfSetting.cs | 65 +++++------- .../Formats/Configuration.cs | 33 ++++--- .../Formats/DipSwitch.cs | 33 ++++--- .../Formats/DipValue.cs | 65 +++++------- .../FilterObjectTests.cs | 64 +++++++----- SabreTools.Metadata.Filter/FilterKey.cs | 36 ++++--- SabreTools.Metadata.Filter/FilterObject.cs | 88 +++++++++++------ .../Listxml.Deserializer.cs | 95 ++++++++++++------ .../Listxml.Serializer.cs | 50 ++++------ 26 files changed, 548 insertions(+), 542 deletions(-) delete mode 100644 SabreTools.Data.Models/Metadata/Condition.cs delete mode 100644 SabreTools.Metadata.DatItems/Formats/Condition.cs diff --git a/SabreTools.Data.Extensions.Test/MetadataExtensionsTests.cs b/SabreTools.Data.Extensions.Test/MetadataExtensionsTests.cs index c00138eb..f015c743 100644 --- a/SabreTools.Data.Extensions.Test/MetadataExtensionsTests.cs +++ b/SabreTools.Data.Extensions.Test/MetadataExtensionsTests.cs @@ -2743,7 +2743,6 @@ namespace SabreTools.Data.Extensions.Test [InlineData("biosset", ItemType.BiosSet)] [InlineData("blank", ItemType.Blank)] [InlineData("chip", ItemType.Chip)] - [InlineData("condition", ItemType.Condition)] [InlineData("configuration", ItemType.Configuration)] [InlineData("conflocation", ItemType.ConfLocation)] [InlineData("confsetting", ItemType.ConfSetting)] @@ -3146,7 +3145,6 @@ namespace SabreTools.Data.Extensions.Test [InlineData(ItemType.BiosSet, "biosset")] [InlineData(ItemType.Blank, "blank")] [InlineData(ItemType.Chip, "chip")] - [InlineData(ItemType.Condition, "condition")] [InlineData(ItemType.Configuration, "configuration")] [InlineData(ItemType.ConfLocation, "conflocation")] [InlineData(ItemType.ConfSetting, "confsetting")] diff --git a/SabreTools.Data.Extensions/MetadataExtensions.cs b/SabreTools.Data.Extensions/MetadataExtensions.cs index 9852c363..4acd8900 100644 --- a/SabreTools.Data.Extensions/MetadataExtensions.cs +++ b/SabreTools.Data.Extensions/MetadataExtensions.cs @@ -909,7 +909,6 @@ namespace SabreTools.Data.Extensions "archive" => ItemType.Archive, "biosset" => ItemType.BiosSet, "chip" => ItemType.Chip, - "condition" => ItemType.Condition, "configuration" => ItemType.Configuration, "conflocation" => ItemType.ConfLocation, "confsetting" => ItemType.ConfSetting, @@ -1393,7 +1392,6 @@ namespace SabreTools.Data.Extensions ItemType.Archive => "archive", ItemType.BiosSet => "biosset", ItemType.Chip => "chip", - ItemType.Condition => "condition", ItemType.Configuration => "configuration", ItemType.ConfLocation => "conflocation", ItemType.ConfSetting => "confsetting", diff --git a/SabreTools.Data.Models/Metadata/Adjuster.cs b/SabreTools.Data.Models/Metadata/Adjuster.cs index 35ed6e8b..53adfeb6 100644 --- a/SabreTools.Data.Models/Metadata/Adjuster.cs +++ b/SabreTools.Data.Models/Metadata/Adjuster.cs @@ -9,7 +9,17 @@ namespace SabreTools.Data.Models.Metadata { #region Properties - public Condition? Condition { get; set; } + /// Condition subitem + public string? ConditionMask { get; set; } + + /// Condition subitem, (eq|ne|gt|le|lt|ge) + public Relation? ConditionRelation { get; set; } + + /// Condition subitem + public string? ConditionTag { get; set; } + + /// Condition subitem + public string? ConditionValue { get; set; } /// (yes|no) "no" public bool? Default { get; set; } @@ -25,7 +35,10 @@ namespace SabreTools.Data.Models.Metadata { var obj = new Adjuster(); - obj.Condition = Condition?.Clone() as Condition; + obj.ConditionMask = ConditionMask; + obj.ConditionRelation = ConditionRelation; + obj.ConditionTag = ConditionTag; + obj.ConditionValue = ConditionValue; obj.Default = Default; obj.Name = Name; @@ -40,6 +53,24 @@ namespace SabreTools.Data.Models.Metadata return false; // Properties + if ((ConditionMask is null) ^ (other.ConditionMask is null)) + return false; + else if (ConditionMask is not null && !ConditionMask.Equals(other.ConditionMask, StringComparison.OrdinalIgnoreCase)) + return false; + + if (ConditionRelation != other.ConditionRelation) + return false; + + if ((ConditionTag is null) ^ (other.ConditionTag is null)) + return false; + else if (ConditionTag is not null && !ConditionTag.Equals(other.ConditionTag, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((ConditionValue is null) ^ (other.ConditionValue is null)) + return false; + else if (ConditionValue is not null && !ConditionValue.Equals(other.ConditionValue, StringComparison.OrdinalIgnoreCase)) + return false; + if (Default != other.Default) return false; @@ -48,12 +79,6 @@ namespace SabreTools.Data.Models.Metadata else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase)) return false; - // Sub-items - if ((Condition is null) ^ (other.Condition is null)) - return false; - else if (Condition is not null && other.Condition is not null && Condition.Equals(other.Condition)) - return false; - return true; } } diff --git a/SabreTools.Data.Models/Metadata/Condition.cs b/SabreTools.Data.Models/Metadata/Condition.cs deleted file mode 100644 index b6daea52..00000000 --- a/SabreTools.Data.Models/Metadata/Condition.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System; -using System.Xml.Serialization; -using Newtonsoft.Json; - -namespace SabreTools.Data.Models.Metadata -{ - [JsonObject("condition"), XmlRoot("condition")] - public class Condition : DatItem, ICloneable, IEquatable - { - #region Properties - - public string? Mask { get; set; } - - /// (eq|ne|gt|le|lt|ge) - public Relation? Relation { get; set; } - - public string? Tag { get; set; } - - public string? Value { get; set; } - - #endregion - - public Condition() => ItemType = ItemType.Condition; - - /// - public object Clone() - { - var obj = new Condition(); - - obj.Mask = Mask; - obj.Relation = Relation; - obj.Tag = Tag; - obj.Value = Value; - - return obj; - } - - /// - public bool Equals(Condition? other) - { - // Null never matches - if (other is null) - return false; - - // Properties - if ((Mask is null) ^ (other.Mask is null)) - return false; - else if (Mask is not null && !Mask.Equals(other.Mask, StringComparison.OrdinalIgnoreCase)) - return false; - - if (Relation != other.Relation) - return false; - - if ((Tag is null) ^ (other.Tag is null)) - return false; - else if (Tag is not null && !Tag.Equals(other.Tag, StringComparison.OrdinalIgnoreCase)) - return false; - - if ((Value is null) ^ (other.Value is null)) - return false; - else if (Value is not null && !Value.Equals(other.Value, StringComparison.OrdinalIgnoreCase)) - return false; - - return true; - } - } -} diff --git a/SabreTools.Data.Models/Metadata/ConfSetting.cs b/SabreTools.Data.Models/Metadata/ConfSetting.cs index 8a0676c2..60b533c9 100644 --- a/SabreTools.Data.Models/Metadata/ConfSetting.cs +++ b/SabreTools.Data.Models/Metadata/ConfSetting.cs @@ -9,7 +9,17 @@ namespace SabreTools.Data.Models.Metadata { #region Properties - public Condition? Condition { get; set; } + /// Condition subitem + public string? ConditionMask { get; set; } + + /// Condition subitem, (eq|ne|gt|le|lt|ge) + public Relation? ConditionRelation { get; set; } + + /// Condition subitem + public string? ConditionTag { get; set; } + + /// Condition subitem + public string? ConditionValue { get; set; } /// (yes|no) "no" public bool? Default { get; set; } @@ -27,7 +37,10 @@ namespace SabreTools.Data.Models.Metadata { var obj = new ConfSetting(); - obj.Condition = Condition?.Clone() as Condition; + obj.ConditionMask = ConditionMask; + obj.ConditionRelation = ConditionRelation; + obj.ConditionTag = ConditionTag; + obj.ConditionValue = ConditionValue; obj.Default = Default; obj.Name = Name; obj.Value = Value; @@ -43,6 +56,24 @@ namespace SabreTools.Data.Models.Metadata return false; // Properties + if ((ConditionMask is null) ^ (other.ConditionMask is null)) + return false; + else if (ConditionMask is not null && !ConditionMask.Equals(other.ConditionMask, StringComparison.OrdinalIgnoreCase)) + return false; + + if (ConditionRelation != other.ConditionRelation) + return false; + + if ((ConditionTag is null) ^ (other.ConditionTag is null)) + return false; + else if (ConditionTag is not null && !ConditionTag.Equals(other.ConditionTag, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((ConditionValue is null) ^ (other.ConditionValue is null)) + return false; + else if (ConditionValue is not null && !ConditionValue.Equals(other.ConditionValue, StringComparison.OrdinalIgnoreCase)) + return false; + if (Default != other.Default) return false; @@ -56,12 +87,6 @@ namespace SabreTools.Data.Models.Metadata else if (Value is not null && !Value.Equals(other.Value, StringComparison.OrdinalIgnoreCase)) return false; - // Sub-items - if ((Condition is null) ^ (other.Condition is null)) - return false; - else if (Condition is not null && other.Condition is not null && Condition.Equals(other.Condition)) - return false; - return true; } } diff --git a/SabreTools.Data.Models/Metadata/Configuration.cs b/SabreTools.Data.Models/Metadata/Configuration.cs index 13bf012f..3a0f6f20 100644 --- a/SabreTools.Data.Models/Metadata/Configuration.cs +++ b/SabreTools.Data.Models/Metadata/Configuration.cs @@ -9,7 +9,17 @@ namespace SabreTools.Data.Models.Metadata { #region Properties - public Condition? Condition { get; set; } + /// Condition subitem + public string? ConditionMask { get; set; } + + /// Condition subitem, (eq|ne|gt|le|lt|ge) + public Relation? ConditionRelation { get; set; } + + /// Condition subitem + public string? ConditionTag { get; set; } + + /// Condition subitem + public string? ConditionValue { get; set; } public ConfLocation[]? ConfLocation { get; set; } @@ -30,7 +40,10 @@ namespace SabreTools.Data.Models.Metadata { var obj = new Configuration(); - obj.Condition = Condition?.Clone() as Condition; + obj.ConditionMask = ConditionMask; + obj.ConditionRelation = ConditionRelation; + obj.ConditionTag = ConditionTag; + obj.ConditionValue = ConditionValue; if (ConfLocation is not null) obj.ConfLocation = Array.ConvertAll(ConfLocation, i => (ConfLocation)i.Clone()); if (ConfSetting is not null) @@ -50,6 +63,24 @@ namespace SabreTools.Data.Models.Metadata return false; // Properties + if ((ConditionMask is null) ^ (other.ConditionMask is null)) + return false; + else if (ConditionMask is not null && !ConditionMask.Equals(other.ConditionMask, StringComparison.OrdinalIgnoreCase)) + return false; + + if (ConditionRelation != other.ConditionRelation) + return false; + + if ((ConditionTag is null) ^ (other.ConditionTag is null)) + return false; + else if (ConditionTag is not null && !ConditionTag.Equals(other.ConditionTag, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((ConditionValue is null) ^ (other.ConditionValue is null)) + return false; + else if (ConditionValue is not null && !ConditionValue.Equals(other.ConditionValue, StringComparison.OrdinalIgnoreCase)) + return false; + if ((Mask is null) ^ (other.Mask is null)) return false; else if (Mask is not null && !Mask.Equals(other.Mask, StringComparison.OrdinalIgnoreCase)) @@ -65,12 +96,6 @@ namespace SabreTools.Data.Models.Metadata else if (Tag is not null && !Tag.Equals(other.Tag, StringComparison.OrdinalIgnoreCase)) return false; - // Sub-items - if ((Condition is null) ^ (other.Condition is null)) - return false; - else if (Condition is not null && other.Condition is not null && Condition.Equals(other.Condition)) - return false; - // TODO: Figure out how to properly check arrays return true; diff --git a/SabreTools.Data.Models/Metadata/DipSwitch.cs b/SabreTools.Data.Models/Metadata/DipSwitch.cs index 93cc798f..a4028d18 100644 --- a/SabreTools.Data.Models/Metadata/DipSwitch.cs +++ b/SabreTools.Data.Models/Metadata/DipSwitch.cs @@ -9,7 +9,17 @@ namespace SabreTools.Data.Models.Metadata { #region Properties - public Condition? Condition { get; set; } + /// Condition subitem + public string? ConditionMask { get; set; } + + /// Condition subitem, (eq|ne|gt|le|lt|ge) + public Relation? ConditionRelation { get; set; } + + /// Condition subitem + public string? ConditionTag { get; set; } + + /// Condition subitem + public string? ConditionValue { get; set; } /// (yes|no) "no" public bool? Default { get; set; } @@ -35,7 +45,10 @@ namespace SabreTools.Data.Models.Metadata { var obj = new DipSwitch(); - obj.Condition = Condition?.Clone() as Condition; + obj.ConditionMask = ConditionMask; + obj.ConditionRelation = ConditionRelation; + obj.ConditionTag = ConditionTag; + obj.ConditionValue = ConditionValue; obj.Default = Default; if (DipLocation is not null) obj.DipLocation = Array.ConvertAll(DipLocation, i => (DipLocation)i.Clone()); @@ -58,6 +71,24 @@ namespace SabreTools.Data.Models.Metadata return false; // Properties + if ((ConditionMask is null) ^ (other.ConditionMask is null)) + return false; + else if (ConditionMask is not null && !ConditionMask.Equals(other.ConditionMask, StringComparison.OrdinalIgnoreCase)) + return false; + + if (ConditionRelation != other.ConditionRelation) + return false; + + if ((ConditionTag is null) ^ (other.ConditionTag is null)) + return false; + else if (ConditionTag is not null && !ConditionTag.Equals(other.ConditionTag, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((ConditionValue is null) ^ (other.ConditionValue is null)) + return false; + else if (ConditionValue is not null && !ConditionValue.Equals(other.ConditionValue, StringComparison.OrdinalIgnoreCase)) + return false; + if ((Mask is null) ^ (other.Mask is null)) return false; else if (Mask is not null && !Mask.Equals(other.Mask, StringComparison.OrdinalIgnoreCase)) @@ -73,12 +104,6 @@ namespace SabreTools.Data.Models.Metadata else if (Tag is not null && !Tag.Equals(other.Tag, StringComparison.OrdinalIgnoreCase)) return false; - // Sub-items - if ((Condition is null) ^ (other.Condition is null)) - return false; - else if (Condition is not null && other.Condition is not null && Condition.Equals(other.Condition)) - return false; - // TODO: Figure out how to properly check arrays return true; diff --git a/SabreTools.Data.Models/Metadata/DipValue.cs b/SabreTools.Data.Models/Metadata/DipValue.cs index c23ed88f..7b623a91 100644 --- a/SabreTools.Data.Models/Metadata/DipValue.cs +++ b/SabreTools.Data.Models/Metadata/DipValue.cs @@ -9,7 +9,17 @@ namespace SabreTools.Data.Models.Metadata { #region Properties - public Condition? Condition { get; set; } + /// Condition subitem + public string? ConditionMask { get; set; } + + /// Condition subitem, (eq|ne|gt|le|lt|ge) + public Relation? ConditionRelation { get; set; } + + /// Condition subitem + public string? ConditionTag { get; set; } + + /// Condition subitem + public string? ConditionValue { get; set; } /// (yes|no) "no" public bool? Default { get; set; } @@ -27,7 +37,10 @@ namespace SabreTools.Data.Models.Metadata { var obj = new DipValue(); - obj.Condition = Condition?.Clone() as Condition; + obj.ConditionMask = ConditionMask; + obj.ConditionRelation = ConditionRelation; + obj.ConditionTag = ConditionTag; + obj.ConditionValue = ConditionValue; obj.Default = Default; obj.Name = Name; obj.Value = Value; @@ -43,6 +56,24 @@ namespace SabreTools.Data.Models.Metadata return false; // Properties + if ((ConditionMask is null) ^ (other.ConditionMask is null)) + return false; + else if (ConditionMask is not null && !ConditionMask.Equals(other.ConditionMask, StringComparison.OrdinalIgnoreCase)) + return false; + + if (ConditionRelation != other.ConditionRelation) + return false; + + if ((ConditionTag is null) ^ (other.ConditionTag is null)) + return false; + else if (ConditionTag is not null && !ConditionTag.Equals(other.ConditionTag, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((ConditionValue is null) ^ (other.ConditionValue is null)) + return false; + else if (ConditionValue is not null && !ConditionValue.Equals(other.ConditionValue, StringComparison.OrdinalIgnoreCase)) + return false; + if (Default != other.Default) return false; @@ -56,12 +87,6 @@ namespace SabreTools.Data.Models.Metadata else if (Value is not null && !Value.Equals(other.Value, StringComparison.OrdinalIgnoreCase)) return false; - // Sub-items - if ((Condition is null) ^ (other.Condition is null)) - return false; - else if (Condition is not null && other.Condition is not null && Condition.Equals(other.Condition)) - return false; - return true; } } diff --git a/SabreTools.Data.Models/Metadata/Enums.cs b/SabreTools.Data.Models/Metadata/Enums.cs index d29315e0..d97ef77f 100644 --- a/SabreTools.Data.Models/Metadata/Enums.cs +++ b/SabreTools.Data.Models/Metadata/Enums.cs @@ -276,7 +276,6 @@ namespace SabreTools.Data.Models.Metadata Archive, BiosSet, Chip, - Condition, Configuration, ConfLocation, ConfSetting, diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs index dbdd82fc..7209020f 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs @@ -346,7 +346,10 @@ namespace SabreTools.Metadata.DatFiles.Test { return new Data.Models.Metadata.Adjuster { - Condition = CreateMetadataCondition(), + ConditionValue = "value", + ConditionMask = "mask", + ConditionRelation = Data.Models.Metadata.Relation.Equal, + ConditionTag = "tag", Default = true, Name = "name", }; @@ -427,7 +430,10 @@ namespace SabreTools.Metadata.DatFiles.Test { return new Data.Models.Metadata.Configuration { - Condition = CreateMetadataCondition(), + ConditionValue = "value", + ConditionMask = "mask", + ConditionRelation = Data.Models.Metadata.Relation.Equal, + ConditionTag = "tag", ConfLocation = [CreateMetadataConfLocation()], ConfSetting = [CreateMetadataConfSetting()], Mask = "mask", @@ -436,17 +442,6 @@ namespace SabreTools.Metadata.DatFiles.Test }; } - private static Data.Models.Metadata.Condition CreateMetadataCondition() - { - return new Data.Models.Metadata.Condition - { - Value = "value", - Mask = "mask", - Relation = Data.Models.Metadata.Relation.Equal, - Tag = "tag", - }; - } - private static Data.Models.Metadata.ConfLocation CreateMetadataConfLocation() { return new Data.Models.Metadata.ConfLocation @@ -461,7 +456,10 @@ namespace SabreTools.Metadata.DatFiles.Test { return new Data.Models.Metadata.ConfSetting { - Condition = CreateMetadataCondition(), + ConditionValue = "value", + ConditionMask = "mask", + ConditionRelation = Data.Models.Metadata.Relation.Equal, + ConditionTag = "tag", Default = true, Name = "name", Value = "value", @@ -523,7 +521,10 @@ namespace SabreTools.Metadata.DatFiles.Test { return new Data.Models.Metadata.DipSwitch { - Condition = CreateMetadataCondition(), + ConditionValue = "value", + ConditionMask = "mask", + ConditionRelation = Data.Models.Metadata.Relation.Equal, + ConditionTag = "tag", Default = true, DipLocation = [CreateMetadataDipLocation()], DipValue = [CreateMetadataDipValue()], @@ -538,7 +539,10 @@ namespace SabreTools.Metadata.DatFiles.Test { return new Data.Models.Metadata.DipValue { - Condition = CreateMetadataCondition(), + ConditionValue = "value", + ConditionMask = "mask", + ConditionRelation = Data.Models.Metadata.Relation.Equal, + ConditionTag = "tag", Default = true, Name = "name", Value = "value", @@ -1132,10 +1136,12 @@ namespace SabreTools.Metadata.DatFiles.Test private static void ValidateAdjuster(Adjuster? adjuster) { Assert.NotNull(adjuster); + Assert.Equal("value", adjuster.ConditionValue); + Assert.Equal("mask", adjuster.ConditionMask); + Assert.Equal(Data.Models.Metadata.Relation.Equal, adjuster.ConditionRelation); + Assert.Equal("tag", adjuster.ConditionTag); Assert.True(adjuster.Default); Assert.Equal("name", adjuster.Name); - - ValidateCondition(adjuster.Condition); } private static void ValidateAnalog(Analog? analog) @@ -1169,24 +1175,17 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.ChipType); } - private static void ValidateCondition(Condition? condition) - { - Assert.NotNull(condition); - Assert.Equal("value", condition.Value); - Assert.Equal("mask", condition.Mask); - Assert.Equal(Data.Models.Metadata.Relation.Equal, condition.Relation); - Assert.Equal("tag", condition.Tag); - } - private static void ValidateConfiguration(Configuration? configuration) { Assert.NotNull(configuration); + Assert.Equal("value", configuration.ConditionValue); + Assert.Equal("mask", configuration.ConditionMask); + Assert.Equal(Data.Models.Metadata.Relation.Equal, configuration.ConditionRelation); + Assert.Equal("tag", configuration.ConditionTag); Assert.Equal("mask", configuration.Mask); Assert.Equal("name", configuration.Name); Assert.Equal("tag", configuration.Tag); - ValidateCondition(configuration.Condition); - ConfLocation[]? confLocations = configuration.ConfLocation; Assert.NotNull(confLocations); ConfLocation? confLocation = Assert.Single(confLocations); @@ -1209,11 +1208,13 @@ namespace SabreTools.Metadata.DatFiles.Test private static void ValidateConfSetting(ConfSetting? confSetting) { Assert.NotNull(confSetting); + Assert.Equal("value", confSetting.ConditionValue); + Assert.Equal("mask", confSetting.ConditionMask); + Assert.Equal(Data.Models.Metadata.Relation.Equal, confSetting.ConditionRelation); + Assert.Equal("tag", confSetting.ConditionTag); Assert.True(confSetting.Default); Assert.Equal("name", confSetting.Name); Assert.Equal("value", confSetting.Value); - - ValidateCondition(confSetting.Condition); } private static void ValidateControl(Control? control) @@ -1276,13 +1277,15 @@ namespace SabreTools.Metadata.DatFiles.Test private static void ValidateDipSwitch(DipSwitch? dipSwitch) { Assert.NotNull(dipSwitch); + Assert.Equal("value", dipSwitch.ConditionValue); + Assert.Equal("mask", dipSwitch.ConditionMask); + Assert.Equal(Data.Models.Metadata.Relation.Equal, dipSwitch.ConditionRelation); + Assert.Equal("tag", dipSwitch.ConditionTag); Assert.True(dipSwitch.Default); Assert.Equal("mask", dipSwitch.Mask); Assert.Equal("name", dipSwitch.Name); Assert.Equal("tag", dipSwitch.Tag); - ValidateCondition(dipSwitch.Condition); - DipLocation[]? dipLocations = dipSwitch.DipLocation; Assert.NotNull(dipLocations); DipLocation? dipLocation = Assert.Single(dipLocations); @@ -1302,11 +1305,13 @@ namespace SabreTools.Metadata.DatFiles.Test private static void ValidateDipValue(DipValue? dipValue) { Assert.NotNull(dipValue); + Assert.Equal("value", dipValue.ConditionValue); + Assert.Equal("mask", dipValue.ConditionMask); + Assert.Equal(Data.Models.Metadata.Relation.Equal, dipValue.ConditionRelation); + Assert.Equal("tag", dipValue.ConditionTag); Assert.True(dipValue.Default); Assert.Equal("name", dipValue.Name); Assert.Equal("value", dipValue.Value); - - ValidateCondition(dipValue.Condition); } private static void ValidateDisk(Disk? disk) diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs index 754d2152..841eccbb 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs @@ -612,11 +612,12 @@ namespace SabreTools.Metadata.DatFiles.Test private static void ValidateMetadataAdjuster(Data.Models.Metadata.Adjuster? adjuster) { Assert.NotNull(adjuster); + Assert.Equal("value", adjuster.ConditionValue); + Assert.Equal("mask", adjuster.ConditionMask); + Assert.Equal(Data.Models.Metadata.Relation.Equal, adjuster.ConditionRelation); + Assert.Equal("tag", adjuster.ConditionTag); Assert.True(adjuster.Default); Assert.Equal("name", adjuster.Name); - - Data.Models.Metadata.Condition? condition = adjuster.Condition; - ValidateMetadataCondition(condition); } private static void ValidateMetadataAnalog(Data.Models.Metadata.Analog? analog) @@ -682,24 +683,17 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.ChipType); } - private static void ValidateMetadataCondition(Data.Models.Metadata.Condition? condition) - { - Assert.NotNull(condition); - Assert.Equal("value", condition.Value); - Assert.Equal("mask", condition.Mask); - Assert.Equal(Data.Models.Metadata.Relation.Equal, condition.Relation); - Assert.Equal("tag", condition.Tag); - } - private static void ValidateMetadataConfiguration(Data.Models.Metadata.Configuration? configuration) { Assert.NotNull(configuration); + Assert.Equal("value", configuration.ConditionValue); + Assert.Equal("mask", configuration.ConditionMask); + Assert.Equal(Data.Models.Metadata.Relation.Equal, configuration.ConditionRelation); + Assert.Equal("tag", configuration.ConditionTag); Assert.Equal("mask", configuration.Mask); Assert.Equal("name", configuration.Name); Assert.Equal("tag", configuration.Tag); - ValidateMetadataCondition(configuration.Condition); - Data.Models.Metadata.ConfLocation[]? confLocations = configuration.ConfLocation; Assert.NotNull(confLocations); Data.Models.Metadata.ConfLocation? confLocation = Assert.Single(confLocations); @@ -722,11 +716,13 @@ namespace SabreTools.Metadata.DatFiles.Test private static void ValidateMetadataConfSetting(Data.Models.Metadata.ConfSetting? confSetting) { Assert.NotNull(confSetting); + Assert.Equal("value", confSetting.ConditionValue); + Assert.Equal("mask", confSetting.ConditionMask); + Assert.Equal(Data.Models.Metadata.Relation.Equal, confSetting.ConditionRelation); + Assert.Equal("tag", confSetting.ConditionTag); Assert.True(confSetting.Default); Assert.Equal("name", confSetting.Name); Assert.Equal("value", confSetting.Value); - - ValidateMetadataCondition(confSetting.Condition); } private static void ValidateMetadataControl(Data.Models.Metadata.Control? control) @@ -794,13 +790,15 @@ namespace SabreTools.Metadata.DatFiles.Test private static void ValidateMetadataDipSwitch(Data.Models.Metadata.DipSwitch? dipSwitch) { Assert.NotNull(dipSwitch); + Assert.Equal("value", dipSwitch.ConditionValue); + Assert.Equal("mask", dipSwitch.ConditionMask); + Assert.Equal(Data.Models.Metadata.Relation.Equal, dipSwitch.ConditionRelation); + Assert.Equal("tag", dipSwitch.ConditionTag); Assert.True(dipSwitch.Default); Assert.Equal("mask", dipSwitch.Mask); Assert.Equal("name", dipSwitch.Name); Assert.Equal("tag", dipSwitch.Tag); - ValidateMetadataCondition(dipSwitch.Condition); - Data.Models.Metadata.DipLocation[]? dipLocations = dipSwitch.DipLocation; Assert.NotNull(dipLocations); Data.Models.Metadata.DipLocation? dipLocation = Assert.Single(dipLocations); @@ -820,11 +818,13 @@ namespace SabreTools.Metadata.DatFiles.Test private static void ValidateMetadataDipValue(Data.Models.Metadata.DipValue? dipValue) { Assert.NotNull(dipValue); + Assert.Equal("value", dipValue.ConditionValue); + Assert.Equal("mask", dipValue.ConditionMask); + Assert.Equal(Data.Models.Metadata.Relation.Equal, dipValue.ConditionRelation); + Assert.Equal("tag", dipValue.ConditionTag); Assert.True(dipValue.Default); Assert.Equal("name", dipValue.Name); Assert.Equal("value", dipValue.Value); - - ValidateMetadataCondition(dipValue.Condition); } private static void ValidateMetadataDisk(Data.Models.Metadata.Disk? disk) diff --git a/SabreTools.Metadata.DatFiles.Test/FormatsTests.cs b/SabreTools.Metadata.DatFiles.Test/FormatsTests.cs index 63b7cf5e..ff4a96fd 100644 --- a/SabreTools.Metadata.DatFiles.Test/FormatsTests.cs +++ b/SabreTools.Metadata.DatFiles.Test/FormatsTests.cs @@ -760,7 +760,6 @@ namespace SabreTools.Metadata.DatFiles.Test Data.Models.Metadata.ItemType.Adjuster, Data.Models.Metadata.ItemType.BiosSet, Data.Models.Metadata.ItemType.Chip, - Data.Models.Metadata.ItemType.Condition, Data.Models.Metadata.ItemType.Configuration, Data.Models.Metadata.ItemType.Device, Data.Models.Metadata.ItemType.DeviceRef, diff --git a/SabreTools.Metadata.DatFiles/Formats/Listxml.cs b/SabreTools.Metadata.DatFiles/Formats/Listxml.cs index 4cd7ae9e..8b9fb617 100644 --- a/SabreTools.Metadata.DatFiles/Formats/Listxml.cs +++ b/SabreTools.Metadata.DatFiles/Formats/Listxml.cs @@ -189,7 +189,6 @@ namespace SabreTools.Metadata.DatFiles.Formats Data.Models.Metadata.ItemType.Adjuster, Data.Models.Metadata.ItemType.BiosSet, Data.Models.Metadata.ItemType.Chip, - Data.Models.Metadata.ItemType.Condition, Data.Models.Metadata.ItemType.Configuration, Data.Models.Metadata.ItemType.Device, Data.Models.Metadata.ItemType.DeviceRef, diff --git a/SabreTools.Metadata.DatFiles/Formats/SabreJSON.cs b/SabreTools.Metadata.DatFiles/Formats/SabreJSON.cs index cbd62453..1eac587b 100644 --- a/SabreTools.Metadata.DatFiles/Formats/SabreJSON.cs +++ b/SabreTools.Metadata.DatFiles/Formats/SabreJSON.cs @@ -273,9 +273,6 @@ namespace SabreTools.Metadata.DatFiles.Formats case Data.Models.Metadata.ItemType.Chip: datItem = datItemObj.ToObject(); break; - case Data.Models.Metadata.ItemType.Condition: - datItem = datItemObj.ToObject(); - break; case Data.Models.Metadata.ItemType.Configuration: datItem = datItemObj.ToObject(); break; diff --git a/SabreTools.Metadata.DatItems/DatItem.cs b/SabreTools.Metadata.DatItems/DatItem.cs index 7b458c6f..65173aca 100644 --- a/SabreTools.Metadata.DatItems/DatItem.cs +++ b/SabreTools.Metadata.DatItems/DatItem.cs @@ -17,7 +17,6 @@ namespace SabreTools.Metadata.DatItems [XmlInclude(typeof(BiosSet))] [XmlInclude(typeof(Blank))] [XmlInclude(typeof(Chip))] - [XmlInclude(typeof(Condition))] [XmlInclude(typeof(Configuration))] [XmlInclude(typeof(ConfLocation))] [XmlInclude(typeof(ConfSetting))] diff --git a/SabreTools.Metadata.DatItems/Formats/Adjuster.cs b/SabreTools.Metadata.DatItems/Formats/Adjuster.cs index f11b1fba..6f364968 100644 --- a/SabreTools.Metadata.DatItems/Formats/Adjuster.cs +++ b/SabreTools.Metadata.DatItems/Formats/Adjuster.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Metadata.Filter; namespace SabreTools.Metadata.DatItems.Formats { @@ -12,10 +11,29 @@ namespace SabreTools.Metadata.DatItems.Formats { #region Properties - public Condition? Condition { get; set; } + public string? ConditionMask + { + get => _internal.ConditionMask; + set => _internal.ConditionMask = value; + } - [JsonIgnore] - public bool ConditionSpecified => Condition is not null; + public Data.Models.Metadata.Relation? ConditionRelation + { + get => _internal.ConditionRelation; + set => _internal.ConditionRelation = value; + } + + public string? ConditionTag + { + get => _internal.ConditionTag; + set => _internal.ConditionTag = value; + } + + public string? ConditionValue + { + get => _internal.ConditionValue; + set => _internal.ConditionValue = value; + } public bool? Default { @@ -39,12 +57,7 @@ namespace SabreTools.Metadata.DatItems.Formats public Adjuster() : base() { } - public Adjuster(Data.Models.Metadata.Adjuster item) : base(item) - { - // Handle subitems - if (item.Condition is not null) - Condition = new Condition(item.Condition); - } + public Adjuster(Data.Models.Metadata.Adjuster item) : base(item) { } public Adjuster(Data.Models.Metadata.Adjuster item, Machine machine, Source source) : this(item) { @@ -71,14 +84,7 @@ namespace SabreTools.Metadata.DatItems.Formats /// public override Data.Models.Metadata.Adjuster GetInternalClone() - { - var adjusterItem = _internal.Clone() as Data.Models.Metadata.Adjuster ?? new(); - - if (Condition is not null) - adjusterItem.Condition = Condition.GetInternalClone(); - - return adjusterItem; - } + =>_internal.Clone() as Data.Models.Metadata.Adjuster ?? new(); #endregion @@ -100,28 +106,5 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion - - #region Manipulation - - /// - public override bool PassesFilter(FilterRunner filterRunner) - { - if (Machine is not null && !Machine.PassesFilter(filterRunner)) - return false; - - // TODO: Condition - - return filterRunner.Run(_internal); - } - - /// - public override bool PassesFilterDB(FilterRunner filterRunner) - { - // TODO: Condition - - return filterRunner.Run(_internal); - } - - #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Condition.cs b/SabreTools.Metadata.DatItems/Formats/Condition.cs deleted file mode 100644 index 6a9b8737..00000000 --- a/SabreTools.Metadata.DatItems/Formats/Condition.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System.Xml.Serialization; -using Newtonsoft.Json; - -namespace SabreTools.Metadata.DatItems.Formats -{ - /// - /// Represents a condition on a machine or other item - /// - [JsonObject("condition"), XmlRoot("condition")] - public sealed class Condition : DatItem - { - #region Properties - - /// /> - public override Data.Models.Metadata.ItemType ItemType - => Data.Models.Metadata.ItemType.Condition; - - public string? Mask - { - get => _internal.Mask; - set => _internal.Mask = value; - } - - public Data.Models.Metadata.Relation? Relation - { - get => _internal.Relation; - set => _internal.Relation = value; - } - - public string? Tag - { - get => _internal.Tag; - set => _internal.Tag = value; - } - - public string? Value - { - get => _internal.Value; - set => _internal.Value = value; - } - - #endregion - - #region Constructors - - public Condition() : base() { } - - public Condition(Data.Models.Metadata.Condition item) : base(item) { } - - public Condition(Data.Models.Metadata.Condition item, Machine machine, Source source) : this(item) - { - Source = source; - CopyMachineInformation(machine); - } - - #endregion - - #region Accessors - - /// - public override string? GetName() => null; - - /// - public override void SetName(string? name) { } - - #endregion - - #region Cloning Methods - - /// - public override object Clone() => new Condition(GetInternalClone()); - - /// - public override Data.Models.Metadata.Condition GetInternalClone() - => _internal.Clone() as Data.Models.Metadata.Condition ?? new(); - - #endregion - - #region Comparision Methods - - /// - public override bool Equals(DatItem? other) - { - // If the other item is null - if (other is null) - return false; - - // If the type matches - if (other is Condition otherCondition) - return _internal.Equals(otherCondition._internal); - - // Everything else fails - return false; - } - - #endregion - } -} diff --git a/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs b/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs index d21a7088..ad099207 100644 --- a/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs +++ b/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Metadata.Filter; namespace SabreTools.Metadata.DatItems.Formats { @@ -12,10 +11,29 @@ namespace SabreTools.Metadata.DatItems.Formats { #region Properties - public Condition? Condition { get; set; } + public string? ConditionMask + { + get => _internal.ConditionMask; + set => _internal.ConditionMask = value; + } - [JsonIgnore] - public bool ConditionSpecified => Condition is not null; + public Data.Models.Metadata.Relation? ConditionRelation + { + get => _internal.ConditionRelation; + set => _internal.ConditionRelation = value; + } + + public string? ConditionTag + { + get => _internal.ConditionTag; + set => _internal.ConditionTag = value; + } + + public string? ConditionValue + { + get => _internal.ConditionValue; + set => _internal.ConditionValue = value; + } public bool? Default { @@ -45,12 +63,7 @@ namespace SabreTools.Metadata.DatItems.Formats public ConfSetting() : base() { } - public ConfSetting(Data.Models.Metadata.ConfSetting item) : base(item) - { - // Handle subitems - if (item.Condition is not null) - Condition = new Condition(item.Condition); - } + public ConfSetting(Data.Models.Metadata.ConfSetting item) : base(item) { } public ConfSetting(Data.Models.Metadata.ConfSetting item, Machine machine, Source source) : this(item) { @@ -77,14 +90,7 @@ namespace SabreTools.Metadata.DatItems.Formats /// public override Data.Models.Metadata.ConfSetting GetInternalClone() - { - var confSettingItem = _internal.Clone() as Data.Models.Metadata.ConfSetting ?? new(); - - if (Condition is not null) - confSettingItem.Condition = Condition.GetInternalClone(); - - return confSettingItem; - } + => _internal.Clone() as Data.Models.Metadata.ConfSetting ?? new(); #endregion @@ -106,28 +112,5 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion - - #region Manipulation - - /// - public override bool PassesFilter(FilterRunner filterRunner) - { - if (Machine is not null && !Machine.PassesFilter(filterRunner)) - return false; - - // TODO: Condition - - return filterRunner.Run(_internal); - } - - /// - public override bool PassesFilterDB(FilterRunner filterRunner) - { - // TODO: Condition - - return filterRunner.Run(_internal); - } - - #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Configuration.cs b/SabreTools.Metadata.DatItems/Formats/Configuration.cs index 47639766..cff751e8 100644 --- a/SabreTools.Metadata.DatItems/Formats/Configuration.cs +++ b/SabreTools.Metadata.DatItems/Formats/Configuration.cs @@ -13,10 +13,29 @@ namespace SabreTools.Metadata.DatItems.Formats { #region Properties - public Condition? Condition { get; set; } + public string? ConditionMask + { + get => _internal.ConditionMask; + set => _internal.ConditionMask = value; + } - [JsonIgnore] - public bool ConditionSpecified => Condition is not null; + public Data.Models.Metadata.Relation? ConditionRelation + { + get => _internal.ConditionRelation; + set => _internal.ConditionRelation = value; + } + + public string? ConditionTag + { + get => _internal.ConditionTag; + set => _internal.ConditionTag = value; + } + + public string? ConditionValue + { + get => _internal.ConditionValue; + set => _internal.ConditionValue = value; + } public ConfLocation[]? ConfLocation { get; set; } @@ -59,9 +78,6 @@ namespace SabreTools.Metadata.DatItems.Formats public Configuration(Data.Models.Metadata.Configuration item) : base(item) { // Handle subitems - if (item.Condition is not null) - Condition = new Condition(item.Condition); - if (item.ConfLocation is not null) ConfLocation = Array.ConvertAll(item.ConfLocation, confLocation => new ConfLocation(confLocation)); @@ -97,9 +113,6 @@ namespace SabreTools.Metadata.DatItems.Formats { var configurationItem = _internal.Clone() as Data.Models.Metadata.Configuration ?? new(); - if (Condition is not null) - configurationItem.Condition = Condition.GetInternalClone(); - if (ConfLocation is not null) configurationItem.ConfLocation = Array.ConvertAll(ConfLocation, confLocation => confLocation.GetInternalClone()); @@ -138,7 +151,6 @@ namespace SabreTools.Metadata.DatItems.Formats if (Machine is not null && !Machine.PassesFilter(filterRunner)) return false; - // TODO: Condition // TODO: ConfLocation // TODO: ConfSetting @@ -148,7 +160,6 @@ namespace SabreTools.Metadata.DatItems.Formats /// public override bool PassesFilterDB(FilterRunner filterRunner) { - // TODO: Condition // TODO: ConfLocation // TODO: ConfSetting diff --git a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs index b5fcce0b..23e5c015 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs @@ -13,10 +13,29 @@ namespace SabreTools.Metadata.DatItems.Formats { #region Properties - public Condition? Condition { get; set; } + public string? ConditionMask + { + get => _internal.ConditionMask; + set => _internal.ConditionMask = value; + } - [JsonIgnore] - public bool ConditionSpecified => Condition is not null; + public Data.Models.Metadata.Relation? ConditionRelation + { + get => _internal.ConditionRelation; + set => _internal.ConditionRelation = value; + } + + public string? ConditionTag + { + get => _internal.ConditionTag; + set => _internal.ConditionTag = value; + } + + public string? ConditionValue + { + get => _internal.ConditionValue; + set => _internal.ConditionValue = value; + } public bool? Default { @@ -83,9 +102,6 @@ namespace SabreTools.Metadata.DatItems.Formats public DipSwitch(Data.Models.Metadata.DipSwitch item) : base(item) { // Handle subitems - if (item.Condition is not null) - Condition = new Condition(item.Condition); - if (item.DipLocation is not null) DipLocation = Array.ConvertAll(item.DipLocation, dipLocation => new DipLocation(dipLocation)); @@ -124,9 +140,6 @@ namespace SabreTools.Metadata.DatItems.Formats { var dipSwitchItem = _internal.Clone() as Data.Models.Metadata.DipSwitch ?? new(); - if (Condition is not null) - dipSwitchItem.Condition = Condition.GetInternalClone(); - if (DipLocation is not null) dipSwitchItem.DipLocation = Array.ConvertAll(DipLocation, dipLocation => dipLocation.GetInternalClone()); @@ -168,7 +181,6 @@ namespace SabreTools.Metadata.DatItems.Formats if (Machine is not null && !Machine.PassesFilter(filterRunner)) return false; - // TODO: Condition // TODO: DipLocation // TODO: DipValue // TODO: Entry @@ -179,7 +191,6 @@ namespace SabreTools.Metadata.DatItems.Formats /// public override bool PassesFilterDB(FilterRunner filterRunner) { - // TODO: Condition // TODO: DipLocation // TODO: DipValue // TODO: Entry diff --git a/SabreTools.Metadata.DatItems/Formats/DipValue.cs b/SabreTools.Metadata.DatItems/Formats/DipValue.cs index 4e8adf02..13c48ff0 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipValue.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipValue.cs @@ -1,6 +1,5 @@ using System.Xml.Serialization; using Newtonsoft.Json; -using SabreTools.Metadata.Filter; namespace SabreTools.Metadata.DatItems.Formats { @@ -12,10 +11,29 @@ namespace SabreTools.Metadata.DatItems.Formats { #region Properties - public Condition? Condition { get; set; } + public string? ConditionMask + { + get => _internal.ConditionMask; + set => _internal.ConditionMask = value; + } - [JsonIgnore] - public bool ConditionSpecified => Condition is not null; + public Data.Models.Metadata.Relation? ConditionRelation + { + get => _internal.ConditionRelation; + set => _internal.ConditionRelation = value; + } + + public string? ConditionTag + { + get => _internal.ConditionTag; + set => _internal.ConditionTag = value; + } + + public string? ConditionValue + { + get => _internal.ConditionValue; + set => _internal.ConditionValue = value; + } public bool? Default { @@ -45,12 +63,7 @@ namespace SabreTools.Metadata.DatItems.Formats public DipValue() : base() { } - public DipValue(Data.Models.Metadata.DipValue item) : base(item) - { - // Handle subitems - if (item.Condition is not null) - Condition = new Condition(item.Condition); - } + public DipValue(Data.Models.Metadata.DipValue item) : base(item) { } public DipValue(Data.Models.Metadata.DipValue item, Machine machine, Source source) : this(item) { @@ -77,14 +90,7 @@ namespace SabreTools.Metadata.DatItems.Formats /// public override Data.Models.Metadata.DipValue GetInternalClone() - { - var dipValueItem = _internal.Clone() as Data.Models.Metadata.DipValue ?? new(); - - if (Condition is not null) - dipValueItem.Condition = Condition.GetInternalClone(); - - return dipValueItem; - } + => _internal.Clone() as Data.Models.Metadata.DipValue ?? new(); #endregion @@ -106,28 +112,5 @@ namespace SabreTools.Metadata.DatItems.Formats } #endregion - - #region Manipulation - - /// - public override bool PassesFilter(FilterRunner filterRunner) - { - if (Machine is not null && !Machine.PassesFilter(filterRunner)) - return false; - - // TODO: Condition - - return filterRunner.Run(_internal); - } - - /// - public override bool PassesFilterDB(FilterRunner filterRunner) - { - // TODO: Condition - - return filterRunner.Run(_internal); - } - - #endregion } } diff --git a/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs b/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs index c377eb7c..9e1e7a9c 100644 --- a/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs +++ b/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs @@ -477,6 +477,10 @@ namespace SabreTools.Metadata.Filter.Test #region Adjuster [Theory] + [InlineData("adjuster.condition.mask", "mask")] + [InlineData("adjuster.condition.relation", "ne")] + [InlineData("adjuster.condition.tag", "tag")] + [InlineData("adjuster.condition.value", "value")] [InlineData("adjuster.default", "yes")] [InlineData("adjuster.name", "name")] public void Matches_Adjsuter(string itemField, string value) @@ -484,6 +488,10 @@ namespace SabreTools.Metadata.Filter.Test var filter = new FilterObject(itemField, value, Operation.Equals); Adjuster obj = new Adjuster { + ConditionMask = "mask", + ConditionRelation = Relation.NotEqual, + ConditionTag = "tag", + ConditionValue = "value", Default = true, Name = "name", }; @@ -645,33 +653,13 @@ namespace SabreTools.Metadata.Filter.Test #endregion - #region Condition - - [Theory] - [InlineData("condition.mask", "mask")] - [InlineData("condition.relation", "ne")] - [InlineData("condition.tag", "tag")] - [InlineData("condition.value", "value")] - public void Matches_Condition(string itemField, string value) - { - var filter = new FilterObject(itemField, value, Operation.Equals); - Condition obj = new Condition - { - Mask = "mask", - Relation = Relation.NotEqual, - Tag = "tag", - Value = "value", - }; - - bool actual = filter.Matches(obj); - Assert.True(actual); - } - - #endregion - #region Configuration [Theory] + [InlineData("configuration.condition.mask", "mask")] + [InlineData("configuration.condition.relation", "ne")] + [InlineData("configuration.condition.tag", "tag")] + [InlineData("configuration.condition.value", "value")] [InlineData("configuration.mask", "mask")] [InlineData("configuration.name", "name")] [InlineData("configuration.tag", "tag")] @@ -680,6 +668,10 @@ namespace SabreTools.Metadata.Filter.Test var filter = new FilterObject(itemField, value, Operation.Equals); Configuration obj = new Configuration { + ConditionMask = "mask", + ConditionRelation = Relation.NotEqual, + ConditionTag = "tag", + ConditionValue = "value", Mask = "mask", Name = "name", Tag = "tag", @@ -716,6 +708,10 @@ namespace SabreTools.Metadata.Filter.Test #region ConfSetting [Theory] + [InlineData("confsetting.condition.mask", "mask")] + [InlineData("confsetting.condition.relation", "ne")] + [InlineData("confsetting.condition.tag", "tag")] + [InlineData("confsetting.condition.value", "value")] [InlineData("confsetting.default", "yes")] [InlineData("confsetting.name", "name")] [InlineData("confsetting.value", "value")] @@ -724,6 +720,10 @@ namespace SabreTools.Metadata.Filter.Test var filter = new FilterObject(itemField, value, Operation.Equals); ConfSetting obj = new ConfSetting { + ConditionMask = "mask", + ConditionRelation = Relation.NotEqual, + ConditionTag = "tag", + ConditionValue = "value", Default = true, Name = "name", Value = "value", @@ -868,6 +868,10 @@ namespace SabreTools.Metadata.Filter.Test #region DipSwitch [Theory] + [InlineData("dipswitch.condition.mask", "mask")] + [InlineData("dipswitch.condition.relation", "ne")] + [InlineData("dipswitch.condition.tag", "tag")] + [InlineData("dipswitch.condition.value", "value")] [InlineData("dipswitch.default", "yes")] [InlineData("dipswitch.mask", "mask")] [InlineData("dipswitch.name", "name")] @@ -877,6 +881,10 @@ namespace SabreTools.Metadata.Filter.Test var filter = new FilterObject(itemField, value, Operation.Equals); DipSwitch obj = new DipSwitch { + ConditionMask = "mask", + ConditionRelation = Relation.NotEqual, + ConditionTag = "tag", + ConditionValue = "value", Default = true, Mask = "mask", Name = "name", @@ -892,6 +900,10 @@ namespace SabreTools.Metadata.Filter.Test #region DipValue [Theory] + [InlineData("dipvalue.condition.mask", "mask")] + [InlineData("dipvalue.condition.relation", "ne")] + [InlineData("dipvalue.condition.tag", "tag")] + [InlineData("dipvalue.condition.value", "value")] [InlineData("dipvalue.default", "yes")] [InlineData("dipvalue.name", "name")] [InlineData("dipvalue.value", "value")] @@ -900,6 +912,10 @@ namespace SabreTools.Metadata.Filter.Test var filter = new FilterObject(itemField, value, Operation.Equals); DipValue obj = new DipValue { + ConditionMask = "mask", + ConditionRelation = Relation.NotEqual, + ConditionTag = "tag", + ConditionValue = "value", Default = true, Name = "name", Value = "value", diff --git a/SabreTools.Metadata.Filter/FilterKey.cs b/SabreTools.Metadata.Filter/FilterKey.cs index f74a1481..2fd00fa0 100644 --- a/SabreTools.Metadata.Filter/FilterKey.cs +++ b/SabreTools.Metadata.Filter/FilterKey.cs @@ -40,6 +40,10 @@ namespace SabreTools.Metadata.Filter /// private static readonly string[] _adjusterKeys = [ + "condition.mask", + "condition.relation", + "condition.tag", + "condition.value", "default", "name" ]; @@ -116,22 +120,15 @@ namespace SabreTools.Metadata.Filter "tag", ]; - /// - /// Known keys for Condition - /// - private static readonly string[] _conditionKeys = - [ - "mask", - "relation", - "tag", - "value", - ]; - /// /// Known keys for Configuration /// private static readonly string[] _configurationKeys = [ + "condition.mask", + "condition.relation", + "condition.tag", + "condition.value", "mask", "name", "tag", @@ -152,6 +149,10 @@ namespace SabreTools.Metadata.Filter /// private static readonly string[] _confSettingKeys = [ + "condition.mask", + "condition.relation", + "condition.tag", + "condition.value", "default", "name", "value", @@ -222,6 +223,10 @@ namespace SabreTools.Metadata.Filter /// private static readonly string[] _dipSwitchKeys = [ + "condition.mask", + "condition.relation", + "condition.tag", + "condition.value", "default", "mask", "name", @@ -233,6 +238,10 @@ namespace SabreTools.Metadata.Filter /// private static readonly string[] _dipValueKeys = [ + "condition.mask", + "condition.relation", + "condition.tag", + "condition.value", "default", "name", "value", @@ -876,12 +885,12 @@ namespace SabreTools.Metadata.Filter // If we only have one part, we can't do anything string[] splitFilter = itemFieldString!.Split('.'); - if (splitFilter.Length != 2) + if (splitFilter.Length < 2) return false; // Set and sanitize the filter ID itemName = splitFilter[0]; - fieldName = splitFilter[1]; + fieldName = string.Join(".", splitFilter, 1, splitFilter.Length - 1); return ParseFilterId(ref itemName, ref fieldName); } @@ -1014,7 +1023,6 @@ namespace SabreTools.Metadata.Filter "archive" => _archiveKeys, "biosset" => _biossetKeys, "chip" => _chipKeys, - "condition" => _conditionKeys, "configuration" => _configurationKeys, "conflocation" => _confLocationKeys, "confsetting" => _confSettingKeys, diff --git a/SabreTools.Metadata.Filter/FilterObject.cs b/SabreTools.Metadata.Filter/FilterObject.cs index baeb6bb8..d670f4f4 100644 --- a/SabreTools.Metadata.Filter/FilterObject.cs +++ b/SabreTools.Metadata.Filter/FilterObject.cs @@ -383,7 +383,6 @@ namespace SabreTools.Metadata.Filter case Archive item: return GetCheckValue(item, fieldName, out checkValue); case BiosSet item: return GetCheckValue(item, fieldName, out checkValue); case Chip item: return GetCheckValue(item, fieldName, out checkValue); - case Condition item: return GetCheckValue(item, fieldName, out checkValue); case Configuration item: return GetCheckValue(item, fieldName, out checkValue); case ConfLocation item: return GetCheckValue(item, fieldName, out checkValue); case ConfSetting item: return GetCheckValue(item, fieldName, out checkValue); @@ -508,6 +507,18 @@ namespace SabreTools.Metadata.Filter { switch (fieldName) { + case "condition.mask": + checkValue = obj.ConditionMask; + return true; + case "condition.relation": + checkValue = obj.ConditionRelation?.AsStringValue(); + return true; + case "condition.tag": + checkValue = obj.ConditionTag; + return true; + case "condition.value": + checkValue = obj.ConditionValue; + return true; case "default": checkValue = obj.Default.FromYesNo(); return true; @@ -712,33 +723,6 @@ namespace SabreTools.Metadata.Filter } } - /// - /// Get the check value for a field - /// - private static bool GetCheckValue(Condition obj, string fieldName, out string? checkValue) - { - switch (fieldName) - { - case "mask": - checkValue = obj.Mask; - return true; - case "relation": - checkValue = obj.Relation?.AsStringValue(); - return true; - case "tag": - checkValue = obj.Tag; - return true; - case "value": - checkValue = obj.Value; - return true; - - // If the key doesn't exist, we count it as null - default: - checkValue = null; - return false; - } - } - /// /// Get the check value for a field /// @@ -746,6 +730,18 @@ namespace SabreTools.Metadata.Filter { switch (fieldName) { + case "condition.mask": + checkValue = obj.ConditionMask; + return true; + case "condition.relation": + checkValue = obj.ConditionRelation?.AsStringValue(); + return true; + case "condition.tag": + checkValue = obj.ConditionTag; + return true; + case "condition.value": + checkValue = obj.ConditionValue; + return true; case "mask": checkValue = obj.Mask; return true; @@ -794,6 +790,18 @@ namespace SabreTools.Metadata.Filter { switch (fieldName) { + case "condition.mask": + checkValue = obj.ConditionMask; + return true; + case "condition.relation": + checkValue = obj.ConditionRelation?.AsStringValue(); + return true; + case "condition.tag": + checkValue = obj.ConditionTag; + return true; + case "condition.value": + checkValue = obj.ConditionValue; + return true; case "default": checkValue = obj.Default.FromYesNo(); return true; @@ -968,6 +976,18 @@ namespace SabreTools.Metadata.Filter { switch (fieldName) { + case "condition.mask": + checkValue = obj.ConditionMask; + return true; + case "condition.relation": + checkValue = obj.ConditionRelation?.AsStringValue(); + return true; + case "condition.tag": + checkValue = obj.ConditionTag; + return true; + case "condition.value": + checkValue = obj.ConditionValue; + return true; case "default": checkValue = obj.Default.FromYesNo(); return true; @@ -995,6 +1015,18 @@ namespace SabreTools.Metadata.Filter { switch (fieldName) { + case "condition.mask": + checkValue = obj.ConditionMask; + return true; + case "condition.relation": + checkValue = obj.ConditionRelation?.AsStringValue(); + return true; + case "condition.tag": + checkValue = obj.ConditionTag; + return true; + case "condition.value": + checkValue = obj.ConditionValue; + return true; case "default": checkValue = obj.Default.FromYesNo(); return true; diff --git a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs index f581bba5..d29e8177 100644 --- a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs @@ -152,9 +152,19 @@ namespace SabreTools.Serialization.CrossModel Default = item.Default, }; - var condition = item.Condition; - if (condition is not null) - adjuster.Condition = ConvertFromInternalModel(condition); + if (item.ConditionMask is not null + || item.ConditionRelation is not null + || item.ConditionTag is not null + || item.ConditionValue is not null) + { + adjuster.Condition = new Condition + { + Mask = item.ConditionMask, + Relation = item.ConditionRelation, + Tag = item.ConditionTag, + Value = item.ConditionValue, + }; + } return adjuster; } @@ -201,21 +211,6 @@ namespace SabreTools.Serialization.CrossModel return chip; } - /// - /// Convert from to - /// - private static Condition ConvertFromInternalModel(Data.Models.Metadata.Condition item) - { - var condition = new Condition - { - Tag = item.Tag, - Mask = item.Mask, - Relation = item.Relation, - Value = item.Value, - }; - return condition; - } - /// /// Convert from to /// @@ -228,9 +223,19 @@ namespace SabreTools.Serialization.CrossModel Mask = item.Mask, }; - var condition = item.Condition; - if (condition is not null) - configuration.Condition = ConvertFromInternalModel(condition); + if (item.ConditionMask is not null + || item.ConditionRelation is not null + || item.ConditionTag is not null + || item.ConditionValue is not null) + { + configuration.Condition = new Condition + { + Mask = item.ConditionMask, + Relation = item.ConditionRelation, + Tag = item.ConditionTag, + Value = item.ConditionValue, + }; + } var confLocations = item.ConfLocation; if (confLocations is not null && confLocations.Length > 0) @@ -269,9 +274,19 @@ namespace SabreTools.Serialization.CrossModel Default = item.Default, }; - var condition = item.Condition; - if (condition is not null) - confSetting.Condition = ConvertFromInternalModel(condition); + if (item.ConditionMask is not null + || item.ConditionRelation is not null + || item.ConditionTag is not null + || item.ConditionValue is not null) + { + confSetting.Condition = new Condition + { + Mask = item.ConditionMask, + Relation = item.ConditionRelation, + Tag = item.ConditionTag, + Value = item.ConditionValue, + }; + } return confSetting; } @@ -362,9 +377,19 @@ namespace SabreTools.Serialization.CrossModel Mask = item.Mask, }; - var condition = item.Condition; - if (condition is not null) - dipSwitch.Condition = ConvertFromInternalModel(condition); + if (item.ConditionMask is not null + || item.ConditionRelation is not null + || item.ConditionTag is not null + || item.ConditionValue is not null) + { + dipSwitch.Condition = new Condition + { + Mask = item.ConditionMask, + Relation = item.ConditionRelation, + Tag = item.ConditionTag, + Value = item.ConditionValue, + }; + } var dipLocations = item.DipLocation; if (dipLocations is not null && dipLocations.Length > 0) @@ -389,9 +414,19 @@ namespace SabreTools.Serialization.CrossModel Default = item.Default, }; - var condition = item.Condition; - if (condition is not null) - dipValue.Condition = ConvertFromInternalModel(condition); + if (item.ConditionMask is not null + || item.ConditionRelation is not null + || item.ConditionTag is not null + || item.ConditionValue is not null) + { + dipValue.Condition = new Condition + { + Mask = item.ConditionMask, + Relation = item.ConditionRelation, + Tag = item.ConditionTag, + Value = item.ConditionValue, + }; + } return dipValue; } diff --git a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs index 12a0820a..784c8475 100644 --- a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs @@ -128,13 +128,14 @@ namespace SabreTools.Serialization.CrossModel { var adjuster = new Data.Models.Metadata.Adjuster { + ConditionMask = item.Condition?.Mask, + ConditionRelation = item.Condition?.Relation, + ConditionTag = item.Condition?.Tag, + ConditionValue = item.Condition?.Value, Name = item.Name, Default = item.Default, }; - if (item.Condition is not null) - adjuster.Condition = ConvertToInternalModel(item.Condition); - return adjuster; } @@ -180,21 +181,6 @@ namespace SabreTools.Serialization.CrossModel return chip; } - /// - /// Convert from to - /// - private static Data.Models.Metadata.Condition ConvertToInternalModel(Condition item) - { - var condition = new Data.Models.Metadata.Condition - { - Tag = item.Tag, - Mask = item.Mask, - Relation = item.Relation, - Value = item.Value, - }; - return condition; - } - /// /// Convert from to /// @@ -202,14 +188,15 @@ namespace SabreTools.Serialization.CrossModel { var configuration = new Data.Models.Metadata.Configuration { + ConditionMask = item.Condition?.Mask, + ConditionRelation = item.Condition?.Relation, + ConditionTag = item.Condition?.Tag, + ConditionValue = item.Condition?.Value, Name = item.Name, Tag = item.Tag, Mask = item.Mask, }; - if (item.Condition is not null) - configuration.Condition = ConvertToInternalModel(item.Condition); - if (item.ConfLocation is not null && item.ConfLocation.Length > 0) configuration.ConfLocation = Array.ConvertAll(item.ConfLocation, ConvertToInternalModel); @@ -240,14 +227,15 @@ namespace SabreTools.Serialization.CrossModel { var confSetting = new Data.Models.Metadata.ConfSetting { + ConditionMask = item.Condition?.Mask, + ConditionRelation = item.Condition?.Relation, + ConditionTag = item.Condition?.Tag, + ConditionValue = item.Condition?.Value, Name = item.Name, Value = item.Value, Default = item.Default, }; - if (item.Condition is not null) - confSetting.Condition = ConvertToInternalModel(item.Condition); - return confSetting; } @@ -330,14 +318,15 @@ namespace SabreTools.Serialization.CrossModel { var dipSwitch = new Data.Models.Metadata.DipSwitch { + ConditionMask = item.Condition?.Mask, + ConditionRelation = item.Condition?.Relation, + ConditionTag = item.Condition?.Tag, + ConditionValue = item.Condition?.Value, Name = item.Name, Tag = item.Tag, Mask = item.Mask, }; - if (item.Condition is not null) - dipSwitch.Condition = ConvertToInternalModel(item.Condition); - if (item.DipLocation is not null && item.DipLocation.Length > 0) dipSwitch.DipLocation = Array.ConvertAll(item.DipLocation, ConvertToInternalModel); @@ -354,14 +343,15 @@ namespace SabreTools.Serialization.CrossModel { var dipValue = new Data.Models.Metadata.DipValue { + ConditionMask = item.Condition?.Mask, + ConditionRelation = item.Condition?.Relation, + ConditionTag = item.Condition?.Tag, + ConditionValue = item.Condition?.Value, Name = item.Name, Value = item.Value, Default = item.Default, }; - if (item.Condition is not null) - dipValue.Condition = ConvertToInternalModel(item.Condition); - return dipValue; }