//----------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.ServiceModel.Channels { using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Runtime; using System.ServiceModel.Description; using System.Xml; internal class UnrecognizedAssertionsBindingElement : BindingElement { XmlQualifiedName wsdlBinding; ICollection<XmlElement> bindingAsserions; IDictionary<OperationDescription, ICollection<XmlElement>> operationAssertions; IDictionary<MessageDescription, ICollection<XmlElement>> messageAssertions; internal protected UnrecognizedAssertionsBindingElement(XmlQualifiedName wsdlBinding, ICollection<XmlElement> bindingAsserions) { Fx.Assert(wsdlBinding != null, ""); this.wsdlBinding = wsdlBinding; this.bindingAsserions = bindingAsserions; } internal XmlQualifiedName WsdlBinding { get { return this.wsdlBinding; } } internal ICollection<XmlElement> BindingAsserions { get { if (this.bindingAsserions == null) this.bindingAsserions = new Collection<XmlElement>(); return this.bindingAsserions; } } internal IDictionary<OperationDescription, ICollection<XmlElement>> OperationAssertions { get { if (this.operationAssertions == null) this.operationAssertions = new Dictionary<OperationDescription, ICollection<XmlElement>>(); return this.operationAssertions; } } internal IDictionary<MessageDescription, ICollection<XmlElement>> MessageAssertions { get { if (this.messageAssertions == null) this.messageAssertions = new Dictionary<MessageDescription, ICollection<XmlElement>>(); return this.messageAssertions; } } internal void Add(OperationDescription operation, ICollection<XmlElement> assertions) { ICollection<XmlElement> existent; if (!OperationAssertions.TryGetValue(operation, out existent)) { OperationAssertions.Add(operation, assertions); } else { foreach (XmlElement assertion in assertions) existent.Add(assertion); } } internal void Add(MessageDescription message, ICollection<XmlElement> assertions) { ICollection<XmlElement> existent; if (!MessageAssertions.TryGetValue(message, out existent)) { MessageAssertions.Add(message, assertions); } else { foreach (XmlElement assertion in assertions) existent.Add(assertion); } } protected UnrecognizedAssertionsBindingElement(UnrecognizedAssertionsBindingElement elementToBeCloned) : base(elementToBeCloned) { this.wsdlBinding = elementToBeCloned.wsdlBinding; this.bindingAsserions = elementToBeCloned.bindingAsserions; this.operationAssertions = elementToBeCloned.operationAssertions; this.messageAssertions = elementToBeCloned.messageAssertions; } public override T GetProperty<T>(BindingContext context) { if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); } return context.GetInnerProperty<T>(); } public override BindingElement Clone() { //throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR.GetString(SR.UnsupportedBindingElementClone, typeof(UnrecognizedAssertionsBindingElement).Name))); // do not allow Cloning, return an empty BindingElement return new UnrecognizedAssertionsBindingElement(new XmlQualifiedName(wsdlBinding.Name, wsdlBinding.Namespace), null); } } }