Exemplo n.º 1
0
        /// <summary>
        /// Writes the property start element.
        /// </summary>
        /// <param name="beforePropertyCallback">Action called before anything else is written (if it's not null).</param>
        /// <param name="propertyName">The name of the property to write.</param>
        /// <param name="isWritingCollection">true if we are writing a collection instead of an entry.</param>
        /// <param name="isTopLevel">true if writing a top-level property payload; otherwise false.</param>
        private void WritePropertyStart(Action beforePropertyCallback, string propertyName, bool isWritingCollection, bool isTopLevel)
        {
            if (beforePropertyCallback != null)
            {
                beforePropertyCallback();
            }

            // <d:propertyname>
            this.XmlWriter.WriteStartElement(
                isWritingCollection ? string.Empty : AtomConstants.ODataNamespacePrefix,
                propertyName,
                this.MessageWriterSettings.WriterBehavior.ODataNamespace);

            if (isTopLevel)
            {
                DefaultNamespaceFlags namespaces = DefaultNamespaceFlags.ODataMetadata | DefaultNamespaceFlags.Gml | DefaultNamespaceFlags.GeoRss;
                if (!this.MessageWriterSettings.AlwaysUseDefaultXmlNamespaceForRootElement)
                {
                    // DEVNOTE: no need to include the OData namespace here, because we already defined it above.
                    // However, the order will change if we leave it to XmlWriter to add it. So, if the knob hasn't been flipped,
                    // manually add it.
                    namespaces |= DefaultNamespaceFlags.OData;
                }

                this.WriteDefaultNamespaceAttributes(namespaces);
            }
        }
Exemplo n.º 2
0
 internal void WriteDefaultNamespaceAttributes(DefaultNamespaceFlags flags)
 {
     if ((flags & DefaultNamespaceFlags.Atom) == DefaultNamespaceFlags.Atom)
     {
         this.XmlWriter.WriteAttributeString("xmlns", "http://www.w3.org/2000/xmlns/", "http://www.w3.org/2005/Atom");
     }
     if ((flags & DefaultNamespaceFlags.OData) == DefaultNamespaceFlags.OData)
     {
         this.XmlWriter.WriteAttributeString("d", "http://www.w3.org/2000/xmlns/", base.MessageWriterSettings.WriterBehavior.ODataNamespace);
     }
     if ((flags & DefaultNamespaceFlags.ODataMetadata) == DefaultNamespaceFlags.ODataMetadata)
     {
         this.XmlWriter.WriteAttributeString("m", "http://www.w3.org/2000/xmlns/", "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata");
     }
     if (((ODataVersion) base.MessageWriterSettings.Version.Value) >= ODataVersion.V3)
     {
         if ((flags & DefaultNamespaceFlags.GeoRss) == DefaultNamespaceFlags.GeoRss)
         {
             this.XmlWriter.WriteAttributeString("georss", "http://www.w3.org/2000/xmlns/", "http://www.georss.org/georss");
         }
         if ((flags & DefaultNamespaceFlags.Gml) == DefaultNamespaceFlags.Gml)
         {
             this.XmlWriter.WriteAttributeString("gml", "http://www.w3.org/2000/xmlns/", "http://www.opengis.net/gml");
         }
     }
 }
Exemplo n.º 3
0
 internal void WriteDefaultNamespaceAttributes(DefaultNamespaceFlags flags)
 {
     if ((flags & DefaultNamespaceFlags.Atom) == DefaultNamespaceFlags.Atom)
     {
         this.XmlWriter.WriteAttributeString("xmlns", "http://www.w3.org/2000/xmlns/", "http://www.w3.org/2005/Atom");
     }
     if ((flags & DefaultNamespaceFlags.OData) == DefaultNamespaceFlags.OData)
     {
         this.XmlWriter.WriteAttributeString("d", "http://www.w3.org/2000/xmlns/", base.MessageWriterSettings.WriterBehavior.ODataNamespace);
     }
     if ((flags & DefaultNamespaceFlags.ODataMetadata) == DefaultNamespaceFlags.ODataMetadata)
     {
         this.XmlWriter.WriteAttributeString("m", "http://www.w3.org/2000/xmlns/", "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata");
     }
     if (((ODataVersion)base.MessageWriterSettings.Version.Value) >= ODataVersion.V3)
     {
         if ((flags & DefaultNamespaceFlags.GeoRss) == DefaultNamespaceFlags.GeoRss)
         {
             this.XmlWriter.WriteAttributeString("georss", "http://www.w3.org/2000/xmlns/", "http://www.georss.org/georss");
         }
         if ((flags & DefaultNamespaceFlags.Gml) == DefaultNamespaceFlags.Gml)
         {
             this.XmlWriter.WriteAttributeString("gml", "http://www.w3.org/2000/xmlns/", "http://www.opengis.net/gml");
         }
     }
 }
