package javaxt.rss;
import org.w3c.dom.*;
//******************************************************************************
//** RSS Item
//******************************************************************************
/**
* Used to represent an entry in an RSS feed.
*
******************************************************************************/
public class Item {
private String title;
private String description;
private String author;
private String creator;
private String category;
private java.net.URL link;
private java.net.URL origLink; //<--FeedBurner
private java.util.Date date;
private Location location;
private java.util.ArrayList media = new java.util.ArrayList();
//**************************************************************************
//** Constructor
//**************************************************************************
public Item(){}
//**************************************************************************
//** Constructor
//**************************************************************************
public Item(String title, java.net.URL link, java.util.Date date){
this.title = title;
this.link = link;
this.date = date;
}
//**************************************************************************
//** Constructor
//**************************************************************************
/** Creates a new instance of this class using an XML node from an RSS Feed.
*/
protected Item(Node item, java.util.HashMap namespaces) {
String mediaNS = namespaces.get("http://search.yahoo.com/mrss");
if (mediaNS==null) mediaNS = "media";
String geoNS = namespaces.get("http://www.w3.org/2003/01/geo/wgs84_pos#");
if (geoNS==null) geoNS = "geo";
String pubDate = null;
String dcDate = null;
String updated = null;
String description = null;
String subtitle = null;
String summary = null;
String lat = null;
String lon = null;
java.util.ArrayList mediaNodes = new java.util.ArrayList();
NodeList nodeList = item.getChildNodes();
for (int i=0; i0){
try{ link = new java.net.URL(url); }
catch(Exception e){}
}
}
//Parse FeedBurner Link
else if(nodeName.equals("feedburner:origLink")){
if (nodeValue!=null){
try{ origLink = new java.net.URL(nodeValue); }
catch(Exception e){}
}
}
//Enclosure (e.g. TASS News agency)
else if (nodeName.equals("enclosure")){
addMedia(new Media(node));
}
else if (nodeName.equals("category")){
category = nodeValue;
}
else if(Location.isLocationNode(nodeName, namespaces)){
location = new Location(node, namespaces);
}
else if (nodeName.equals("lat") || nodeName.equals(geoNS + ":lat")){
lat = nodeValue;
}
else if (nodeName.equals("long") || nodeName.equals(geoNS + ":long")){
lon = nodeValue;
}
else{
if (nodeName.startsWith(mediaNS + ":")){
mediaNodes.add(node);
}
}
}
}
//Set date
String date = pubDate;
if (date==null || date.length()==0) date = dcDate;
if (date==null || date.length()==0) date = updated;
if (date!=null && date.length()>0){
try{
this.date = Parser.getDate(date);
}
catch(java.text.ParseException e){
}
}
//Set description
String desc = description;
if (desc==null || desc.length()==0) desc = subtitle;
if (desc==null || desc.length()==0) desc = summary;
this.description = desc;
//Parse media nodes
if (!mediaNodes.isEmpty()){
//Check if there are any content nodes and if those nodes have children (e.g. The Guardian News Feed)
for (Node mediaNode : mediaNodes){
String nodeName = mediaNode.getNodeName().toLowerCase();
if (nodeName.equals(mediaNS + ":content")){
NodeList nodes = mediaNode.getChildNodes();
for (int i=0; i info = new java.util.HashMap();
String title = getTitle();
if (title!=null){
title = title.trim();
if (title.length()>0) info.put("title", title);
}
String desc = getDescription();
if (desc!=null){
desc = desc.trim();
if (desc.length()>0) info.put("description", desc);
}
if (link!=null) info.put("link", link);
if (date!=null) info.put("pubDate", date);
if (!info.isEmpty()){
str.append(" - \n");
java.util.Iterator it = info.keySet().iterator();
while (it.hasNext()){
String key = it.next();
Object val = info.get(key);
str.append(" <" + key + ">");
if (val instanceof String){
str.append("");
}
else if (val instanceof java.util.Date){
String d = Feed.formatDate((java.util.Date) val);
str.append(d);
}
else{
str.append(val);
}
str.append("\n");
}
str.append("
\n");
}
return str.toString();
}
}