Exemple #1
0
        public void Init(string selfLink, string languageCulture = null)
        {
            ElementExtensions.Add(
                new XElement(((XNamespace)UrlAtom) + "link",
                             new XAttribute("href", selfLink),
                             new XAttribute("rel", "self"),
                             new XAttribute("type", "application/rss+xml")));

            if (languageCulture.HasValue())
            {
                Language = languageCulture;
            }
        }
        public void Init(string selfLink, Language language = null)
        {
            ElementExtensions.Add(
                new XElement(((XNamespace)UrlAtom) + "link",
                             new XAttribute("href", selfLink),
                             new XAttribute("rel", "self"),
                             new XAttribute("type", "application/rss+xml")));

            if (language != null)
            {
                Language = language.LanguageCulture.EmptyNull().ToLower();
            }
        }
Exemple #3
0
        protected internal virtual bool TryParseElement(XmlReader reader, string version)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            reader.MoveToContent();

            if (reader.LocalName != "service" || reader.NamespaceURI != version)
            {
                return(false);
            }

            for (int i = 0; i < reader.AttributeCount; i++)
            {
                reader.MoveToAttribute(i);
                if (!TryParseAttribute(reader.LocalName, reader.NamespaceURI, reader.Value, version))
                {
                    AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), reader.Value);
                }
            }
            reader.MoveToElement();

            if (reader.IsEmptyElement)
            {
                throw new XmlException("AtomPP service element requires at least one workspace element");
            }

            reader.ReadStartElement();

            for (reader.MoveToContent(); reader.NodeType != XmlNodeType.EndElement; reader.MoveToContent())
            {
                if (reader.LocalName == "workspace" && reader.NamespaceURI == version)
                {
                    var ws = CreateWorkspace();
                    if (ws.TryParseElement(reader, version))
                    {
                        Workspaces.Add(ws);
                        continue;
                    }
                }
                ElementExtensions.Add(new SyndicationElementExtension(reader));
            }

            reader.ReadEndElement();

            return(true);
        }
Exemple #4
0
        public void ReadXml(System.Xml.XmlReader reader)
        {
            bool isEmpty = reader.IsEmptyElement;

            if (reader.HasAttributes)
            {
                for (int i = 0; i < reader.AttributeCount; i++)
                {
                    reader.MoveToNextAttribute();

                    if (reader.NamespaceURI == "")
                    {
                        if (reader.LocalName == "ref")
                        {
                            this.Ref = reader.Value;
                        }
                        else if (reader.LocalName == "href")
                        {
                            this.Href = new Uri(reader.Value);
                        }
                        else if (reader.LocalName == "source")
                        {
                            this.Source = new Uri(reader.Value);
                        }
                        else if (reader.LocalName == "type")
                        {
                            this.MediaType = reader.Value;
                        }
                        else
                        {
                            this.AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), reader.Value);
                        }
                    }
                }
            }

            reader.ReadStartElement();

            if (!isEmpty)
            {
                while (reader.IsStartElement())
                {
                    ElementExtensions.Add((XElement)XElement.ReadFrom(reader));
                }
                reader.ReadEndElement();
            }
        }
Exemple #5
0
        protected internal virtual bool TryParseElement(XmlReader reader, string version)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }
            reader.MoveToContent();

            if (reader.LocalName != "collection" || reader.NamespaceURI != version)
            {
                return(false);
            }

            for (int i = 0; i < reader.AttributeCount; i++)
            {
                reader.MoveToAttribute(i);
                if (!TryParseAttribute(reader.LocalName, reader.NamespaceURI, reader.Value, version))
                {
                    AttributeExtensions.Add(new XmlQualifiedName(reader.LocalName, reader.NamespaceURI), reader.Value);
                }
            }
            reader.MoveToElement();

            if (!reader.IsEmptyElement)
            {
                reader.Read();
                for (reader.MoveToContent(); reader.NodeType != XmlNodeType.EndElement; reader.MoveToContent())
                {
                    if (reader.LocalName == "title" && reader.NamespaceURI == Namespaces.Atom10)
                    {
                        Title = Atom10FeedFormatter.ReadTextSyndicationContent(reader);
                    }
                    else
                    {
                        ElementExtensions.Add(new SyndicationElementExtension(reader));
                    }
                }
            }
            reader.Read();
            return(true);
        }
