using System; using ZeroLevel.Services.Serialization; namespace ZeroLevel.DocumentObjectModel { public sealed class Category : IBinarySerializable, IEquatable, ICloneable { #region Ctors public Category() { } public Category(string title, string code, string direction_code, string description = null, bool is_system = false) { this.Title = title; this.Description = description; this.Code = code; this.DirectionCode = direction_code; this.IsSystem = is_system; } public Category(Category other) { this.Title = other.Title; this.Description = other.Description; this.Code = other.Code; this.DirectionCode = other.DirectionCode; this.IsSystem = other.IsSystem; } public Category(IBinaryReader reader) { Deserialize(reader); } #endregion #region Fields /// /// Название /// public string Title { get; set; } /// /// Описание /// public string Description { get; set; } /// /// Код категории /// public string Code { get; set; } /// /// Код направления /// public string DirectionCode { get; set; } /// /// Указывает на принадлежность категории внутренней части системы /// Категория не предназначенна для публичного доступа /// public bool IsSystem { get; set; } #endregion #region IBinarySerializable public void Serialize(IBinaryWriter writer) { writer.WriteString(this.Title); writer.WriteString(this.Code); writer.WriteString(this.Description); writer.WriteString(this.DirectionCode); writer.WriteBoolean(this.IsSystem); } public void Deserialize(IBinaryReader reader) { this.Title = reader.ReadString(); this.Code = reader.ReadString(); this.Description = reader.ReadString(); this.DirectionCode = reader.ReadString(); this.IsSystem = reader.ReadBoolean(); } #endregion #region ICloneable public object Clone() { return new Category(this); } #endregion #region IEquatable public bool Equals(Category other) { if (other == null) return false; if (string.Compare(this.Title, other.Title, StringComparison.Ordinal) != 0) return false; if (string.Compare(this.Code, other.Code, StringComparison.Ordinal) != 0) return false; if (string.Compare(this.Description, other.Description, StringComparison.Ordinal) != 0) return false; if (string.Compare(this.DirectionCode, other.DirectionCode, StringComparison.Ordinal) != 0) return false; if (this.IsSystem != other.IsSystem) return false; return true; } #endregion #region Equals & Hash public override bool Equals(object obj) { return this.Equals(obj as Category); } public override int GetHashCode() { return Title?.GetHashCode() ?? 0 ^ Description?.GetHashCode() ?? 0 ^ Code?.GetHashCode() ?? 0 ^ DirectionCode?.GetHashCode() ?? 0 ^ IsSystem.GetHashCode(); } #endregion } }