File: System\ServiceModel\Syndication\ResourceCollectionInfo.cs
Project: ndp\cdf\src\WCF\ServiceModel\System.ServiceModel.csproj (System.ServiceModel)
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------
 
namespace System.ServiceModel.Syndication
{
    using System.Collections.ObjectModel;
    using System.Runtime.Serialization;
    using System.Xml.Serialization;
    using System.Collections.Generic;
    using System.Xml;
    using System.Runtime.CompilerServices;
 
    [TypeForwardedFrom("System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")]
    public class ResourceCollectionInfo : IExtensibleSyndicationObject
    {
        static IEnumerable<string> singleEmptyAccept;
        Collection<string> accepts;
        Uri baseUri;
        Collection<CategoriesDocument> categories;
        ExtensibleSyndicationObject extensions = new ExtensibleSyndicationObject();
        Uri link;
        TextSyndicationContent title;
 
        public ResourceCollectionInfo()
        {
        }
 
        public ResourceCollectionInfo(string title, Uri link)
            : this((title == null) ? null : new TextSyndicationContent(title), link)
        {
        }
 
        public ResourceCollectionInfo(TextSyndicationContent title, Uri link)
            : this(title, link, null, null)
        {
        }
 
        public ResourceCollectionInfo(TextSyndicationContent title, Uri link, IEnumerable<CategoriesDocument> categories, bool allowsNewEntries)
            : this(title, link, categories, (allowsNewEntries) ? null : CreateSingleEmptyAccept())
        {
        }
 
        public ResourceCollectionInfo(TextSyndicationContent title, Uri link, IEnumerable<CategoriesDocument> categories, IEnumerable<string> accepts)
        {
            if (title == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("title");
            }
            if (link == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("link");
            }
            this.title = title;
            this.link = link;
            if (categories != null)
            {
                this.categories = new NullNotAllowedCollection<CategoriesDocument>();
                foreach (CategoriesDocument category in categories)
                {
                    this.categories.Add(category);
                }
            }
            if (accepts != null)
            {
                this.accepts = new NullNotAllowedCollection<string>();
                foreach (string accept in accepts)
                {
                    this.accepts.Add(accept);
                }
            }
        }
 
        public Collection<string> Accepts
        {
            get
            {
                if (this.accepts == null)
                {
                    this.accepts = new NullNotAllowedCollection<string>();
                }
                return this.accepts;
            }
        }
 
        public Dictionary<XmlQualifiedName, string> AttributeExtensions
        {
            get
            {
                return this.extensions.AttributeExtensions;
            }
        }
 
        public Uri BaseUri
        {
            get { return this.baseUri; }
            set { this.baseUri = value; }
        }
 
        public Collection<CategoriesDocument> Categories
        {
            get
            {
                if (this.categories == null)
                {
                    this.categories = new NullNotAllowedCollection<CategoriesDocument>();
                }
                return this.categories;
            }
        }
 
        public SyndicationElementExtensionCollection ElementExtensions
        {
            get
            {
                return this.extensions.ElementExtensions;
            }
        }
 
        public Uri Link
        {
            get { return this.link; }
            set { this.link = value; }
        }
 
        public TextSyndicationContent Title
        {
            get { return this.title; }
            set { this.title = value; }
        }
 
        protected internal virtual InlineCategoriesDocument CreateInlineCategoriesDocument()
        {
            return new InlineCategoriesDocument();
        }
 
        protected internal virtual ReferencedCategoriesDocument CreateReferencedCategoriesDocument()
        {
            return new ReferencedCategoriesDocument();
        }
 
        protected internal virtual bool TryParseAttribute(string name, string ns, string value, string version)
        {
            return false;
        }
 
        protected internal virtual bool TryParseElement(XmlReader reader, string version)
        {
            return false;
        }
 
        protected internal virtual void WriteAttributeExtensions(XmlWriter writer, string version)
        {
            this.extensions.WriteAttributeExtensions(writer);
        }
 
        protected internal virtual void WriteElementExtensions(XmlWriter writer, string version)
        {
            this.extensions.WriteElementExtensions(writer);
        }
 
        internal void LoadElementExtensions(XmlReader readerOverUnparsedExtensions, int maxExtensionSize)
        {
            this.extensions.LoadElementExtensions(readerOverUnparsedExtensions, maxExtensionSize);
        }
 
        internal void LoadElementExtensions(XmlBuffer buffer)
        {
            this.extensions.LoadElementExtensions(buffer);
        }
 
        static IEnumerable<string> CreateSingleEmptyAccept()
        {
            if (singleEmptyAccept == null)
            {
                List<string> tmp = new List<string>(1);
                tmp.Add(string.Empty);
                singleEmptyAccept = tmp.AsReadOnly();
            }
            return singleEmptyAccept;
        }
    }
}