| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- //------------------------------------------------------------------------------
- // Copyright (c) Microsoft Corporation. All rights reserved.
- //------------------------------------------------------------------------------
- namespace System.ServiceModel.Configuration
- {
- using System.Collections.Generic;
- using System.Configuration;
- using System.Globalization;
- using System.Runtime;
- using System.ServiceModel.Channels;
- using System.ServiceModel.Description;
- using System.Text;
- using System.Xml;
- sealed partial class UnrecognizedPolicyAssertionElement : BindingElementExtensionElement
- {
- XmlQualifiedName wsdlBinding;
- ICollection<XmlElement> bindingAsserions;
- IDictionary<OperationDescription, ICollection<XmlElement>> operationAssertions;
- IDictionary<MessageDescription, ICollection<XmlElement>> messageAssertions;
- public override Type BindingElementType
- {
- get { return typeof(UnrecognizedAssertionsBindingElement); }
- }
- public override void CopyFrom(ServiceModelExtensionElement from)
- {
- base.CopyFrom(from);
- UnrecognizedPolicyAssertionElement source = (UnrecognizedPolicyAssertionElement)from;
- #pragma warning suppress 56506 //markg; base.CopyFrom() checks for 'from' being null
- this.wsdlBinding = source.wsdlBinding;
- this.bindingAsserions = source.bindingAsserions;
- this.operationAssertions = source.operationAssertions;
- this.messageAssertions = source.messageAssertions;
- }
- protected internal override BindingElement CreateBindingElement()
- {
- return new UnrecognizedAssertionsBindingElement(XmlQualifiedName.Empty, null);
- }
- protected internal override void InitializeFrom(BindingElement bindingElement)
- {
- base.InitializeFrom(bindingElement);
- UnrecognizedAssertionsBindingElement binding = (UnrecognizedAssertionsBindingElement)bindingElement;
- this.wsdlBinding = binding.WsdlBinding;
- this.bindingAsserions = binding.BindingAsserions;
- this.operationAssertions = binding.OperationAssertions;
- this.messageAssertions = binding.MessageAssertions;
- }
- protected override bool SerializeToXmlElement(XmlWriter writer, String elementName)
- {
- XmlDocument document = new XmlDocument();
- if (writer != null && this.bindingAsserions != null && this.bindingAsserions.Count > 0)
- {
- int indent = 1;
- XmlWriterSettings settings = WriterSettings(writer);
- Fx.Assert(this.wsdlBinding != null, "");
- WriteComment(SR.GetString(SR.UnrecognizedBindingAssertions1, this.wsdlBinding.Namespace), indent, writer, settings);
- WriteComment(String.Format(CultureInfo.InvariantCulture, "<wsdl:binding name='{0}'>", this.wsdlBinding.Name), indent, writer, settings);
- indent++;
- foreach (XmlElement assertion in this.bindingAsserions)
- {
- WriteComment(ToString(assertion, document), indent, writer, settings);
- }
- if (this.operationAssertions == null || this.operationAssertions.Count == 0)
- return true;
- foreach (OperationDescription operation in this.operationAssertions.Keys)
- {
- WriteComment(String.Format(CultureInfo.InvariantCulture, "<wsdl:operation name='{0}'>", operation.Name), indent, writer, settings);
- indent++;
- foreach (XmlElement assertion in this.operationAssertions[operation])
- {
- WriteComment(ToString(assertion, document), indent, writer, settings);
- }
- if (this.messageAssertions == null || this.messageAssertions.Count == 0)
- return true;
- foreach (MessageDescription message in operation.Messages)
- {
- ICollection<XmlElement> assertions;
- if (this.messageAssertions.TryGetValue(message, out assertions))
- {
- if (message.Direction == MessageDirection.Input)
- WriteComment("<wsdl:input>", indent, writer, settings);
- else if (message.Direction == MessageDirection.Output)
- WriteComment("<wsdl:output>", indent, writer, settings);
- foreach (XmlElement assertion in assertions)
- {
- WriteComment(ToString(assertion, document), indent + 1, writer, settings);
- }
- }
- }
- }
- return true;
- }
- return false;
- }
- protected override void Unmerge(ConfigurationElement sourceElement, ConfigurationElement parentElement, ConfigurationSaveMode saveMode)
- {
- if (sourceElement is UnrecognizedPolicyAssertionElement)
- {
- this.wsdlBinding = ((UnrecognizedPolicyAssertionElement)sourceElement).wsdlBinding;
- this.bindingAsserions = ((UnrecognizedPolicyAssertionElement)sourceElement).bindingAsserions;
- this.operationAssertions = ((UnrecognizedPolicyAssertionElement)sourceElement).operationAssertions;
- this.messageAssertions = ((UnrecognizedPolicyAssertionElement)sourceElement).messageAssertions;
- }
- base.Unmerge(sourceElement, parentElement, saveMode);
- }
- string ToString(XmlElement e, XmlDocument document)
- {
- XmlElement top = document.CreateElement(e.Prefix, e.LocalName, e.NamespaceURI);
- top.InsertBefore(document.CreateTextNode(".."), null);
- return top.OuterXml;
- }
- void WriteComment(string text, int indent, XmlWriter writer, XmlWriterSettings settings)
- {
- if (settings.Indent)
- {
- // indent is always > 0
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < indent; i++)
- {
- sb.Append(settings.IndentChars);
- }
- sb.Append(text);
- sb.Append(settings.IndentChars);
- text = sb.ToString();
- }
- writer.WriteComment(text);
- }
- XmlWriterSettings WriterSettings(XmlWriter writer)
- {
- if (writer.Settings == null)
- {
- // V1 writers
- XmlWriterSettings settings = new XmlWriterSettings();
- XmlTextWriter xmlTextWriter = writer as XmlTextWriter;
- if (xmlTextWriter != null)
- {
- settings.Indent = xmlTextWriter.Formatting == Formatting.Indented;
- if (settings.Indent && xmlTextWriter.Indentation > 0)
- {
- StringBuilder sb = new StringBuilder(xmlTextWriter.Indentation);
- for (int i = 0; i < xmlTextWriter.Indentation; i++)
- sb.Append(xmlTextWriter.IndentChar);
- settings.IndentChars = sb.ToString();
- }
- }
- return settings;
- }
- return writer.Settings;
- }
- }
- }
|