Convert remaining items, add NameKey

This commit is contained in:
Matt Nadareski
2024-03-10 20:39:54 -04:00
parent 2c8f2ce495
commit 97542bf966
58 changed files with 463 additions and 1601 deletions

View File

@@ -447,7 +447,7 @@ namespace SabreTools.Core
Device, Device,
[Mapping("device_ref", "deviceref")] [Mapping("device_ref", "deviceref")]
DeviceReference, DeviceRef,
[Mapping("diplocation")] [Mapping("diplocation")]
DipLocation, DipLocation,
@@ -510,7 +510,7 @@ namespace SabreTools.Core
Serials, Serials,
[Mapping("sharedfeat", "shared_feat", "sharedfeature", "shared_feature")] [Mapping("sharedfeat", "shared_feat", "sharedfeature", "shared_feature")]
SharedFeature, SharedFeat,
[Mapping("slot")] [Mapping("slot")]
Slot, Slot,

View File

@@ -400,7 +400,7 @@ namespace SabreTools.DatFiles
// Loop through the items and add // Loop through the items and add
foreach (var item in items) foreach (var item in items)
{ {
var datItem = new DatItems.Formats.DeviceReference(item); var datItem = new DatItems.Formats.DeviceRef(item);
datItem.SetFieldValue<DatItems.Source?>(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.SetFieldValue<DatItems.Source?>(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename });
datItem.CopyMachineInformation(machine); datItem.CopyMachineInformation(machine);
ParseAddHelper(datItem, statsOnly); ParseAddHelper(datItem, statsOnly);
@@ -859,7 +859,7 @@ namespace SabreTools.DatFiles
// Loop through the items and add // Loop through the items and add
foreach (var item in items) foreach (var item in items)
{ {
var datItem = new DatItems.Formats.SharedFeature(item); var datItem = new DatItems.Formats.SharedFeat(item);
datItem.SetFieldValue<DatItems.Source?>(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); datItem.SetFieldValue<DatItems.Source?>(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename });
datItem.CopyMachineInformation(machine); datItem.CopyMachineInformation(machine);
ParseAddHelper(datItem, statsOnly); ParseAddHelper(datItem, statsOnly);

View File

@@ -272,7 +272,7 @@ namespace SabreTools.DatFiles.Formats
containsItems = true; containsItems = true;
foreach (var deviceref in devicerefs) foreach (var deviceref in devicerefs)
{ {
var item = new DeviceReference(); var item = new DeviceRef();
item.SetName(deviceref.Name); item.SetName(deviceref.Name);
item.SetFieldValue<Source?>(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); item.SetFieldValue<Source?>(DatItem.SourceKey, new Source { Index = indexId, Name = filename });

View File

@@ -24,7 +24,7 @@ namespace SabreTools.DatFiles.Formats
ItemType.Condition, ItemType.Condition,
ItemType.Configuration, ItemType.Configuration,
ItemType.Device, ItemType.Device,
ItemType.DeviceReference, ItemType.DeviceRef,
ItemType.DipSwitch, ItemType.DipSwitch,
ItemType.Disk, ItemType.Disk,
ItemType.Display, ItemType.Display,
@@ -76,7 +76,7 @@ namespace SabreTools.DatFiles.Formats
} }
break; break;
case DeviceReference deviceref: case DeviceRef deviceref:
if (string.IsNullOrEmpty(deviceref.GetName())) if (string.IsNullOrEmpty(deviceref.GetName()))
missingFields.Add(Models.Metadata.DeviceRef.NameKey); missingFields.Add(Models.Metadata.DeviceRef.NameKey);
break; break;
@@ -290,7 +290,7 @@ namespace SabreTools.DatFiles.Formats
case Disk disk: case Disk disk:
disks.Add(CreateDisk(disk)); disks.Add(CreateDisk(disk));
break; break;
case DeviceReference deviceref: case DeviceRef deviceref:
deviceRefs.Add(CreateDeviceRef(deviceref)); deviceRefs.Add(CreateDeviceRef(deviceref));
break; break;
case Sample sample: case Sample sample:
@@ -459,7 +459,7 @@ namespace SabreTools.DatFiles.Formats
/// <summary> /// <summary>
/// Create a DeviceRef from the current DeviceReference DatItem /// Create a DeviceRef from the current DeviceReference DatItem
/// <summary> /// <summary>
private static Models.Listxml.DeviceRef CreateDeviceRef(DeviceReference item) private static Models.Listxml.DeviceRef CreateDeviceRef(DeviceRef item)
{ {
var deviceref = new Models.Listxml.DeviceRef var deviceref = new Models.Listxml.DeviceRef
{ {

View File

@@ -87,7 +87,7 @@ namespace SabreTools.DatFiles.Formats
} }
break; break;
case DeviceReference deviceref: case DeviceRef deviceref:
if (string.IsNullOrEmpty(deviceref.GetName())) if (string.IsNullOrEmpty(deviceref.GetName()))
missingFields.Add(Models.Metadata.DeviceRef.NameKey); missingFields.Add(Models.Metadata.DeviceRef.NameKey);
break; break;
@@ -352,7 +352,7 @@ namespace SabreTools.DatFiles.Formats
case Archive archive: case Archive archive:
archives.Add(CreateArchive(archive)); archives.Add(CreateArchive(archive));
break; break;
case DeviceReference deviceref: case DeviceRef deviceref:
devicerefs.Add(CreateDeviceRef(deviceref)); devicerefs.Add(CreateDeviceRef(deviceref));
break; break;
case Driver driver: case Driver driver:
@@ -595,7 +595,7 @@ namespace SabreTools.DatFiles.Formats
/// <summary> /// <summary>
/// Create a DeviceRef from the current Chip DatItem /// Create a DeviceRef from the current Chip DatItem
/// <summary> /// <summary>
private static Models.Logiqx.DeviceRef CreateDeviceRef(DeviceReference item) private static Models.Logiqx.DeviceRef CreateDeviceRef(DeviceRef item)
{ {
var deviceref = new Models.Logiqx.DeviceRef var deviceref = new Models.Logiqx.DeviceRef
{ {

View File

@@ -250,8 +250,8 @@ namespace SabreTools.DatFiles.Formats
case ItemType.Device: case ItemType.Device:
datItem = datItemObj.ToObject<Device>(); datItem = datItemObj.ToObject<Device>();
break; break;
case ItemType.DeviceReference: case ItemType.DeviceRef:
datItem = datItemObj.ToObject<DeviceReference>(); datItem = datItemObj.ToObject<DeviceRef>();
break; break;
case ItemType.DipLocation: case ItemType.DipLocation:
datItem = datItemObj.ToObject<DipLocation>(); datItem = datItemObj.ToObject<DipLocation>();
@@ -319,8 +319,8 @@ namespace SabreTools.DatFiles.Formats
case ItemType.Serials: case ItemType.Serials:
datItem = datItemObj.ToObject<Serials>(); datItem = datItemObj.ToObject<Serials>();
break; break;
case ItemType.SharedFeature: case ItemType.SharedFeat:
datItem = datItemObj.ToObject<SharedFeature>(); datItem = datItemObj.ToObject<SharedFeat>();
break; break;
case ItemType.Slot: case ItemType.Slot:
datItem = datItemObj.ToObject<Slot>(); datItem = datItemObj.ToObject<Slot>();

View File

@@ -120,7 +120,7 @@ namespace SabreTools.DatFiles.Formats
// Add all SharedFeat objects // Add all SharedFeat objects
foreach (var sharedfeat in software.SharedFeat ?? []) foreach (var sharedfeat in software.SharedFeat ?? [])
{ {
var sharedfeatItem = new SharedFeature(); var sharedfeatItem = new SharedFeat();
sharedfeatItem.SetName(sharedfeat.Name); sharedfeatItem.SetName(sharedfeat.Name);
sharedfeatItem.SetFieldValue<Source?>(DatItem.SourceKey, new Source { Index = indexId, Name = filename }); sharedfeatItem.SetFieldValue<Source?>(DatItem.SourceKey, new Source { Index = indexId, Name = filename });
sharedfeatItem.SetFieldValue<string?>(Models.Metadata.SharedFeat.ValueKey, sharedfeat.Value); sharedfeatItem.SetFieldValue<string?>(Models.Metadata.SharedFeat.ValueKey, sharedfeat.Value);

View File

@@ -22,7 +22,7 @@ namespace SabreTools.DatFiles.Formats
ItemType.Disk, ItemType.Disk,
ItemType.Info, ItemType.Info,
ItemType.Rom, ItemType.Rom,
ItemType.SharedFeature, ItemType.SharedFeat,
]; ];
} }
@@ -120,7 +120,7 @@ namespace SabreTools.DatFiles.Formats
} }
break; break;
case SharedFeature sharedFeat: case SharedFeat sharedFeat:
if (string.IsNullOrEmpty(sharedFeat.GetName())) if (string.IsNullOrEmpty(sharedFeat.GetName()))
missingFields.Add(Models.Metadata.SharedFeat.NameKey); missingFields.Add(Models.Metadata.SharedFeat.NameKey);
break; break;
@@ -222,7 +222,7 @@ namespace SabreTools.DatFiles.Formats
case Info info: case Info info:
infos.Add(CreateInfo(info)); infos.Add(CreateInfo(info));
break; break;
case SharedFeature sharedFeature: case SharedFeat sharedFeature:
sharedfeats.Add(CreateSharedFeat(sharedFeature)); sharedfeats.Add(CreateSharedFeat(sharedFeature));
break; break;
case Rom rom: case Rom rom:
@@ -287,7 +287,7 @@ namespace SabreTools.DatFiles.Formats
/// <summary> /// <summary>
/// Create a SharedFeat from the current SharedFeature DatItem /// Create a SharedFeat from the current SharedFeature DatItem
/// <summary> /// <summary>
private static Models.SoftwareList.SharedFeat CreateSharedFeat(SharedFeature item) private static Models.SoftwareList.SharedFeat CreateSharedFeat(SharedFeat item)
{ {
var sharedfeat = new Models.SoftwareList.SharedFeat var sharedfeat = new Models.SoftwareList.SharedFeat
{ {

View File

@@ -207,7 +207,10 @@ namespace SabreTools.DatFiles
// If the field specifically contains Name, set it separately // If the field specifically contains Name, set it separately
if (fieldMappings.Keys.Contains(Models.Metadata.Rom.NameKey)) if (fieldMappings.Keys.Contains(Models.Metadata.Rom.NameKey))
{
datItem.SetName(fieldMappings[Models.Metadata.Rom.NameKey]); datItem.SetName(fieldMappings[Models.Metadata.Rom.NameKey]);
fieldMappings.Remove(Models.Metadata.Rom.NameKey);
}
#endregion #endregion

View File

@@ -30,7 +30,7 @@ namespace SabreTools.DatItems
[XmlInclude(typeof(Control))] [XmlInclude(typeof(Control))]
[XmlInclude(typeof(DataArea))] [XmlInclude(typeof(DataArea))]
[XmlInclude(typeof(Device))] [XmlInclude(typeof(Device))]
[XmlInclude(typeof(DeviceReference))] [XmlInclude(typeof(DeviceRef))]
[XmlInclude(typeof(DipLocation))] [XmlInclude(typeof(DipLocation))]
[XmlInclude(typeof(DipSwitch))] [XmlInclude(typeof(DipSwitch))]
[XmlInclude(typeof(DipValue))] [XmlInclude(typeof(DipValue))]
@@ -51,7 +51,7 @@ namespace SabreTools.DatItems
[XmlInclude(typeof(Release))] [XmlInclude(typeof(Release))]
[XmlInclude(typeof(Rom))] [XmlInclude(typeof(Rom))]
[XmlInclude(typeof(Sample))] [XmlInclude(typeof(Sample))]
[XmlInclude(typeof(SharedFeature))] [XmlInclude(typeof(SharedFeat))]
[XmlInclude(typeof(Slot))] [XmlInclude(typeof(Slot))]
[XmlInclude(typeof(SlotOption))] [XmlInclude(typeof(SlotOption))]
[XmlInclude(typeof(SoftwareList))] [XmlInclude(typeof(SoftwareList))]
@@ -703,6 +703,7 @@ namespace SabreTools.DatItems
/// </summary> /// </summary>
public abstract class DatItem<T> : DatItem, IEquatable<DatItem<T>>, IComparable<DatItem<T>>, ICloneable where T : Models.Metadata.DatItem public abstract class DatItem<T> : DatItem, IEquatable<DatItem<T>>, IComparable<DatItem<T>>, ICloneable where T : Models.Metadata.DatItem
{ {
// TODO: Move to base class after implementation
#region Fields #region Fields
/// <summary> /// <summary>
@@ -710,6 +711,11 @@ namespace SabreTools.DatItems
/// </summary> /// </summary>
protected abstract ItemType ItemType { get; } protected abstract ItemType ItemType { get; }
/// <summary>
/// Key for accessing the item name, if it exists
/// </summary>
protected abstract string? NameKey { get; }
#endregion #endregion
#region Constructors #region Constructors
@@ -739,6 +745,26 @@ namespace SabreTools.DatItems
#endregion #endregion
#region Accessors
/// <inheritdoc/>
public override string? GetName()
{
if (NameKey != null)
return GetFieldValue<string?>(NameKey);
return null;
}
/// <inheritdoc/>
public override void SetName(string? name)
{
if (NameKey != null)
SetFieldValue(NameKey, name);
}
#endregion
// TODO: Figure out how to replace individual versions with this // TODO: Figure out how to replace individual versions with this
#region Cloning Methods #region Cloning Methods
@@ -746,7 +772,12 @@ namespace SabreTools.DatItems
/// Clone the DatItem /// Clone the DatItem
/// </summary> /// </summary>
/// <returns>Clone of the DatItem</returns> /// <returns>Clone of the DatItem</returns>
public override abstract object Clone(); public override object Clone()
{
var clone = Activator.CreateInstance<DatItem<T>>();
clone._internal = _internal?.Clone() as T ?? Activator.CreateInstance<T>();
return clone;
}
#endregion #endregion

View File

@@ -8,10 +8,16 @@ namespace SabreTools.DatItems.Formats
/// Represents which Adjuster(s) is associated with a set /// Represents which Adjuster(s) is associated with a set
/// </summary> /// </summary>
[JsonObject("adjuster"), XmlRoot("adjuster")] [JsonObject("adjuster"), XmlRoot("adjuster")]
public class Adjuster : DatItem public sealed class Adjuster : DatItem<Models.Metadata.Adjuster>
{ {
#region Fields #region Fields
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.Adjuster;
/// <inheritdoc>/>
protected override string? NameKey => Models.Metadata.Adjuster.NameKey;
[JsonIgnore] [JsonIgnore]
public bool ConditionsSpecified public bool ConditionsSpecified
{ {
@@ -24,53 +30,10 @@ namespace SabreTools.DatItems.Formats
#endregion #endregion
#region Accessors
/// <inheritdoc/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.Adjuster.NameKey);
/// <inheritdoc/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.Adjuster.NameKey, name);
#endregion
#region Constructors #region Constructors
/// <summary> public Adjuster() : base() { }
/// Create a default, empty Adjuster object public Adjuster(Models.Metadata.Adjuster item) : base(item) { }
/// </summary>
public Adjuster()
{
_internal = new Models.Metadata.Adjuster();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Adjuster);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create an Adjuster object from the internal model
/// </summary>
public Adjuster(Models.Metadata.Adjuster item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Adjuster);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new Adjuster()
{
_internal = this._internal?.Clone() as Models.Metadata.Adjuster ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,44 +8,22 @@ namespace SabreTools.DatItems.Formats
/// Represents a single analog item /// Represents a single analog item
/// </summary> /// </summary>
[JsonObject("analog"), XmlRoot("analog")] [JsonObject("analog"), XmlRoot("analog")]
public class Analog : DatItem public sealed class Analog : DatItem<Models.Metadata.Analog>
{ {
#region Constructors #region Fields
/// <summary> /// <inheritdoc>/>
/// Create a default, empty Analog object protected override ItemType ItemType => ItemType.Analog;
/// </summary>
public Analog()
{
_internal = new Models.Metadata.Analog();
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Analog); /// <inheritdoc>/>
SetFieldValue<Machine>(DatItem.MachineKey, new Machine()); protected override string? NameKey => null;
}
/// <summary>
/// Create an Analog object from the internal model
/// </summary>
public Analog(Models.Metadata.Analog item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Analog);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion #endregion
#region Cloning Methods #region Constructors
/// <inheritdoc/> public Analog() : base() { }
public override object Clone() public Analog(Models.Metadata.Analog item) : base(item) { }
{
return new Analog()
{
_internal = this._internal?.Clone() as Models.Metadata.Analog ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,7 +8,7 @@ namespace SabreTools.DatItems.Formats
/// Represents generic archive files to be included in a set /// Represents generic archive files to be included in a set
/// </summary> /// </summary>
[JsonObject("archive"), XmlRoot("archive")] [JsonObject("archive"), XmlRoot("archive")]
public class Archive : DatItem public sealed class Archive : DatItem
{ {
#region Fields #region Fields
@@ -79,16 +79,6 @@ namespace SabreTools.DatItems.Formats
#endregion #endregion
#region Accessors
/// <inheritdoc/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.Archive.NameKey);
/// <inheritdoc/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.Archive.NameKey, name);
#endregion
#region Constructors #region Constructors
/// <summary> /// <summary>
@@ -116,6 +106,16 @@ namespace SabreTools.DatItems.Formats
#endregion #endregion
#region Accessors
/// <inheritdoc/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.Archive.NameKey);
/// <inheritdoc/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.Archive.NameKey, name);
#endregion
#region Cloning Methods #region Cloning Methods
/// <inheritdoc/> /// <inheritdoc/>

View File

@@ -14,7 +14,7 @@ namespace SabreTools.DatItems.Formats
/// Represents the OpenMSX original value /// Represents the OpenMSX original value
/// </summary> /// </summary>
[JsonObject("original"), XmlRoot("original")] [JsonObject("original"), XmlRoot("original")]
public class Original public sealed class Original
{ {
[JsonProperty("value"), XmlElement("value")] [JsonProperty("value"), XmlElement("value")]
public bool? Value public bool? Value

View File

@@ -8,55 +8,22 @@ namespace SabreTools.DatItems.Formats
/// Represents which BIOS(es) is associated with a set /// Represents which BIOS(es) is associated with a set
/// </summary> /// </summary>
[JsonObject("biosset"), XmlRoot("biosset")] [JsonObject("biosset"), XmlRoot("biosset")]
public class BiosSet : DatItem public sealed class BiosSet : DatItem<Models.Metadata.BiosSet>
{ {
#region Accessors #region Fields
/// <inheritdoc/> /// <inheritdoc>/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.BiosSet.NameKey); protected override ItemType ItemType => ItemType.Analog;
/// <inheritdoc/> /// <inheritdoc>/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.BiosSet.NameKey, name); protected override string? NameKey => Models.Metadata.BiosSet.NameKey;
#endregion #endregion
#region Constructors #region Constructors
/// <summary> public BiosSet() : base() { }
/// Create a default, empty BiosSet object public BiosSet(Models.Metadata.BiosSet item) : base(item) { }
/// </summary>
public BiosSet()
{
_internal = new Models.Metadata.BiosSet();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.BiosSet);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a BiosSet object from the internal model
/// </summary>
public BiosSet(Models.Metadata.BiosSet item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.BiosSet);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new BiosSet()
{
_internal = this._internal?.Clone() as Models.Metadata.BiosSet ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,7 +8,7 @@ namespace SabreTools.DatItems.Formats
/// Represents a blank set from an input DAT /// Represents a blank set from an input DAT
/// </summary> /// </summary>
[JsonObject("blank"), XmlRoot("blank")] [JsonObject("blank"), XmlRoot("blank")]
public class Blank : DatItem public sealed class Blank : DatItem
{ {
#region Constructors #region Constructors

View File

@@ -8,55 +8,22 @@ namespace SabreTools.DatItems.Formats
/// Represents which Chip(s) is associated with a set /// Represents which Chip(s) is associated with a set
/// </summary> /// </summary>
[JsonObject("chip"), XmlRoot("chip")] [JsonObject("chip"), XmlRoot("chip")]
public class Chip : DatItem public sealed class Chip : DatItem<Models.Metadata.Chip>
{ {
#region Accessors #region Fields
/// <inheritdoc/> /// <inheritdoc>/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.Chip.NameKey); protected override ItemType ItemType => ItemType.Chip;
/// <inheritdoc/> /// <inheritdoc>/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.Chip.NameKey, name); protected override string? NameKey => Models.Metadata.Chip.NameKey;
#endregion #endregion
#region Constructors #region Constructors
/// <summary> public Chip() : base() { }
/// Create a default, empty Chip object public Chip(Models.Metadata.Chip item) : base(item) { }
/// </summary>
public Chip()
{
_internal = new Models.Metadata.Chip();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Chip);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a Chip object from the internal model
/// </summary>
public Chip(Models.Metadata.Chip item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Chip);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new Chip()
{
_internal = this._internal?.Clone() as Models.Metadata.Chip ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,44 +8,22 @@ namespace SabreTools.DatItems.Formats
/// Represents a condition on a machine or other item /// Represents a condition on a machine or other item
/// </summary> /// </summary>
[JsonObject("condition"), XmlRoot("condition")] [JsonObject("condition"), XmlRoot("condition")]
public class Condition : DatItem public sealed class Condition : DatItem<Models.Metadata.Condition>
{ {
#region Constructors #region Fields
/// <summary> /// <inheritdoc>/>
/// Create a default, empty Condition object protected override ItemType ItemType => ItemType.Condition;
/// </summary>
public Condition()
{
_internal = new Models.Metadata.Condition();
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Condition); /// <inheritdoc>/>
SetFieldValue<Machine>(DatItem.MachineKey, new Machine()); protected override string? NameKey => null;
}
/// <summary>
/// Create a Condition object from the internal model
/// </summary>
public Condition(Models.Metadata.Condition item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Condition);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion #endregion
#region Cloning Methods #region Constructors
/// <inheritdoc/> public Condition() : base() { }
public override object Clone() public Condition(Models.Metadata.Condition item) : base(item) { }
{
return new Condition()
{
_internal = this._internal?.Clone() as Models.Metadata.Condition ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,55 +8,22 @@ namespace SabreTools.DatItems.Formats
/// Represents one conflocation /// Represents one conflocation
/// </summary> /// </summary>
[JsonObject("conflocation"), XmlRoot("conflocation")] [JsonObject("conflocation"), XmlRoot("conflocation")]
public class ConfLocation : DatItem public sealed class ConfLocation : DatItem<Models.Metadata.ConfLocation>
{ {
#region Accessors #region Fields
/// <inheritdoc/> /// <inheritdoc>/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.ConfLocation.NameKey); protected override ItemType ItemType => ItemType.ConfLocation;
/// <inheritdoc/> /// <inheritdoc>/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.ConfLocation.NameKey, name); protected override string? NameKey => Models.Metadata.ConfLocation.NameKey;
#endregion #endregion
#region Constructors #region Constructors
/// <summary> public ConfLocation() : base() { }
/// Create a default, empty ConfLocation object public ConfLocation(Models.Metadata.ConfLocation item) : base(item) { }
/// </summary>
public ConfLocation()
{
_internal = new Models.Metadata.ConfLocation();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.ConfLocation);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a ConfLocation object from the internal model
/// </summary>
public ConfLocation(Models.Metadata.ConfLocation item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.ConfLocation);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new ConfLocation()
{
_internal = this._internal?.Clone() as Models.Metadata.ConfLocation ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,10 +8,16 @@ namespace SabreTools.DatItems.Formats
/// Represents one ListXML confsetting /// Represents one ListXML confsetting
/// </summary> /// </summary>
[JsonObject("confsetting"), XmlRoot("confsetting")] [JsonObject("confsetting"), XmlRoot("confsetting")]
public class ConfSetting : DatItem public sealed class ConfSetting : DatItem<Models.Metadata.ConfSetting>
{ {
#region Fields #region Fields
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.ConfSetting;
/// <inheritdoc>/>
protected override string? NameKey => Models.Metadata.ConfSetting.NameKey;
[JsonIgnore] [JsonIgnore]
public bool ConditionsSpecified public bool ConditionsSpecified
{ {
@@ -24,53 +30,10 @@ namespace SabreTools.DatItems.Formats
#endregion #endregion
#region Accessors
/// <inheritdoc/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.ConfSetting.NameKey);
/// <inheritdoc/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.ConfSetting.NameKey, name);
#endregion
#region Constructors #region Constructors
/// <summary> public ConfSetting() : base() { }
/// Create a default, empty ConfSetting object public ConfSetting(Models.Metadata.ConfSetting item) : base(item) { }
/// </summary>
public ConfSetting()
{
_internal = new Models.Metadata.ConfSetting();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.ConfSetting);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a ConfSetting object from the internal model
/// </summary>
public ConfSetting(Models.Metadata.ConfSetting item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.ConfSetting);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new ConfSetting()
{
_internal = this._internal?.Clone() as Models.Metadata.ConfSetting ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,10 +8,16 @@ namespace SabreTools.DatItems.Formats
/// Represents which Configuration(s) is associated with a set /// Represents which Configuration(s) is associated with a set
/// </summary> /// </summary>
[JsonObject("configuration"), XmlRoot("configuration")] [JsonObject("configuration"), XmlRoot("configuration")]
public class Configuration : DatItem public sealed class Configuration : DatItem<Models.Metadata.Configuration>
{ {
#region Fields #region Fields
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.Configuration;
/// <inheritdoc>/>
protected override string? NameKey => Models.Metadata.Configuration.NameKey;
[JsonIgnore] [JsonIgnore]
public bool ConditionsSpecified public bool ConditionsSpecified
{ {
@@ -44,53 +50,10 @@ namespace SabreTools.DatItems.Formats
#endregion #endregion
#region Accessors
/// <inheritdoc/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.Configuration.NameKey);
/// <inheritdoc/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.Configuration.NameKey, name);
#endregion
#region Constructors #region Constructors
/// <summary> public Configuration() : base() { }
/// Create a default, empty Configuration object public Configuration(Models.Metadata.Configuration item) : base(item) { }
/// </summary>
public Configuration()
{
_internal = new Models.Metadata.Configuration();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Configuration);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a Configuration object from the internal model
/// </summary>
public Configuration(Models.Metadata.Configuration item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Configuration);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new Configuration()
{
_internal = this._internal?.Clone() as Models.Metadata.Configuration ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,44 +8,22 @@ namespace SabreTools.DatItems.Formats
/// Represents control for an input /// Represents control for an input
/// </summary> /// </summary>
[JsonObject("control"), XmlRoot("control")] [JsonObject("control"), XmlRoot("control")]
public class Control : DatItem public sealed class Control : DatItem<Models.Metadata.Control>
{ {
#region Constructors #region Fields
/// <summary> /// <inheritdoc>/>
/// Create a default, empty Control object protected override ItemType ItemType => ItemType.Control;
/// </summary>
public Control()
{
_internal = new Models.Metadata.Control();
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Control); /// <inheritdoc>/>
SetFieldValue<Machine>(DatItem.MachineKey, new Machine()); protected override string? NameKey => null;
}
/// <summary>
/// Create a Control object from the internal model
/// </summary>
public Control(Models.Metadata.Control item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Control);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion #endregion
#region Cloning Methods #region Constructors
/// <inheritdoc/> public Control() : base() { }
public override object Clone() public Control(Models.Metadata.Control item) : base(item) { }
{
return new Control()
{
_internal = this._internal?.Clone() as Models.Metadata.Control ?? [],
};
}
#endregion #endregion
} }

View File

@@ -9,55 +9,22 @@ namespace SabreTools.DatItems.Formats
/// </summary> /// </summary>
/// <remarks>One DataArea can contain multiple Rom items</remarks> /// <remarks>One DataArea can contain multiple Rom items</remarks>
[JsonObject("dataarea"), XmlRoot("dataarea")] [JsonObject("dataarea"), XmlRoot("dataarea")]
public class DataArea : DatItem public sealed class DataArea : DatItem<Models.Metadata.DataArea>
{ {
#region Accessors #region Fields
/// <inheritdoc/> /// <inheritdoc>/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.DataArea.NameKey); protected override ItemType ItemType => ItemType.DataArea;
/// <inheritdoc/> /// <inheritdoc>/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.DataArea.NameKey, name); protected override string? NameKey => Models.Metadata.DataArea.NameKey;
#endregion #endregion
#region Constructors #region Constructors
/// <summary> public DataArea() : base() { }
/// Create a default, empty DataArea object public DataArea(Models.Metadata.DataArea item) : base(item) { }
/// </summary>
public DataArea()
{
_internal = new Models.Metadata.DataArea();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.DataArea);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a DataArea object from the internal model
/// </summary>
public DataArea(Models.Metadata.DataArea item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.DataArea);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new DataArea()
{
_internal = this._internal?.Clone() as Models.Metadata.DataArea ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,10 +8,16 @@ namespace SabreTools.DatItems.Formats
/// Represents a single device on the machine /// Represents a single device on the machine
/// </summary> /// </summary>
[JsonObject("device"), XmlRoot("device")] [JsonObject("device"), XmlRoot("device")]
public class Device : DatItem public sealed class Device : DatItem<Models.Metadata.Device>
{ {
#region Fields #region Fields
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.Device;
/// <inheritdoc>/>
protected override string? NameKey => null;
[JsonIgnore] [JsonIgnore]
public bool InstancesSpecified public bool InstancesSpecified
{ {
@@ -36,40 +42,8 @@ namespace SabreTools.DatItems.Formats
#region Constructors #region Constructors
/// <summary> public Device() : base() { }
/// Create a default, empty Device object public Device(Models.Metadata.Device item) : base(item) { }
/// </summary>
public Device()
{
_internal = new Models.Metadata.Device();
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Device);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a Device object from the internal model
/// </summary>
public Device(Models.Metadata.Device item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Device);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new Device()
{
_internal = this._internal?.Clone() as Models.Metadata.Device ?? [],
};
}
#endregion #endregion
} }

View File

@@ -0,0 +1,30 @@
using System.Xml.Serialization;
using Newtonsoft.Json;
using SabreTools.Core;
namespace SabreTools.DatItems.Formats
{
/// <summary>
/// Represents which Device Reference(s) is associated with a set
/// </summary>
[JsonObject("device_ref"), XmlRoot("device_ref")]
public sealed class DeviceRef : DatItem<Models.Metadata.DeviceRef>
{
#region Fields
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.DeviceRef;
/// <inheritdoc>/>
protected override string? NameKey => Models.Metadata.DeviceRef.NameKey;
#endregion
#region Constructors
public DeviceRef() : base() { }
public DeviceRef(Models.Metadata.DeviceRef item) : base(item) { }
#endregion
}
}

View File

@@ -1,63 +0,0 @@
using System.Xml.Serialization;
using Newtonsoft.Json;
using SabreTools.Core;
namespace SabreTools.DatItems.Formats
{
/// <summary>
/// Represents which Device Reference(s) is associated with a set
/// </summary>
[JsonObject("device_ref"), XmlRoot("device_ref")]
public class DeviceReference : DatItem
{
#region Accessors
/// <inheritdoc/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.DeviceRef.NameKey);
/// <inheritdoc/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.DeviceRef.NameKey, name);
#endregion
#region Constructors
/// <summary>
/// Create a default, empty DeviceReference object
/// </summary>
public DeviceReference()
{
_internal = new Models.Metadata.DeviceRef();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.DeviceReference);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a DeviceReference object from the internal model
/// </summary>
public DeviceReference(Models.Metadata.DeviceRef item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.DeviceReference);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new DeviceReference()
{
_internal = this._internal?.Clone() as Models.Metadata.DeviceRef ?? [],
};
}
#endregion
}
}

View File

@@ -8,55 +8,22 @@ namespace SabreTools.DatItems.Formats
/// Represents one diplocation /// Represents one diplocation
/// </summary> /// </summary>
[JsonObject("diplocation"), XmlRoot("diplocation")] [JsonObject("diplocation"), XmlRoot("diplocation")]
public class DipLocation : DatItem public sealed class DipLocation : DatItem<Models.Metadata.DipLocation>
{ {
#region Accessors #region Fields
/// <inheritdoc/> /// <inheritdoc>/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.DipLocation.NameKey); protected override ItemType ItemType => ItemType.DipLocation;
/// <inheritdoc/> /// <inheritdoc>/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.DipLocation.NameKey, name); protected override string? NameKey => Models.Metadata.DipLocation.NameKey;
#endregion #endregion
#region Constructors #region Constructors
/// <summary> public DipLocation() : base() { }
/// Create a default, empty DipLocation object public DipLocation(Models.Metadata.DipLocation item) : base(item) { }
/// </summary>
public DipLocation()
{
_internal = new Models.Metadata.DipLocation();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.DipLocation);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a DipLocation object from the internal model
/// </summary>
public DipLocation(Models.Metadata.DipLocation item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.DipLocation);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new DipLocation()
{
_internal = this._internal?.Clone() as Models.Metadata.DipLocation ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,7 +8,7 @@ namespace SabreTools.DatItems.Formats
/// Represents which DIP Switch(es) is associated with a set /// Represents which DIP Switch(es) is associated with a set
/// </summary> /// </summary>
[JsonObject("dipswitch"), XmlRoot("dipswitch")] [JsonObject("dipswitch"), XmlRoot("dipswitch")]
public class DipSwitch : DatItem public sealed class DipSwitch : DatItem<Models.Metadata.DipSwitch>
{ {
#region Constants #region Constants
@@ -21,6 +21,12 @@ namespace SabreTools.DatItems.Formats
#region Fields #region Fields
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.DipSwitch;
/// <inheritdoc>/>
protected override string? NameKey => Models.Metadata.DipSwitch.NameKey;
[JsonIgnore] [JsonIgnore]
public bool ConditionsSpecified public bool ConditionsSpecified
{ {
@@ -65,53 +71,10 @@ namespace SabreTools.DatItems.Formats
#endregion #endregion
#region Accessors
/// <inheritdoc/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.DipSwitch.NameKey);
/// <inheritdoc/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.DipSwitch.NameKey, name);
#endregion
#region Constructors #region Constructors
/// <summary> public DipSwitch() : base() { }
/// Create a default, empty DipSwitch object public DipSwitch(Models.Metadata.DipSwitch item) : base(item) { }
/// </summary>
public DipSwitch()
{
_internal = new Models.Metadata.DipSwitch();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.DipSwitch);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a DipSwitch object from the internal model
/// </summary>
public DipSwitch(Models.Metadata.DipSwitch item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.DipSwitch);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new DipSwitch()
{
_internal = this._internal?.Clone() as Models.Metadata.DipSwitch ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,10 +8,16 @@ namespace SabreTools.DatItems.Formats
/// Represents one ListXML dipvalue /// Represents one ListXML dipvalue
/// </summary> /// </summary>
[JsonObject("dipvalue"), XmlRoot("dipvalue")] [JsonObject("dipvalue"), XmlRoot("dipvalue")]
public class DipValue : DatItem public sealed class DipValue : DatItem<Models.Metadata.DipValue>
{ {
#region Fields #region Fields
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.DipValue;
/// <inheritdoc>/>
protected override string? NameKey => Models.Metadata.DipValue.NameKey;
[JsonIgnore] [JsonIgnore]
public bool ConditionsSpecified public bool ConditionsSpecified
{ {
@@ -24,53 +30,10 @@ namespace SabreTools.DatItems.Formats
#endregion #endregion
#region Accessors
/// <inheritdoc/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.DipValue.NameKey);
/// <inheritdoc/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.DipValue.NameKey, name);
#endregion
#region Constructors #region Constructors
/// <summary> public DipValue() : base() { }
/// Create a default, empty DipValue object public DipValue(Models.Metadata.DipValue item) : base(item) { }
/// </summary>
public DipValue()
{
_internal = new Models.Metadata.DipValue();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.DipValue);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a DipValue object from the internal model
/// </summary>
public DipValue(Models.Metadata.DipValue item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.DipValue);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new DipValue()
{
_internal = this._internal?.Clone() as Models.Metadata.DipValue ?? [],
};
}
#endregion #endregion
} }

View File

@@ -10,7 +10,7 @@ namespace SabreTools.DatItems.Formats
/// Represents Compressed Hunks of Data (CHD) formatted disks which use internal hashes /// Represents Compressed Hunks of Data (CHD) formatted disks which use internal hashes
/// </summary> /// </summary>
[JsonObject("disk"), XmlRoot("disk")] [JsonObject("disk"), XmlRoot("disk")]
public class Disk : DatItem public sealed class Disk : DatItem<Models.Metadata.Disk>
{ {
#region Constants #region Constants
@@ -28,6 +28,12 @@ namespace SabreTools.DatItems.Formats
#region Fields #region Fields
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.Disk;
/// <inheritdoc>/>
protected override string? NameKey => Models.Metadata.Disk.NameKey;
[JsonIgnore] [JsonIgnore]
public bool DiskAreaSpecified public bool DiskAreaSpecified
{ {
@@ -52,73 +58,34 @@ namespace SabreTools.DatItems.Formats
#endregion #endregion
#region Accessors
/// <inheritdoc/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.Disk.NameKey);
/// <inheritdoc/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.Disk.NameKey, name);
#endregion
#region Constructors #region Constructors
/// <summary> public Disk() : base()
/// Create a default, empty Disk object
/// </summary>
public Disk()
{ {
_internal = new Models.Metadata.Disk();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Disk);
SetFieldValue<DupeType>(DatItem.DupeTypeKey, 0x00); SetFieldValue<DupeType>(DatItem.DupeTypeKey, 0x00);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, ItemStatus.None); SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, ItemStatus.None);
} }
/// <summary> public Disk(Models.Metadata.Disk item) : base(item)
/// Create a Disk object from a BaseFile
/// </summary>
public Disk(BaseFile baseFile)
{ {
_internal = new Models.Metadata.Disk(); SetFieldValue<DupeType>(DatItem.DupeTypeKey, 0x00);
SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, ItemStatus.None);
}
public Disk(BaseFile baseFile) : base()
{
SetName(baseFile.Filename); SetName(baseFile.Filename);
SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, TextHelper.ByteArrayToString(baseFile.MD5)); SetFieldValue<string?>(Models.Metadata.Disk.MD5Key, TextHelper.ByteArrayToString(baseFile.MD5));
SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, TextHelper.ByteArrayToString(baseFile.SHA1)); SetFieldValue<string?>(Models.Metadata.Disk.SHA1Key, TextHelper.ByteArrayToString(baseFile.SHA1));
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Disk);
SetFieldValue<DupeType>(DatItem.DupeTypeKey, 0x00); SetFieldValue<DupeType>(DatItem.DupeTypeKey, 0x00);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, ItemStatus.None); SetFieldValue<ItemStatus>(Models.Metadata.Disk.StatusKey, ItemStatus.None);
} }
/// <summary>
/// Create a Disk object from the internal model
/// </summary>
public Disk(Models.Metadata.Disk item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Disk);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion #endregion
#region Cloning Methods #region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new Disk()
{
_internal = this._internal?.Clone() as Models.Metadata.Disk ?? [],
};
}
/// <summary> /// <summary>
/// Convert Disk object to a BaseFile /// Convert Disk object to a BaseFile
/// </summary> /// </summary>

View File

@@ -9,55 +9,22 @@ namespace SabreTools.DatItems.Formats
/// </summary> /// </summary>
/// <remarks>One DiskArea can contain multiple Disk items</remarks> /// <remarks>One DiskArea can contain multiple Disk items</remarks>
[JsonObject("diskarea"), XmlRoot("diskarea")] [JsonObject("diskarea"), XmlRoot("diskarea")]
public class DiskArea : DatItem public sealed class DiskArea : DatItem<Models.Metadata.DiskArea>
{ {
#region Accessors #region Fields
/// <inheritdoc/> /// <inheritdoc>/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.DiskArea.NameKey); protected override ItemType ItemType => ItemType.DiskArea;
/// <inheritdoc/> /// <inheritdoc>/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.DiskArea.NameKey, name); protected override string? NameKey => Models.Metadata.DiskArea.NameKey;
#endregion #endregion
#region Constructors #region Constructors
/// <summary> public DiskArea() : base() { }
/// Create a default, empty DiskArea object public DiskArea(Models.Metadata.DiskArea item) : base(item) { }
/// </summary>
public DiskArea()
{
_internal = new Models.Metadata.DiskArea();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.DiskArea);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a DiskArea object from the internal model
/// </summary>
public DiskArea(Models.Metadata.DiskArea item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.DiskArea);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new DiskArea()
{
_internal = this._internal?.Clone() as Models.Metadata.DiskArea ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,55 +8,27 @@ namespace SabreTools.DatItems.Formats
/// Represents one machine display /// Represents one machine display
/// </summary> /// </summary>
[JsonObject("display"), XmlRoot("display")] [JsonObject("display"), XmlRoot("display")]
public class Display : DatItem public sealed class Display : DatItem<Models.Metadata.Display>
{ {
#region Constructors #region Fields
/// <summary> /// <inheritdoc>/>
/// Create a default, empty Display object protected override ItemType ItemType => ItemType.Display;
/// </summary>
public Display()
{
_internal = new Models.Metadata.Display();
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Display); /// <inheritdoc>/>
SetFieldValue<Machine>(DatItem.MachineKey, new Machine()); protected override string? NameKey => null;
}
/// <summary>
/// Create a Display object from the internal model
/// </summary>
public Display(Models.Metadata.Display item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Display);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a Display object from the internal model
/// </summary>
public Display(Models.Metadata.Video item)
{
// TODO: Determine what transformation is needed here
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Display);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion #endregion
#region Cloning Methods #region Constructors
/// <inheritdoc/> public Display() : base() { }
public override object Clone() public Display(Models.Metadata.Display item) : base(item) { }
public Display(Models.Metadata.Video item) : base()
{ {
return new Display() // TODO: Determine what transformation is needed here
{ _internal = item;
_internal = this._internal?.Clone() as Models.Metadata.Display ?? [],
};
} }
#endregion #endregion

View File

@@ -7,48 +7,23 @@ namespace SabreTools.DatItems.Formats
/// <summary> /// <summary>
/// Represents the a driver of the machine /// Represents the a driver of the machine
/// </summary> /// </summary>
/// <remarks>
/// TODO: Add new fields to documentation
/// </remarks>
[JsonObject("driver"), XmlRoot("driver")] [JsonObject("driver"), XmlRoot("driver")]
public class Driver : DatItem public sealed class Driver : DatItem<Models.Metadata.Driver>
{ {
#region Constructors #region Fields
/// <summary> /// <inheritdoc>/>
/// Create a default, empty Driver object protected override ItemType ItemType => ItemType.Driver;
/// </summary>
public Driver()
{
_internal = new Models.Metadata.Driver();
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Driver); /// <inheritdoc>/>
SetFieldValue<Machine>(DatItem.MachineKey, new Machine()); protected override string? NameKey => null;
}
/// <summary>
/// Create a Driver object from the internal model
/// </summary>
public Driver(Models.Metadata.Driver item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Driver);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion #endregion
#region Cloning Methods #region Constructors
/// <inheritdoc/> public Driver() : base() { }
public override object Clone() public Driver(Models.Metadata.Driver item) : base(item) { }
{
return new Driver()
{
_internal = this._internal?.Clone() as Models.Metadata.Driver ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,55 +8,22 @@ namespace SabreTools.DatItems.Formats
/// Represents a matchable extension /// Represents a matchable extension
/// </summary> /// </summary>
[JsonObject("extension"), XmlRoot("extension")] [JsonObject("extension"), XmlRoot("extension")]
public class Extension : DatItem public sealed class Extension : DatItem<Models.Metadata.Extension>
{ {
#region Accessors #region Fields
/// <inheritdoc/> /// <inheritdoc>/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.Extension.NameKey); protected override ItemType ItemType => ItemType.Extension;
/// <inheritdoc/> /// <inheritdoc>/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.Extension.NameKey, name); protected override string? NameKey => Models.Metadata.Extension.NameKey;
#endregion #endregion
#region Constructors #region Constructors
/// <summary> public Extension() : base() { }
/// Create a default, empty Extension object public Extension(Models.Metadata.Extension item) : base(item) { }
/// </summary>
public Extension()
{
_internal = new Models.Metadata.Extension();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Extension);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create an Extension object from the internal model
/// </summary>
public Extension(Models.Metadata.Extension item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Extension);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new Extension()
{
_internal = this._internal?.Clone() as Models.Metadata.Extension ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,44 +8,22 @@ namespace SabreTools.DatItems.Formats
/// Represents the a feature of the machine /// Represents the a feature of the machine
/// </summary> /// </summary>
[JsonObject("feature"), XmlRoot("feature")] [JsonObject("feature"), XmlRoot("feature")]
public class Feature : DatItem public sealed class Feature : DatItem<Models.Metadata.Feature>
{ {
#region Constructors #region Fields
/// <summary> /// <inheritdoc>/>
/// Create a default, empty Feature object protected override ItemType ItemType => ItemType.Feature;
/// </summary>
public Feature()
{
_internal = new Models.Metadata.Feature();
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Feature); /// <inheritdoc>/>
SetFieldValue<Machine>(DatItem.MachineKey, new Machine()); protected override string? NameKey => null;
}
/// <summary>
/// Create a Feature object from the internal model
/// </summary>
public Feature(Models.Metadata.Feature item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Feature);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion #endregion
#region Cloning Methods #region Constructors
/// <inheritdoc/> public Feature() : base() { }
public override object Clone() public Feature(Models.Metadata.Feature item) : base(item) { }
{
return new Feature()
{
_internal = this._internal?.Clone() as Models.Metadata.Feature ?? [],
};
}
#endregion #endregion
} }

View File

@@ -14,7 +14,7 @@ namespace SabreTools.DatItems.Formats
/// Represents a single file item /// Represents a single file item
/// </summary> /// </summary>
[JsonObject("file"), XmlRoot("file")] [JsonObject("file"), XmlRoot("file")]
public class File : DatItem public sealed class File : DatItem
{ {
#region Private instance variables #region Private instance variables

View File

@@ -8,55 +8,22 @@ namespace SabreTools.DatItems.Formats
/// Represents special information about a machine /// Represents special information about a machine
/// </summary> /// </summary>
[JsonObject("info"), XmlRoot("info")] [JsonObject("info"), XmlRoot("info")]
public class Info : DatItem public sealed class Info : DatItem<Models.Metadata.Info>
{ {
#region Accessors #region Fields
/// <inheritdoc/> /// <inheritdoc>/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.Info.NameKey); protected override ItemType ItemType => ItemType.Info;
/// <inheritdoc/> /// <inheritdoc>/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.Info.NameKey, name); protected override string? NameKey => Models.Metadata.Instance.NameKey;
#endregion #endregion
#region Constructors #region Constructors
/// <summary> public Info() : base() { }
/// Create a default, empty Info object public Info(Models.Metadata.Info item) : base(item) { }
/// </summary>
public Info()
{
_internal = new Models.Metadata.Info();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Info);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create an Info object from the internal model
/// </summary>
public Info(Models.Metadata.Info item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Info);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new Info()
{
_internal = this._internal?.Clone() as Models.Metadata.Info ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,10 +8,16 @@ namespace SabreTools.DatItems.Formats
/// Represents one ListXML input /// Represents one ListXML input
/// </summary> /// </summary>
[JsonObject("input"), XmlRoot("input")] [JsonObject("input"), XmlRoot("input")]
public class Input : DatItem public sealed class Input : DatItem<Models.Metadata.Input>
{ {
#region Fields #region Fields
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.Input;
/// <inheritdoc>/>
protected override string? NameKey => null;
[JsonIgnore] [JsonIgnore]
public bool ControlsSpecified public bool ControlsSpecified
{ {
@@ -26,40 +32,8 @@ namespace SabreTools.DatItems.Formats
#region Constructors #region Constructors
/// <summary> public Input() : base() { }
/// Create a default, empty Input object public Input(Models.Metadata.Input item) : base(item) { }
/// </summary>
public Input()
{
_internal = new Models.Metadata.Input();
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Input);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create an Input object from the internal model
/// </summary>
public Input(Models.Metadata.Input item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Input);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new Input()
{
_internal = this._internal?.Clone() as Models.Metadata.Input ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,55 +8,22 @@ namespace SabreTools.DatItems.Formats
/// Represents a single instance of another item /// Represents a single instance of another item
/// </summary> /// </summary>
[JsonObject("instance"), XmlRoot("instance")] [JsonObject("instance"), XmlRoot("instance")]
public class Instance : DatItem public sealed class Instance : DatItem<Models.Metadata.Instance>
{ {
#region Accessors #region Fields
/// <inheritdoc/> /// <inheritdoc>/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.Instance.NameKey); protected override ItemType ItemType => ItemType.Instance;
/// <inheritdoc/> /// <inheritdoc>/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.Instance.NameKey, name); protected override string? NameKey => Models.Metadata.Instance.NameKey;
#endregion #endregion
#region Constructors #region Constructors
/// <summary> public Instance() : base() { }
/// Create a default, empty Instance object public Instance(Models.Metadata.Instance item) : base(item) { }
/// </summary>
public Instance()
{
_internal = new Models.Metadata.Instance();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Instance);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create an Instance object from the internal model
/// </summary>
public Instance(Models.Metadata.Instance item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Instance);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new Instance()
{
_internal = this._internal?.Clone() as Models.Metadata.Instance ?? [],
};
}
#endregion #endregion
} }

View File

@@ -10,77 +10,45 @@ namespace SabreTools.DatItems.Formats
/// Represents Aaruformat images which use internal hashes /// Represents Aaruformat images which use internal hashes
/// </summary> /// </summary>
[JsonObject("media"), XmlRoot("media")] [JsonObject("media"), XmlRoot("media")]
public class Media : DatItem public sealed class Media : DatItem<Models.Metadata.Media>
{ {
#region Accessors #region Fields
/// <inheritdoc/> /// <inheritdoc>/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.Media.NameKey); protected override ItemType ItemType => ItemType.Media;
/// <inheritdoc/> /// <inheritdoc>/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.Media.NameKey, name); protected override string? NameKey => Models.Metadata.Media.NameKey;
#endregion #endregion
#region Constructors #region Constructors
/// <summary> public Media() : base()
/// Create a default, empty Media object
/// </summary>
public Media()
{ {
_internal = new Models.Metadata.Media();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Media);
SetFieldValue<DupeType>(DatItem.DupeTypeKey, 0x00); SetFieldValue<DupeType>(DatItem.DupeTypeKey, 0x00);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
} }
/// <summary> public Media(Models.Metadata.Media item) : base(item)
/// Create a Media object from the internal model
/// </summary>
public Media(Models.Metadata.Media item)
{ {
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Media);
SetFieldValue<DupeType>(DatItem.DupeTypeKey, 0x00); SetFieldValue<DupeType>(DatItem.DupeTypeKey, 0x00);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
} }
/// <summary> public Media(BaseFile baseFile) : base()
/// Create a Media object from a BaseFile
/// </summary>
/// <param name="baseFile"></param>
public Media(BaseFile baseFile)
{ {
_internal = new Models.Metadata.Media();
SetName(baseFile.Filename); SetName(baseFile.Filename);
SetFieldValue<string?>(Models.Metadata.Media.MD5Key, TextHelper.ByteArrayToString(baseFile.MD5)); SetFieldValue<string?>(Models.Metadata.Media.MD5Key, TextHelper.ByteArrayToString(baseFile.MD5));
SetFieldValue<string?>(Models.Metadata.Media.SHA1Key, TextHelper.ByteArrayToString(baseFile.SHA1)); SetFieldValue<string?>(Models.Metadata.Media.SHA1Key, TextHelper.ByteArrayToString(baseFile.SHA1));
SetFieldValue<string?>(Models.Metadata.Media.SHA256Key, TextHelper.ByteArrayToString(baseFile.SHA256)); SetFieldValue<string?>(Models.Metadata.Media.SHA256Key, TextHelper.ByteArrayToString(baseFile.SHA256));
SetFieldValue<string?>(Models.Metadata.Media.SpamSumKey, System.Text.Encoding.UTF8.GetString(baseFile.SpamSum ?? [])); SetFieldValue<string?>(Models.Metadata.Media.SpamSumKey, System.Text.Encoding.UTF8.GetString(baseFile.SpamSum ?? []));
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Media);
SetFieldValue<DupeType>(DatItem.DupeTypeKey, 0x00); SetFieldValue<DupeType>(DatItem.DupeTypeKey, 0x00);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
} }
#endregion #endregion
#region Cloning Methods #region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new Media()
{
_internal = this._internal?.Clone() as Models.Metadata.Media ?? [],
};
}
/// <summary> /// <summary>
/// Convert Media object to a BaseFile /// Convert Media object to a BaseFile
/// </summary> /// </summary>

View File

@@ -9,10 +9,16 @@ namespace SabreTools.DatItems.Formats
/// </summary> /// </summary>
/// <remarks>One Part can contain multiple PartFeature, DataArea, DiskArea, and DipSwitch items</remarks> /// <remarks>One Part can contain multiple PartFeature, DataArea, DiskArea, and DipSwitch items</remarks>
[JsonObject("part"), XmlRoot("part")] [JsonObject("part"), XmlRoot("part")]
public class Part : DatItem public sealed class Part : DatItem<Models.Metadata.Part>
{ {
#region Fields #region Fields
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.Part;
/// <inheritdoc>/>
protected override string? NameKey => Models.Metadata.Part.NameKey;
[JsonIgnore] [JsonIgnore]
public bool FeaturesSpecified public bool FeaturesSpecified
{ {
@@ -25,53 +31,10 @@ namespace SabreTools.DatItems.Formats
#endregion #endregion
#region Accessors
/// <inheritdoc/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.Part.NameKey);
/// <inheritdoc/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.Part.NameKey, name);
#endregion
#region Constructors #region Constructors
/// <summary> public Part() : base() { }
/// Create a default, empty Part object public Part(Models.Metadata.Part item) : base(item) { }
/// </summary>
public Part()
{
_internal = new Models.Metadata.Part();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Part);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a Part object from the internal model
/// </summary>
public Part(Models.Metadata.Part item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Part);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new Part()
{
_internal = this._internal?.Clone() as Models.Metadata.Part ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,55 +8,22 @@ namespace SabreTools.DatItems.Formats
/// Represents one part feature object /// Represents one part feature object
/// </summary> /// </summary>
[JsonObject("part_feature"), XmlRoot("part_feature")] [JsonObject("part_feature"), XmlRoot("part_feature")]
public class PartFeature : DatItem public sealed class PartFeature : DatItem<Models.Metadata.Feature>
{ {
#region Accessors #region Fields
/// <inheritdoc/> /// <inheritdoc>/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.Feature.NameKey); protected override ItemType ItemType => ItemType.PartFeature;
/// <inheritdoc/> /// <inheritdoc>/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.Feature.NameKey, name); protected override string? NameKey => Models.Metadata.Feature.NameKey;
#endregion #endregion
#region Constructors #region Constructors
/// <summary> public PartFeature() : base() { }
/// Create a default, empty PartFeature object public PartFeature(Models.Metadata.Feature item) : base(item) { }
/// </summary>
public PartFeature()
{
_internal = new Models.Metadata.Feature();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.PartFeature);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a PartFeature object from the internal model
/// </summary>
public PartFeature(Models.Metadata.Feature item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.PartFeature);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new PartFeature()
{
_internal = this._internal?.Clone() as Models.Metadata.Feature ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,10 +8,16 @@ namespace SabreTools.DatItems.Formats
/// Represents a single port on a machine /// Represents a single port on a machine
/// </summary> /// </summary>
[JsonObject("port"), XmlRoot("port")] [JsonObject("port"), XmlRoot("port")]
public class Port : DatItem public sealed class Port : DatItem<Models.Metadata.Port>
{ {
#region Fields #region Fields
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.Port;
/// <inheritdoc>/>
protected override string? NameKey => null;
[JsonIgnore] [JsonIgnore]
public bool AnalogsSpecified public bool AnalogsSpecified
{ {
@@ -26,40 +32,8 @@ namespace SabreTools.DatItems.Formats
#region Constructors #region Constructors
/// <summary> public Port() : base() { }
/// Create a default, empty Port object public Port(Models.Metadata.Port item) : base(item) { }
/// </summary>
public Port()
{
_internal = new Models.Metadata.Port();
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Port);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a Port object from the internal model
/// </summary>
public Port(Models.Metadata.Port item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Port);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new Port()
{
_internal = this._internal?.Clone() as Models.Metadata.Port ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,55 +8,22 @@ namespace SabreTools.DatItems.Formats
/// Represents which RAM option(s) is associated with a set /// Represents which RAM option(s) is associated with a set
/// </summary> /// </summary>
[JsonObject("ramoption"), XmlRoot("ramoption")] [JsonObject("ramoption"), XmlRoot("ramoption")]
public class RamOption : DatItem public sealed class RamOption : DatItem<Models.Metadata.RamOption>
{ {
#region Accessors #region Fields
/// <inheritdoc/> /// <inheritdoc>/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.RamOption.NameKey); protected override ItemType ItemType => ItemType.RamOption;
/// <inheritdoc/> /// <inheritdoc>/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.RamOption.NameKey, name); protected override string? NameKey => Models.Metadata.RamOption.NameKey;
#endregion #endregion
#region Constructors #region Constructors
/// <summary> public RamOption() : base() { }
/// Create a default, empty RamOption object public RamOption(Models.Metadata.RamOption item) : base(item) { }
/// </summary>
public RamOption()
{
_internal = new Models.Metadata.RamOption();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.RamOption);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a RamOption object from the internal model
/// </summary>
public RamOption(Models.Metadata.RamOption item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.RamOption);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new RamOption()
{
_internal = this._internal?.Clone() as Models.Metadata.RamOption ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,55 +8,22 @@ namespace SabreTools.DatItems.Formats
/// Represents release information about a set /// Represents release information about a set
/// </summary> /// </summary>
[JsonObject("release"), XmlRoot("release")] [JsonObject("release"), XmlRoot("release")]
public class Release : DatItem public sealed class Release : DatItem<Models.Metadata.Release>
{ {
#region Accessors #region Fields
/// <inheritdoc/> /// <inheritdoc>/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.Release.NameKey); protected override ItemType ItemType => ItemType.Release;
/// <inheritdoc/> /// <inheritdoc>/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.Release.NameKey, name); protected override string? NameKey => Models.Metadata.Release.NameKey;
#endregion #endregion
#region Constructors #region Constructors
/// <summary> public Release() : base() { }
/// Create a default, empty Release object public Release(Models.Metadata.Release item) : base(item) { }
/// </summary>
public Release()
{
_internal = new Models.Metadata.Release();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Release);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a Release object from the internal model
/// </summary>
public Release(Models.Metadata.Release item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Release);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new Release()
{
_internal = this._internal?.Clone() as Models.Metadata.Release ?? [],
};
}
#endregion #endregion
} }

View File

@@ -9,7 +9,7 @@ namespace SabreTools.DatItems.Formats
/// Represents a single release details item /// Represents a single release details item
/// </summary> /// </summary>
[JsonObject("release_details"), XmlRoot("release_details")] [JsonObject("release_details"), XmlRoot("release_details")]
public class ReleaseDetails : DatItem public sealed class ReleaseDetails : DatItem
{ {
#region Fields #region Fields

View File

@@ -10,7 +10,7 @@ namespace SabreTools.DatItems.Formats
/// Represents a generic file within a set /// Represents a generic file within a set
/// </summary> /// </summary>
[JsonObject("rom"), XmlRoot("rom")] [JsonObject("rom"), XmlRoot("rom")]
public class Rom : DatItem public sealed class Rom : DatItem<Models.Metadata.Rom>
{ {
#region Constants #region Constants
@@ -28,6 +28,12 @@ namespace SabreTools.DatItems.Formats
#region Fields #region Fields
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.Rom;
/// <inheritdoc>/>
protected override string? NameKey => Models.Metadata.Rom.NameKey;
[JsonIgnore] [JsonIgnore]
public bool ItemStatusSpecified public bool ItemStatusSpecified
{ {
@@ -76,100 +82,50 @@ namespace SabreTools.DatItems.Formats
#endregion #endregion
#region Accessors
/// <inheritdoc/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.Rom.NameKey);
/// <inheritdoc/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.Rom.NameKey, name);
#endregion
#region Constructors #region Constructors
/// <summary> public Rom() : base()
/// Create a default, empty Rom object
/// </summary>
public Rom()
{ {
_internal = new Models.Metadata.Rom();
SetName(null);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Rom);
SetFieldValue<DupeType>(DatItem.DupeTypeKey, 0x00); SetFieldValue<DupeType>(DatItem.DupeTypeKey, 0x00);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None); SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
} }
/// <summary> public Rom(string name, string machineName) : base()
/// Create a "blank" Rom object
/// </summary>
/// <param name="name"></param>
/// <param name="machineName"></param>
/// <param name="omitFromScan"></param>
public Rom(string name, string machineName)
{ {
_internal = new Models.Metadata.Rom();
SetName(name); SetName(name);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Rom);
SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, null); SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, null);
SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None); SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
GetFieldValue<Machine>(DatItem.MachineKey)!.SetFieldValue<string?>(Models.Metadata.Machine.DescriptionKey, machineName); GetFieldValue<Machine>(DatItem.MachineKey)!.SetFieldValue<string?>(Models.Metadata.Machine.DescriptionKey, machineName);
GetFieldValue<Machine>(DatItem.MachineKey)!.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, machineName); GetFieldValue<Machine>(DatItem.MachineKey)!.SetFieldValue<string?>(Models.Metadata.Machine.NameKey, machineName);
} }
/// <summary> public Rom(BaseFile baseFile) : base()
/// Create a Rom object from a BaseFile
/// </summary>
/// <param name="baseFile"></param>
public Rom(BaseFile baseFile)
{ {
_internal = new Models.Metadata.Rom();
SetName(baseFile.Filename); SetName(baseFile.Filename);
SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, baseFile.Size); SetFieldValue<string?>(Models.Metadata.Rom.DateKey, baseFile.Date);
SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, TextHelper.ByteArrayToString(baseFile.CRC)); SetFieldValue<string?>(Models.Metadata.Rom.CRCKey, TextHelper.ByteArrayToString(baseFile.CRC));
SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, TextHelper.ByteArrayToString(baseFile.MD5)); SetFieldValue<string?>(Models.Metadata.Rom.MD5Key, TextHelper.ByteArrayToString(baseFile.MD5));
SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, TextHelper.ByteArrayToString(baseFile.SHA1)); SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, TextHelper.ByteArrayToString(baseFile.SHA1));
SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, TextHelper.ByteArrayToString(baseFile.SHA256)); SetFieldValue<string?>(Models.Metadata.Rom.SHA256Key, TextHelper.ByteArrayToString(baseFile.SHA256));
SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, TextHelper.ByteArrayToString(baseFile.SHA384)); SetFieldValue<string?>(Models.Metadata.Rom.SHA384Key, TextHelper.ByteArrayToString(baseFile.SHA384));
SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, TextHelper.ByteArrayToString(baseFile.SHA512)); SetFieldValue<string?>(Models.Metadata.Rom.SHA512Key, TextHelper.ByteArrayToString(baseFile.SHA512));
SetFieldValue<long?>(Models.Metadata.Rom.SizeKey, baseFile.Size);
SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, System.Text.Encoding.UTF8.GetString(baseFile.SpamSum ?? [])); SetFieldValue<string?>(Models.Metadata.Rom.SpamSumKey, System.Text.Encoding.UTF8.GetString(baseFile.SpamSum ?? []));
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Rom);
SetFieldValue<DupeType>(DatItem.DupeTypeKey, 0x00); SetFieldValue<DupeType>(DatItem.DupeTypeKey, 0x00);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None); SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
SetFieldValue<string?>(Models.Metadata.Rom.DateKey, baseFile.Date);
} }
/// <summary> public Rom(Models.Metadata.Rom item) : base(item)
/// Create a Rom object from the internal model
/// </summary>
public Rom(Models.Metadata.Rom item)
{ {
_internal = item; SetFieldValue<DupeType>(DatItem.DupeTypeKey, 0x00);
SetFieldValue<ItemStatus>(Models.Metadata.Rom.StatusKey, ItemStatus.None);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Rom);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
} }
#endregion #endregion
#region Cloning Methods #region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new Rom()
{
_internal = this._internal?.Clone() as Models.Metadata.Rom ?? [],
};
}
/// <summary> /// <summary>
/// Convert Rom object to a BaseFile /// Convert Rom object to a BaseFile
/// </summary> /// </summary>

View File

@@ -8,55 +8,22 @@ namespace SabreTools.DatItems.Formats
/// Represents a (usually WAV-formatted) sample to be included for use in the set /// Represents a (usually WAV-formatted) sample to be included for use in the set
/// </summary> /// </summary>
[JsonObject("sample"), XmlRoot("sample")] [JsonObject("sample"), XmlRoot("sample")]
public class Sample : DatItem public class Sample : DatItem<Models.Metadata.Sample>
{ {
#region Accessors #region Fields
/// <inheritdoc/> /// <inheritdoc>/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.Sample.NameKey); protected override ItemType ItemType => ItemType.Sample;
/// <inheritdoc/> /// <inheritdoc>/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.Sample.NameKey, name); protected override string? NameKey => Models.Metadata.Sample.NameKey;
#endregion #endregion
#region Constructors #region Constructors
/// <summary> public Sample() : base() { }
/// Create a default, empty Sample object public Sample(Models.Metadata.Sample item) : base(item) { }
/// </summary>
public Sample()
{
_internal = new Models.Metadata.Sample();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Sample);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a Sample object from the internal model
/// </summary>
public Sample(Models.Metadata.Sample item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Sample);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new Sample()
{
_internal = this._internal?.Clone() as Models.Metadata.Sample ?? [],
};
}
#endregion #endregion
} }

View File

@@ -9,7 +9,7 @@ namespace SabreTools.DatItems.Formats
/// Represents a single serials item /// Represents a single serials item
/// </summary> /// </summary>
[JsonObject("serials"), XmlRoot("serials")] [JsonObject("serials"), XmlRoot("serials")]
public class Serials : DatItem public sealed class Serials : DatItem
{ {
#region Fields #region Fields

View File

@@ -0,0 +1,30 @@
using System.Xml.Serialization;
using Newtonsoft.Json;
using SabreTools.Core;
namespace SabreTools.DatItems.Formats
{
/// <summary>
/// Represents one shared feature object
/// </summary>
[JsonObject("sharedfeat"), XmlRoot("sharedfeat")]
public sealed class SharedFeat : DatItem<Models.Metadata.SharedFeat>
{
#region Fields
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.SharedFeat;
/// <inheritdoc>/>
protected override string? NameKey => Models.Metadata.SharedFeat.NameKey;
#endregion
#region Constructors
public SharedFeat() : base() { }
public SharedFeat(Models.Metadata.SharedFeat item) : base(item) { }
#endregion
}
}

View File

@@ -1,63 +0,0 @@
using System.Xml.Serialization;
using Newtonsoft.Json;
using SabreTools.Core;
namespace SabreTools.DatItems.Formats
{
/// <summary>
/// Represents one shared feature object
/// </summary>
[JsonObject("sharedfeat"), XmlRoot("sharedfeat")]
public class SharedFeature : DatItem
{
#region Accessors
/// <inheritdoc/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.SharedFeat.NameKey);
/// <inheritdoc/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.SharedFeat.NameKey, name);
#endregion
#region Constructors
/// <summary>
/// Create a default, empty SharedFeature object
/// </summary>
public SharedFeature()
{
_internal = new Models.Metadata.SharedFeat();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.SharedFeature);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a SharedFeature object from the internal model
/// </summary>
public SharedFeature(Models.Metadata.SharedFeat item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.SharedFeature);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new SharedFeature()
{
_internal = this._internal?.Clone() as Models.Metadata.SharedFeat ?? [],
};
}
#endregion
}
}

View File

@@ -8,10 +8,16 @@ namespace SabreTools.DatItems.Formats
/// Represents which Slot(s) is associated with a set /// Represents which Slot(s) is associated with a set
/// </summary> /// </summary>
[JsonObject("slot"), XmlRoot("slot")] [JsonObject("slot"), XmlRoot("slot")]
public class Slot : DatItem public sealed class Slot : DatItem<Models.Metadata.Slot>
{ {
#region Fields #region Fields
/// <inheritdoc>/>
protected override ItemType ItemType => ItemType.Slot;
/// <inheritdoc>/>
protected override string? NameKey => Models.Metadata.Slot.NameKey;
[JsonIgnore] [JsonIgnore]
public bool SlotOptionsSpecified public bool SlotOptionsSpecified
{ {
@@ -24,53 +30,10 @@ namespace SabreTools.DatItems.Formats
#endregion #endregion
#region Accessors
/// <inheritdoc/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.Slot.NameKey);
/// <inheritdoc/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.Slot.NameKey, name);
#endregion
#region Constructors #region Constructors
/// <summary> public Slot() : base() { }
/// Create a default, empty Slot object public Slot(Models.Metadata.Slot item) : base(item) { }
/// </summary>
public Slot()
{
_internal = new Models.Metadata.Slot();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Slot);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a Slot object from the internal model
/// </summary>
public Slot(Models.Metadata.Slot item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Slot);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new Slot()
{
_internal = this._internal?.Clone() as Models.Metadata.Slot ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,55 +8,22 @@ namespace SabreTools.DatItems.Formats
/// Represents one ListXML slotoption /// Represents one ListXML slotoption
/// </summary> /// </summary>
[JsonObject("slotoption"), XmlRoot("slotoption")] [JsonObject("slotoption"), XmlRoot("slotoption")]
public class SlotOption : DatItem public sealed class SlotOption : DatItem<Models.Metadata.SlotOption>
{ {
#region Accessors #region Fields
/// <inheritdoc/> /// <inheritdoc>/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.SlotOption.NameKey); protected override ItemType ItemType => ItemType.SlotOption;
/// <inheritdoc/> /// <inheritdoc>/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.SlotOption.NameKey, name); protected override string? NameKey => Models.Metadata.SlotOption.NameKey;
#endregion #endregion
#region Constructors #region Constructors
/// <summary> public SlotOption() : base() { }
/// Create a default, empty SlotOption object public SlotOption(Models.Metadata.SlotOption item) : base(item) { }
/// </summary>
public SlotOption()
{
_internal = new Models.Metadata.SlotOption();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.SlotOption);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a SlotOption object from the internal model
/// </summary>
public SlotOption(Models.Metadata.SlotOption item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.SlotOption);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
/// <inheritdoc/>
public override object Clone()
{
return new SlotOption()
{
_internal = this._internal?.Clone() as Models.Metadata.SlotOption ?? [],
};
}
#endregion #endregion
} }

View File

@@ -7,58 +7,23 @@ namespace SabreTools.DatItems.Formats
/// <summary> /// <summary>
/// Represents which SoftwareList(s) is associated with a set /// Represents which SoftwareList(s) is associated with a set
/// </summary> /// </summary>
/// <remarks>
/// TODO: Add new fields to documentation
/// </remarks>
[JsonObject("softwarelist"), XmlRoot("softwarelist")] [JsonObject("softwarelist"), XmlRoot("softwarelist")]
public class SoftwareList : DatItem public sealed class SoftwareList : DatItem<Models.Metadata.SoftwareList>
{ {
#region Accessors #region Fields
/// <inheritdoc/> /// <inheritdoc>/>
public override string? GetName() => GetFieldValue<string>(Models.Metadata.SoftwareList.NameKey); protected override ItemType ItemType => ItemType.SoftwareList;
/// <inheritdoc/> /// <inheritdoc>/>
public override void SetName(string? name) => SetFieldValue(Models.Metadata.SoftwareList.NameKey, name); protected override string? NameKey => Models.Metadata.SoftwareList.NameKey;
#endregion #endregion
#region Constructors #region Constructors
/// <summary> public SoftwareList() : base() { }
/// Create a default, empty SoftwareList object public SoftwareList(Models.Metadata.SoftwareList item) : base(item) { }
/// </summary>
public SoftwareList()
{
_internal = new Models.Metadata.SoftwareList();
SetName(string.Empty);
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.SoftwareList);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
/// <summary>
/// Create a SoftwareList object from the internal model
/// </summary>
public SoftwareList(Models.Metadata.SoftwareList item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.SoftwareList);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion
#region Cloning Methods
public override object Clone()
{
return new SoftwareList()
{
_internal = this._internal?.Clone() as Models.Metadata.SoftwareList ?? [],
};
}
#endregion #endregion
} }

View File

@@ -8,44 +8,22 @@ namespace SabreTools.DatItems.Formats
/// Represents the sound output for a machine /// Represents the sound output for a machine
/// </summary> /// </summary>
[JsonObject("sound"), XmlRoot("sound")] [JsonObject("sound"), XmlRoot("sound")]
public class Sound : DatItem public sealed class Sound : DatItem<Models.Metadata.Sound>
{ {
#region Constructors #region Fields
/// <summary> /// <inheritdoc>/>
/// Create a default, empty Sound object protected override ItemType ItemType => ItemType.Sound;
/// </summary>
public Sound()
{
_internal = new Models.Metadata.Sound();
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Sound); /// <inheritdoc>/>
SetFieldValue<Machine>(DatItem.MachineKey, new Machine()); protected override string? NameKey => null;
}
/// <summary>
/// Create a Sound object from the internal model
/// </summary>
public Sound(Models.Metadata.Sound item)
{
_internal = item;
SetFieldValue<ItemType>(Models.Metadata.DatItem.TypeKey, ItemType.Sound);
SetFieldValue<Machine>(DatItem.MachineKey, new Machine());
}
#endregion #endregion
#region Cloning Methods #region Constructors
/// <inheritdoc/> public Sound() : base() { }
public override object Clone() public Sound(Models.Metadata.Sound item) : base(item) { }
{
return new Sound()
{
_internal = this._internal?.Clone() as Models.Metadata.Sound ?? [],
};
}
#endregion #endregion
} }

View File

@@ -9,7 +9,7 @@ namespace SabreTools.DatItems.Formats
/// Represents a single source details item /// Represents a single source details item
/// </summary> /// </summary>
[JsonObject("source_details"), XmlRoot("source_details")] [JsonObject("source_details"), XmlRoot("source_details")]
public class SourceDetails : DatItem public sealed class SourceDetails : DatItem
{ {
#region Fields #region Fields

View File

@@ -295,8 +295,8 @@ namespace SabreTools.Filtering
// Get all device reference names from the current machine // Get all device reference names from the current machine
List<string?> deviceReferences = datFile.Items[machine]! List<string?> deviceReferences = datFile.Items[machine]!
.Where(i => i is DeviceReference) .Where(i => i is DeviceRef)
.Select(i => i as DeviceReference) .Select(i => i as DeviceRef)
.Select(dr => dr!.GetName()) .Select(dr => dr!.GetName())
.Distinct() .Distinct()
.ToList(); .ToList();
@@ -328,8 +328,8 @@ namespace SabreTools.Filtering
continue; continue;
newDeviceReferences.AddRange(devItems newDeviceReferences.AddRange(devItems
.Where(i => i is DeviceReference) .Where(i => i is DeviceRef)
.Select(i => (i as DeviceReference)!.GetName()!)); .Select(i => (i as DeviceRef)!.GetName()!));
// Set new machine information and add to the current machine // Set new machine information and add to the current machine
DatItem copyFrom = datFile.Items[machine]![0]; DatItem copyFrom = datFile.Items[machine]![0];
@@ -354,7 +354,7 @@ namespace SabreTools.Filtering
{ {
if (!deviceReferences.Contains(deviceReference)) if (!deviceReferences.Contains(deviceReference))
{ {
var deviceRef = new DeviceReference(); var deviceRef = new DeviceRef();
deviceRef.SetName(deviceReference); deviceRef.SetName(deviceReference);
datFile.Items[machine]!.Add(deviceRef); datFile.Items[machine]!.Add(deviceRef);
} }

View File

@@ -179,8 +179,8 @@ namespace SabreTools.Test.Core
[InlineData("control", ItemType.Control)] [InlineData("control", ItemType.Control)]
[InlineData("dataarea", ItemType.DataArea)] [InlineData("dataarea", ItemType.DataArea)]
[InlineData("device", ItemType.Device)] [InlineData("device", ItemType.Device)]
[InlineData("deviceref", ItemType.DeviceReference)] [InlineData("deviceref", ItemType.DeviceRef)]
[InlineData("device_ref", ItemType.DeviceReference)] [InlineData("device_ref", ItemType.DeviceRef)]
[InlineData("diplocation", ItemType.DipLocation)] [InlineData("diplocation", ItemType.DipLocation)]
[InlineData("dipswitch", ItemType.DipSwitch)] [InlineData("dipswitch", ItemType.DipSwitch)]
[InlineData("dipvalue", ItemType.DipValue)] [InlineData("dipvalue", ItemType.DipValue)]
@@ -207,10 +207,10 @@ namespace SabreTools.Test.Core
[InlineData("rom", ItemType.Rom)] [InlineData("rom", ItemType.Rom)]
[InlineData("sample", ItemType.Sample)] [InlineData("sample", ItemType.Sample)]
[InlineData("serials", ItemType.Serials)] [InlineData("serials", ItemType.Serials)]
[InlineData("sharedfeat", ItemType.SharedFeature)] [InlineData("sharedfeat", ItemType.SharedFeat)]
[InlineData("shared_feat", ItemType.SharedFeature)] [InlineData("shared_feat", ItemType.SharedFeat)]
[InlineData("sharedfeature", ItemType.SharedFeature)] [InlineData("sharedfeature", ItemType.SharedFeat)]
[InlineData("shared_feature", ItemType.SharedFeature)] [InlineData("shared_feature", ItemType.SharedFeat)]
[InlineData("slot", ItemType.Slot)] [InlineData("slot", ItemType.Slot)]
[InlineData("slotoption", ItemType.SlotOption)] [InlineData("slotoption", ItemType.SlotOption)]
[InlineData("slot_option", ItemType.SlotOption)] [InlineData("slot_option", ItemType.SlotOption)]
@@ -548,7 +548,7 @@ namespace SabreTools.Test.Core
[InlineData(ItemType.Control, "control")] [InlineData(ItemType.Control, "control")]
[InlineData(ItemType.DataArea, "dataarea")] [InlineData(ItemType.DataArea, "dataarea")]
[InlineData(ItemType.Device, "device")] [InlineData(ItemType.Device, "device")]
[InlineData(ItemType.DeviceReference, "device_ref")] [InlineData(ItemType.DeviceRef, "device_ref")]
[InlineData(ItemType.DipLocation, "diplocation")] [InlineData(ItemType.DipLocation, "diplocation")]
[InlineData(ItemType.DipSwitch, "dipswitch")] [InlineData(ItemType.DipSwitch, "dipswitch")]
[InlineData(ItemType.DipValue, "dipvalue")] [InlineData(ItemType.DipValue, "dipvalue")]
@@ -572,7 +572,7 @@ namespace SabreTools.Test.Core
[InlineData(ItemType.Rom, "rom")] [InlineData(ItemType.Rom, "rom")]
[InlineData(ItemType.Sample, "sample")] [InlineData(ItemType.Sample, "sample")]
[InlineData(ItemType.Serials, "serials")] [InlineData(ItemType.Serials, "serials")]
[InlineData(ItemType.SharedFeature, "sharedfeat")] [InlineData(ItemType.SharedFeat, "sharedfeat")]
[InlineData(ItemType.Slot, "slot")] [InlineData(ItemType.Slot, "slot")]
[InlineData(ItemType.SlotOption, "slotoption")] [InlineData(ItemType.SlotOption, "slotoption")]
[InlineData(ItemType.SoftwareList, "softwarelist")] [InlineData(ItemType.SoftwareList, "softwarelist")]