package org.droidplanner.android.view.checklist.xml; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import java.io.StringReader; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; import android.content.Context; import android.content.res.XmlResourceParser; import android.os.Environment; public abstract class ListXmlParser { public interface OnXmlParserError { void onError(); } protected OnXmlParserError errorListener; protected XmlPullParser _xpp; public void setOnXMLParserError(OnXmlParserError listener) { this.errorListener = listener; } public ListXmlParser() { } public ListXmlParser(Context context, int resourceId) { getListItemsFromResource(context, resourceId); } public ListXmlParser(String ioFile) throws FileNotFoundException, XmlPullParserException { getListItemsFromFile(ioFile); } public void getListItemsFromFile(String ioFile) throws FileNotFoundException, XmlPullParserException { ioFile = Environment.getExternalStorageDirectory() + "/DroidPlanner/Checklists/" + ioFile; File file = new File(ioFile); FileInputStream fis = new FileInputStream(file); XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); _xpp = factory.newPullParser(); _xpp.setInput(new InputStreamReader(fis)); do_parse(_xpp); } public void getListItemsFromResource(Context context, int resourceId) { XmlResourceParser is = context.getResources().getXml(resourceId); parse(is); } public void parse(String xmlStr) throws XmlPullParserException, IOException { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); _xpp = factory.newPullParser(); _xpp.setInput(new StringReader(xmlStr)); do_parse(_xpp); } public void parse(XmlResourceParser xmlpp) { _xpp = xmlpp; do_parse(_xpp); } public void next() { if (_xpp != null) try { _xpp.next(); } catch (XmlPullParserException e) { if (errorListener != null) errorListener.onError(); e.printStackTrace(); } catch (IOException e) { if (errorListener != null) errorListener.onError(); e.printStackTrace(); } } public int getDepth() { if (_xpp != null) return _xpp.getDepth(); return -1; } private void do_parse(XmlPullParser _xpp) { int eventType = 0; try { eventType = _xpp.getEventType(); } catch (XmlPullParserException e) { if (errorListener != null) errorListener.onError(); e.printStackTrace(); } while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == XmlPullParser.START_DOCUMENT) { process_StartDocument(); } else if (eventType == XmlPullParser.END_DOCUMENT) { process_EndDocument(); } else if (eventType == XmlPullParser.START_TAG) { process_StartTag(_xpp); } else if (eventType == XmlPullParser.END_TAG) { process_EndTag(); } else if (eventType == XmlPullParser.TEXT) { process_Text(); } try { eventType = _xpp.next(); } catch (XmlPullParserException e) { if (errorListener != null) errorListener.onError(); e.printStackTrace(); } catch (IOException e) { if (errorListener != null) errorListener.onError(); e.printStackTrace(); } } } public abstract void process_StartDocument(); public abstract void process_EndDocument(); public abstract void process_StartTag(XmlPullParser xpp); public abstract void process_EndTag(); public abstract void process_Text(); }