package com.gapp.gvoa.parser;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import android.util.Log;
import com.gapp.gvoa.datatype.RssFeed;
import com.gapp.gvoa.datatype.RssItem;
public class FeedParser extends DefaultHandler {
public static final String tag = "FeedParser";
enum ParseType{
E_FEED,
E_ITEM
}
private RssFeed rssFeed = null;
private RssItem currentRssItem = null;
private StringBuilder builder = null;
private String elementName = "";
private ParseType parseType;
public FeedParser(RssFeed rssFeed2) {
rssFeed = rssFeed2;
}
public RssFeed getRssFeed(){
return rssFeed;
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
elementName = qName;
Log.i(tag, "startElement "+elementName);
if(elementName.equalsIgnoreCase("channel")){
parseType = ParseType.E_FEED;
}
else if(elementName.equalsIgnoreCase("item")){
parseType = ParseType.E_ITEM;
currentRssItem = new RssItem();
}
builder = new StringBuilder();
super.startElement(uri, localName, qName, attributes);
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
if(builder != null)
{
builder.append(ch,start,length);
}
super.characters(ch, start, length);
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
elementName = qName;
if(elementName.equalsIgnoreCase("item")){
Log.i(tag, "add Item"+currentRssItem);
parseType = ParseType.E_FEED;
currentRssItem.setFeedID(rssFeed.getId());
rssFeed.addItem(currentRssItem);
currentRssItem = null;
}
String value = null;
if(null!= builder)
{
value = builder.toString();
}
Log.i(tag, "end Element "+elementName+" with "+value );
if(elementName.equalsIgnoreCase("pubDate")){
if(ParseType.E_ITEM == parseType){
currentRssItem.setPubDate(value);
}
else if(ParseType.E_FEED == parseType)
{
//
}
}
else if(elementName.equalsIgnoreCase("title")){
if(ParseType.E_ITEM == parseType){
currentRssItem.setTitle(value);
}
}
else if(elementName.equalsIgnoreCase("link")){
if(ParseType.E_ITEM == parseType){
currentRssItem.setLink(value);
}
}
else if(elementName.equalsIgnoreCase("description")){
if(ParseType.E_ITEM == parseType){
currentRssItem.setDescription(value);
}
}
super.endElement(uri, localName, qName);
}
}