#region Copyright (c) 2011-2023 Technosoftware GmbH. All rights reserved //----------------------------------------------------------------------------- // Copyright (c) 2011-2023 Technosoftware GmbH. All rights reserved // Web: https://www.technosoftware.com // // The source code in this file is covered under a dual-license scenario: // - Owner of a purchased license: SCLA 1.0 // - GPL V3: everybody else // // SCLA license terms accompanied with this source code. // See SCLA 1.0: https://technosoftware.com/license/Source_Code_License_Agreement.pdf // // GNU General Public License as published by the Free Software Foundation; // version 3 of the License are accompanied with this source code. // See https://technosoftware.com/license/GPLv3License.txt // // This source code is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY // or FITNESS FOR A PARTICULAR PURPOSE. //----------------------------------------------------------------------------- #endregion Copyright (c) 2011-2023 Technosoftware GmbH. All rights reserved #region Using Directives using System; using System.Collections; #endregion namespace Technosoftware.DaAeHdaClient.Hda { /// /// The description of an item attribute supported by the server. /// [Serializable] public class TsCHdaAttributeCollection : ICloneable, ICollection { #region Fields private TsCHdaAttribute[] hdaAttributes_ = new TsCHdaAttribute[0]; #endregion #region Constructors, Destructor, Initialization /// /// Creates an empty collection. /// public TsCHdaAttributeCollection() { } /// /// Initializes the object with any Attributes contained in the collection. /// /// A collection containing attribute descriptions. public TsCHdaAttributeCollection(ICollection collection) { Init(collection); } #endregion #region Properties /// /// Returns the attribute at the specified index. /// public TsCHdaAttribute this[int index] { get => hdaAttributes_[index]; set => hdaAttributes_[index] = value; } #endregion #region Public Methods /// /// Returns the first attribute with the specified id. /// public TsCHdaAttribute Find(int id) { foreach (var attribute in hdaAttributes_) { if (attribute.ID == id) { return attribute; } } return null; } /// /// Initializes the object with any attributes contained in the collection. /// /// A collection containing attribute descriptions. public void Init(ICollection collection) { Clear(); if (collection != null) { var attributes = new ArrayList(collection.Count); foreach (var value in collection) { if (value.GetType() == typeof(TsCHdaAttribute)) { attributes.Add(OpcConvert.Clone(value)); } } hdaAttributes_ = (TsCHdaAttribute[])attributes.ToArray(typeof(TsCHdaAttribute)); } } /// /// Removes all attributes in the collection. /// public void Clear() { hdaAttributes_ = new TsCHdaAttribute[0]; } #endregion #region ICloneable Members /// /// Creates a deep copy of the object. /// public virtual object Clone() { return new TsCHdaAttributeCollection(this); } #endregion #region ICollection Members /// /// Indicates whether access to the ICollection is synchronized (thread-safe). /// public bool IsSynchronized => false; /// /// Gets the number of objects in the collection. /// public int Count => hdaAttributes_?.Length ?? 0; /// /// Copies the objects to an Array, starting at a the specified index. /// /// The one-dimensional Array that is the destination for the objects. /// The zero-based index in the Array at which copying begins. public void CopyTo(Array array, int index) { hdaAttributes_?.CopyTo(array, index); } /// /// Copies the objects to an Array, starting at a the specified index. /// /// The one-dimensional Array that is the destination for the objects. /// The zero-based index in the Array at which copying begins. public void CopyTo(Attribute[] array, int index) { CopyTo((Array)array, index); } /// /// Indicates whether access to the ICollection is synchronized (thread-safe). /// public object SyncRoot => this; #endregion #region IEnumerable Members /// /// Returns an enumerator that can iterate through a collection. /// /// An IEnumerator that can be used to iterate through the collection. public IEnumerator GetEnumerator() { return hdaAttributes_.GetEnumerator(); } #endregion } }