Exemplo n.º 4
0
        /// <summary>
        /// Write the namespaces for OData (prefix 'd') and OData metadata (prefix 'm')
        /// </summary>
        /// <param name="flags">An enumeration value to indicate what default namespace attributes to write.</param>
        internal void WriteDefaultNamespaceAttributes(DefaultNamespaceFlags flags)
        {
            Debug.Assert(this.MessageWriterSettings.Version.HasValue, "Version must be set by now.");

            if ((flags & DefaultNamespaceFlags.Atom) == DefaultNamespaceFlags.Atom)
            {
                this.XmlWriter.WriteAttributeString(AtomConstants.XmlnsNamespacePrefix, AtomConstants.XmlNamespacesNamespace, AtomConstants.AtomNamespace);
            }

            if ((flags & DefaultNamespaceFlags.OData) == DefaultNamespaceFlags.OData)
            {
                this.XmlWriter.WriteAttributeString(AtomConstants.ODataNamespacePrefix, AtomConstants.XmlNamespacesNamespace, AtomConstants.ODataNamespace);
            }

            if ((flags & DefaultNamespaceFlags.ODataMetadata) == DefaultNamespaceFlags.ODataMetadata)
            {
                this.XmlWriter.WriteAttributeString(AtomConstants.ODataMetadataNamespacePrefix, AtomConstants.XmlNamespacesNamespace, AtomConstants.ODataMetadataNamespace);
            }

            if ((flags & DefaultNamespaceFlags.GeoRss) == DefaultNamespaceFlags.GeoRss)
            {
                this.XmlWriter.WriteAttributeString(AtomConstants.GeoRssPrefix, AtomConstants.XmlNamespacesNamespace, AtomConstants.GeoRssNamespace);
            }

            if ((flags & DefaultNamespaceFlags.Gml) == DefaultNamespaceFlags.Gml)
            {
                this.XmlWriter.WriteAttributeString(AtomConstants.GmlPrefix, AtomConstants.XmlNamespacesNamespace, AtomConstants.GmlNamespace);
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Write the namespaces for OData (prefix 'd') and OData metadata (prefix 'm')
        /// </summary>
        /// <param name="writer">The Xml writer to write to.</param>
        /// <param name="flags">An enumeration value to indicate what default namespace attributes to write.</param>
        private static void WriteDefaultNamespaceAttributes(XmlWriter writer, DefaultNamespaceFlags flags)
        {
            DebugUtils.CheckNoExternalCallers();

            if ((flags & DefaultNamespaceFlags.Atom) == DefaultNamespaceFlags.Atom)
            {
                writer.WriteAttributeString(
                    AtomConstants.XmlnsNamespacePrefix,
                    AtomConstants.XmlNamespacesNamespace,
                    AtomConstants.AtomNamespace);
            }

            if ((flags & DefaultNamespaceFlags.OData) == DefaultNamespaceFlags.OData)
            {
                writer.WriteAttributeString(
                    AtomConstants.ODataNamespacePrefix,
                    AtomConstants.XmlNamespacesNamespace,
                    AtomConstants.ODataNamespace);
            }

            if ((flags & DefaultNamespaceFlags.ODataMetadata) == DefaultNamespaceFlags.ODataMetadata)
            {
                writer.WriteAttributeString(
                    AtomConstants.ODataMetadataNamespacePrefix,
                    AtomConstants.XmlNamespacesNamespace,
                    AtomConstants.ODataMetadataNamespace);
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// Write the namespaces for OData (prefix 'd') and OData metadata (prefix 'm')
        /// </summary>
        /// <param name="flags">An enumeration value to indicate what default namespace attributes to write.</param>
        internal void WriteDefaultNamespaceAttributes(DefaultNamespaceFlags flags)
        {
            DebugUtils.CheckNoExternalCallers();
            Debug.Assert(this.MessageWriterSettings.Version.HasValue, "Version must be set by now.");

            if ((flags & DefaultNamespaceFlags.Atom) == DefaultNamespaceFlags.Atom)
            {
                this.XmlWriter.WriteAttributeString(
                    AtomConstants.XmlnsNamespacePrefix,
                    AtomConstants.XmlNamespacesNamespace,
                    AtomConstants.AtomNamespace);
            }

            if ((flags & DefaultNamespaceFlags.OData) == DefaultNamespaceFlags.OData)
            {
                this.XmlWriter.WriteAttributeString(
                    AtomConstants.ODataNamespacePrefix,
                    AtomConstants.XmlNamespacesNamespace,
                    this.MessageWriterSettings.WriterBehavior.ODataNamespace);
            }

            if ((flags & DefaultNamespaceFlags.ODataMetadata) == DefaultNamespaceFlags.ODataMetadata)
            {
                this.XmlWriter.WriteAttributeString(
                    AtomConstants.ODataMetadataNamespacePrefix,
                    AtomConstants.XmlNamespacesNamespace,
                    AtomConstants.ODataMetadataNamespace);
            }

            // Only write the spatial namespaces for versions >= V3
            if (this.MessageWriterSettings.Version.Value >= ODataVersion.V3)
            {
                if ((flags & DefaultNamespaceFlags.GeoRss) == DefaultNamespaceFlags.GeoRss)
                {
                    this.XmlWriter.WriteAttributeString(
                        AtomConstants.GeoRssPrefix,
                        AtomConstants.XmlNamespacesNamespace,
                        AtomConstants.GeoRssNamespace);
                }

                if ((flags & DefaultNamespaceFlags.Gml) == DefaultNamespaceFlags.Gml)
                {
                    this.XmlWriter.WriteAttributeString(
                        AtomConstants.GmlPrefix,
                        AtomConstants.XmlNamespacesNamespace,
                        AtomConstants.GmlNamespace);
                }
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// Writes the property start element.
        /// </summary>
        /// <param name="beforePropertyCallback">Action called before anything else is written (if it's not null).</param>
        /// <param name="propertyName">The name of the property to write.</param>
        /// <param name="value">The odata value to write.</param>
        /// <param name="isWritingCollection">true if we are writing a collection instead of an entry.</param>
        /// <param name="isTopLevel">true if writing a top-level property payload; otherwise false.</param>
        private void WritePropertyStart(Action beforePropertyCallback, string propertyName, ODataValue value, bool isWritingCollection, bool isTopLevel)
        {
            if (beforePropertyCallback != null)
            {
                beforePropertyCallback();
            }

            if (!isTopLevel)
            {
                // <d:propertyname>
                this.XmlWriter.WriteStartElement(
                    isWritingCollection ? string.Empty : AtomConstants.ODataNamespacePrefix,
                    propertyName,
                    AtomConstants.ODataNamespace);
            }
            else
            {
                // <m:value>
                this.XmlWriter.WriteStartElement(
                    AtomConstants.ODataMetadataNamespacePrefix,
                    AtomConstants.ODataValueElementName,
                    AtomConstants.ODataMetadataNamespace);

                // COMPAT 24: Use standard ('d' and 'm') namespace prefixes for top-level property payloads
                // Top-level collection payloads don't write namespace declarations on the root element (except for the d namespace)
                //             We decided to use the same set of default namespaces on entries, feeds, collections and top-level properties
                DefaultNamespaceFlags namespaces = DefaultNamespaceFlags.Gml | DefaultNamespaceFlags.GeoRss;
                if (!this.MessageWriterSettings.AlwaysUseDefaultXmlNamespaceForRootElement)
                {
                    // DEVNOTE: no need to include the OData namespace here, because we already defined it above.
                    // However, the order will change if we leave it to XmlWriter to add it. So, if the knob hasn't been flipped,
                    // manually add it.
                    namespaces |= DefaultNamespaceFlags.OData;
                }

                this.WriteDefaultNamespaceAttributes(namespaces);

                ODataContextUriBuilder contextUriBuilder = this.AtomOutputContext.CreateContextUriBuilder();

                ODataPayloadKind kind = this.AtomOutputContext.MessageWriterSettings.IsIndividualProperty ? ODataPayloadKind.IndividualProperty : ODataPayloadKind.Property;

                ODataContextUrlInfo contextInfo = ODataContextUrlInfo.Create(value, this.AtomOutputContext.MessageWriterSettings.ODataUri);
                this.WriteContextUriProperty(contextUriBuilder.BuildContextUri(kind, contextInfo));
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// Write the namespaces for OData (prefix 'd') and OData metadata (prefix 'm')
        /// </summary>
        /// <param name="flags">An enumeration value to indicate what default namespace attributes to write.</param>
        internal void WriteDefaultNamespaceAttributes(DefaultNamespaceFlags flags)
        {
            Debug.Assert(this.MessageWriterSettings.Version.HasValue, "Version must be set by now.");

            if ((flags & DefaultNamespaceFlags.Atom) == DefaultNamespaceFlags.Atom)
            {
                this.XmlWriter.WriteAttributeString(AtomConstants.XmlnsNamespacePrefix, AtomConstants.XmlNamespacesNamespace, AtomConstants.AtomNamespace);
            }

            if ((flags & DefaultNamespaceFlags.OData) == DefaultNamespaceFlags.OData)
            {
                this.XmlWriter.WriteAttributeString(AtomConstants.ODataNamespacePrefix, AtomConstants.XmlNamespacesNamespace, AtomConstants.ODataNamespace);
            }

            if ((flags & DefaultNamespaceFlags.ODataMetadata) == DefaultNamespaceFlags.ODataMetadata)
            {
                this.XmlWriter.WriteAttributeString(AtomConstants.ODataMetadataNamespacePrefix, AtomConstants.XmlNamespacesNamespace, AtomConstants.ODataMetadataNamespace);
            }

            if ((flags & DefaultNamespaceFlags.GeoRss) == DefaultNamespaceFlags.GeoRss)
            {
                this.XmlWriter.WriteAttributeString(AtomConstants.GeoRssPrefix, AtomConstants.XmlNamespacesNamespace, AtomConstants.GeoRssNamespace);
            }

            if ((flags & DefaultNamespaceFlags.Gml) == DefaultNamespaceFlags.Gml)
            {
                this.XmlWriter.WriteAttributeString(AtomConstants.GmlPrefix, AtomConstants.XmlNamespacesNamespace, AtomConstants.GmlNamespace);
            }
        }
        /// <summary>
        /// Write the namespaces for OData (prefix 'd') and OData metadata (prefix 'm')
        /// </summary>
        /// <param name="writer">The Xml writer to write to.</param>
        /// <param name="flags">An enumeration value to indicate what default namespace attributes to write.</param>
        private static void WriteDefaultNamespaceAttributes(XmlWriter writer, DefaultNamespaceFlags flags)
        {
            DebugUtils.CheckNoExternalCallers();

            if ((flags & DefaultNamespaceFlags.Atom) == DefaultNamespaceFlags.Atom)
            {
                writer.WriteAttributeString(
                    AtomConstants.XmlnsNamespacePrefix,
                    AtomConstants.XmlNamespacesNamespace,
                    AtomConstants.AtomNamespace);
            }

            if ((flags & DefaultNamespaceFlags.OData) == DefaultNamespaceFlags.OData)
            {
                writer.WriteAttributeString(
                    AtomConstants.ODataNamespacePrefix,
                    AtomConstants.XmlNamespacesNamespace,
                    AtomConstants.ODataNamespace);
            }

            if ((flags & DefaultNamespaceFlags.ODataMetadata) == DefaultNamespaceFlags.ODataMetadata)
            {
                writer.WriteAttributeString(
                    AtomConstants.ODataMetadataNamespacePrefix,
                    AtomConstants.XmlNamespacesNamespace,
                    AtomConstants.ODataMetadataNamespace);
            }
        }
Exemplo n.º 10
0
        /// <summary>
        /// Write the namespaces for OData (prefix 'd') and OData metadata (prefix 'm')
        /// </summary>
        /// <param name="flags">An enumeration value to indicate what default namespace attributes to write.</param>
        internal void WriteDefaultNamespaceAttributes(DefaultNamespaceFlags flags)
        {
            DebugUtils.CheckNoExternalCallers();
            Debug.Assert(this.MessageWriterSettings.Version.HasValue, "Version must be set by now.");

            if ((flags & DefaultNamespaceFlags.Atom) == DefaultNamespaceFlags.Atom)
            {
                this.XmlWriter.WriteAttributeString(
                    AtomConstants.XmlnsNamespacePrefix,
                    AtomConstants.XmlNamespacesNamespace,
                    AtomConstants.AtomNamespace);
            }

            if ((flags & DefaultNamespaceFlags.OData) == DefaultNamespaceFlags.OData)
            {
                this.XmlWriter.WriteAttributeString(
                    AtomConstants.ODataNamespacePrefix,
                    AtomConstants.XmlNamespacesNamespace,
                    this.MessageWriterSettings.WriterBehavior.ODataNamespace);
            }

            if ((flags & DefaultNamespaceFlags.ODataMetadata) == DefaultNamespaceFlags.ODataMetadata)
            {
                this.XmlWriter.WriteAttributeString(
                    AtomConstants.ODataMetadataNamespacePrefix,
                    AtomConstants.XmlNamespacesNamespace,
                    AtomConstants.ODataMetadataNamespace);
            }

            // Only write the spatial namespaces for versions >= V3
            if (this.MessageWriterSettings.Version.Value >= ODataVersion.V3)
            {
                if ((flags & DefaultNamespaceFlags.GeoRss) == DefaultNamespaceFlags.GeoRss)
                {
                    this.XmlWriter.WriteAttributeString(
                        AtomConstants.GeoRssPrefix,
                        AtomConstants.XmlNamespacesNamespace,
                        AtomConstants.GeoRssNamespace);
                }

                if ((flags & DefaultNamespaceFlags.Gml) == DefaultNamespaceFlags.Gml)
                {
                    this.XmlWriter.WriteAttributeString(
                        AtomConstants.GmlPrefix,
                        AtomConstants.XmlNamespacesNamespace,
                        AtomConstants.GmlNamespace);
                }
            }
        }