package org.ripple.power.news;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;
public class RssHandler extends DefaultHandler {
private static final String RSS_ITEM = "item";
private final RssFeed mRssFeed = new RssFeed();
private RssItem mRssItem;
private StringBuilder mStringBuilder;
private boolean mHasSetter;
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) {
mHasSetter = ElementSetter.contains(qName);
if (!mHasSetter) {
if (RSS_ITEM.equals(qName)) {
mRssItem = new RssItem();
}
} else if (ElementSetter.containsInAttributes(qName)) {
ElementSetter.setAttributes(qName, (mRssItem == null ? mRssFeed
: mRssItem), attributes);
} else {
mStringBuilder = new StringBuilder();
}
}
@Override
public void endElement(String uri, String localName, String qName) {
if (isBuffering()) {
ElementSetter.setContent(qName, (mRssItem == null ? mRssFeed
: mRssItem), mStringBuilder.toString());
mStringBuilder = null;
} else if (RSS_ITEM.equals(qName)) {
mRssFeed.addRssItem(mRssItem);
mRssItem = null;
}
}
@Override
public void characters(char ch[], int start, int length) {
if (isBuffering()) {
mStringBuilder.append(ch, start, length);
}
}
boolean isBuffering() {
return mStringBuilder != null && mHasSetter;
}
RssFeed getRssFeed() {
return mRssFeed;
}
}