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.catalogtitles.*; // Start of user code CatalogTitlesParser 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 CatalogTitlesParser extends DefaultHandler implements GenericHandler { private static final String TAG = CatalogTitlesParser.class.getSimpleName(); public static final int UNKNOWN = -1; //CatalogTitles private static final int H1 = 43; private static final int CATALOG_TITLES = 44; private static final int CATALOG_TITLES_NUMBER_OF_RESULTS = 45; private static final int CATALOG_TITLES_START_INDEX = 46; private static final int CATALOG_TITLES_RESULTS_PER_PAGE = 47; private static final int CATALOG_TITLES_CATALOG_TITLE = 48; private static final int CATALOG_TITLES_CATALOG_TITLE_ID = 49; private static final int CATALOG_TITLES_CATALOG_TITLE_TITLE = 50; private static final int CATALOG_TITLES_CATALOG_TITLE_BOX_ART = 51; private static final int CATALOG_TITLES_CATALOG_TITLE_RELEASE_YEAR = 52; private static final int CATALOG_TITLES_CATALOG_TITLE_CATEGORY = 53; private static final int CATALOG_TITLES_CATALOG_TITLE_LINK = 54; private static final int CATALOG_TITLES_CATALOG_TITLE_RUNTIME = 55; private static final int CATALOG_TITLES_CATALOG_TITLE_AVERAGE_RATING = 56; private int mState = UNKNOWN; private final StringBuilder mBuilder = new StringBuilder(); private CatalogTitles catalogTitles; private CatalogTitle catalogTitle; private CatalogTitleCategory catalogTitleCategory; private CatalogTitleLink catalogTitleLink; public CatalogTitlesParser() { catalogTitles = new CatalogTitles(); catalogTitles.catalogTitle = new ArrayList<CatalogTitle>(); } @Override public ResponseBusinessObject getParsedData() { return catalogTitles; } @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("h1")) { mState = H1; } else if (qName.equals("catalog_titles")) { mState = CATALOG_TITLES; } break; case CATALOG_TITLES: if (qName.equals("number_of_results")) { mState = CATALOG_TITLES_NUMBER_OF_RESULTS; } else if (qName.equals("start_index")) { mState = CATALOG_TITLES_START_INDEX; } else if (qName.equals("results_per_page")) { mState = CATALOG_TITLES_RESULTS_PER_PAGE; } else if (qName.equals("catalog_title")) { mState = CATALOG_TITLES_CATALOG_TITLE; catalogTitle = new CatalogTitle(); catalogTitle.catalogTitleCategory = new ArrayList<CatalogTitleCategory>(); catalogTitle.catalogTitleLink = new ArrayList<CatalogTitleLink>(); } break; case CATALOG_TITLES_CATALOG_TITLE: if (qName.equals("id")) { mState = CATALOG_TITLES_CATALOG_TITLE_ID; } else if (qName.equals("title")) { mState = CATALOG_TITLES_CATALOG_TITLE_TITLE; catalogTitle.attrTitleShort = attributes.getValue("short"); catalogTitle.attrTitleRegular = attributes.getValue("regular"); } else if (qName.equals("box_art")) { mState = CATALOG_TITLES_CATALOG_TITLE_BOX_ART; catalogTitle.attrBox_artSmall = attributes.getValue("small"); catalogTitle.attrBox_artMedium = attributes.getValue("medium"); catalogTitle.attrBox_artLarge = attributes.getValue("large"); } else if (qName.equals("release_year")) { mState = CATALOG_TITLES_CATALOG_TITLE_RELEASE_YEAR; } else if (qName.equals("category")) { mState = CATALOG_TITLES_CATALOG_TITLE_CATEGORY; catalogTitleCategory = new CatalogTitleCategory(); catalogTitleCategory.attrLabel = attributes.getValue("label"); catalogTitleCategory.attrTerm = attributes.getValue("term"); } else if (qName.equals("link")) { mState = CATALOG_TITLES_CATALOG_TITLE_LINK; catalogTitleLink = new CatalogTitleLink(); catalogTitleLink.attrHref = attributes.getValue("href"); catalogTitleLink.attrRel = attributes.getValue("rel"); catalogTitleLink.attrTitle = attributes.getValue("title"); } else if (qName.equals("runtime")) { mState = CATALOG_TITLES_CATALOG_TITLE_RUNTIME; } else if (qName.equals("average_rating")) { mState = CATALOG_TITLES_CATALOG_TITLE_AVERAGE_RATING; } 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 H1: if (qName.equals("h1")) { mState = UNKNOWN; catalogTitles.error = mBuilder.toString(); } break; case CATALOG_TITLES: if (qName.equals("catalog_titles")) { mState = UNKNOWN; } break; case CATALOG_TITLES_NUMBER_OF_RESULTS: if (qName.equals("number_of_results")) { mState = CATALOG_TITLES; catalogTitles.number_of_results = Integer.parseInt(mBuilder.toString()); } break; case CATALOG_TITLES_START_INDEX: if (qName.equals("start_index")) { mState = CATALOG_TITLES; catalogTitles.start_index = Integer.parseInt(mBuilder.toString()); } break; case CATALOG_TITLES_RESULTS_PER_PAGE: if (qName.equals("results_per_page")) { mState = CATALOG_TITLES; catalogTitles.results_per_page = Integer.parseInt(mBuilder.toString()); } break; case CATALOG_TITLES_CATALOG_TITLE: if (qName.equals("catalog_title")) { mState = CATALOG_TITLES; catalogTitles.catalogTitle.add(catalogTitle); } break; case CATALOG_TITLES_CATALOG_TITLE_ID: if (qName.equals("id")) { mState = CATALOG_TITLES_CATALOG_TITLE; catalogTitle.id = mBuilder.toString(); } break; case CATALOG_TITLES_CATALOG_TITLE_TITLE: if (qName.equals("title")) { mState = CATALOG_TITLES_CATALOG_TITLE; catalogTitle.title = mBuilder.toString(); } break; case CATALOG_TITLES_CATALOG_TITLE_BOX_ART: if (qName.equals("box_art")) { mState = CATALOG_TITLES_CATALOG_TITLE; catalogTitle.box_art = mBuilder.toString(); } break; case CATALOG_TITLES_CATALOG_TITLE_RELEASE_YEAR: if (qName.equals("release_year")) { mState = CATALOG_TITLES_CATALOG_TITLE; catalogTitle.release_year = Integer.parseInt(mBuilder.toString()); } break; case CATALOG_TITLES_CATALOG_TITLE_CATEGORY: if (qName.equals("category")) { mState = CATALOG_TITLES_CATALOG_TITLE; catalogTitle.catalogTitleCategory.add(catalogTitleCategory); } break; case CATALOG_TITLES_CATALOG_TITLE_LINK: if (qName.equals("link")) { mState = CATALOG_TITLES_CATALOG_TITLE; catalogTitle.catalogTitleLink.add(catalogTitleLink); } break; case CATALOG_TITLES_CATALOG_TITLE_RUNTIME: if (qName.equals("runtime")) { mState = CATALOG_TITLES_CATALOG_TITLE; catalogTitle.runtime = Integer.parseInt(mBuilder.toString()); } break; case CATALOG_TITLES_CATALOG_TITLE_AVERAGE_RATING: if (qName.equals("average_rating")) { mState = CATALOG_TITLES_CATALOG_TITLE; catalogTitle.average_rating = Float.parseFloat(mBuilder.toString()); } break; default: // do nothing break; } } @Override public void parse(final Object content) { // TODO Auto-generated method stub } // Start of user code CatalogTitlesParser // You can add here your personal content // DO NOT MODIFY THE GENERATED COMMENTS "Start of user code" and "End of user code }