using System; using System.Collections.Generic; using ZeroLevel.Services.Serialization; namespace ZeroLevel.DocumentObjectModel { public sealed class DescriptiveMetadata : IBinarySerializable { public DescriptiveMetadata() { Initialize(); } public DescriptiveMetadata(IBinaryReader reader) { Deserialize(reader); } private void Initialize() { Created = DateTime.Now; Headers = new List<Header>(); Priority = Priority.Normal; Source = new Agency(); Publisher = new Agency(); Original = new Tag(); Language = "ru"; } #region Fields /// <summary> /// Authors /// </summary> public string Byline; /// <summary> /// Copyright /// </summary> public string CopyrightNotice; /// <summary> /// Creation date /// </summary> public DateTime Created; /// <summary> /// Main language /// </summary> public string Language; /// <summary> /// Priority /// </summary> public Priority Priority; /// <summary> /// Document source /// </summary> public Agency Source; /// <summary> /// Document publisher /// </summary> public Agency Publisher; /// <summary> /// Reference to original document /// </summary> public Tag Original; /// <summary> /// Headers (optional) /// </summary> public List<Header> Headers; #endregion Fields #region IBinarySerializable public void Serialize(IBinaryWriter writer) { writer.WriteString(this.Byline); writer.WriteString(this.CopyrightNotice); writer.WriteDateTime(this.Created); writer.WriteCollection<Header>(this.Headers); writer.WriteString(this.Language); this.Original.Serialize(writer); writer.WriteInt32((Int32)this.Priority); this.Publisher.Serialize(writer); this.Source.Serialize(writer); } public void Deserialize(IBinaryReader reader) { this.Byline = reader.ReadString(); this.CopyrightNotice = reader.ReadString(); this.Created = reader.ReadDateTime().Value; this.Headers = reader.ReadCollection<Header>(); this.Language = reader.ReadString(); this.Original = new Tag(); this.Original.Deserialize(reader); this.Priority = (Priority)reader.ReadInt32(); this.Publisher = new Agency(); this.Publisher.Deserialize(reader); this.Source = new Agency(); this.Source.Deserialize(reader); } #endregion IBinarySerializable } }