using System.Xml.Serialization; using SabreTools.Core; using Newtonsoft.Json; using Newtonsoft.Json.Converters; namespace SabreTools.DatItems { /// /// Represents a condition on a machine or other item /// [JsonObject("condition"), XmlRoot("condition")] public class Condition : DatItem { #region Fields /// /// Condition tag value /// [JsonProperty("tag", DefaultValueHandling = DefaultValueHandling.Ignore)] [XmlElement("tag")] public string Tag { get; set; } /// /// Condition mask /// [JsonProperty("mask", DefaultValueHandling = DefaultValueHandling.Ignore)] [XmlElement("mask")] public string Mask { get; set; } /// /// Condition relationship /// [JsonProperty("relation", DefaultValueHandling = DefaultValueHandling.Ignore)] [JsonConverter(typeof(StringEnumConverter))] [XmlElement("relation")] public Relation Relation { get; set; } [JsonIgnore] public bool RelationSpecified { get { return Relation != Relation.NULL; } } /// /// Condition value /// [JsonProperty("value", DefaultValueHandling = DefaultValueHandling.Ignore)] [XmlElement("value")] public string Value { get; set; } #endregion #region Constructors /// /// Create a default, empty Condition object /// public Condition() { ItemType = ItemType.Condition; } #endregion #region Cloning Methods public override object Clone() { return new Condition() { ItemType = this.ItemType, DupeType = this.DupeType, Machine = this.Machine.Clone() as Machine, Source = this.Source.Clone() as Source, Remove = this.Remove, Tag = this.Tag, Mask = this.Mask, Relation = this.Relation, Value = this.Value, }; } #endregion #region Comparision Methods public override bool Equals(DatItem other) { // If we don't have a Condition, return false if (ItemType != other.ItemType) return false; // Otherwise, treat it as a Condition Condition newOther = other as Condition; // If the Feature information matches return (Tag == newOther.Tag && Mask == newOther.Mask && Relation == newOther.Relation && Value == newOther.Value); } #endregion } }