diff --git a/SabreTools.DatFiles.Test/DatFileTests.cs b/SabreTools.DatFiles.Test/DatFileTests.cs
index 23350f10..06bdda3a 100644
--- a/SabreTools.DatFiles.Test/DatFileTests.cs
+++ b/SabreTools.DatFiles.Test/DatFileTests.cs
@@ -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
diff --git a/SabreTools.DatFiles/DatFile.cs b/SabreTools.DatFiles/DatFile.cs
index fae89cd8..108d406a 100644
--- a/SabreTools.DatFiles/DatFile.cs
+++ b/SabreTools.DatFiles/DatFile.cs
@@ -38,6 +38,11 @@ namespace SabreTools.DatFiles
[JsonProperty("items"), XmlElement("items")]
public ItemDictionaryDB ItemsDB { get; private set; } = new ItemDictionaryDB();
+ ///
+ /// List of supported types for writing
+ ///
+ public abstract ItemType[] SupportedTypes { get; }
+
#endregion
#region Logging
@@ -696,16 +701,6 @@ namespace SabreTools.DatFiles
return new KeyValuePair(item.Key, rom);
}
- ///
- /// Get supported types for write
- ///
- /// List of supported types for writing
- /// TODO: Make this into a property instead of a method
- protected virtual ItemType[] GetSupportedTypes()
- {
- return Enum.GetValues(typeof(ItemType)) as ItemType[] ?? [];
- }
-
///
/// Return list of required fields missing from a DatItem
///
@@ -727,7 +722,7 @@ namespace SabreTools.DatFiles
foreach (DatItem datItem in datItems)
{
ItemType itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue();
- 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();
- 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(DatHeader.DatFormatKey).ToString() ?? "Unknown Format";
ItemType itemType = datItem.GetStringFieldValue(Models.Metadata.DatItem.TypeKey).AsEnumValue();
- 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}");
diff --git a/SabreTools.DatFiles/Formats/ArchiveDotOrg.cs b/SabreTools.DatFiles/Formats/ArchiveDotOrg.cs
index 83fd1d29..942470ed 100644
--- a/SabreTools.DatFiles/Formats/ArchiveDotOrg.cs
+++ b/SabreTools.DatFiles/Formats/ArchiveDotOrg.cs
@@ -7,6 +7,12 @@ namespace SabreTools.DatFiles.Formats
///
internal sealed class ArchiveDotOrg : SerializableDatFile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Rom,
+ ];
+
///
/// Constructor designed for casting a base DatFile
///
@@ -14,14 +20,5 @@ namespace SabreTools.DatFiles.Formats
public ArchiveDotOrg(DatFile? datFile) : base(datFile)
{
}
-
- ///
- protected override ItemType[] GetSupportedTypes()
- {
- return
- [
- ItemType.Rom,
- ];
- }
}
}
diff --git a/SabreTools.DatFiles/Formats/AttractMode.cs b/SabreTools.DatFiles/Formats/AttractMode.cs
index 8121697d..2e00dd07 100644
--- a/SabreTools.DatFiles/Formats/AttractMode.cs
+++ b/SabreTools.DatFiles/Formats/AttractMode.cs
@@ -8,6 +8,12 @@ namespace SabreTools.DatFiles.Formats
///
internal sealed class AttractMode : SerializableDatFile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Rom,
+ ];
+
///
/// Constructor designed for casting a base DatFile
///
@@ -16,15 +22,6 @@ namespace SabreTools.DatFiles.Formats
{
}
- ///
- protected override ItemType[] GetSupportedTypes()
- {
- return
- [
- ItemType.Rom
- ];
- }
-
///
protected override List? GetMissingRequiredFields(DatItem datItem)
{
diff --git a/SabreTools.DatFiles/Formats/ClrMamePro.cs b/SabreTools.DatFiles/Formats/ClrMamePro.cs
index cb0c1ace..e130c2ef 100644
--- a/SabreTools.DatFiles/Formats/ClrMamePro.cs
+++ b/SabreTools.DatFiles/Formats/ClrMamePro.cs
@@ -13,6 +13,24 @@ namespace SabreTools.DatFiles.Formats
{
#region Fields
+ ///
+ 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,
+ ];
+
///
/// Get whether to assume quote usage on read and write or not
///
@@ -49,27 +67,6 @@ namespace SabreTools.DatFiles.Formats
}
}
- ///
- 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,
- ];
- }
-
///
protected override List? GetMissingRequiredFields(DatItem datItem)
{
diff --git a/SabreTools.DatFiles/Formats/DosCenter.cs b/SabreTools.DatFiles/Formats/DosCenter.cs
index 2d1412b7..77068e33 100644
--- a/SabreTools.DatFiles/Formats/DosCenter.cs
+++ b/SabreTools.DatFiles/Formats/DosCenter.cs
@@ -9,6 +9,12 @@ namespace SabreTools.DatFiles.Formats
///
internal sealed class DosCenter : SerializableDatFile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Rom,
+ ];
+
///
/// Constructor designed for casting a base DatFile
///
@@ -17,15 +23,6 @@ namespace SabreTools.DatFiles.Formats
{
}
- ///
- protected override ItemType[] GetSupportedTypes()
- {
- return
- [
- ItemType.Rom
- ];
- }
-
///
protected override List? GetMissingRequiredFields(DatItem datItem)
{
diff --git a/SabreTools.DatFiles/Formats/EverdriveSmdb.cs b/SabreTools.DatFiles/Formats/EverdriveSmdb.cs
index 82dfbd83..3fc9cec0 100644
--- a/SabreTools.DatFiles/Formats/EverdriveSmdb.cs
+++ b/SabreTools.DatFiles/Formats/EverdriveSmdb.cs
@@ -9,6 +9,12 @@ namespace SabreTools.DatFiles.Formats
///
internal sealed class EverdriveSMDB : SerializableDatFile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Rom,
+ ];
+
///
/// Constructor designed for casting a base DatFile
///
@@ -17,15 +23,6 @@ namespace SabreTools.DatFiles.Formats
{
}
- ///
- protected override ItemType[] GetSupportedTypes()
- {
- return
- [
- ItemType.Rom
- ];
- }
-
///
protected override List? GetMissingRequiredFields(DatItem datItem)
{
diff --git a/SabreTools.DatFiles/Formats/Hashfile.cs b/SabreTools.DatFiles/Formats/Hashfile.cs
index d395c4e4..477724b6 100644
--- a/SabreTools.DatFiles/Formats/Hashfile.cs
+++ b/SabreTools.DatFiles/Formats/Hashfile.cs
@@ -11,9 +11,21 @@ namespace SabreTools.DatFiles.Formats
///
internal abstract class Hashfile : SerializableDatFile
{
+ #region Fields
+
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Disk,
+ ItemType.Media,
+ ItemType.Rom,
+ ];
+
// Private instance variables specific to Hashfile DATs
protected HashType _hash;
+ #endregion
+
///
/// Constructor designed for casting a base DatFile
///
@@ -41,17 +53,6 @@ namespace SabreTools.DatFiles.Formats
}
}
- ///
- protected override ItemType[] GetSupportedTypes()
- {
- return
- [
- ItemType.Disk,
- ItemType.Media,
- ItemType.Rom
- ];
- }
-
///
protected override List? GetMissingRequiredFields(DatItem datItem)
{
diff --git a/SabreTools.DatFiles/Formats/Listrom.cs b/SabreTools.DatFiles/Formats/Listrom.cs
index 26d1c424..aec7f049 100644
--- a/SabreTools.DatFiles/Formats/Listrom.cs
+++ b/SabreTools.DatFiles/Formats/Listrom.cs
@@ -9,6 +9,13 @@ namespace SabreTools.DatFiles.Formats
///
internal sealed class Listrom : SerializableDatFile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Disk,
+ ItemType.Rom,
+ ];
+
///
/// Constructor designed for casting a base DatFile
///
@@ -17,16 +24,6 @@ namespace SabreTools.DatFiles.Formats
{
}
- ///
- protected override ItemType[] GetSupportedTypes()
- {
- return
- [
- ItemType.Disk,
- ItemType.Rom
- ];
- }
-
///
protected override List? GetMissingRequiredFields(DatItem datItem)
{
diff --git a/SabreTools.DatFiles/Formats/Listxml.cs b/SabreTools.DatFiles/Formats/Listxml.cs
index 6fe9458e..b7f269a8 100644
--- a/SabreTools.DatFiles/Formats/Listxml.cs
+++ b/SabreTools.DatFiles/Formats/Listxml.cs
@@ -11,6 +11,8 @@ namespace SabreTools.DatFiles.Formats
///
internal sealed class Listxml : SerializableDatFile
{
+ #region Constants
+
///
/// DTD for original MAME XML DATs
///
@@ -177,6 +179,37 @@ namespace SabreTools.DatFiles.Formats
]>
";
+ #endregion
+
+ #region Fields
+
+ ///
+ 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
+
///
/// Constructor designed for casting a base DatFile
///
@@ -213,34 +246,6 @@ namespace SabreTools.DatFiles.Formats
}
}
- ///
- 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,
- ];
- }
-
///
protected override List? GetMissingRequiredFields(DatItem datItem)
{
diff --git a/SabreTools.DatFiles/Formats/Logiqx.cs b/SabreTools.DatFiles/Formats/Logiqx.cs
index 2683a486..eb039001 100644
--- a/SabreTools.DatFiles/Formats/Logiqx.cs
+++ b/SabreTools.DatFiles/Formats/Logiqx.cs
@@ -11,8 +11,7 @@ namespace SabreTools.DatFiles.Formats
///
internal sealed class Logiqx : SerializableDatFile
{
- // Private instance variables specific to Logiqx DATs
- private readonly bool _deprecated;
+ #region Constants
///
/// DTD for original Logiqx DATs
@@ -220,21 +219,13 @@ namespace SabreTools.DatFiles.Formats
";
- ///
- /// Constructor designed for casting a base DatFile
- ///
- /// Parent DatFile to copy from
- /// True if the output uses "game", false if the output uses "machine"
- public Logiqx(DatFile? datFile, bool deprecated) : base(datFile)
- {
- _deprecated = deprecated;
- }
+ #endregion
+
+ #region Fields
///
- 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,
];
+
+ ///
+ /// Indicates if game should be used instead of machine
+ ///
+ private readonly bool _deprecated;
+
+ #endregion
+
+ ///
+ /// Constructor designed for casting a base DatFile
+ ///
+ /// Parent DatFile to copy from
+ /// True if the output uses "game", false if the output uses "machine"
+ public Logiqx(DatFile? datFile, bool deprecated) : base(datFile)
+ {
+ _deprecated = deprecated;
}
///
diff --git a/SabreTools.DatFiles/Formats/Missfile.cs b/SabreTools.DatFiles/Formats/Missfile.cs
index d708ba7c..d730d527 100644
--- a/SabreTools.DatFiles/Formats/Missfile.cs
+++ b/SabreTools.DatFiles/Formats/Missfile.cs
@@ -11,6 +11,10 @@ namespace SabreTools.DatFiles.Formats
///
internal sealed class Missfile : DatFile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => Enum.GetValues(typeof(ItemType)) as ItemType[] ?? [];
+
///
/// Constructor designed for casting a base DatFile
///
diff --git a/SabreTools.DatFiles/Formats/OfflineList.cs b/SabreTools.DatFiles/Formats/OfflineList.cs
index a6b2f58b..4792b9a4 100644
--- a/SabreTools.DatFiles/Formats/OfflineList.cs
+++ b/SabreTools.DatFiles/Formats/OfflineList.cs
@@ -9,6 +9,12 @@ namespace SabreTools.DatFiles.Formats
///
internal sealed class OfflineList : SerializableDatFile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Rom,
+ ];
+
///
/// Constructor designed for casting a base DatFile
///
@@ -17,15 +23,6 @@ namespace SabreTools.DatFiles.Formats
{
}
- ///
- protected override ItemType[] GetSupportedTypes()
- {
- return
- [
- ItemType.Rom
- ];
- }
-
///
protected override List? GetMissingRequiredFields(DatItem datItem)
{
diff --git a/SabreTools.DatFiles/Formats/OpenMSX.cs b/SabreTools.DatFiles/Formats/OpenMSX.cs
index 2a583cd5..818b91fb 100644
--- a/SabreTools.DatFiles/Formats/OpenMSX.cs
+++ b/SabreTools.DatFiles/Formats/OpenMSX.cs
@@ -9,6 +9,8 @@ namespace SabreTools.DatFiles.Formats
///
internal sealed class OpenMSX : SerializableDatFile
{
+ #region Constants
+
///
/// DTD for original openMSX DATs
///
@@ -40,6 +42,18 @@ The softwaredb.xml file contains information about rom mapper types
]]>";
+ #endregion
+
+ #region Fields
+
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Rom,
+ ];
+
+ #endregion
+
///
/// Constructor designed for casting a base DatFile
///
@@ -48,15 +62,6 @@ The softwaredb.xml file contains information about rom mapper types
{
}
- ///
- protected override ItemType[] GetSupportedTypes()
- {
- return
- [
- ItemType.Rom
- ];
- }
-
///
protected override List? GetMissingRequiredFields(DatItem datItem)
{
diff --git a/SabreTools.DatFiles/Formats/RomCenter.cs b/SabreTools.DatFiles/Formats/RomCenter.cs
index afd823e4..329dcb90 100644
--- a/SabreTools.DatFiles/Formats/RomCenter.cs
+++ b/SabreTools.DatFiles/Formats/RomCenter.cs
@@ -9,6 +9,12 @@ namespace SabreTools.DatFiles.Formats
///
internal sealed class RomCenter : SerializableDatFile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Rom,
+ ];
+
///
/// Constructor designed for casting a base DatFile
///
@@ -17,15 +23,6 @@ namespace SabreTools.DatFiles.Formats
{
}
- ///
- protected override ItemType[] GetSupportedTypes()
- {
- return
- [
- ItemType.Rom
- ];
- }
-
///
protected override List? GetMissingRequiredFields(DatItem datItem)
{
diff --git a/SabreTools.DatFiles/Formats/SabreJSON.cs b/SabreTools.DatFiles/Formats/SabreJSON.cs
index f9f27450..0c576f13 100644
--- a/SabreTools.DatFiles/Formats/SabreJSON.cs
+++ b/SabreTools.DatFiles/Formats/SabreJSON.cs
@@ -17,6 +17,10 @@ namespace SabreTools.DatFiles.Formats
///
internal class SabreJSON : DatFile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => Enum.GetValues(typeof(ItemType)) as ItemType[] ?? [];
+
///
/// Constructor designed for casting a base DatFile
///
diff --git a/SabreTools.DatFiles/Formats/SabreXML.cs b/SabreTools.DatFiles/Formats/SabreXML.cs
index 976f35fd..dd3d6fa4 100644
--- a/SabreTools.DatFiles/Formats/SabreXML.cs
+++ b/SabreTools.DatFiles/Formats/SabreXML.cs
@@ -14,6 +14,10 @@ namespace SabreTools.DatFiles.Formats
///
internal class SabreXML : DatFile
{
+ ///
+ public override ItemType[] SupportedTypes
+ => Enum.GetValues(typeof(ItemType)) as ItemType[] ?? [];
+
///
/// Constructor designed for casting a base DatFile
///
diff --git a/SabreTools.DatFiles/Formats/SeparatedValue.cs b/SabreTools.DatFiles/Formats/SeparatedValue.cs
index dba08db0..f3c01be5 100644
--- a/SabreTools.DatFiles/Formats/SeparatedValue.cs
+++ b/SabreTools.DatFiles/Formats/SeparatedValue.cs
@@ -10,9 +10,23 @@ namespace SabreTools.DatFiles.Formats
///
internal abstract class SeparatedValue : SerializableDatFile
{
- // Private instance variables specific to Hashfile DATs
+ #region Fields
+
+ ///
+ public override ItemType[] SupportedTypes
+ => [
+ ItemType.Disk,
+ ItemType.Media,
+ ItemType.Rom,
+ ];
+
+ ///
+ /// Represents the delimiter between fields
+ ///
protected char _delim;
+ #endregion
+
///
/// Constructor designed for casting a base DatFile
///
@@ -40,17 +54,6 @@ namespace SabreTools.DatFiles.Formats
}
}
- ///
- protected override ItemType[] GetSupportedTypes()
- {
- return
- [
- ItemType.Disk,
- ItemType.Media,
- ItemType.Rom
- ];
- }
-
///
protected override List? GetMissingRequiredFields(DatItem datItem)
{
diff --git a/SabreTools.DatFiles/Formats/SoftwareList.cs b/SabreTools.DatFiles/Formats/SoftwareList.cs
index 3e9a159c..6cd19182 100644
--- a/SabreTools.DatFiles/Formats/SoftwareList.cs
+++ b/SabreTools.DatFiles/Formats/SoftwareList.cs
@@ -10,6 +10,8 @@ namespace SabreTools.DatFiles.Formats
///
internal sealed class SoftwareList : SerializableDatFile
{
+ #region Constants
+
///
/// DTD for original MAME Software List DATs
///
@@ -71,19 +73,13 @@ namespace SabreTools.DatFiles.Formats
";
- ///
- /// Constructor designed for casting a base DatFile
- ///
- /// Parent DatFile to copy from
- public SoftwareList(DatFile? datFile) : base(datFile)
- {
- }
+ #endregion
+
+ #region Fields
///
- 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
+
+ ///
+ /// Constructor designed for casting a base DatFile
+ ///
+ /// Parent DatFile to copy from
+ public SoftwareList(DatFile? datFile) : base(datFile)
+ {
}
///