//****************************************************************************************************** // SerializableMetadataRecord.cs - Gbtc // // Copyright © 2012, Grid Protection Alliance. All Rights Reserved. // // Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See // the NOTICE file distributed with this work for additional information regarding copyright ownership. // The GPA licenses this file to you under the MIT License (MIT), the "License"; you may // not use this file except in compliance with the License. You may obtain a copy of the License at: // // http://www.opensource.org/licenses/MIT // // Unless agreed to in writing, the subject software distributed under the License is distributed on an // "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the // License for the specific language governing permissions and limitations. // // Code Modification History: // ---------------------------------------------------------------------------------------------------- // 08/07/2009 - Pinal C. Patel // Generated original version of source code. // 08/18/2009 - Pinal C. Patel // Set the order of property serialization/deserialization for DataMember attribute. // 09/15/2009 - Stephen C. Wills // Added new header and license agreement. // 11/26/2009 - Pinal C. Patel // Removed Namespace from DataContract serialization. // 10/11/2010 - Mihir Brahmbhatt // Updated header and license agreement. // 12/14/2012 - Starlynn Danyelle Gilliam // Modified Header. // //****************************************************************************************************** using System; using System.Runtime.Serialization; using System.Xml.Serialization; using GSF.Historian.Files; namespace GSF.Historian.DataServices { /// /// Represents a flattened that can be serialized using , or . /// /// /// This is the output for serialized using : /// /// /// /// ]]> /// /// This is the output for serialized using : /// /// /// 1 /// 0 /// TVA_CORD-BUS2:ABBV /// 4-PM1 /// VPHM /// /// Cordova ABB-521 500 kV Bus 2 Positive Sequence Voltage Magnitude /// ABB RES521 /// /// P1 /// 1 /// CORD /// 3 /// true /// 0.0333333351 /// 0 /// 0 /// Volts /// 475000 /// 525000 /// 450000 /// 550000 /// 475000 /// 525000 /// 0 /// 0 /// 7 /// /// /// 0 /// 5 /// 0 /// false /// false /// 0 /// 0 /// false /// false /// false /// false /// /// /// /// /// ]]> /// /// This is the output for serialized using : /// /// { /// "HistorianID":1, /// "DataType":0, /// "Name":"TVA_CORD-BUS2:ABBV", /// "Synonym1":"4-PM1", /// "Synonym2":"VPHM", /// "Synonym3":"", /// "Description":"Cordova ABB-521 500 kV Bus 2 Positive Sequence Voltage Magnitude", /// "HardwareInfo":"ABB RES521", /// "Remarks":"", /// "PlantCode":"P1", /// "UnitNumber":1, /// "SystemName":"CORD", /// "SourceID":3, /// "Enabled":true, /// "ScanRate":0.0333333351, /// "CompressionMinTime":0, /// "CompressionMaxTime":0, /// "EngineeringUnits":"Volts", /// "LowWarning":475000, /// "HighWarning":525000, /// "LowAlarm":450000, /// "HighAlarm":550000, /// "LowRange":475000, /// "HighRange":525000, /// "CompressionLimit":0, /// "ExceptionLimit":0, /// "DisplayDigits":7, /// "SetDescription":"", /// "ClearDescription":"", /// "AlarmState":0, /// "ChangeSecurity":5, /// "AccessSecurity":0, /// "StepCheck":false, /// "AlarmEnabled":false, /// "AlarmFlags":0, /// "AlarmDelay":0, /// "AlarmToFile":false, /// "AlarmByEmail":false, /// "AlarmByPager":false, /// "AlarmByPhone":false, /// "AlarmEmails":"", /// "AlarmPagers":"", /// "AlarmPhones":"" /// } /// /// /// /// /// /// [XmlType("MetadataRecord"), DataContract(Name = "MetadataRecord", Namespace = "")] public class SerializableMetadataRecord { #region [ Constructors ] /// /// Initializes a new instance of the class. /// public SerializableMetadataRecord() { Name = string.Empty; Synonym1 = string.Empty; Synonym2 = string.Empty; Synonym3 = string.Empty; Description = string.Empty; HardwareInfo = string.Empty; Remarks = string.Empty; PlantCode = string.Empty; SystemName = string.Empty; EngineeringUnits = string.Empty; SetDescription = string.Empty; ClearDescription = string.Empty; AlarmEmails = string.Empty; AlarmPagers = string.Empty; AlarmPhones = string.Empty; } /// /// Initializes a new instance of the class. /// /// from which is to be initialized. /// is null. public SerializableMetadataRecord(MetadataRecord metadataRecord) : this() { if (metadataRecord == null) throw new ArgumentNullException(nameof(metadataRecord)); HistorianID = metadataRecord.HistorianID; DataType = (int)metadataRecord.GeneralFlags.DataType; Name = metadataRecord.Name; Synonym1 = metadataRecord.Synonym1; Synonym2 = metadataRecord.Synonym2; Synonym3 = metadataRecord.Synonym3; Description = metadataRecord.Description; HardwareInfo = metadataRecord.HardwareInfo; Remarks = metadataRecord.Remarks; PlantCode = metadataRecord.PlantCode; UnitNumber = metadataRecord.UnitNumber; SystemName = metadataRecord.SystemName; SourceID = metadataRecord.SourceID; Enabled = metadataRecord.GeneralFlags.Enabled; ScanRate = metadataRecord.ScanRate; CompressionMinTime = metadataRecord.CompressionMinTime; CompressionMaxTime = metadataRecord.CompressionMaxTime; ChangeSecurity = metadataRecord.SecurityFlags.ChangeSecurity; AccessSecurity = metadataRecord.SecurityFlags.AccessSecurity; StepCheck = metadataRecord.GeneralFlags.StepCheck; AlarmEnabled = metadataRecord.GeneralFlags.AlarmEnabled; AlarmFlags = metadataRecord.AlarmFlags.Value; AlarmToFile = metadataRecord.GeneralFlags.AlarmToFile; AlarmByEmail = metadataRecord.GeneralFlags.AlarmByEmail; AlarmByPager = metadataRecord.GeneralFlags.AlarmByPager; AlarmByPhone = metadataRecord.GeneralFlags.AlarmByPhone; AlarmEmails = metadataRecord.AlarmEmails; AlarmPagers = metadataRecord.AlarmPagers; AlarmPhones = metadataRecord.AlarmPhones; if (DataType == 0) { // Analog properties. EngineeringUnits = metadataRecord.AnalogFields.EngineeringUnits; LowWarning = metadataRecord.AnalogFields.LowWarning; HighWarning = metadataRecord.AnalogFields.HighWarning; LowAlarm = metadataRecord.AnalogFields.LowAlarm; HighAlarm = metadataRecord.AnalogFields.HighAlarm; LowRange = metadataRecord.AnalogFields.LowRange; HighRange = metadataRecord.AnalogFields.HighRange; CompressionLimit = metadataRecord.AnalogFields.CompressionLimit; ExceptionLimit = metadataRecord.AnalogFields.ExceptionLimit; DisplayDigits = metadataRecord.AnalogFields.DisplayDigits; AlarmDelay = metadataRecord.AnalogFields.AlarmDelay; } else if (DataType == 1) { // Digital properties. SetDescription = metadataRecord.DigitalFields.SetDescription; ClearDescription = metadataRecord.DigitalFields.ClearDescription; AlarmState = metadataRecord.DigitalFields.AlarmState; AlarmDelay = metadataRecord.DigitalFields.AlarmDelay; } } #endregion #region [ Properties ] /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 0)] public int HistorianID { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 1)] public int DataType { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 2)] public string Name { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 3)] public string Synonym1 { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 4)] public string Synonym2 { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 5)] public string Synonym3 { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 6)] public string Description { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 7)] public string HardwareInfo { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 8)] public string Remarks { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 9)] public string PlantCode { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 10)] public int UnitNumber { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 11)] public string SystemName { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 12)] public int SourceID { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 13)] public bool Enabled { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 14)] public float ScanRate { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 15)] public int CompressionMinTime { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 16)] public int CompressionMaxTime { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 17)] public string EngineeringUnits { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 18)] public float LowWarning { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 19)] public float HighWarning { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 20)] public float LowAlarm { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 21)] public float HighAlarm { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 22)] public float LowRange { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 23)] public float HighRange { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 24)] public float CompressionLimit { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 25)] public float ExceptionLimit { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 26)] public int DisplayDigits { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 27)] public string SetDescription { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 28)] public string ClearDescription { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 29)] public int AlarmState { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 30)] public int ChangeSecurity { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 31)] public int AccessSecurity { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 32)] public bool StepCheck { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 33)] public bool AlarmEnabled { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 33)] public int AlarmFlags { get; set; } /// /// Gets or sets the or . /// [XmlAttribute, DataMember(Order = 34)] public float AlarmDelay { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 35)] public bool AlarmToFile { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 36)] public bool AlarmByEmail { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 37)] public bool AlarmByPager { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 38)] public bool AlarmByPhone { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 39)] public string AlarmEmails { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 40)] public string AlarmPagers { get; set; } /// /// Gets or sets the . /// [XmlAttribute, DataMember(Order = 41)] public string AlarmPhones { get; set; } #endregion #region [ Methods ] /// /// Returns an object for this . /// /// An object. public MetadataRecord Deflate() { MetadataRecord metadataRecord = new MetadataRecord(HistorianID, MetadataFileLegacyMode.Enabled); metadataRecord.GeneralFlags.DataType = (DataType)DataType; metadataRecord.Name = Name; metadataRecord.Synonym1 = Synonym1; metadataRecord.Synonym2 = Synonym2; metadataRecord.Synonym3 = Synonym3; metadataRecord.Description = Description; metadataRecord.HardwareInfo = HardwareInfo; metadataRecord.Remarks = Remarks; metadataRecord.PlantCode = PlantCode; metadataRecord.UnitNumber = UnitNumber; metadataRecord.SystemName = SystemName; metadataRecord.SourceID = SourceID; metadataRecord.GeneralFlags.Enabled = Enabled; metadataRecord.ScanRate = ScanRate; metadataRecord.CompressionMinTime = CompressionMinTime; metadataRecord.CompressionMaxTime = CompressionMaxTime; metadataRecord.SecurityFlags.ChangeSecurity = ChangeSecurity; metadataRecord.SecurityFlags.AccessSecurity = AccessSecurity; metadataRecord.GeneralFlags.StepCheck = StepCheck; metadataRecord.GeneralFlags.AlarmEnabled = AlarmEnabled; metadataRecord.AlarmFlags.Value = AlarmFlags; metadataRecord.GeneralFlags.AlarmToFile = AlarmToFile; metadataRecord.GeneralFlags.AlarmByEmail = AlarmByEmail; metadataRecord.GeneralFlags.AlarmByPager = AlarmByPager; metadataRecord.GeneralFlags.AlarmByPhone = AlarmByPhone; metadataRecord.AlarmEmails = AlarmEmails; metadataRecord.AlarmPagers = AlarmPagers; metadataRecord.AlarmPhones = AlarmPhones; if (DataType == 0) { // Analog properties. metadataRecord.AnalogFields.EngineeringUnits = EngineeringUnits; metadataRecord.AnalogFields.LowWarning = LowWarning; metadataRecord.AnalogFields.HighWarning = HighWarning; metadataRecord.AnalogFields.LowAlarm = LowAlarm; metadataRecord.AnalogFields.HighAlarm = HighAlarm; metadataRecord.AnalogFields.LowRange = LowRange; metadataRecord.AnalogFields.HighRange = HighRange; metadataRecord.AnalogFields.CompressionLimit = CompressionLimit; metadataRecord.AnalogFields.ExceptionLimit = ExceptionLimit; metadataRecord.AnalogFields.DisplayDigits = DisplayDigits; metadataRecord.AnalogFields.AlarmDelay = AlarmDelay; } else if (DataType == 1) { // Digital properties. metadataRecord.DigitalFields.SetDescription = SetDescription; metadataRecord.DigitalFields.ClearDescription = ClearDescription; metadataRecord.DigitalFields.AlarmState = AlarmState; metadataRecord.DigitalFields.AlarmDelay = AlarmDelay; } return metadataRecord; } #endregion } }