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) + { } ///