All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.syndication.io.impl.RSS090Generator Maven / Gradle / Ivy

There is a newer version: 3.1.0-incubating
Show newest version
/*
 * Copyright 2004 Sun Microsystems, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
package com.sun.syndication.io.impl;

import com.sun.syndication.feed.WireFeed;
import com.sun.syndication.feed.rss.*;
import com.sun.syndication.io.FeedException;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.Namespace;

import java.util.List;


/**
 * Feed Generator for RSS 0.90
 * 

* * @author Elaine Chien */ public class RSS090Generator extends BaseWireFeedGenerator { private static final String RDF_URI = "http://www.w3.org/1999/02/22-rdf-syntax-ns#"; private static final String RSS_URI = "http://my.netscape.com/rdf/simple/0.9/"; private static final String CONTENT_URI = "http://purl.org/rss/1.0/modules/content/"; private static final Namespace RDF_NS = Namespace.getNamespace("rdf", RDF_URI); private static final Namespace RSS_NS = Namespace.getNamespace(RSS_URI); private static final Namespace CONTENT_NS = Namespace.getNamespace("content", CONTENT_URI); public RSS090Generator() { this("rss_0.9"); } protected RSS090Generator(String type) { super(type); } public Document generate(WireFeed feed) throws FeedException { Channel channel = (Channel)feed; Element root = createRootElement(channel); populateFeed(channel,root); purgeUnusedNamespaceDeclarations(root); return createDocument(root); } protected Namespace getFeedNamespace() { return RSS_NS; } protected Namespace getRDFNamespace() { return RDF_NS; } protected Namespace getContentNamespace() { return CONTENT_NS; } protected Document createDocument(Element root) { return new Document(root); } protected Element createRootElement(Channel channel) { Element root = new Element("RDF",getRDFNamespace()); root.addNamespaceDeclaration(getFeedNamespace()); root.addNamespaceDeclaration(getRDFNamespace()); root.addNamespaceDeclaration(getContentNamespace()); generateModuleNamespaceDefs(root); return root; } protected void populateFeed(Channel channel, Element parent) throws FeedException { addChannel(channel,parent); addImage(channel,parent); addTextInput(channel,parent); addItems(channel,parent); generateForeignMarkup(parent, (List)channel.getForeignMarkup()); } protected void addChannel(Channel channel,Element parent) throws FeedException { Element eChannel = new Element("channel", getFeedNamespace()); populateChannel(channel,eChannel); checkChannelConstraints(eChannel); parent.addContent(eChannel); generateFeedModules(channel.getModules(),eChannel); } /** * Populates the given channel with parsed data from the ROME element that holds the * channel data. * * @param channel the channel into which parsed data will be added. * @param eChannel the XML element that holds the data for the channel. */ protected void populateChannel(Channel channel,Element eChannel) { String title = channel.getTitle(); if (title!=null) { eChannel.addContent(generateSimpleElement("title",title)); } String link = channel.getLink(); if (link!=null) { eChannel.addContent(generateSimpleElement("link",link)); } String description = channel.getDescription(); if (description!=null) { eChannel.addContent(generateSimpleElement("description",description)); } } // maxLen == -1 means unlimited. protected void checkNotNullAndLength(Element parent, String childName, int minLen, int maxLen) throws FeedException { Element child = parent.getChild(childName,getFeedNamespace()); if (child == null) { throw new FeedException("Invalid "+getType()+" feed, missing "+parent.getName()+" "+childName); } checkLength(parent,childName,minLen,maxLen); } // maxLen == -1 means unlimited. protected void checkLength(Element parent, String childName, int minLen, int maxLen) throws FeedException { Element child = parent.getChild(childName,getFeedNamespace()); if (child != null) { if (minLen>0 && child.getText().length()-1 && child.getText().length()>maxLen) { throw new FeedException("Invalid "+getType()+" feed, "+parent.getName()+" "+childName + "exceeds "+maxLen+" length"); } } } protected void addImage(Channel channel,Element parent) throws FeedException { Image image = channel.getImage(); if (image!=null) { Element eImage = new Element("image", getFeedNamespace()); populateImage(image,eImage); checkImageConstraints(eImage); parent.addContent(eImage); } } protected void populateImage(Image image,Element eImage) { String title = image.getTitle(); if (title!=null) { eImage.addContent(generateSimpleElement("title",title)); } String url = image.getUrl(); if (url!=null) { eImage.addContent(generateSimpleElement("url",url)); } String link = image.getLink(); if (link!=null) { eImage.addContent(generateSimpleElement("link",link)); } } // Thxs DW for this one protected String getTextInputLabel() { return "textInput"; } protected void addTextInput(Channel channel,Element parent) throws FeedException { TextInput textInput = channel.getTextInput(); if (textInput!=null) { Element eTextInput = new Element(getTextInputLabel(), getFeedNamespace()); populateTextInput(textInput,eTextInput); checkTextInputConstraints(eTextInput); parent.addContent(eTextInput); } } protected void populateTextInput(TextInput textInput,Element eTextInput) { String title = textInput.getTitle(); if (title!=null) { eTextInput.addContent(generateSimpleElement("title",title)); } String description = textInput.getDescription(); if (description!=null) { eTextInput.addContent(generateSimpleElement("description",description)); } String name = textInput.getName(); if (name!=null) { eTextInput.addContent(generateSimpleElement("name",name)); } String link = textInput.getLink(); if (link!=null) { eTextInput.addContent(generateSimpleElement("link",link)); } } protected void addItems(Channel channel,Element parent) throws FeedException { List items = channel.getItems(); for (int i=0;i15) { throw new FeedException("Invalid "+getType()+" feed, item count is "+count+" it must be between 1 an 15"); } } protected void checkItemConstraints(Element eItem) throws FeedException { checkNotNullAndLength(eItem,"title", 0, 100); checkNotNullAndLength(eItem,"link", 0, 500); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy