diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs index dfb56612..b016d314 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs @@ -95,10 +95,10 @@ namespace SabreTools.Metadata.DatFiles.Test DeviceRef? deviceRef = Array.Find(datItems, item => item is DeviceRef) as DeviceRef; ValidateDeviceRef(deviceRef); - DipSwitch? dipSwitch = Array.Find(datItems, item => item is DipSwitch dipSwitch && !dipSwitch.PartSpecified) as DipSwitch; + DipSwitch? dipSwitch = Array.Find(datItems, item => item is DipSwitch dipSwitch && dipSwitch.PartInterface is null) as DipSwitch; ValidateDipSwitch(dipSwitch); - Disk? disk = Array.Find(datItems, item => item is Disk disk && !disk.DiskAreaSpecified && !disk.PartSpecified) as Disk; + Disk? disk = Array.Find(datItems, item => item is Disk disk && !disk.DiskAreaSpecified && disk.PartInterface is null) as Disk; ValidateDisk(disk); Display? display = Array.Find(datItems, item => item is Display display && display.AspectX is null) as Display; @@ -125,27 +125,28 @@ namespace SabreTools.Metadata.DatFiles.Test ValidateMedia(media); // All other fields are tested separately - DipSwitch? partDipSwitch = Array.Find(datItems, item => item is DipSwitch dipSwitch && dipSwitch.PartSpecified) as DipSwitch; + DipSwitch? partDipSwitch = Array.Find(datItems, item => item is DipSwitch dipSwitch && dipSwitch.PartInterface is not null) as DipSwitch; Assert.NotNull(partDipSwitch); - Part? dipSwitchPart = partDipSwitch.Part; - ValidatePart(dipSwitchPart); + Assert.Equal("interface", partDipSwitch.PartInterface); + Assert.Equal("name", partDipSwitch.PartName); // All other fields are tested separately - Disk? partDisk = Array.Find(datItems, item => item is Disk disk && disk.DiskAreaSpecified && disk.PartSpecified) as Disk; + Disk? partDisk = Array.Find(datItems, item => item is Disk disk && disk.DiskAreaSpecified && disk.PartInterface is not null) as Disk; Assert.NotNull(partDisk); ValidateDiskArea(partDisk.DiskArea); - ValidatePart(partDisk.Part); + Assert.Equal("interface", partDisk.PartInterface); + Assert.Equal("name", partDisk.PartName); PartFeature? partFeature = Array.Find(datItems, item => item is PartFeature) as PartFeature; ValidatePartFeature(partFeature); // All other fields are tested separately - Rom? partRom = Array.Find(datItems, item => item is Rom rom && rom.DataAreaSpecified && rom.PartSpecified) as Rom; + Rom? partRom = Array.Find(datItems, item => item is Rom rom && rom.DataAreaSpecified && rom.PartInterface is not null) as Rom; Assert.NotNull(partRom); DataArea? romDataArea = partRom.DataArea; ValidateDataArea(romDataArea); - Part? romPart = partRom.Part; - ValidatePart(romPart); + Assert.Equal("interface", partRom.PartInterface); + Assert.Equal("name", partRom.PartName); Port? port = Array.Find(datItems, item => item is Port) as Port; ValidatePort(port); @@ -156,7 +157,7 @@ namespace SabreTools.Metadata.DatFiles.Test Release? release = Array.Find(datItems, item => item is Release) as Release; ValidateRelease(release); - Rom? rom = Array.Find(datItems, item => item is Rom rom && !rom.DataAreaSpecified && !rom.PartSpecified && rom.OpenMSXMediaType is null) as Rom; + Rom? rom = Array.Find(datItems, item => item is Rom rom && !rom.DataAreaSpecified && rom.PartInterface is null && rom.OpenMSXMediaType is null) as Rom; ValidateRom(rom); Sample? sample = Array.Find(datItems, item => item is Sample) as Sample; @@ -1385,24 +1386,16 @@ namespace SabreTools.Metadata.DatFiles.Test Assert.Equal(HashType.SpamSum.ZeroString, media.SpamSum); } - private static void ValidatePart(Part? part) - { - Assert.NotNull(part); - Assert.Equal("interface", part.Interface); - Assert.Equal("name", part.Name); - } - private static void ValidatePartFeature(PartFeature? partFeature) { Assert.NotNull(partFeature); Assert.Equal("name", partFeature.Name); Assert.Equal(Data.Models.Metadata.FeatureStatus.Imperfect, partFeature.Overall); + Assert.Equal("interface", partFeature.PartInterface); + Assert.Equal("name", partFeature.PartName); Assert.Equal(Data.Models.Metadata.FeatureStatus.Imperfect, partFeature.Status); Assert.Equal(Data.Models.Metadata.FeatureType.Protection, partFeature.FeatureType); Assert.Equal("value", partFeature.Value); - - Part? part = partFeature.Part; - ValidatePart(part); } private static void ValidatePort(Port? port) diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs index db6e4987..4be3bd22 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs @@ -177,7 +177,8 @@ namespace SabreTools.Metadata.DatFiles.Test { DipSwitch item = new DipSwitch(CreateMetadataDipSwitch()); item.CopyMachineInformation(machine); - item.Part = CreatePart(machine); + item.PartInterface = "interface"; + item.PartName = "name"; return item; } @@ -193,7 +194,8 @@ namespace SabreTools.Metadata.DatFiles.Test Disk item = new Disk(CreateMetadataDisk()); item.CopyMachineInformation(machine); item.DiskArea = CreateDiskArea(machine); - item.Part = CreatePart(machine); + item.PartInterface = "interface"; + item.PartName = "name"; return item; } @@ -246,18 +248,12 @@ namespace SabreTools.Metadata.DatFiles.Test return item; } - private static Part CreatePart(Machine machine) - { - Part item = new Part(CreateMetadataPart()); - item.CopyMachineInformation(machine); - return item; - } - private static PartFeature CreatePartFeature(Machine machine) { PartFeature item = new PartFeature(CreateMetadataFeature()); item.CopyMachineInformation(machine); - item.Part = CreatePart(machine); + item.PartInterface = "interface"; + item.PartName = "name"; return item; } @@ -295,7 +291,8 @@ namespace SabreTools.Metadata.DatFiles.Test Rom item = new Rom(CreateMetadataRom()); item.CopyMachineInformation(machine); item.DataArea = CreateDataArea(machine); - item.Part = CreatePart(machine); + item.PartInterface = "interface"; + item.PartName = "name"; return item; } diff --git a/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs b/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs index f2e8890d..37cfb55e 100644 --- a/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs +++ b/SabreTools.Metadata.DatFiles/DatFile.FromMetadata.cs @@ -582,8 +582,6 @@ namespace SabreTools.Metadata.DatFiles // Loop through the items and add foreach (var item in items) { - var partItem = new Part(item, machine, source); - // Handle subitems var dataAreas = item.DataArea; if (dataAreas is not null) @@ -620,7 +618,8 @@ namespace SabreTools.Metadata.DatFiles } romItem.DataArea = dataAreaItem; - romItem.Part = partItem; + romItem.PartInterface = item.Interface; + romItem.PartName = item.Name; addRoms.Add(romItem); } @@ -653,7 +652,8 @@ namespace SabreTools.Metadata.DatFiles var diskItem = new Disk(disk, machine, source) { DiskArea = diskAreaitem, - Part = partItem, + PartInterface = item.Interface, + PartName = item.Name, }; AddItem(diskItem, statsOnly); @@ -671,7 +671,11 @@ namespace SabreTools.Metadata.DatFiles if (filterRunner is not null && !filterRunner.Run(dipSwitch)) continue; - var dipSwitchItem = new DipSwitch(dipSwitch, machine, source) { Part = partItem }; + var dipSwitchItem = new DipSwitch(dipSwitch, machine, source) + { + PartInterface = item.Interface, + PartName = item.Name, + }; AddItem(dipSwitchItem, statsOnly); // AddItemDB(dipSwitchItem, machineIndex, sourceIndex, statsOnly); @@ -689,7 +693,8 @@ namespace SabreTools.Metadata.DatFiles var partFeatureItem = new PartFeature(partFeature) { - Part = partItem, + PartInterface = item.Interface, + PartName = item.Name, Source = source, }; partFeatureItem.CopyMachineInformation(machine); diff --git a/SabreTools.Metadata.DatFiles/DatFile.ToMetadata.cs b/SabreTools.Metadata.DatFiles/DatFile.ToMetadata.cs index 8f1aab16..100a2c7e 100644 --- a/SabreTools.Metadata.DatFiles/DatFile.ToMetadata.cs +++ b/SabreTools.Metadata.DatFiles/DatFile.ToMetadata.cs @@ -138,8 +138,8 @@ namespace SabreTools.Metadata.DatFiles machine.DipSwitch = [.. machine.DipSwitch, dipSwitchItem]; // Add Part mapping - if (dipSwitch.Part is not null) - partMappings[dipSwitch.Part.GetInternalClone()] = dipSwitchItem; + if (dipSwitch.PartInterface is not null || dipSwitch.PartName is not null) + partMappings[new Data.Models.Metadata.Part { Interface = dipSwitch.PartInterface, Name = dipSwitch.PartName}] = dipSwitchItem; break; case DatItems.Formats.Disk disk: @@ -148,9 +148,13 @@ namespace SabreTools.Metadata.DatFiles machine.Disk = [.. machine.Disk, diskItem]; // Add Part and DiskArea mappings - if (disk.Part is not null && disk.DiskArea is not null) + if ((disk.PartInterface is not null || disk.PartName is not null) && disk.DiskArea is not null) { - var partItemInternal = disk.Part.GetInternalClone(); + var partItemInternal = new Data.Models.Metadata.Part + { + Interface = disk.PartInterface, + Name = disk.PartName, + }; partMappings[partItemInternal] = diskItem; diskAreaMappings[partItemInternal] = (disk.DiskArea.GetInternalClone(), diskItem); } @@ -188,8 +192,8 @@ namespace SabreTools.Metadata.DatFiles machine.Feature = [.. machine.Feature, partFeatureItem]; // Add Part mapping - if (partFeature.Part is not null) - partMappings[partFeature.Part.GetInternalClone()] = partFeatureItem; + if (partFeature.PartInterface is not null || partFeature.PartName is not null) + partMappings[new Data.Models.Metadata.Part { Interface = partFeature.PartInterface, Name = partFeature.PartName}] = partFeatureItem; break; case DatItems.Formats.Port port: @@ -213,9 +217,13 @@ namespace SabreTools.Metadata.DatFiles machine.Rom = [.. machine.Rom, romItem]; // Add Part and DataArea mappings - if (rom.Part is not null && rom.DataArea is not null) + if ((rom.PartInterface is not null || rom.PartName is not null) && rom.DataArea is not null) { - var partItemInternal = rom.Part.GetInternalClone(); + var partItemInternal = new Data.Models.Metadata.Part + { + Interface = rom.PartInterface, + Name = rom.PartName, + }; partMappings[partItemInternal] = romItem; dataAreaMappings[partItemInternal] = (rom.DataArea.GetInternalClone(), romItem); } @@ -468,8 +476,8 @@ namespace SabreTools.Metadata.DatFiles machine.DipSwitch = [.. machine.DipSwitch, dipSwitchItem]; // Add Part mapping - if (dipSwitch.Part is not null) - partMappings[dipSwitch.Part.GetInternalClone()] = dipSwitchItem; + if (dipSwitch.PartInterface is not null || dipSwitch.PartName is not null) + partMappings[new Data.Models.Metadata.Part { Interface = dipSwitch.PartInterface, Name = dipSwitch.PartName}] = dipSwitchItem; break; case DatItems.Formats.Disk disk: @@ -478,9 +486,13 @@ namespace SabreTools.Metadata.DatFiles machine.Disk = [.. machine.Disk, diskItem]; // Add Part and DiskArea mappings - if (disk.Part is not null && disk.DiskArea is not null) + if ((disk.PartInterface is not null || disk.PartName is not null) && disk.DiskArea is not null) { - var partItemInternal = disk.Part.GetInternalClone(); + var partItemInternal = new Data.Models.Metadata.Part + { + Interface = disk.PartInterface, + Name = disk.PartName, + }; partMappings[partItemInternal] = diskItem; diskAreaMappings[partItemInternal] = (disk.DiskArea.GetInternalClone(), diskItem); } @@ -518,8 +530,8 @@ namespace SabreTools.Metadata.DatFiles machine.Feature = [.. machine.Feature, partFeatureItem]; // Add Part mapping - if (partFeature.Part is not null) - partMappings[partFeature.Part.GetInternalClone()] = partFeatureItem; + if (partFeature.PartInterface is not null || partFeature.PartName is not null) + partMappings[new Data.Models.Metadata.Part { Interface = partFeature.PartInterface, Name = partFeature.PartName}] = partFeatureItem; break; case DatItems.Formats.Port port: @@ -543,9 +555,13 @@ namespace SabreTools.Metadata.DatFiles machine.Rom = [.. machine.Rom, romItem]; // Add Part and DataArea mappings - if (rom.Part is not null && rom.DataArea is not null) + if ((rom.PartInterface is not null || rom.PartName is not null) && rom.DataArea is not null) { - var partItemInternal = rom.Part.GetInternalClone(); + var partItemInternal = new Data.Models.Metadata.Part + { + Interface = rom.PartInterface, + Name = rom.PartName, + }; partMappings[partItemInternal] = romItem; dataAreaMappings[partItemInternal] = (rom.DataArea.GetInternalClone(), romItem); } diff --git a/SabreTools.Metadata.DatFiles/Formats/SabreJSON.cs b/SabreTools.Metadata.DatFiles/Formats/SabreJSON.cs index 1292e96e..6c35055f 100644 --- a/SabreTools.Metadata.DatFiles/Formats/SabreJSON.cs +++ b/SabreTools.Metadata.DatFiles/Formats/SabreJSON.cs @@ -330,9 +330,6 @@ namespace SabreTools.Metadata.DatFiles.Formats case Data.Models.Metadata.ItemType.Original: // Cannot be converted to a DatItem break; - case Data.Models.Metadata.ItemType.Part: - datItem = datItemObj.ToObject(); - break; case Data.Models.Metadata.ItemType.PartFeature: datItem = datItemObj.ToObject(); break; diff --git a/SabreTools.Metadata.DatFiles/Formats/SoftwareList.cs b/SabreTools.Metadata.DatFiles/Formats/SoftwareList.cs index 03719549..2e097c83 100644 --- a/SabreTools.Metadata.DatFiles/Formats/SoftwareList.cs +++ b/SabreTools.Metadata.DatFiles/Formats/SoftwareList.cs @@ -107,16 +107,16 @@ namespace SabreTools.Metadata.DatFiles.Formats switch (datItem) { case DipSwitch dipSwitch: - if (!dipSwitch.PartSpecified) + if (dipSwitch.PartInterface is null && dipSwitch.PartName is null) { missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); } else { - if (string.IsNullOrEmpty(dipSwitch.Part!.Name)) + if (string.IsNullOrEmpty(dipSwitch.PartName)) missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); - if (string.IsNullOrEmpty(dipSwitch.Part!.Interface)) + if (string.IsNullOrEmpty(dipSwitch.PartInterface)) missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); } @@ -138,16 +138,16 @@ namespace SabreTools.Metadata.DatFiles.Formats break; case Disk disk: - if (!disk.PartSpecified) + if (disk.PartInterface is null && disk.PartName is null) { missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); } else { - if (string.IsNullOrEmpty(disk.Part!.Name)) + if (string.IsNullOrEmpty(disk.PartName)) missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); - if (string.IsNullOrEmpty(disk.Part.Interface)) + if (string.IsNullOrEmpty(disk.PartInterface)) missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); } @@ -171,16 +171,16 @@ namespace SabreTools.Metadata.DatFiles.Formats break; case Rom rom: - if (!rom.PartSpecified) + if (rom.PartInterface is null && rom.PartName is null) { missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); } else { - if (string.IsNullOrEmpty(rom.Part!.Name)) + if (string.IsNullOrEmpty(rom.PartName)) missingFields.Add(nameof(Data.Models.Metadata.Part.Name)); - if (string.IsNullOrEmpty(rom.Part!.Interface)) + if (string.IsNullOrEmpty(rom.PartInterface)) missingFields.Add(nameof(Data.Models.Metadata.Part.Interface)); } diff --git a/SabreTools.Metadata.DatItems.Test/Formats/DiskTests.cs b/SabreTools.Metadata.DatItems.Test/Formats/DiskTests.cs index f449b974..2985e196 100644 --- a/SabreTools.Metadata.DatItems.Test/Formats/DiskTests.cs +++ b/SabreTools.Metadata.DatItems.Test/Formats/DiskTests.cs @@ -14,37 +14,39 @@ namespace SabreTools.Metadata.DatItems.Formats.Test Machine machine = new Machine { Name = "name" }; - Part part = new Part { Name = "name" }; - Source source = new Source(0, "source"); Disk disk = new Disk { - Name = "name", DiskArea = diskArea, - Merge = "merge", - Region = "region", - Status = Data.Models.Metadata.ItemStatus.Good, - Optional = true, - MD5 = HashType.MD5.ZeroString, - SHA1 = HashType.SHA1.ZeroString, DupeType = DupeType.All | DupeType.External, Machine = machine, - Part = part, + MD5 = HashType.MD5.ZeroString, + Merge = "merge", + Name = "name", + Optional = true, + PartInterface = "interface", + PartName = "name", + Region = "region", RemoveFlag = false, + SHA1 = HashType.SHA1.ZeroString, Source = source, + Status = Data.Models.Metadata.ItemStatus.Good, }; Rom actual = disk.ConvertToRom(); - Assert.Equal("name.chd", actual.Name); - Assert.Equal("merge", actual.Merge); - Assert.Equal("region", actual.Region); - Assert.Equal(Data.Models.Metadata.ItemStatus.Good, actual.Status); - Assert.Equal(true, actual.Optional); - Assert.Equal(HashType.MD5.ZeroString, actual.MD5); - Assert.Equal(HashType.SHA1.ZeroString, actual.SHA1); Assert.Equal(DupeType.All | DupeType.External, actual.DupeType); + Assert.Equal(HashType.MD5.ZeroString, actual.MD5); + Assert.Equal("merge", actual.Merge); + Assert.Equal("name.chd", actual.Name); + Assert.Equal(true, actual.Optional); + Assert.Equal("interface", actual.PartInterface); + Assert.Equal("name", actual.PartName); + Assert.Equal("region", actual.Region); + Assert.False(actual.RemoveFlag); + Assert.Equal(HashType.SHA1.ZeroString, actual.SHA1); + Assert.Equal(Data.Models.Metadata.ItemStatus.Good, actual.Status); DataArea? actualDataArea = actual.DataArea; Assert.NotNull(actualDataArea); @@ -54,12 +56,6 @@ namespace SabreTools.Metadata.DatItems.Formats.Test Assert.NotNull(actualMachine); Assert.Equal("name", actualMachine.Name); - Assert.False(actual.RemoveFlag); - - Part? actualPart = actual.Part; - Assert.NotNull(actualPart); - Assert.Equal("name", actualPart.Name); - Source? actualSource = actual.Source; Assert.NotNull(actualSource); Assert.Equal(0, actualSource.Index); diff --git a/SabreTools.Metadata.DatItems/DatItem.cs b/SabreTools.Metadata.DatItems/DatItem.cs index ed51ad75..33071939 100644 --- a/SabreTools.Metadata.DatItems/DatItem.cs +++ b/SabreTools.Metadata.DatItems/DatItem.cs @@ -34,7 +34,6 @@ namespace SabreTools.Metadata.DatItems [XmlInclude(typeof(Info))] [XmlInclude(typeof(Input))] [XmlInclude(typeof(Media))] - [XmlInclude(typeof(Part))] [XmlInclude(typeof(PartFeature))] [XmlInclude(typeof(Port))] [XmlInclude(typeof(RamOption))] diff --git a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs index 23e5c015..3b6fe19d 100644 --- a/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs +++ b/SabreTools.Metadata.DatItems/Formats/DipSwitch.cs @@ -74,18 +74,9 @@ namespace SabreTools.Metadata.DatItems.Formats set => _internal.Name = value; } - public Part? Part { get; set; } + public string? PartInterface { get; set; } - [JsonIgnore] - public bool PartSpecified - { - get - { - return Part is not null - && (!string.IsNullOrEmpty(Part.Name) - || !string.IsNullOrEmpty(Part.Interface)); - } - } + public string? PartName { get; set; } public string? Tag { diff --git a/SabreTools.Metadata.DatItems/Formats/Disk.cs b/SabreTools.Metadata.DatItems/Formats/Disk.cs index 1fab3548..40d89834 100644 --- a/SabreTools.Metadata.DatItems/Formats/Disk.cs +++ b/SabreTools.Metadata.DatItems/Formats/Disk.cs @@ -60,18 +60,9 @@ namespace SabreTools.Metadata.DatItems.Formats set => _internal.Optional = value; } - public Part? Part { get; set; } + public string? PartInterface { get; set; } - [JsonIgnore] - public bool PartSpecified - { - get - { - return Part is not null - && (!string.IsNullOrEmpty(Part.Name) - || !string.IsNullOrEmpty(Part.Interface)); - } - } + public string? PartName { get; set; } public string? Region { @@ -163,7 +154,8 @@ namespace SabreTools.Metadata.DatItems.Formats rom.DupeType = DupeType; rom.Machine = Machine?.Clone() as Machine; - rom.Part = Part?.Clone() as Part; + rom.PartInterface = PartInterface; + rom.PartName = PartName; rom.RemoveFlag = RemoveFlag; rom.Source = Source?.Clone() as Source; diff --git a/SabreTools.Metadata.DatItems/Formats/Part.cs b/SabreTools.Metadata.DatItems/Formats/Part.cs deleted file mode 100644 index 2d1e828a..00000000 --- a/SabreTools.Metadata.DatItems/Formats/Part.cs +++ /dev/null @@ -1,96 +0,0 @@ -using System.Xml.Serialization; -using Newtonsoft.Json; - -namespace SabreTools.Metadata.DatItems.Formats -{ - /// - /// PartList part information - /// - /// One Part can contain multiple PartFeature, DataArea, DiskArea, and DipSwitch items - [JsonObject("part"), XmlRoot("part")] - public sealed class Part : DatItem - { - #region Properties - - public string? Interface - { - get => _internal.Interface; - set => _internal.Interface = value; - } - - /// /> - public override Data.Models.Metadata.ItemType ItemType - => Data.Models.Metadata.ItemType.Part; - - public string? Name - { - get => _internal.Name; - set => _internal.Name = value; - } - - #endregion - - #region Constructors - - public Part() : base() { } - - public Part(Data.Models.Metadata.Part item) : base(item) - { - _internal = item.Clone() as Data.Models.Metadata.Part ?? new(); - - // 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) - { - Source = source; - CopyMachineInformation(machine); - } - - #endregion - - #region Accessors - - /// - public override string? GetName() => Name; - - /// - public override void SetName(string? name) => Name = name; - - #endregion - - #region Cloning Methods - - /// - public override object Clone() => new Part(GetInternalClone()); - - /// - public override Data.Models.Metadata.Part GetInternalClone() - => _internal.Clone() as Data.Models.Metadata.Part ?? 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 Part otherPart) - return _internal.Equals(otherPart._internal); - - // Everything else fails - return false; - } - - #endregion - } -} diff --git a/SabreTools.Metadata.DatItems/Formats/PartFeature.cs b/SabreTools.Metadata.DatItems/Formats/PartFeature.cs index 0eef81ce..2bf9857f 100644 --- a/SabreTools.Metadata.DatItems/Formats/PartFeature.cs +++ b/SabreTools.Metadata.DatItems/Formats/PartFeature.cs @@ -34,10 +34,9 @@ namespace SabreTools.Metadata.DatItems.Formats set => _internal.Overall = value; } - public Part? Part { get; set; } + public string? PartInterface { get; set; } - [JsonIgnore] - public bool PartSpecified => Part is not null; + public string? PartName { get; set; } public Data.Models.Metadata.FeatureStatus? Status { diff --git a/SabreTools.Metadata.DatItems/Formats/Rom.cs b/SabreTools.Metadata.DatItems/Formats/Rom.cs index ae24c769..b15cbf81 100644 --- a/SabreTools.Metadata.DatItems/Formats/Rom.cs +++ b/SabreTools.Metadata.DatItems/Formats/Rom.cs @@ -326,18 +326,9 @@ namespace SabreTools.Metadata.DatItems.Formats set => _internal.Optional = value; } - public Part? Part { get; set; } + public string? PartInterface { get; set; } - [JsonIgnore] - public bool PartSpecified - { - get - { - return Part is not null - && (!string.IsNullOrEmpty(Part.Name) - || !string.IsNullOrEmpty(Part.Interface)); - } - } + public string? PartName { get; set; } public string? PDFModuleVersion { diff --git a/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs b/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs index 117afaac..280d26d9 100644 --- a/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs +++ b/SabreTools.Metadata.Filter.Test/FilterObjectTests.cs @@ -853,6 +853,7 @@ namespace SabreTools.Metadata.Filter.Test #endregion + // TODO: Handle inverted Part(?) #region DipSwitch [Theory] @@ -915,6 +916,7 @@ namespace SabreTools.Metadata.Filter.Test #endregion + // TODO: Handle inverted Part(?) #region Disk [Theory] @@ -1062,6 +1064,7 @@ namespace SabreTools.Metadata.Filter.Test #endregion + // TODO: Handle inverted Part(?) [PartFeature] #region Feature [Theory] @@ -1557,6 +1560,7 @@ namespace SabreTools.Metadata.Filter.Test #endregion + // TODO: Handle inverted Part(?) #region Rom [Theory]