From 2a700dee9c062b62c6fd62c587ffa0b0a803a655 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 9 Apr 2026 20:33:34 -0400 Subject: [PATCH] Add skeleton filter overrides for nested items --- .../Formats/Adjuster.cs | 24 ++++++++ .../Formats/ConfSetting.cs | 24 ++++++++ .../Formats/Configuration.cs | 28 +++++++++ .../Formats/DataArea.cs | 27 +++------ .../Formats/Device.cs | 32 ++++++++-- .../Formats/DipSwitch.cs | 30 ++++++++++ .../Formats/DipValue.cs | 24 ++++++++ SabreTools.Metadata.DatItems/Formats/Disk.cs | 26 +++++++++ .../Formats/DiskArea.cs | 25 +++----- SabreTools.Metadata.DatItems/Formats/Input.cs | 24 ++++++++ SabreTools.Metadata.DatItems/Formats/Part.cs | 58 +++---------------- .../Formats/PartFeature.cs | 24 ++++++++ SabreTools.Metadata.DatItems/Formats/Port.cs | 24 ++++++++ SabreTools.Metadata.DatItems/Formats/Rom.cs | 26 +++++++++ SabreTools.Metadata.DatItems/Formats/Slot.cs | 24 ++++++++ 15 files changed, 327 insertions(+), 93 deletions(-) diff --git a/SabreTools.Metadata.DatItems/Formats/Adjuster.cs b/SabreTools.Metadata.DatItems/Formats/Adjuster.cs index 4ec34bca..f11b1fba 100644 --- a/SabreTools.Metadata.DatItems/Formats/Adjuster.cs +++ b/SabreTools.Metadata.DatItems/Formats/Adjuster.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Metadata.Filter; namespace SabreTools.Metadata.DatItems.Formats { @@ -99,5 +100,28 @@ 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/ConfSetting.cs b/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs index df73c18d..d21a7088 100644 --- a/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs +++ b/SabreTools.Metadata.DatItems/Formats/ConfSetting.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Metadata.Filter; namespace SabreTools.Metadata.DatItems.Formats { @@ -105,5 +106,28 @@ 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 ab991b74..47639766 100644 --- a/SabreTools.Metadata.DatItems/Formats/Configuration.cs +++ b/SabreTools.Metadata.DatItems/Formats/Configuration.cs @@ -1,6 +1,7 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Metadata.Filter; namespace SabreTools.Metadata.DatItems.Formats { @@ -128,5 +129,32 @@ 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 + // TODO: ConfLocation + // TODO: ConfSetting + + return filterRunner.Run(_internal); + } + + /// + public override bool PassesFilterDB(FilterRunner filterRunner) + { + // TODO: Condition + // TODO: ConfLocation + // TODO: ConfSetting + + return filterRunner.Run(_internal); + } + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/DataArea.cs b/SabreTools.Metadata.DatItems/Formats/DataArea.cs index 1692e303..79c4a6fc 100644 --- a/SabreTools.Metadata.DatItems/Formats/DataArea.cs +++ b/SabreTools.Metadata.DatItems/Formats/DataArea.cs @@ -1,5 +1,4 @@ -using System; -using System.Xml.Serialization; +using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Metadata.DatItems.Formats @@ -29,11 +28,6 @@ namespace SabreTools.Metadata.DatItems.Formats set => _internal.Name = value; } - public Rom[]? Rom { get; set; } - - [JsonIgnore] - public bool RomSpecified => Rom is not null && Rom.Length > 0; - public long? Size { get => _internal.Size; @@ -52,11 +46,12 @@ namespace SabreTools.Metadata.DatItems.Formats public DataArea() : base() { } - public DataArea(Data.Models.Metadata.DataArea item) : base(item) + public DataArea(Data.Models.Metadata.DataArea item) { - // Handle subitems - if (item.Rom is not null) - Rom = Array.ConvertAll(item.Rom, rom => new Rom(rom)); + _internal = item.Clone() as Data.Models.Metadata.DataArea ?? new(); + + // Clear all lists + _internal.Rom = null; } public DataArea(Data.Models.Metadata.DataArea item, Machine machine, Source source) : this(item) @@ -82,15 +77,9 @@ namespace SabreTools.Metadata.DatItems.Formats /// public override object Clone() => new DataArea(GetInternalClone()); + /// public override Data.Models.Metadata.DataArea GetInternalClone() - { - var partItem = _internal.Clone() as Data.Models.Metadata.DataArea ?? new(); - - if (Rom is not null) - partItem.Rom = Array.ConvertAll(Rom, rom => rom.GetInternalClone()); - - return partItem; - } + => _internal.Clone() as Data.Models.Metadata.DataArea ?? new(); #endregion diff --git a/SabreTools.Metadata.DatItems/Formats/Device.cs b/SabreTools.Metadata.DatItems/Formats/Device.cs index 47ed37e0..3aee8489 100644 --- a/SabreTools.Metadata.DatItems/Formats/Device.cs +++ b/SabreTools.Metadata.DatItems/Formats/Device.cs @@ -1,6 +1,7 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Metadata.Filter; namespace SabreTools.Metadata.DatItems.Formats { @@ -100,12 +101,6 @@ namespace SabreTools.Metadata.DatItems.Formats { var deviceItem = _internal.Clone() as Data.Models.Metadata.Device ?? new(); - deviceItem.DeviceType = DeviceType; - deviceItem.FixedImage = FixedImage; - deviceItem.Interface = Interface; - deviceItem.Mandatory = Mandatory; - deviceItem.Tag = Tag; - if (Instance is not null) deviceItem.Instance = Instance.GetInternalClone(); @@ -135,5 +130,30 @@ 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: Instance + // TODO: Extension + + return filterRunner.Run(_internal); + } + + /// + public override bool PassesFilterDB(FilterRunner filterRunner) + { + // TODO: Instance + // TODO: Extension + + return filterRunner.Run(_internal); + } + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs index 1a505258..b5fcce0b 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs @@ -1,6 +1,7 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Metadata.Filter; namespace SabreTools.Metadata.DatItems.Formats { @@ -158,5 +159,34 @@ 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 + // TODO: DipLocation + // TODO: DipValue + // TODO: Entry + + return filterRunner.Run(_internal); + } + + /// + public override bool PassesFilterDB(FilterRunner filterRunner) + { + // TODO: Condition + // TODO: DipLocation + // TODO: DipValue + // TODO: Entry + + return filterRunner.Run(_internal); + } + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/DipValue.cs b/SabreTools.Metadata.DatItems/Formats/DipValue.cs index 07e9dda6..4e8adf02 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipValue.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipValue.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Metadata.Filter; namespace SabreTools.Metadata.DatItems.Formats { @@ -105,5 +106,28 @@ 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/Disk.cs b/SabreTools.Metadata.DatItems/Formats/Disk.cs index b52dc849..1fab3548 100644 --- a/SabreTools.Metadata.DatItems/Formats/Disk.cs +++ b/SabreTools.Metadata.DatItems/Formats/Disk.cs @@ -2,6 +2,7 @@ using System.Xml.Serialization; using Newtonsoft.Json; using SabreTools.Data.Extensions; using SabreTools.Data.Models.Metadata; +using SabreTools.Metadata.Filter; using SabreTools.Text.Extensions; namespace SabreTools.Metadata.DatItems.Formats @@ -209,6 +210,31 @@ 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: DiskArea + // TODO: Part + + return filterRunner.Run(_internal); + } + + /// + public override bool PassesFilterDB(FilterRunner filterRunner) + { + // TODO: DiskArea + // TODO: Part + + return filterRunner.Run(_internal); + } + + #endregion + #region Sorting and Merging /// diff --git a/SabreTools.Metadata.DatItems/Formats/DiskArea.cs b/SabreTools.Metadata.DatItems/Formats/DiskArea.cs index 2a173a39..dd1b6b01 100644 --- a/SabreTools.Metadata.DatItems/Formats/DiskArea.cs +++ b/SabreTools.Metadata.DatItems/Formats/DiskArea.cs @@ -1,5 +1,4 @@ -using System; -using System.Xml.Serialization; +using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Metadata.DatItems.Formats @@ -13,11 +12,6 @@ namespace SabreTools.Metadata.DatItems.Formats { #region Properties - public Disk[]? Disk { get; set; } - - [JsonIgnore] - public bool DiskSpecified => Disk is not null && Disk.Length > 0; - /// /> public override Data.Models.Metadata.ItemType ItemType => Data.Models.Metadata.ItemType.DiskArea; @@ -36,9 +30,10 @@ namespace SabreTools.Metadata.DatItems.Formats public DiskArea(Data.Models.Metadata.DiskArea item) : base(item) { - // Handle subitems - if (item.Disk is not null) - Disk = Array.ConvertAll(item.Disk, rom => new Disk(rom)); + _internal = item.Clone() as Data.Models.Metadata.DiskArea ?? new(); + + // Clear all lists + _internal.Disk = null; } public DiskArea(Data.Models.Metadata.DiskArea item, Machine machine, Source source) : this(item) @@ -64,15 +59,9 @@ namespace SabreTools.Metadata.DatItems.Formats /// public override object Clone() => new DiskArea(GetInternalClone()); + /// public override Data.Models.Metadata.DiskArea GetInternalClone() - { - var partItem = _internal.Clone() as Data.Models.Metadata.DiskArea ?? new(); - - if (Disk is not null) - partItem.Disk = Array.ConvertAll(Disk, rom => rom.GetInternalClone()); - - return partItem; - } + => _internal.Clone() as Data.Models.Metadata.DiskArea ?? new(); #endregion diff --git a/SabreTools.Metadata.DatItems/Formats/Input.cs b/SabreTools.Metadata.DatItems/Formats/Input.cs index 30af67e2..6ec0f510 100644 --- a/SabreTools.Metadata.DatItems/Formats/Input.cs +++ b/SabreTools.Metadata.DatItems/Formats/Input.cs @@ -1,6 +1,7 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Metadata.Filter; namespace SabreTools.Metadata.DatItems.Formats { @@ -124,5 +125,28 @@ 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: Control + + return filterRunner.Run(_internal); + } + + /// + public override bool PassesFilterDB(FilterRunner filterRunner) + { + // TODO: Control + + return filterRunner.Run(_internal); + } + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Part.cs b/SabreTools.Metadata.DatItems/Formats/Part.cs index c07231d8..2d1e828a 100644 --- a/SabreTools.Metadata.DatItems/Formats/Part.cs +++ b/SabreTools.Metadata.DatItems/Formats/Part.cs @@ -1,5 +1,4 @@ -using System; -using System.Xml.Serialization; +using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Metadata.DatItems.Formats @@ -13,26 +12,6 @@ namespace SabreTools.Metadata.DatItems.Formats { #region Properties - public DataArea[]? DataArea { get; set; } - - [JsonIgnore] - public bool DataAreaSpecified => DataArea is not null && DataArea.Length > 0; - - public DiskArea[]? DiskArea { get; set; } - - [JsonIgnore] - public bool DiskAreaSpecified => DiskArea is not null && DiskArea.Length > 0; - - public DipSwitch[]? DipSwitch { get; set; } - - [JsonIgnore] - public bool DipSwitchSpecified => DipSwitch is not null && DipSwitch.Length > 0; - - public PartFeature[]? Feature { get; set; } - - [JsonIgnore] - public bool FeatureSpecified => Feature is not null && Feature.Length > 0; - public string? Interface { get => _internal.Interface; @@ -57,18 +36,13 @@ namespace SabreTools.Metadata.DatItems.Formats public Part(Data.Models.Metadata.Part item) : base(item) { - // Handle subitems - if (item.DataArea is not null) - DataArea = Array.ConvertAll(item.DataArea, dataArea => new DataArea(dataArea)); + _internal = item.Clone() as Data.Models.Metadata.Part ?? new(); - if (item.DiskArea is not null) - DiskArea = Array.ConvertAll(item.DiskArea, diskArea => new DiskArea(diskArea)); - - if (item.DipSwitch is not null) - DipSwitch = Array.ConvertAll(item.DipSwitch, dipSwitch => new DipSwitch(dipSwitch)); - - if (item.Feature is not null) - Feature = Array.ConvertAll(item.Feature, feature => new PartFeature(feature)); + // Clear all lists + _internal.DataArea = null; + _internal.DiskArea = null; + _internal.DipSwitch = null; + _internal.Feature = null; } public Part(Data.Models.Metadata.Part item, Machine machine, Source source) : this(item) @@ -96,23 +70,7 @@ namespace SabreTools.Metadata.DatItems.Formats /// public override Data.Models.Metadata.Part GetInternalClone() - { - var partItem = _internal.Clone() as Data.Models.Metadata.Part ?? new(); - - if (DataArea is not null) - partItem.DataArea = Array.ConvertAll(DataArea, dataArea => dataArea.GetInternalClone()); - - if (DiskArea is not null) - partItem.DiskArea = Array.ConvertAll(DiskArea, diskArea => diskArea.GetInternalClone()); - - if (DipSwitch is not null) - partItem.DipSwitch = Array.ConvertAll(DipSwitch, dipSwitch => dipSwitch.GetInternalClone()); - - if (Feature is not null) - partItem.Feature = Array.ConvertAll(Feature, feature => feature.GetInternalClone()); - - return partItem; - } + => _internal.Clone() as Data.Models.Metadata.Part ?? new(); #endregion diff --git a/SabreTools.Metadata.DatItems/Formats/PartFeature.cs b/SabreTools.Metadata.DatItems/Formats/PartFeature.cs index de0c6ae5..0eef81ce 100644 --- a/SabreTools.Metadata.DatItems/Formats/PartFeature.cs +++ b/SabreTools.Metadata.DatItems/Formats/PartFeature.cs @@ -1,5 +1,6 @@ using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Metadata.Filter; namespace SabreTools.Metadata.DatItems.Formats { @@ -105,5 +106,28 @@ 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: Part + + return filterRunner.Run(_internal); + } + + /// + public override bool PassesFilterDB(FilterRunner filterRunner) + { + // TODO: Part + + return filterRunner.Run(_internal); + } + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Port.cs b/SabreTools.Metadata.DatItems/Formats/Port.cs index ea822baf..a0e6b1a0 100644 --- a/SabreTools.Metadata.DatItems/Formats/Port.cs +++ b/SabreTools.Metadata.DatItems/Formats/Port.cs @@ -1,6 +1,7 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Metadata.Filter; namespace SabreTools.Metadata.DatItems.Formats { @@ -94,5 +95,28 @@ 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: Analog + + return filterRunner.Run(_internal); + } + + /// + public override bool PassesFilterDB(FilterRunner filterRunner) + { + // TODO: Analog + + return filterRunner.Run(_internal); + } + + #endregion } } diff --git a/SabreTools.Metadata.DatItems/Formats/Rom.cs b/SabreTools.Metadata.DatItems/Formats/Rom.cs index 5d8b22d7..ae24c769 100644 --- a/SabreTools.Metadata.DatItems/Formats/Rom.cs +++ b/SabreTools.Metadata.DatItems/Formats/Rom.cs @@ -2,6 +2,7 @@ using System.Xml.Serialization; using Newtonsoft.Json; using SabreTools.Data.Extensions; using SabreTools.Data.Models.Metadata; +using SabreTools.Metadata.Filter; using SabreTools.Text.Extensions; namespace SabreTools.Metadata.DatItems.Formats @@ -941,6 +942,31 @@ 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: DataArea + // TODO: Part + + return filterRunner.Run(_internal); + } + + /// + public override bool PassesFilterDB(FilterRunner filterRunner) + { + // TODO: DataArea + // TODO: Part + + return filterRunner.Run(_internal); + } + + #endregion + #region Sorting and Merging /// diff --git a/SabreTools.Metadata.DatItems/Formats/Slot.cs b/SabreTools.Metadata.DatItems/Formats/Slot.cs index cfab5278..55a381cd 100644 --- a/SabreTools.Metadata.DatItems/Formats/Slot.cs +++ b/SabreTools.Metadata.DatItems/Formats/Slot.cs @@ -1,6 +1,7 @@ using System; using System.Xml.Serialization; using Newtonsoft.Json; +using SabreTools.Metadata.Filter; namespace SabreTools.Metadata.DatItems.Formats { @@ -94,5 +95,28 @@ 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: SlotOption + + return filterRunner.Run(_internal); + } + + /// + public override bool PassesFilterDB(FilterRunner filterRunner) + { + // TODO: SlotOption + + return filterRunner.Run(_internal); + } + + #endregion } }