Step 1: The Grant Model : RSSTest
package rss.grantmodel;public class RSSTest
{
String title;
String description;
String link;
String researcher;
String guid;
String grant;
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
public String getGrant(){ return grant;}
public void setGrant(String grant){this.grant=grant;}
public String getDescription() { return description; }
public void setDescription(String description) { this.description = description; }
public String getLink() { return link; }
public void setLink(String link) { this.link = link; }
public String getResearcher() { return researcher; }
public void setResearcher(String researcher) { this.researcher = researcher; }
public String getGuid() { return guid; }
public void setGuid(String guid) { this.guid = guid; }
}
Step 2: RSSFeedItem
package rss.grantmodel;
import java.util.ArrayList;
import java.util.List;
public class RSSFeedItem{
List
String channel;
String title;
String link;
String description;
String language;
String copyright;
String pubDate;
public List
return entries; }
public void setEntries(List
{ this.entries = entries; }
public String getTitle()
{ return title; }
public void setTitle(String title)
{ this.title = title; }
public String getLink()
{ return link; }
public void setLink(String link)
{ this.link = link; }
public String getDescription()
{ return description; }
public void setDescription(String description)
{ this.description = description; }
public String getLanguage()
{ return language; }
public void setLanguage(String language)
{ this.language = language; }
public String getCopyright() { return copyright; }
public void setCopyright(String copyright) { this.copyright = copyright; }
public String getPubDate() { return pubDate; }
public void setPubDate(String pubDate) { this.pubDate = pubDate; }
Step 3: Create the XML Writer
package rss.writefeed;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import javax.xml.stream.XMLEventFactory;
import javax.xml.stream.XMLEventWriter;
import javax.xml.stream.XMLOutputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Characters;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartDocument;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
import rss.grantmodel.RSSTest;
import rss.grantmodel.RSSFeedItem;
public class RSSFeedWriter
{
private String outputFile;
private RSSTest rssfeed;
public void setFile(String configFile) { this.outputFile = configFile; }
public void setRssfeed(RSSTest rssfeed) { this.rssfeed = rssfeed; }
public void write() throws Exception {
// Create a XMLOutputFactory
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
// Create XMLEventWriter
XMLEventWriter eventWriter = outputFactory .createXMLEventWriter(new FileOutputStream(outputFile));
// Create a EventFactory XMLEventFactory
eventFactory = XMLEventFactory.newInstance();
XMLEvent end = eventFactory.createDTD("\n");
// Create and write Start Tag
StartDocument startDocument = eventFactory.createStartDocument();
eventWriter.add(startDocument);
// Create open tag
eventWriter.add(end);
StartElement rssStart = eventFactory.createStartElement("", "", "rss");
eventWriter.add(rssStart);
eventWriter.add(eventFactory.createAttribute("version", "2.0"));
eventWriter.add(end);
eventWriter.add(eventFactory.createStartElement("", "", "channel"));
eventWriter.add(end);
// Write the different nodes
createNode(eventWriter, "title", rssfeed.getTitle());
createNode(eventWriter, "link", rssfeed.getLink());
createNode(eventWriter, "description", rssfeed.getDescription());
createNode(eventWriter, "language", rssfeed.getLanguage());
createNode(eventWriter, "copyright", rssfeed.getCopyright());
createNode(eventWriter, "pubdate", rssfeed.getPubDate());
for (Iterator iterator = rssfeed.getEntries().iterator(); iterator .hasNext();)
{
RSSFeedItem entry = (RSSFeedItem) iterator.next();
eventWriter.add(eventFactory.createStartElement("", "", "item"));
eventWriter.add(end);
createNode(eventWriter, "title", entry.getTitle());
createNode(eventWriter, "description", entry.getDescription());
createNode(eventWriter, "link", entry.getLink());
createNode(eventWriter, "researcher", entry.getReseacher());
createNode(eventWriter, "guid", entry.getGuid());
eventWriter.add(end);
eventWriter.add(eventFactory.createEndElement("", "", "item"));
eventWriter.add(end); } eventWriter.add(end);
eventWriter.add(eventFactory.createEndElement("", "", "channel"));
eventWriter.add(end);
eventWriter.add(eventFactory.createEndElement("", "", "rss"));
eventWriter.add(end);
eventWriter.add(eventFactory.createEndDocument());
eventWriter.close(); }
private void createNode(XMLEventWriter eventWriter, String name, String value) throws XMLStreamException
{
XMLEventFactory eventFactory = XMLEventFactory.newInstance();
XMLEvent end = eventFactory.createDTD("\n");
XMLEvent tab = eventFactory.createDTD("\t");
// Create Start node
StartElement sElement = eventFactory.createStartElement("", "", name);
eventWriter.add(tab); eventWriter.add(sElement);
// Create Content Characters characters = eventFactory.createCharacters(value); eventWriter.add(characters);
// Create End node
EndElement eElement = eventFactory.createEndElement("", "", name);
eventWriter.add(eElement);
eventWriter.add(end); }}
Step 4: Test the Grant Model
package rss.main;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Iterator;
import java.util.Locale;
import rss.grantmodel.RSSTest;
import rss.grantmodel.RSSFeedItem;
import rss.writefeed.RSSFeedWriter;
public class Test {
public static void main(String[] args) {
// Create the rss feed
RSSTest rssFeedTest = new RSSTest();
// Add the information
rssFeedTest.setCopyright("Copyright by Jeff B. Cromwell");
rssFeedTest.setTitle("Grant Information");
rssFeedTest.setDescription("Grant Information");
rssFeedTest.setLanguage("en");
rssFeedTest.setLink(http://www.thecromwellworkshop.com/);
Calendar cal = new GregorianCalendar();
Date creationDate = cal.getTime();
SimpleDateFormat date_format = new SimpleDateFormat( "EEE', 'dd' 'MMM' 'yyyy' 'HH:mm:ss' 'Z", Locale.US);
rssFeedTest.setPubDate(date_format.format(creationDate));
//add one example item
RSSFeedItem feed = new RSSFeedItem();
feed.setTitle("RSSFeed");
feed.setDescription("This is a description");
feed.setAuthor(jbcromwell@thecromwellworkshop.com);
feed.setGuid("http://www.thecromwellworkshop.com/articles/RSSFeed/article.html");
feed.setLink("http://www.thecromwellworkshop.com/articles/RSSFeed/article.html");
rssFeedTest.getEntries().add(feed);
// Write the file
RSSFeedWriter writer = new RSSFeedWriter();
writer.setFile("articles.rss");
writer.setRssfeed(rssFeedTest);
try { writer.write(); }
catch (Exception e) { // e.printStackTrace(); } }
}
This can be easily extended to a servlet for the main method. This code enables us to generate a new RSS feed based on some categorical combination of funding sources. In Part 2, we will look at reading individual RSS feeds from different funding sources.
No comments:
Post a Comment