Exemple #6
0
        protected internal virtual bool TryParseElement(XmlReader reader, string version)
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }

            reader.MoveToContent();
            if (reader.LocalName != "workspace" || reader.NamespaceURI != version)
            {
                return(false);
            }

            bool isEmpty = reader.IsEmptyElement;

            reader.ReadStartElement();
            if (isEmpty)
            {
                return(true);
            }

            for (reader.MoveToContent(); reader.NodeType != XmlNodeType.EndElement; reader.MoveToContent())
            {
                if (reader.LocalName == "title" && reader.NamespaceURI == Namespaces.Atom10)
                {
                    Title = Atom10FeedFormatter.ReadTextSyndicationContent(reader);
                    continue;
                }
                else if (reader.LocalName == "collection" && reader.NamespaceURI == version)
                {
                    var rc = new ResourceCollectionInfo();
                    if (rc.TryParseElement(reader, version))
                    {
                        Collections.Add(rc);
                        continue;
                    }
                }
                ElementExtensions.Add(new SyndicationElementExtension(reader));
            }
            return(true);
        }
Exemple #7
0
        /// <summary>
        ///   This needs to be called after anything in the model is changed.
        /// </summary>
        public void SyncFromModel()
        {
            // this pulls down information from the Model element into the atom item.
            Id          = Model.CanonicalName;
            Title       = new TextSyndicationContent(Model.CosmeticName);
            Summary     = new TextSyndicationContent(Model.PackageDetails.SummaryDescription);
            PublishDate = Model.PackageDetails.PublishDate;
            Authors.Clear();
            Contributors.Clear();
            Categories.Clear();
            Links.Clear();

            if (Model.PackageDetails.Publisher != null)
            {
                Authors.Add(CreatePerson().With(a => {
                    a.Name  = Model.PackageDetails.Publisher.Name;
                    a.Email = Model.PackageDetails.Publisher.Email;
                    a.Uri   = Model.PackageDetails.Publisher.Location == null ? string.Empty : Model.PackageDetails.Publisher.Location.ToString();
                }));
            }
            if (!Model.PackageDetails.Contributors.IsNullOrEmpty())
            {
                foreach (var c in Model.PackageDetails.Contributors)
                {
                    var contributor = c;
                    Contributors.Add(CreatePerson().With(a => {
                        a.Name  = contributor.Name;
                        a.Email = contributor.Email;
                        a.Uri   = contributor.Location == null ? string.Empty : contributor.Location.ToString();
                    }));
                }
            }

            if (!string.IsNullOrEmpty(Model.PackageDetails.CopyrightStatement))
            {
                Copyright = new TextSyndicationContent(Model.PackageDetails.CopyrightStatement);
            }

            if (!Model.PackageDetails.Tags.IsNullOrEmpty())
            {
                foreach (var tag in Model.PackageDetails.Tags)
                {
                    Categories.Add(new SyndicationCategory(tag, "/Tags", tag));
                }
            }

            if (!Model.PackageDetails.Categories.IsNullOrEmpty())
            {
                foreach (var category in Model.PackageDetails.Categories)
                {
                    Categories.Add(new SyndicationCategory(category, "/Categories", category));
                }
            }

            if (Model.PackageDetails.Description != null)
            {
                Content = SyndicationContent.CreateHtmlContent(Model.PackageDetails.Description);
            }

            if (!Model.Locations.IsNullOrEmpty())
            {
                foreach (var l in Model.Locations)
                {
                    var location = l;
                    Links.Add(CreateLink().With(link => {
                        link.RelationshipType = "enclosure";
                        link.MediaType        = "application/package";
                        link.Uri   = location;
                        link.Title = Model.Name;
                    }));

                    Links.Add(CreateLink().With(link => {
                        link.Uri = location;
                    }));
                }
            }
            // and serialize that out.
            ElementExtensions.Add(Model, Model.XmlSerializer);
        }