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