Make GetSupportedTypes a property

This commit is contained in:
Matt Nadareski
2025-01-09 06:14:01 -05:00
parent f2c9139e41
commit 51bf5f9d9b
19 changed files with 199 additions and 190 deletions

View File

@@ -2,6 +2,12 @@ namespace SabreTools.DatFiles.Test
{
public class DatFileTests
{
#region SupportedTypes
// TODO: Write SupportedTypes tests
#endregion
#region Constructor
// TODO: Write Constructor tests
@@ -98,12 +104,6 @@ namespace SabreTools.DatFiles.Test
#endregion
#region GetSupportedTypes
// TODO: Write GetSupportedTypes tests
#endregion
#region GetMissingRequiredFields
// TODO: Write GetMissingRequiredFields tests

View File

@@ -38,6 +38,11 @@ namespace SabreTools.DatFiles
[JsonProperty("items"), XmlElement("items")]
public ItemDictionaryDB ItemsDB { get; private set; } = new ItemDictionaryDB();
/// <summary>
/// List of supported types for writing
/// </summary>
public abstract ItemType[] SupportedTypes { get; }
#endregion
#region Logging
@@ -696,16 +701,6 @@ namespace SabreTools.DatFiles
return new KeyValuePair<long, DatItem>(item.Key, rom);
}
/// <summary>
/// Get supported types for write
/// </summary>
/// <returns>List of supported types for writing</returns>
/// TODO: Make this into a property instead of a method
protected virtual ItemType[] GetSupportedTypes()
{
return Enum.GetValues(typeof(ItemType)) as ItemType[] ?? [];
}
/// <summary>
/// Return list of required fields missing from a DatItem
/// </summary>
@@ -727,7 +722,7 @@ namespace SabreTools.DatFiles
foreach (DatItem datItem in datItems)
{
ItemType itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue<ItemType>();
if (Array.Exists(GetSupportedTypes(), t => t == itemType))
if (Array.Exists(SupportedTypes, t => t == itemType))
return true;
}
@@ -749,7 +744,7 @@ namespace SabreTools.DatFiles
foreach (var datItem in datItems)
{
ItemType itemType = datItem.Value.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue<ItemType>();
if (Array.Exists(GetSupportedTypes(), t => t == itemType))
if (Array.Exists(SupportedTypes, t => t == itemType))
return true;
}
@@ -990,7 +985,7 @@ namespace SabreTools.DatFiles
// If we have an item type not in the list of supported values
string datFormat = Header?.GetFieldValue<DatFormat>(DatHeader.DatFormatKey).ToString() ?? "Unknown Format";
ItemType itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue<ItemType>();
if (!Array.Exists(GetSupportedTypes(), t => t == itemType))
if (!Array.Exists(SupportedTypes, t => t == itemType))
{
string itemString = JsonConvert.SerializeObject(datItem, Formatting.None);
_logger?.Verbose($"Item '{itemString}' was skipped because it was not supported in {datFormat}");

View File

@@ -7,6 +7,12 @@ namespace SabreTools.DatFiles.Formats
/// </summary>
internal sealed class ArchiveDotOrg : SerializableDatFile<Models.ArchiveDotOrg.Files, Serialization.Deserializers.ArchiveDotOrg, Serialization.Serializers.ArchiveDotOrg, Serialization.CrossModel.ArchiveDotOrg>
{
/// <inheritdoc/>
public override ItemType[] SupportedTypes
=> [
ItemType.Rom,
];
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>
@@ -14,14 +20,5 @@ namespace SabreTools.DatFiles.Formats
public ArchiveDotOrg(DatFile? datFile) : base(datFile)
{
}
/// <inheritdoc/>
protected override ItemType[] GetSupportedTypes()
{
return
[
ItemType.Rom,
];
}
}
}

View File

@@ -8,6 +8,12 @@ namespace SabreTools.DatFiles.Formats
/// </summary>
internal sealed class AttractMode : SerializableDatFile<Models.AttractMode.MetadataFile, Serialization.Deserializers.AttractMode, Serialization.Serializers.AttractMode, Serialization.CrossModel.AttractMode>
{
/// <inheritdoc/>
public override ItemType[] SupportedTypes
=> [
ItemType.Rom,
];
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>
@@ -16,15 +22,6 @@ namespace SabreTools.DatFiles.Formats
{
}
/// <inheritdoc/>
protected override ItemType[] GetSupportedTypes()
{
return
[
ItemType.Rom
];
}
/// <inheritdoc/>
protected override List<string>? GetMissingRequiredFields(DatItem datItem)
{

View File

@@ -13,6 +13,24 @@ namespace SabreTools.DatFiles.Formats
{
#region Fields
/// <inheritdoc/>
public override ItemType[] SupportedTypes
=> [
ItemType.Archive,
ItemType.BiosSet,
ItemType.Chip,
ItemType.DipSwitch,
ItemType.Disk,
ItemType.Display,
ItemType.Driver,
ItemType.Input,
ItemType.Media,
ItemType.Release,
ItemType.Rom,
ItemType.Sample,
ItemType.Sound,
];
/// <summary>
/// Get whether to assume quote usage on read and write or not
/// </summary>
@@ -49,27 +67,6 @@ namespace SabreTools.DatFiles.Formats
}
}
/// <inheritdoc/>
protected override ItemType[] GetSupportedTypes()
{
return
[
ItemType.Archive,
ItemType.BiosSet,
ItemType.Chip,
ItemType.DipSwitch,
ItemType.Disk,
ItemType.Display,
ItemType.Driver,
ItemType.Input,
ItemType.Media,
ItemType.Release,
ItemType.Rom,
ItemType.Sample,
ItemType.Sound,
];
}
/// <inheritdoc/>
protected override List<string>? GetMissingRequiredFields(DatItem datItem)
{

View File

@@ -9,6 +9,12 @@ namespace SabreTools.DatFiles.Formats
/// </summary>
internal sealed class DosCenter : SerializableDatFile<Models.DosCenter.MetadataFile, Serialization.Deserializers.DosCenter, Serialization.Serializers.DosCenter, Serialization.CrossModel.DosCenter>
{
/// <inheritdoc/>
public override ItemType[] SupportedTypes
=> [
ItemType.Rom,
];
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>
@@ -17,15 +23,6 @@ namespace SabreTools.DatFiles.Formats
{
}
/// <inheritdoc/>
protected override ItemType[] GetSupportedTypes()
{
return
[
ItemType.Rom
];
}
/// <inheritdoc/>
protected override List<string>? GetMissingRequiredFields(DatItem datItem)
{

View File

@@ -9,6 +9,12 @@ namespace SabreTools.DatFiles.Formats
/// </summary>
internal sealed class EverdriveSMDB : SerializableDatFile<Models.EverdriveSMDB.MetadataFile, Serialization.Deserializers.EverdriveSMDB, Serialization.Serializers.EverdriveSMDB, Serialization.CrossModel.EverdriveSMDB>
{
/// <inheritdoc/>
public override ItemType[] SupportedTypes
=> [
ItemType.Rom,
];
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>
@@ -17,15 +23,6 @@ namespace SabreTools.DatFiles.Formats
{
}
/// <inheritdoc/>
protected override ItemType[] GetSupportedTypes()
{
return
[
ItemType.Rom
];
}
/// <inheritdoc/>
protected override List<string>? GetMissingRequiredFields(DatItem datItem)
{

View File

@@ -11,9 +11,21 @@ namespace SabreTools.DatFiles.Formats
/// </summary>
internal abstract class Hashfile : SerializableDatFile<Models.Hashfile.Hashfile, Serialization.Deserializers.Hashfile, Serialization.Serializers.Hashfile, Serialization.CrossModel.Hashfile>
{
#region Fields
/// <inheritdoc/>
public override ItemType[] SupportedTypes
=> [
ItemType.Disk,
ItemType.Media,
ItemType.Rom,
];
// Private instance variables specific to Hashfile DATs
protected HashType _hash;
#endregion
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>
@@ -41,17 +53,6 @@ namespace SabreTools.DatFiles.Formats
}
}
/// <inheritdoc/>
protected override ItemType[] GetSupportedTypes()
{
return
[
ItemType.Disk,
ItemType.Media,
ItemType.Rom
];
}
/// <inheritdoc/>
protected override List<string>? GetMissingRequiredFields(DatItem datItem)
{

View File

@@ -9,6 +9,13 @@ namespace SabreTools.DatFiles.Formats
/// </summary>
internal sealed class Listrom : SerializableDatFile<Models.Listrom.MetadataFile, Serialization.Deserializers.Listrom, Serialization.Serializers.Listrom, Serialization.CrossModel.Listrom>
{
/// <inheritdoc/>
public override ItemType[] SupportedTypes
=> [
ItemType.Disk,
ItemType.Rom,
];
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>
@@ -17,16 +24,6 @@ namespace SabreTools.DatFiles.Formats
{
}
/// <inheritdoc/>
protected override ItemType[] GetSupportedTypes()
{
return
[
ItemType.Disk,
ItemType.Rom
];
}
/// <inheritdoc/>
protected override List<string>? GetMissingRequiredFields(DatItem datItem)
{

View File

@@ -11,6 +11,8 @@ namespace SabreTools.DatFiles.Formats
/// </summary>
internal sealed class Listxml : SerializableDatFile<Models.Listxml.Mame, Serialization.Deserializers.Listxml, Serialization.Serializers.Listxml, Serialization.CrossModel.Listxml>
{
#region Constants
/// <summary>
/// DTD for original MAME XML DATs
/// </summary>
@@ -177,6 +179,37 @@ namespace SabreTools.DatFiles.Formats
]>
";
#endregion
#region Fields
/// <inheritdoc/>
public override ItemType[] SupportedTypes
=> [
ItemType.Adjuster,
ItemType.BiosSet,
ItemType.Chip,
ItemType.Condition,
ItemType.Configuration,
ItemType.Device,
ItemType.DeviceRef,
ItemType.DipSwitch,
ItemType.Disk,
ItemType.Display,
ItemType.Driver,
ItemType.Feature,
ItemType.Input,
ItemType.Port,
ItemType.RamOption,
ItemType.Rom,
ItemType.Sample,
ItemType.Slot,
ItemType.SoftwareList,
ItemType.Sound,
];
#endregion
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>
@@ -213,34 +246,6 @@ namespace SabreTools.DatFiles.Formats
}
}
/// <inheritdoc/>
protected override ItemType[] GetSupportedTypes()
{
return
[
ItemType.Adjuster,
ItemType.BiosSet,
ItemType.Chip,
ItemType.Condition,
ItemType.Configuration,
ItemType.Device,
ItemType.DeviceRef,
ItemType.DipSwitch,
ItemType.Disk,
ItemType.Display,
ItemType.Driver,
ItemType.Feature,
ItemType.Input,
ItemType.Port,
ItemType.RamOption,
ItemType.Rom,
ItemType.Sample,
ItemType.Slot,
ItemType.SoftwareList,
ItemType.Sound,
];
}
/// <inheritdoc/>
protected override List<string>? GetMissingRequiredFields(DatItem datItem)
{

View File

@@ -11,8 +11,7 @@ namespace SabreTools.DatFiles.Formats
/// </summary>
internal sealed class Logiqx : SerializableDatFile<Models.Logiqx.Datafile, Serialization.Deserializers.Logiqx, Serialization.Serializers.Logiqx, Serialization.CrossModel.Logiqx>
{
// Private instance variables specific to Logiqx DATs
private readonly bool _deprecated;
#region Constants
/// <summary>
/// DTD for original Logiqx DATs
@@ -220,21 +219,13 @@ namespace SabreTools.DatFiles.Formats
</xs:schema>
";
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>
/// <param name="datFile">Parent DatFile to copy from</param>
/// <param name="deprecated">True if the output uses "game", false if the output uses "machine"</param>
public Logiqx(DatFile? datFile, bool deprecated) : base(datFile)
{
_deprecated = deprecated;
}
#endregion
#region Fields
/// <inheritdoc/>
protected override ItemType[] GetSupportedTypes()
{
return
[
public override ItemType[] SupportedTypes
=> [
ItemType.Archive,
ItemType.BiosSet,
ItemType.Disk,
@@ -243,6 +234,22 @@ namespace SabreTools.DatFiles.Formats
ItemType.Rom,
ItemType.Sample,
];
/// <summary>
/// Indicates if game should be used instead of machine
/// </summary>
private readonly bool _deprecated;
#endregion
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>
/// <param name="datFile">Parent DatFile to copy from</param>
/// <param name="deprecated">True if the output uses "game", false if the output uses "machine"</param>
public Logiqx(DatFile? datFile, bool deprecated) : base(datFile)
{
_deprecated = deprecated;
}
/// <inheritdoc/>

View File

@@ -11,6 +11,10 @@ namespace SabreTools.DatFiles.Formats
/// </summary>
internal sealed class Missfile : DatFile
{
/// <inheritdoc/>
public override ItemType[] SupportedTypes
=> Enum.GetValues(typeof(ItemType)) as ItemType[] ?? [];
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>

View File

@@ -9,6 +9,12 @@ namespace SabreTools.DatFiles.Formats
/// </summary>
internal sealed class OfflineList : SerializableDatFile<Models.OfflineList.Dat, Serialization.Deserializers.OfflineList, Serialization.Serializers.OfflineList, Serialization.CrossModel.OfflineList>
{
/// <inheritdoc/>
public override ItemType[] SupportedTypes
=> [
ItemType.Rom,
];
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>
@@ -17,15 +23,6 @@ namespace SabreTools.DatFiles.Formats
{
}
/// <inheritdoc/>
protected override ItemType[] GetSupportedTypes()
{
return
[
ItemType.Rom
];
}
/// <inheritdoc/>
protected override List<string>? GetMissingRequiredFields(DatItem datItem)
{

View File

@@ -9,6 +9,8 @@ namespace SabreTools.DatFiles.Formats
/// </summary>
internal sealed class OpenMSX : SerializableDatFile<Models.OpenMSX.SoftwareDb, Serialization.Deserializers.OpenMSX, Serialization.Serializers.OpenMSX, Serialization.CrossModel.OpenMSX>
{
#region Constants
/// <summary>
/// DTD for original openMSX DATs
/// </summary>
@@ -40,6 +42,18 @@ The softwaredb.xml file contains information about rom mapper types
]]>";
#endregion
#region Fields
/// <inheritdoc/>
public override ItemType[] SupportedTypes
=> [
ItemType.Rom,
];
#endregion
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>
@@ -48,15 +62,6 @@ The softwaredb.xml file contains information about rom mapper types
{
}
/// <inheritdoc/>
protected override ItemType[] GetSupportedTypes()
{
return
[
ItemType.Rom
];
}
/// <inheritdoc/>
protected override List<string>? GetMissingRequiredFields(DatItem datItem)
{

View File

@@ -9,6 +9,12 @@ namespace SabreTools.DatFiles.Formats
/// </summary>
internal sealed class RomCenter : SerializableDatFile<Models.RomCenter.MetadataFile, Serialization.Deserializers.RomCenter, Serialization.Serializers.RomCenter, Serialization.CrossModel.RomCenter>
{
/// <inheritdoc/>
public override ItemType[] SupportedTypes
=> [
ItemType.Rom,
];
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>
@@ -17,15 +23,6 @@ namespace SabreTools.DatFiles.Formats
{
}
/// <inheritdoc/>
protected override ItemType[] GetSupportedTypes()
{
return
[
ItemType.Rom
];
}
/// <inheritdoc/>
protected override List<string>? GetMissingRequiredFields(DatItem datItem)
{

View File

@@ -17,6 +17,10 @@ namespace SabreTools.DatFiles.Formats
/// </summary>
internal class SabreJSON : DatFile
{
/// <inheritdoc/>
public override ItemType[] SupportedTypes
=> Enum.GetValues(typeof(ItemType)) as ItemType[] ?? [];
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>

View File

@@ -14,6 +14,10 @@ namespace SabreTools.DatFiles.Formats
/// </summary>
internal class SabreXML : DatFile
{
/// <inheritdoc/>
public override ItemType[] SupportedTypes
=> Enum.GetValues(typeof(ItemType)) as ItemType[] ?? [];
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>

View File

@@ -10,9 +10,23 @@ namespace SabreTools.DatFiles.Formats
/// </summary>
internal abstract class SeparatedValue : SerializableDatFile<Models.SeparatedValue.MetadataFile, Serialization.Deserializers.SeparatedValue, Serialization.Serializers.SeparatedValue, Serialization.CrossModel.SeparatedValue>
{
// Private instance variables specific to Hashfile DATs
#region Fields
/// <inheritdoc/>
public override ItemType[] SupportedTypes
=> [
ItemType.Disk,
ItemType.Media,
ItemType.Rom,
];
/// <summary>
/// Represents the delimiter between fields
/// </summary>
protected char _delim;
#endregion
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>
@@ -40,17 +54,6 @@ namespace SabreTools.DatFiles.Formats
}
}
/// <inheritdoc/>
protected override ItemType[] GetSupportedTypes()
{
return
[
ItemType.Disk,
ItemType.Media,
ItemType.Rom
];
}
/// <inheritdoc/>
protected override List<string>? GetMissingRequiredFields(DatItem datItem)
{

View File

@@ -10,6 +10,8 @@ namespace SabreTools.DatFiles.Formats
/// </summary>
internal sealed class SoftwareList : SerializableDatFile<Models.SoftwareList.SoftwareList, Serialization.Deserializers.SoftwareList, Serialization.Serializers.SoftwareList, Serialization.CrossModel.SoftwareList>
{
#region Constants
/// <summary>
/// DTD for original MAME Software List DATs
/// </summary>
@@ -71,19 +73,13 @@ namespace SabreTools.DatFiles.Formats
<!ATTLIST dipvalue default (yes|no) ""no"">
";
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>
/// <param name="datFile">Parent DatFile to copy from</param>
public SoftwareList(DatFile? datFile) : base(datFile)
{
}
#endregion
#region Fields
/// <inheritdoc/>
protected override ItemType[] GetSupportedTypes()
{
return
[
public override ItemType[] SupportedTypes
=> [
ItemType.DipSwitch,
ItemType.Disk,
ItemType.Info,
@@ -91,6 +87,15 @@ namespace SabreTools.DatFiles.Formats
ItemType.Rom,
ItemType.SharedFeat,
];
#endregion
/// <summary>
/// Constructor designed for casting a base DatFile
/// </summary>
/// <param name="datFile">Parent DatFile to copy from</param>
public SoftwareList(DatFile? datFile) : base(datFile)
{
}
/// <inheritdoc/>