using System; using System.Xml.Serialization; using Newtonsoft.Json; using SabreTools.Core; namespace SabreTools.DatItems.Formats { /// /// Represents a single port on a machine /// [JsonObject("port"), XmlRoot("port")] public sealed class Port : DatItem { #region Fields /// /> protected override ItemType ItemType => ItemType.Port; /// /> protected override string? NameKey => null; [JsonIgnore] public bool AnalogsSpecified { get { var analogs = GetFieldValue(Models.Metadata.Port.AnalogKey); return analogs != null && analogs.Length > 0; } } #endregion #region Constructors public Port() : base() { } public Port(Models.Metadata.Port item) : base(item) { // Handle subitems var analogs = item.ReadItemArray(Models.Metadata.Port.AnalogKey); if (analogs != null) { Analog[] analogItems = Array.ConvertAll(analogs, analog => new Analog(analog)); SetFieldValue(Models.Metadata.Port.AnalogKey, analogItems); } } #endregion #region Cloning Methods /// public override Models.Metadata.Port GetInternalClone() { var portItem = base.GetInternalClone(); var analogs = GetFieldValue(Models.Metadata.Port.AnalogKey); if (analogs != null) { Models.Metadata.Analog[] analogItems = Array.ConvertAll(analogs, analog => analog.GetInternalClone()); portItem[Models.Metadata.Port.AnalogKey] = analogItems; } return portItem; } #endregion } }