mirror of
https://github.com/SabreTools/SabreTools.Serialization.git
synced 2026-07-08 18:06:41 +00:00
Make inverted Part less impactful
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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<Part>();
|
||||
break;
|
||||
case Data.Models.Metadata.ItemType.PartFeature:
|
||||
datItem = datItemObj.ToObject<PartFeature>();
|
||||
break;
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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))]
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -1,96 +0,0 @@
|
||||
using System.Xml.Serialization;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace SabreTools.Metadata.DatItems.Formats
|
||||
{
|
||||
/// <summary>
|
||||
/// PartList part information
|
||||
/// </summary>
|
||||
/// <remarks>One Part can contain multiple PartFeature, DataArea, DiskArea, and DipSwitch items</remarks>
|
||||
[JsonObject("part"), XmlRoot("part")]
|
||||
public sealed class Part : DatItem<Data.Models.Metadata.Part>
|
||||
{
|
||||
#region Properties
|
||||
|
||||
public string? Interface
|
||||
{
|
||||
get => _internal.Interface;
|
||||
set => _internal.Interface = value;
|
||||
}
|
||||
|
||||
/// <inheritdoc>/>
|
||||
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
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override string? GetName() => Name;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override void SetName(string? name) => Name = name;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Cloning Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override object Clone() => new Part(GetInternalClone());
|
||||
|
||||
/// <inheritdoc/>
|
||||
public override Data.Models.Metadata.Part GetInternalClone()
|
||||
=> _internal.Clone() as Data.Models.Metadata.Part ?? new();
|
||||
|
||||
#endregion
|
||||
|
||||
#region Comparision Methods
|
||||
|
||||
/// <inheritdoc/>
|
||||
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
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user