package cm4mmupdater.featuredThemes; import cm4mmupdater.customTypes.FullThemeList; import cm4mmupdater.customTypes.ThemeList; import cm4mmupdater.misc.Constants; import cm4mmupdater.misc.Log; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import java.net.URI; class FeaturedThemesHandler extends DefaultHandler { private static final String TAG = "FeaturedThemesHandler"; private FullThemeList fullThemeList; private ThemeList currentTheme; private boolean error = false; public FullThemeList getParsedData() { return this.fullThemeList; } @Override public void startDocument() throws SAXException { this.fullThemeList = new FullThemeList(); } @Override public void endDocument() throws SAXException { // Nothing to do } /** * Gets be called on opening tags like: * <tag> * Can provide attribute(s), when xml was like: * <tag attribute="attributeValue"> */ public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException { if (localName.equalsIgnoreCase(Constants.FEATURED_THEMES_TAG)) { //New Theme. Start a new Object currentTheme = new ThemeList(); currentTheme.featured = true; currentTheme.enabled = true; if (atts.getValue(Constants.FEATURES_THEMES_TAG_NAME) == null) error = true; else currentTheme.name = atts.getValue(Constants.FEATURES_THEMES_TAG_NAME).trim(); if (atts.getValue(Constants.FEATURES_THEMES_TAG_URI) == null) error = true; else currentTheme.url = URI.create(atts.getValue(Constants.FEATURES_THEMES_TAG_URI).trim()); } } /** * Gets be called on closing tags like: * </tag> */ @Override public void endElement(String namespaceURI, String localName, String qName) throws SAXException { if (localName.equalsIgnoreCase(Constants.FEATURED_THEMES_TAG)) { if (!error) fullThemeList.addThemeToList(currentTheme); else Log.e(TAG, "There was an error in the XML File. A value was NULL"); currentTheme = null; } } }