package ilarkesto.rss;
import ilarkesto.base.Utl;
import ilarkesto.base.time.DateAndTime;
import ilarkesto.xml.JDom;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
public class Rss20Builder {
private String title;
private String link;
private String description;
private String language;
private DateAndTime pubDate;
private String image;
private List<Item> items = new ArrayList<Item>();
public Rss20Builder sortItems() {
Collections.sort(items);
return this;
}
public void setLink(String link) {
this.link = link;
}
public void setTitle(String title) {
this.title = title;
}
public void setLanguage(String language) {
this.language = language;
}
public void setImage(String image) {
this.image = image;
}
public Item addItem() {
Item item = new Item();
items.add(item);
return item;
}
public Document createXmlDocument() {
Document doc = new Document();
Element eRss = new Element("rss");
doc.setRootElement(eRss);
eRss.setAttribute("version", "2.0");
Element eChannel = JDom.addElement(eRss, "channel");
if (title != null) JDom.addTextElement(eChannel, "title", title);
if (link != null) JDom.addTextElement(eChannel, "link", link);
if (description != null) JDom.addTextElement(eChannel, "description", description);
if (language != null) JDom.addTextElement(eChannel, "language", language);
if (pubDate != null) JDom.addTextElement(eChannel, "pubDate", pubDate.toString(DateAndTime.FORMAT_RFC822));
if (image != null) {
Element eImage = JDom.addElement(eChannel, "image");
JDom.addTextElement(eImage, "url", image);
JDom.addTextElement(eImage, "title", "Logo");
}
for (Item item : items) {
Element eItem = JDom.addElement(eChannel, "item");
item.appendTo(eItem);
}
return doc;
}
public void removeDuplicates(Item item) {
for (Item i : new ArrayList<Item>(items)) {
if (i == item) continue;
if (Utl.equals(i.guid, item.guid) || (i.enclosure != null && Utl.equals(i.enclosure, item.enclosure))
|| Utl.equals(i.title, item.title)) {
items.remove(item);
}
}
}
public void write(OutputStream out, String encoding) {
JDom.write(createXmlDocument(), out, encoding);
}
@Override
public String toString() {
return createXmlDocument().toString();
}
public class Item implements Comparable<Item> {
private String title;
private String description;
private String link;
private String guid;
private DateAndTime pubDate;
private String enclosure;
private void appendTo(Element eItem) {
if (title != null) JDom.addTextElement(eItem, "title", title);
if (description != null) JDom.addTextElement(eItem, "description", description);
if (link != null) JDom.addTextElement(eItem, "link", link);
if (guid != null) JDom.addTextElement(eItem, "guid", guid);
if (pubDate != null) JDom.addTextElement(eItem, "pubDate", pubDate.toString(DateAndTime.FORMAT_RFC822));
if (enclosure != null) {
Element eEnclosure = JDom.addElement(eItem, "enclosure");
eEnclosure.setAttribute("url", enclosure);
}
}
public void setLink(String link) {
this.link = link;
}
public void setDescription(String description) {
this.description = description;
}
public void setTitle(String title) {
this.title = title;
}
public void setGuid(String guid) {
this.guid = guid;
}
public void setPubDate(DateAndTime pubDate) {
this.pubDate = pubDate;
}
public void setEnclosure(String enclosure) {
this.enclosure = enclosure;
}
@Override
public int compareTo(Item o) {
return o.pubDate.compareTo(pubDate);
}
}
}