package fr.eyal.datalib.sample.netflix.data.parser;
import java.util.ArrayList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import fr.eyal.lib.data.model.ResponseBusinessObject;
import fr.eyal.lib.data.parser.GenericHandler;
import fr.eyal.datalib.sample.netflix.data.model.newreleases.*;
// Start of user code NewReleasesParser imports
// You can add here your personal imports
// DO NOT MODIFY THE GENERATED COMMENTS "Start of user code" and "End of user code
public class NewReleasesParser extends DefaultHandler implements GenericHandler {
private static final String TAG = NewReleasesParser.class.getSimpleName();
public static final int UNKNOWN = -1;
//NewReleases
private static final int RSS = 1;
private static final int RSS_CHANNEL = 2;
private static final int RSS_CHANNEL_TITLE = 3;
private static final int RSS_CHANNEL_TTL = 4;
private static final int RSS_CHANNEL_LINK = 5;
private static final int RSS_CHANNEL_DESCRIPTION = 6;
private static final int RSS_CHANNEL_LANGUAGE = 7;
private static final int RSS_CHANNEL_ITEM = 8;
private static final int RSS_CHANNEL_ITEM_TITLE = 9;
private static final int RSS_CHANNEL_ITEM_LINK = 10;
private static final int RSS_CHANNEL_ITEM_DESCRIPTION = 11;
private int mState = UNKNOWN;
private final StringBuilder mBuilder = new StringBuilder();
private NewReleases newReleases;
private ItemNewRelease itemNewRelease;
public NewReleasesParser() {
newReleases = new NewReleases();
newReleases.itemNewRelease = new ArrayList<ItemNewRelease>();
}
@Override
public ResponseBusinessObject getParsedData() {
return newReleases;
}
@Override
public void startElement(final String uri, final String localName, final String qName, final Attributes attributes) throws SAXException {
mBuilder.setLength(0);
switch (mState) {
case UNKNOWN:
if (qName.equals("rss")) {
mState = RSS;
}
break;
case RSS:
if (qName.equals("channel")) {
mState = RSS_CHANNEL;
}
break;
case RSS_CHANNEL:
if (qName.equals("title")) {
mState = RSS_CHANNEL_TITLE;
}
else if (qName.equals("ttl")) {
mState = RSS_CHANNEL_TTL;
}
else if (qName.equals("link")) {
mState = RSS_CHANNEL_LINK;
}
else if (qName.equals("description")) {
mState = RSS_CHANNEL_DESCRIPTION;
}
else if (qName.equals("language")) {
mState = RSS_CHANNEL_LANGUAGE;
}
else if (qName.equals("item")) {
mState = RSS_CHANNEL_ITEM;
itemNewRelease = new ItemNewRelease();
}
break;
case RSS_CHANNEL_ITEM:
if (qName.equals("title")) {
mState = RSS_CHANNEL_ITEM_TITLE;
}
else if (qName.equals("link")) {
mState = RSS_CHANNEL_ITEM_LINK;
}
else if (qName.equals("description")) {
mState = RSS_CHANNEL_ITEM_DESCRIPTION;
}
break;
default:
// do nothing
break;
}
}
@Override
public void characters(final char[] ch, final int start, final int length) throws SAXException {
mBuilder.append(ch, start, length);
}
@Override
public void endElement(final String uri, final String localName, final String qName) throws SAXException {
switch (mState) {
case RSS:
if (qName.equals("rss")) {
mState = UNKNOWN;
}
break;
case RSS_CHANNEL:
if (qName.equals("channel")) {
mState = RSS;
}
break;
case RSS_CHANNEL_TITLE:
if (qName.equals("title")) {
mState = RSS_CHANNEL;
newReleases.title = mBuilder.toString();
}
break;
case RSS_CHANNEL_TTL:
if (qName.equals("ttl")) {
mState = RSS_CHANNEL;
newReleases.ttl = Integer.parseInt(mBuilder.toString());
}
break;
case RSS_CHANNEL_LINK:
if (qName.equals("link")) {
mState = RSS_CHANNEL;
newReleases.link = mBuilder.toString();
}
break;
case RSS_CHANNEL_DESCRIPTION:
if (qName.equals("description")) {
mState = RSS_CHANNEL;
newReleases.description = mBuilder.toString();
}
break;
case RSS_CHANNEL_LANGUAGE:
if (qName.equals("language")) {
mState = RSS_CHANNEL;
newReleases.language = mBuilder.toString();
}
break;
case RSS_CHANNEL_ITEM:
if (qName.equals("item")) {
mState = RSS_CHANNEL;
newReleases.itemNewRelease.add(itemNewRelease);
}
break;
case RSS_CHANNEL_ITEM_TITLE:
if (qName.equals("title")) {
mState = RSS_CHANNEL_ITEM;
itemNewRelease.title = mBuilder.toString();
}
break;
case RSS_CHANNEL_ITEM_LINK:
if (qName.equals("link")) {
mState = RSS_CHANNEL_ITEM;
itemNewRelease.link = mBuilder.toString();
}
break;
case RSS_CHANNEL_ITEM_DESCRIPTION:
if (qName.equals("description")) {
mState = RSS_CHANNEL_ITEM;
itemNewRelease.description = mBuilder.toString();
}
break;
default:
// do nothing
break;
}
}
@Override
public void parse(final Object content) {
// TODO Auto-generated method stub
}
// Start of user code NewReleasesParser
// You can add here your personal content
// DO NOT MODIFY THE GENERATED COMMENTS "Start of user code" and "End of user code
}