//******************************************************************************************************
// ConfigurationCellCollection.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:
// ----------------------------------------------------------------------------------------------------
// 01/14/2005 - J. Ritchie Carroll
// Generated original version of source code.
// 09/15/2009 - Stephen C. Wills
// Added new header and license agreement.
// 10/09/2010 - Ritchie
// Added "TryGetByStationName" lookup function.
// 12/17/2012 - Starlynn Danyelle Gilliam
// Modified Header.
//
//******************************************************************************************************
using System;
using System.Linq;
using System.Runtime.Serialization;
using GSF.Collections;
namespace GSF.PhasorProtocols
{
///
/// Represents a protocol independent collection of objects.
///
[Serializable]
public class ConfigurationCellCollection : ChannelCellCollectionBase
{
#region [ Constructors ]
///
/// Creates a new from specified parameters.
///
/// Last valid index for the collection (i.e., maximum count - 1).
/// Sets flag that determines if the lengths of elements in this are constant.
///
/// is used instead of maximum count so that maximum type values may
/// be specified as needed. For example, if the protocol specifies a collection with a signed 16-bit
/// maximum length you can specify (i.e., 32,767) as the last valid index
/// for the collection since total number of items supported would be 32,768.
///
public ConfigurationCellCollection(int lastValidIndex, bool constantCellLength)
: base(lastValidIndex, constantCellLength)
{
}
///
/// Creates a new from serialization parameters.
///
/// The with populated with data.
/// The source for this deserialization.
protected ConfigurationCellCollection(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
#endregion
#region [ Methods ]
///
/// Attempts to get with the specified station name.
///
/// The to find.
///
/// When this method returns, contains the with the specified , if found;
/// otherwise, null is returned.
///
/// true if the contains an element with the specified ; otherwise, false.
public virtual bool TryGetByStationName(string stationName, out IConfigurationCell configurationCell)
{
if (string.IsNullOrEmpty(stationName))
{
configurationCell = null;
return false;
}
configurationCell = this.FirstOrDefault(cell => stationName.TruncateRight(cell.MaximumStationNameLength).Equals(cell.StationName, StringComparison.OrdinalIgnoreCase));
return configurationCell is not null;
}
///
/// Attempts to get with the specified label.
///
/// The to find.
///
/// When this method returns, contains the with the specified , if found;
/// otherwise, null is returned.
///
/// true if the contains an element with the specified ; otherwise, false.
public virtual bool TryGetByIDLabel(string label, out IConfigurationCell configurationCell)
{
if (string.IsNullOrEmpty(label))
{
configurationCell = null;
return false;
}
configurationCell = this.FirstOrDefault(cell => label.Equals(cell.IDLabel.TruncateRight(cell.IDLabelLength), StringComparison.OrdinalIgnoreCase));
return configurationCell is not null;
}
///
/// Attempts to get with the specified ID code.
///
/// The to find.
///
/// When this method returns, contains the with the specified , if found;
/// otherwise, null is returned.
///
/// true if the contains an element with the specified ; otherwise, false.
public virtual bool TryGetByIDCode(ushort idCode, out IConfigurationCell configurationCell)
{
configurationCell = this.FirstOrDefault(cell => cell.IDCode == idCode);
return configurationCell is not null;
}
///
/// Attempts to find the index of the with the specified ID label.
///
/// The to find.
/// Index of the that contains the specified ; otherwise, -1.
public virtual int IndexOfIDLabel(string label)
{
if (string.IsNullOrEmpty(label))
return -1;
return this.IndexOf(cell => label.Equals(cell.IDLabel.TruncateRight(cell.IDLabelLength), StringComparison.OrdinalIgnoreCase));
}
///
/// Attempts to find the index of the with the specified station name.
///
/// The to find.
/// Index of the that contains the specified ; otherwise, -1.
public virtual int IndexOfStationName(string stationName)
{
if (string.IsNullOrEmpty(stationName))
return -1;
return this.IndexOf(cell => stationName.TruncateRight(cell.MaximumStationNameLength).Equals(cell.StationName, StringComparison.OrdinalIgnoreCase));
}
///
/// Attempts to find the index of the with the specified ID code.
///
/// The to find.
/// Index of the that contains the specified ; otherwise, -1.
public virtual int IndexOfIDCode(ushort idCode)
{
return this.IndexOf(cell => cell.IDCode == idCode);
}
#endregion
}
}