using System; using System.Xml.Serialization; using Newtonsoft.Json; using SabreTools.Core; using SabreTools.Core.Tools; namespace SabreTools.DatItems.Formats { /// /// Represents a single device on the machine /// [JsonObject("device"), XmlRoot("device")] public sealed class Device : DatItem { #region Fields /// /> protected override ItemType ItemType => ItemType.Device; /// /> protected override string? NameKey => null; [JsonIgnore] public bool InstancesSpecified { get { var instances = GetFieldValue(Models.Metadata.Device.InstanceKey); return instances != null && instances.Length > 0; } } [JsonIgnore] public bool ExtensionsSpecified { get { var extensions = GetFieldValue(Models.Metadata.Device.ExtensionKey); return extensions != null && extensions.Length > 0; } } #endregion #region Constructors public Device() : base() { } public Device(Models.Metadata.Device item) : base(item) { // Process flag values if (GetBoolFieldValue(Models.Metadata.Device.MandatoryKey) != null) SetFieldValue(Models.Metadata.Device.MandatoryKey, GetBoolFieldValue(Models.Metadata.Device.MandatoryKey).FromYesNo()); if (GetStringFieldValue(Models.Metadata.Device.DeviceTypeKey) != null) SetFieldValue(Models.Metadata.Device.DeviceTypeKey, GetStringFieldValue(Models.Metadata.Device.DeviceTypeKey).AsEnumValue().AsStringValue()); // Handle subitems var instance = item.Read(Models.Metadata.Device.InstanceKey); if (instance != null) SetFieldValue(Models.Metadata.Device.InstanceKey, new Instance(instance)); var extensions = item.ReadItemArray(Models.Metadata.Device.ExtensionKey); if (extensions != null) { Extension[] extensionItems = Array.ConvertAll(extensions, extension => new Extension(extension)); SetFieldValue(Models.Metadata.Device.ExtensionKey, extensionItems); } } #endregion } }