}
// create XML outputter with indent: 2 spaces, print new lines.
Format format = Format.getPrettyFormat();
format.setEncoding(encoding);
XMLOutputter outputter = new XMLOutputter(format);
Namespace defNs = Namespace.getNamespace(NS_DEFAULT);
Namespace rdfNs = Namespace.getNamespace("rdf", NS_RDF);
Namespace dcNs = Namespace.getNamespace("dc", NS_DC);
Namespace syNs = Namespace.getNamespace("sy", NS_SY);
// ----
Element rootElem = new Element("RDF", rdfNs);
rootElem.addNamespaceDeclaration(defNs);
rootElem.addNamespaceDeclaration(dcNs);
rootElem.addNamespaceDeclaration(syNs);
// rootElem.setAttribute("version");
Element channelElem = new Element("channel", defNs);
if (channel.getLocation() != null) {
channelElem.setAttribute("about",
channel.getLocation().toString(), rdfNs);
}
channelElem.addContent(new Element("title", defNs)
.setText(channel.getTitle()));
if (channel.getSite() != null) {
channelElem.addContent(new Element("link", defNs)
.setText(channel.getSite().toString()));
channelElem.addContent(new Element("source", dcNs)
.setAttribute("resource",
channel.getSite().toString()));
}
channelElem.addContent(new Element("description", defNs)
.setText(channel.getDescription()));
if (channel.getLanguage() != null) {
channelElem.addContent(new Element("language", dcNs)
.setText(channel.getLanguage()));
}
if (channel.getCopyright() != null) {
channelElem.addContent(new Element("copyright", dcNs)
.setText(channel.getCopyright()));
}
if (channel.getUpdateBase() != null) {
channelElem.addContent(new Element("updateBase", syNs)
.setText(df.format(channel.getUpdateBase())));
}
if (channel.getUpdatePeriod() != null) {
// don't put out frequency without specifying period
channelElem.addContent(new Element("updateFrequency", syNs)
.setText((new Integer(channel.getUpdateFrequency())).toString()));
channelElem.addContent(new Element("updatePeriod", syNs)
.setText(channel.getUpdatePeriod().toString()));
}
// export channel image
if (channel.getImage() != null) {
Element imgElem = new Element("image", defNs);
imgElem.addContent(new Element("title", defNs)
.setText(channel.getImage().getTitle()));
imgElem.addContent(new Element("url", defNs)
.setText(channel.getImage().getLocation().toString()));
imgElem.addContent(new Element("link", defNs)
.setText(channel.getImage().getLink().toString()));
imgElem.addContent(new Element("height", defNs)
.setText("" + channel.getImage().getHeight()));
imgElem.addContent(new Element("width", defNs)
.setText("" + channel.getImage().getWidth()));
imgElem.addContent(new Element("description", defNs)
.setText(channel.getImage().getDescription()));
channelElem.addContent(imgElem);
}
// TODO: add exporting textinput field
// if (channel.getTextInput() != null) {
// channelElem.addContent(channel.getTextInput().getElement());
// }
// ===========================================
Element itemsElem = new Element("items", defNs);
Element seqElem = new Element("Seq", rdfNs);
Collection items = channel.getItems();
Iterator it = items.iterator();
while (it.hasNext()) {
ItemIF item = (ItemIF) it.next();
Element itemElem = new Element("li", rdfNs);
if (item.getLink() != null) {
itemElem.setAttribute("resource", item.getLink().toString());
}
seqElem.addContent(itemElem);
}
itemsElem.addContent(seqElem);
channelElem.addContent(itemsElem);
rootElem.addContent(channelElem);
// item-by-item en detail
items = channel.getItems();
it = items.iterator();
while (it.hasNext()) {
ItemIF item = (ItemIF) it.next();
Element itemElem = new Element("item", defNs);
if (item.getLink() != null) {
itemElem.setAttribute("about",
item.getLink().toString(), rdfNs);
}
itemElem.addContent(new Element("title", defNs).setText(item.getTitle()));
if (item.getLink() != null) {
itemElem.addContent(new Element("link", defNs)
.setText(item.getLink().toString()));
}
if (item.getDescription() != null) {
itemElem.addContent(new Element("description", dcNs)
.setText(item.getDescription()));
}
if (item.getDate() != null) {
itemElem.addContent(new Element("date", dcNs)
.setText(ParserUtils.formatDate(item.getDate())));
}
rootElem.addContent(itemElem);
}
// ---
Document doc = new Document(rootElem);
outputter.output(doc, writer);
// ---
writer.close();
}