<PackageReference Include="Relativity.Server.Import.SDK" Version="2.9.2" />

ArtifactFieldCollection

using Relativity.DataExchange.Service; using System; using System.Collections; using System.Collections.Generic; using System.Runtime.CompilerServices; namespace kCura.WinEDDS.Api { public class ArtifactFieldCollection : ICollection<ArtifactField> { private class ArtifactFieldNameComparer : IComparer<ArtifactField> { public int Compare1(ArtifactField x, ArtifactField y) { return string.Compare(x.DisplayName, y.DisplayName); } int IComparer<ArtifactField>.Compare(ArtifactField x, ArtifactField y) { return this.Compare1(x, y); } } private readonly List<ArtifactField> _orderedList; private readonly Hashtable _idLookup; private readonly Hashtable _nameLookup; private readonly Hashtable _typeLookup; private readonly Hashtable _categoryLookup; private ArtifactField _identifierField; private ArtifactField _fileField; private bool _outOfOrder; public int Count => _orderedList.Count; public bool IsReadOnly => false; public ArtifactField this[int artifactId] { get { object objectValue = RuntimeHelpers.GetObjectValue(_idLookup[artifactId]); if (objectValue != null) return (ArtifactField)objectValue; return null; } } public ArtifactField this[string displayName] { get { object objectValue = RuntimeHelpers.GetObjectValue(_nameLookup[displayName]); if (objectValue != null) return (ArtifactField)objectValue; return null; } } public ArtifactField IdentifierField => _identifierField; public ArtifactField FileField => _fileField; public ArtifactField[] FieldList { get { if (_typeLookup.Contains(type)) return (ArtifactField[])((ArrayList)_typeLookup[type]).ToArray(typeof(ArtifactField)); return new ArtifactField[0]; } } public ArtifactField[] FieldList { get { if (_categoryLookup.Contains(category)) return (ArtifactField[])((ArrayList)_categoryLookup[category]).ToArray(typeof(ArtifactField)); return new ArtifactField[0]; } } public ArtifactFieldCollection() { _orderedList = new List<ArtifactField>(); _idLookup = new Hashtable(); _nameLookup = new Hashtable(); _typeLookup = new Hashtable(); _categoryLookup = new Hashtable(); _outOfOrder = true; } private void EnsureSortTheList() { if (_outOfOrder) { _orderedList.Sort(new ArtifactFieldNameComparer()); _outOfOrder = false; } } public void Add1(ArtifactField artifactField) { Add(artifactField); } void ICollection<ArtifactField>.Add(ArtifactField artifactField) { this.Add1(artifactField); } public void Clear() { _orderedList.Clear(); _idLookup.Clear(); _nameLookup.Clear(); _typeLookup.Clear(); _categoryLookup.Clear(); } void ICollection<ArtifactField>.Clear() { this.Clear(); } public bool Contains(ArtifactField artifactField) { return _orderedList.Contains(artifactField); } bool ICollection<ArtifactField>.Contains(ArtifactField artifactField) { return this.Contains(artifactField); } public void CopyTo(ArtifactField[] array, int arrayIndex) { EnsureSortTheList(); _orderedList.CopyTo(array, arrayIndex); } void ICollection<ArtifactField>.CopyTo(ArtifactField[] array, int arrayIndex) { this.CopyTo(array, arrayIndex); } public bool Remove(ArtifactField artifactField) { bool result = _orderedList.Remove(artifactField); _outOfOrder = true; return result; } bool ICollection<ArtifactField>.Remove(ArtifactField artifactField) { return this.Remove(artifactField); } public IEnumerator<ArtifactField> GetEnumerator() { EnsureSortTheList(); return (IEnumerator<ArtifactField>)_orderedList.GetEnumerator(); } IEnumerator<ArtifactField> IEnumerable<ArtifactField>.GetEnumerator() { return this.GetEnumerator(); } public IEnumerator GetEnumerator1() { EnsureSortTheList(); return (IEnumerator)_orderedList.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return this.GetEnumerator1(); } public void Add(ArtifactField field) { _orderedList.Add(field); _outOfOrder = true; _idLookup.Add(field.ArtifactID, field); _nameLookup.Add(field.DisplayName, field); if (field.Category == FieldCategory.Identifier) _identifierField = field; if (field.Type == FieldType.File) _fileField = field; if (!_categoryLookup.ContainsKey(field.Category)) _categoryLookup.Add(field.Category, new ArrayList()); ((ArrayList)_categoryLookup[field.Category]).Add(field); if (!_typeLookup.ContainsKey(field.Type)) _typeLookup.Add(field.Type, new ArrayList()); ((ArrayList)_typeLookup[field.Type]).Add(field); } public void AddRange(IEnumerable fields) { IEnumerator enumerator = default(IEnumerator); try { enumerator = fields.GetEnumerator(); while (enumerator.MoveNext()) { ArtifactField field = (ArtifactField)enumerator.Current; Add(field); } } finally { if (enumerator is IDisposable) (enumerator as IDisposable).Dispose(); } } } }