//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //------------------------------------------------------------ using System.Collections.Generic; namespace System.IdentityModel.Tokens { /// /// Comparison class supporting multi-part keys for a dicitionary /// internal class SamlAttributeKeyComparer : IEqualityComparer { public class AttributeKey { string _friendlyName; int _hashCode; string _name; string _nameFormat; string _namespace; string _valueType; string _originalIssuer; internal string FriendlyName { get { return _friendlyName; } } internal string Name { get { return _name; } } internal string NameFormat { get { return _nameFormat; } } internal string Namespace { get { return _namespace; } } internal string ValueType { get { return _valueType; } } internal string OriginalIssuer { get { return _originalIssuer; } } public AttributeKey( SamlAttribute attribute ) { if ( attribute == null ) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull( "attribute" ); } _friendlyName = String.Empty; _name = attribute.Name; _nameFormat = String.Empty; _namespace = attribute.Namespace ?? String.Empty; _valueType = attribute.AttributeValueXsiType ?? String.Empty; _originalIssuer = attribute.OriginalIssuer ?? String.Empty; ComputeHashCode(); } public AttributeKey( Saml2Attribute attribute ) { if ( attribute == null ) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull( "attribute" ); } _friendlyName = attribute.FriendlyName ?? String.Empty; _name = attribute.Name; _nameFormat = attribute.NameFormat == null ? String.Empty : attribute.NameFormat.AbsoluteUri; _namespace = String.Empty; _valueType = attribute.AttributeValueXsiType ?? String.Empty; _originalIssuer = attribute.OriginalIssuer ?? String.Empty; ComputeHashCode(); } public override int GetHashCode() { return _hashCode; } void ComputeHashCode() { _hashCode = _name.GetHashCode(); _hashCode ^= _friendlyName.GetHashCode(); _hashCode ^= _nameFormat.GetHashCode(); _hashCode ^= _namespace.GetHashCode(); _hashCode ^= _valueType.GetHashCode(); _hashCode ^= _originalIssuer.GetHashCode(); } } #region IEqualityComparer Members public bool Equals( AttributeKey x, AttributeKey y ) { return x.Name.Equals( y.Name, StringComparison.Ordinal ) && x.FriendlyName.Equals( y.FriendlyName, StringComparison.Ordinal ) && x.ValueType.Equals( y.ValueType, StringComparison.Ordinal ) && x.OriginalIssuer.Equals( y.OriginalIssuer, StringComparison.Ordinal ) && x.NameFormat.Equals( y.NameFormat, StringComparison.Ordinal ) && x.Namespace.Equals( y.Namespace, StringComparison.Ordinal ); } public int GetHashCode( AttributeKey obj ) { return obj.GetHashCode(); } #endregion }; }