libreccm-legacy/ccm-rssfeed/src/com/arsdigita/rssfeed/RSSRenderer.java

176 lines
6.1 KiB
Java
Executable File

/*
* Copyright (C) 2001-2004 Red Hat Inc. All Rights Reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.arsdigita.rssfeed;
import com.arsdigita.xml.Element;
import com.arsdigita.util.UncheckedWrapperException;
/**
* Highly experimental. This API will definitely
* change, possibly beyond all recognition.
*/
public class RSSRenderer {
public final static org.jdom.Namespace s_rdfNS = org.jdom.Namespace.getNamespace
( "rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#" );
public final static org.jdom.Namespace s_rssNS = org.jdom.Namespace.getNamespace
( "http://purl.org/rss/1.0/" );
/**
*
* @param channel
* @return
*/
public static org.jdom.Element generateJDOM(RSSChannel channel) {
// rdf is the root element
org.jdom.Element rdfEl = new org.jdom.Element( "RDF", "rdf", s_rdfNS.getURI() );
rdfEl.addNamespaceDeclaration( s_rssNS );
// Channel info
org.jdom.Element channelEl = new org.jdom.Element( "channel", s_rssNS );
channelEl.setAttribute( "about", channel.getLink(), s_rdfNS );
rdfEl.addContent( channelEl );
org.jdom.Element channelTitleEl = new org.jdom.Element( "title", s_rssNS );
channelTitleEl.setText( channel.getTitle() );
channelEl.addContent( channelTitleEl );
org.jdom.Element channelLinkEl = new org.jdom.Element( "link", s_rssNS );
channelLinkEl.setText( channel.getLink() );
channelEl.addContent( channelLinkEl );
org.jdom.Element channelDescriptionEl = new org.jdom.Element( "description", s_rssNS );
channelDescriptionEl.setText( channel.getDescription() );
channelEl.addContent( channelDescriptionEl );
org.jdom.Element channelItemsEl = new org.jdom.Element( "items", s_rssNS );
channelEl.addContent( channelItemsEl );
org.jdom.Element itemsSeqEl = new org.jdom.Element( "Seq", s_rdfNS );
channelItemsEl.addContent( itemsSeqEl );
RSSItemCollection items = channel.getItems();
while (items.next()) {
RSSItem item = items.getItem();
// Add the element to the channel list
org.jdom.Element seqEl = new org.jdom.Element( "li", s_rdfNS );
seqEl.setAttribute( "resource", item.getLink(), s_rdfNS );
itemsSeqEl.addContent( seqEl );
// Add the element to the top level
org.jdom.Element itemEl = new org.jdom.Element( "item", s_rssNS );
itemEl.setAttribute( "about", item.getLink(), s_rdfNS );
rdfEl.addContent( itemEl );
org.jdom.Element titleEl = new org.jdom.Element( "title", s_rssNS );
titleEl.setText( item.getTitle());
itemEl.addContent( titleEl );
org.jdom.Element linkEl = new org.jdom.Element( "link", s_rssNS );
linkEl.setText( item.getLink() );
itemEl.addContent( linkEl );
if (item.getDescription() != null) {
org.jdom.Element descEl = new org.jdom.Element( "description", s_rssNS );
descEl.setText( item.getDescription());
itemEl.addContent( descEl );
}
}
RSSImage image = channel.getImage();
if (image != null) {
// Add the element to the channel list
org.jdom.Element seqEl = new org.jdom.Element( "image", s_rdfNS );
seqEl.setAttribute( "resource", image.getURL(), s_rdfNS );
channelEl.addContent( seqEl );
// Add the element to the top level
org.jdom.Element imageEl = new org.jdom.Element( "image", s_rssNS );
imageEl.setAttribute( "about", image.getURL(), s_rdfNS );
rdfEl.addContent( imageEl );
org.jdom.Element titleEl = new org.jdom.Element( "title", s_rssNS );
titleEl.setText( image.getTitle());
imageEl.addContent( titleEl );
org.jdom.Element linkEl = new org.jdom.Element( "link", s_rssNS );
linkEl.setText( image.getLink() );
imageEl.addContent( linkEl );
org.jdom.Element urlEl = new org.jdom.Element( "url", s_rssNS );
urlEl.setText( image.getURL());
imageEl.addContent( urlEl );
}
return rdfEl;
}
/**
*
* @param channel
* @return
*/
public static org.w3c.dom.Element generateDOM(RSSChannel channel) {
org.jdom.Element jdomContent = RSSRenderer.generateJDOM(channel);
org.jdom.output.DOMOutputter convertor = new org.jdom.output.DOMOutputter();
org.w3c.dom.Element domContent = null;
try {
domContent = convertor.output(jdomContent);
} catch (org.jdom.JDOMException e) {
throw new UncheckedWrapperException(
"cannot convert JDOM element to DOM", e
);
}
return domContent;
}
/**
*
* @param channel
* @return
*/
public static Element generateXML(RSSChannel channel) {
org.w3c.dom.Element domContent = generateDOM(channel);
return new WrapperElement(domContent);
}
/**
*
*/
private static class WrapperElement extends Element {
/**
*
* @param element
*/
public WrapperElement(org.w3c.dom.Element element) {
m_element = element;
}
}
}