com.sun.syndication.io.impl.RSS091UserlandParser Maven / Gradle / Ivy
/*
* 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.Channel;
import com.sun.syndication.feed.rss.Content;
import com.sun.syndication.feed.rss.Description;
import com.sun.syndication.feed.rss.Image;
import com.sun.syndication.feed.rss.Item;
import org.jdom2.Attribute;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.Namespace;
import java.util.*;
/**
*/
public class RSS091UserlandParser extends RSS090Parser {
public RSS091UserlandParser() {
this("rss_0.91U");
}
protected RSS091UserlandParser(String type) {
super(type, null);
}
public boolean isMyType(Document document) {
boolean ok;
Element rssRoot = document.getRootElement();
ok = rssRoot.getName().equals("rss");
if (ok) {
ok = false;
Attribute version = rssRoot.getAttribute("version");
if (version!=null) {
ok = version.getValue().equals(getRSSVersion());
}
}
return ok;
}
protected String getRSSVersion() {
return "0.91";
}
protected Namespace getRSSNamespace() {
return Namespace.getNamespace("");
}
/**
* To be overriden by RSS 0.91 Netscape and RSS 0.94
*/
protected boolean isHourFormat24(Element rssRoot) {
return true;
}
/**
* Parses the root element of an RSS document into a Channel bean.
*
* It first invokes super.parseChannel and then parses and injects the following
* properties if present: language, pubDate, rating and copyright.
*
*
* @param rssRoot the root element of the RSS document to parse.
* @return the parsed Channel bean.
*/
protected WireFeed parseChannel(Element rssRoot) {
Channel channel = (Channel) super.parseChannel(rssRoot);
Element eChannel = rssRoot.getChild("channel",getRSSNamespace());
Element e = eChannel.getChild("language",getRSSNamespace());
if (e!=null) {
channel.setLanguage(e.getText());
}
e = eChannel.getChild("rating",getRSSNamespace());
if (e!=null) {
channel.setRating(e.getText());
}
e = eChannel.getChild("copyright",getRSSNamespace());
if (e!=null) {
channel.setCopyright(e.getText());
}
e = eChannel.getChild("pubDate",getRSSNamespace());
if (e!=null) {
channel.setPubDate(DateParser.parseDate(e.getText()));
}
e = eChannel.getChild("lastBuildDate",getRSSNamespace());
if (e!=null) {
channel.setLastBuildDate(DateParser.parseDate(e.getText()));
}
e = eChannel.getChild("docs",getRSSNamespace());
if (e!=null) {
channel.setDocs(e.getText());
}
e = eChannel.getChild("docs",getRSSNamespace());
if (e!=null) {
channel.setDocs(e.getText());
}
e = eChannel.getChild("managingEditor",getRSSNamespace());
if (e!=null) {
channel.setManagingEditor(e.getText());
}
e = eChannel.getChild("webMaster",getRSSNamespace());
if (e!=null) {
channel.setWebMaster(e.getText());
}
e = eChannel.getChild("skipHours");
if (e!=null) {
List skipHours = new ArrayList();
List eHours = e.getChildren("hour",getRSSNamespace());
for (int i=0;i
* It first invokes super.parseImage and then parses and injects the following
* properties if present: url, link, width, height and description.
*
*
* @param rssRoot the root element of the RSS document to parse for image information.
* @return the parsed RSSImage bean.
*/
protected Image parseImage(Element rssRoot) {
Image image = super.parseImage(rssRoot);
if (image!=null) {
Element eImage = getImage(rssRoot);
Element e = eImage.getChild("width",getRSSNamespace());
if (e!=null) {
Integer val = NumberParser.parseInt(e.getText());
if (val != null) {
image.setWidth(val.intValue());
}
}
e = eImage.getChild("height",getRSSNamespace());
if (e!=null) {
Integer val = NumberParser.parseInt(e.getText());
if (val != null) {
image.setHeight(val.intValue());
}
}
e = eImage.getChild("description",getRSSNamespace());
if (e!=null) {
image.setDescription(e.getText());
}
}
return image;
}
/**
* It looks for the 'item' elements under the 'channel' elemment.
*/
protected List getItems(Element rssRoot) {
Element eChannel = rssRoot.getChild("channel",getRSSNamespace());
return (eChannel!=null) ? eChannel.getChildren("item",getRSSNamespace()) : Collections.EMPTY_LIST;
}
/**
* It looks for the 'image' elements under the 'channel' elemment.
*/
protected Element getImage(Element rssRoot) {
Element eChannel = rssRoot.getChild("channel",getRSSNamespace());
return (eChannel!=null) ? eChannel.getChild("image",getRSSNamespace()) : null;
}
/**
* To be overriden by RSS 0.91 Netscape parser
*/
protected String getTextInputLabel() {
return "textInput";
}
/**
* It looks for the 'textinput' elements under the 'channel' elemment.
*/
protected Element getTextInput(Element rssRoot) {
String elementName = getTextInputLabel();
Element eChannel = rssRoot.getChild("channel",getRSSNamespace());
return (eChannel!=null) ? eChannel.getChild(elementName,getRSSNamespace()) : null;
}
/**
* Parses an item element of an RSS document looking for item information.
*
* It first invokes super.parseItem and then parses and injects the description property if present.
*
*
* @param rssRoot the root element of the RSS document in case it's needed for context.
* @param eItem the item element to parse.
* @return the parsed RSSItem bean.
*/
protected Item parseItem(Element rssRoot, Element eItem) {
Item item = super.parseItem(rssRoot,eItem);
Element e = eItem.getChild("description", getRSSNamespace());
if (e!=null) {
item.setDescription(parseItemDescription(rssRoot,e));
}
Element ce = eItem.getChild("encoded", getContentNamespace());
if (ce != null) {
Content content = new Content();
content.setType(Content.HTML);
content.setValue(ce.getText());
item.setContent(content);
}
return item;
}
protected Description parseItemDescription(Element rssRoot,Element eDesc) {
Description desc = new Description();
desc.setType("text/plain");
desc.setValue(eDesc.getText());
return desc;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy