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.directors.*; // Start of user code DirectorsParser 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 DirectorsParser extends DefaultHandler implements GenericHandler { private static final String TAG = DirectorsParser.class.getSimpleName(); public static final int UNKNOWN = -1; //Directors private static final int H1 = 98; private static final int PEOPLE = 99; private static final int PEOPLE_PERSON = 100; private static final int PEOPLE_PERSON_ID = 101; private static final int PEOPLE_PERSON_NAME = 102; private static final int PEOPLE_PERSON_BIO = 103; private static final int PEOPLE_PERSON_LINK = 104; private int mState = UNKNOWN; private final StringBuilder mBuilder = new StringBuilder(); private Directors directors; private Director director; private DirectorLink directorLink; public DirectorsParser() { directors = new Directors(); directors.director = new ArrayList<Director>(); } @Override public ResponseBusinessObject getParsedData() { return directors; } @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("people")) { mState = PEOPLE; } break; case PEOPLE: if (qName.equals("person")) { mState = PEOPLE_PERSON; director = new Director(); director.directorLink = new ArrayList<DirectorLink>(); } break; case PEOPLE_PERSON: if (qName.equals("id")) { mState = PEOPLE_PERSON_ID; } else if (qName.equals("name")) { mState = PEOPLE_PERSON_NAME; } else if (qName.equals("bio")) { mState = PEOPLE_PERSON_BIO; } else if (qName.equals("link")) { mState = PEOPLE_PERSON_LINK; directorLink = new DirectorLink(); directorLink.attrHref = attributes.getValue("href"); directorLink.attrRel = attributes.getValue("rel"); directorLink.attrTitle = attributes.getValue("title"); } 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; directors.error = mBuilder.toString(); } break; case PEOPLE: if (qName.equals("people")) { mState = UNKNOWN; } break; case PEOPLE_PERSON: if (qName.equals("person")) { mState = PEOPLE; directors.director.add(director); } break; case PEOPLE_PERSON_ID: if (qName.equals("id")) { mState = PEOPLE_PERSON; director.id = mBuilder.toString(); } break; case PEOPLE_PERSON_NAME: if (qName.equals("name")) { mState = PEOPLE_PERSON; director.name = mBuilder.toString(); } break; case PEOPLE_PERSON_BIO: if (qName.equals("bio")) { mState = PEOPLE_PERSON; director.bio = mBuilder.toString(); } break; case PEOPLE_PERSON_LINK: if (qName.equals("link")) { mState = PEOPLE_PERSON; director.directorLink.add(directorLink); } break; default: // do nothing break; } } @Override public void parse(final Object content) { // TODO Auto-generated method stub } // Start of user code DirectorsParser // You can add here your personal content // DO NOT MODIFY THE GENERATED COMMENTS "Start of user code" and "End of user code }