AtomServiceDocumentSerializer.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / DataWeb / Server / System / Data / Services / Serializers / AtomServiceDocumentSerializer.cs / 1305376 / AtomServiceDocumentSerializer.cs

                            //---------------------------------------------------------------------- 
// 
//      Copyright (c) Microsoft Corporation.  All rights reserved.
// 
//  
//      Provides a serializer for the Atom Service Document format.
//  
// 
// @owner [....]
//--------------------------------------------------------------------- 

namespace System.Data.Services.Serializers
{
    using System; 
    using System.Data.Services.Providers;
    using System.Diagnostics; 
    using System.IO; 
    using System.Text;
    using System.Xml; 

    /// 
    /// Provides support for serializing service models as
    /// a Service Document. 
    /// 
    ///  
    /// For more information, see http://tools.ietf.org/html/rfc5023#section-8. 
    /// 
    [DebuggerDisplay("AtomServiceDocumentSerializer={baseUri}")] 
    internal sealed class AtomServiceDocumentSerializer : XmlDocumentSerializer
    {
        /// XML prefix for the Atom Publishing Protocol namespace.
        private const string AppNamespacePrefix = "app"; 

        /// XML prefix for the Atom namespace. 
        private const string AtomNamespacePrefix = "atom"; 

        ///  
        /// Initializes a new AtomServiceDocumentSerializer, ready to write
        /// out the Service Document for a data provider.
        /// 
        /// Stream to which output should be sent. 
        /// Base URI from which resources should be resolved.
        /// Data provider from which metadata should be gathered. 
        /// Text encoding for the response. 
        internal AtomServiceDocumentSerializer(
            Stream output, 
            Uri baseUri,
            DataServiceProviderWrapper provider,
            Encoding encoding)
            : base(output, baseUri, provider, encoding) 
        {
        } 
 
        /// Writes the Service Document to the output stream.
        /// Data service instance. 
        internal override void WriteRequest(IDataService service)
        {
            try
            { 
                this.Writer.WriteStartElement(XmlConstants.AtomPublishingServiceElementName, XmlConstants.AppNamespace);
                this.IncludeCommonNamespaces(); 
                this.Writer.WriteStartElement("", XmlConstants.AtomPublishingWorkspaceElementName, XmlConstants.AppNamespace); 

                this.Writer.WriteStartElement(XmlConstants.AtomTitleElementName, XmlConstants.AtomNamespace); 
                this.Writer.WriteString(XmlConstants.AtomPublishingWorkspaceDefaultValue);
                this.Writer.WriteEndElement();

                foreach (ResourceSetWrapper container in this.Provider.ResourceSets) 
                {
                    this.Writer.WriteStartElement("", XmlConstants.AtomPublishingCollectionElementName, XmlConstants.AppNamespace); 
                    this.Writer.WriteAttributeString(XmlConstants.AtomHRefAttributeName, container.Name); 

                    this.Writer.WriteStartElement(XmlConstants.AtomTitleElementName, XmlConstants.AtomNamespace); 
                    this.Writer.WriteString(container.Name);
                    this.Writer.WriteEndElement();  // Close 'title' element.

                    this.Writer.WriteEndElement();  // Close 'collection' element. 
                }
 
                this.Writer.WriteEndElement();  // Close 'workspace' element. 
                this.Writer.WriteEndElement();  // Close 'service' element.
            } 
            finally
            {
                this.Writer.Close();
            } 
        }
 
        /// Ensures that common namespaces are included in the topmost tag. 
        /// 
        /// This method should be called by any method that may write a 
        /// topmost element tag.
        /// 
        private void IncludeCommonNamespaces()
        { 
            Debug.Assert(
                this.Writer.WriteState == WriteState.Element, 
                "this.writer.WriteState == WriteState.Element - otherwise, not called at beginning - " + this.Writer.WriteState); 
            this.Writer.WriteAttributeString(XmlConstants.XmlNamespacePrefix, XmlConstants.XmlBaseAttributeName, null, this.BaseUri.AbsoluteUri);
            this.Writer.WriteAttributeString(XmlConstants.XmlnsNamespacePrefix, AtomNamespacePrefix, null, XmlConstants.AtomNamespace); 
            this.Writer.WriteAttributeString(XmlConstants.XmlnsNamespacePrefix, AppNamespacePrefix, null, XmlConstants.AppNamespace);
        }
    }
} 

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.


                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK