//******************************************************************************************************
// 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
}
}