import components.simplereader.SimpleReader;
import components.simplereader.SimpleReader1L;
import components.simplewriter.SimpleWriter;
import components.simplewriter.SimpleWriter1L;
import components.xmltree.XMLTree;
import components.xmltree.XMLTree1;
/**
* Program to convert an XML RSS (version 2.0) feed from a given URL into the
* corresponding HTML output file.
*
* @author Put your name here
*
*/
public final class RSSReader {
/**
* Private constructor so this utility class cannot be instantiated.
*/
private RSSReader() {
}
/**
* Outputs the "opening" tags in the generated HTML file. These are the
* expected elements generated by this method:
*
*
*
* the channel tag title as the page title
*
*
* the page title inside a link to the link
* the channel description
*
*
* Date |
* Source |
* News |
*
*
* @param channel
* the channel element XMLTree
* @param out
* the output stream
* @updates out.content
* @requires [the root of channel is a tag] and out.is_open
* @ensures out.content = #out.content * [the HTML "opening" tags]
*/
private static void outputHeader(XMLTree channel, SimpleWriter out) {
assert channel != null : "Violation of: channel is not null";
assert out != null : "Violation of: out is not null";
assert channel.isTag() && channel.label().equals("channel") : ""
+ "Violation of: the label root of channel is a tag";
assert out.isOpen() : "Violation of: out.is_open";
/*
* TODO: fill in body
*/
}
/**
* Outputs the "closing" tags in the generated HTML file. These are the
* expected elements generated by this method:
*
*
*
*
*
* @param out
* the output stream
* @updates out.contents
* @requires out.is_open
* @ensures out.content = #out.content * [the HTML "closing" tags]
*/
private static void outputFooter(SimpleWriter out) {
assert out != null : "Violation of: out is not null";
assert out.isOpen() : "Violation of: out.is_open";
/*
* TODO: fill in body
*/
}
/**
* Finds the first occurrence of the given tag among the children of the
* given {@code XMLTree} and return its index; returns -1 if not found.
*
* @param xml
* the {@code XMLTree} to search
* @param tag
* the tag to look for
* @return the index of the first child of type tag of the {@code XMLTree}
* or -1 if not found
* @requires [the label of the root of xml is a tag]
* @ensures
* getChildElement =
* [the index of the first child of type tag of the {@code XMLTree} or
* -1 if not found]
*
*/
private static int getChildElement(XMLTree xml, String tag) {
assert xml != null : "Violation of: xml is not null";
assert tag != null : "Violation of: tag is not null";
assert xml.isTag() : "Violation of: the label root of xml is a tag";
/*
* TODO: fill in body
*/
}
/**
* Processes one news item and outputs one table row. The row contains three
* elements: the publication date, the source, and the title (or
* description) of the item.
*
* @param item
* the news item
* @param out
* the output stream
* @updates out.content
* @requires
* [the label of the root of item is an - tag] and out.is_open
* @ensures
* out.content = #out.content *
* [an HTML table row with publication date, source, and title of news item]
*
*/
private static void processItem(XMLTree item, SimpleWriter out) {
assert item != null : "Violation of: item is not null";
assert out != null : "Violation of: out is not null";
assert item.isTag() && item.label().equals("item") : ""
+ "Violation of: the label root of item is an - tag";
assert out.isOpen() : "Violation of: out.is_open";
/*
* TODO: fill in body
*/
}
/**
* Main method.
*
* @param args
* the command line arguments; unused here
*/
public static void main(String[] args) {
SimpleReader in = new SimpleReader1L();
SimpleWriter out = new SimpleWriter1L();
/*
* TODO: fill in body
*/
in.close();
out.close();
}
}