/*******************************************************************************
* Copyright (c) 2012 rmateus.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v2.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
******************************************************************************/
package com.aptoide.amethyst.xml;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import java.util.ArrayList;
import java.util.HashMap;
public class XmlAppHandler extends DefaultHandler {
enum Elements {
MYAPP, GETAPP, NAME, PNAME, MD5SUM, INTSIZE, NEWSERVER, SERVER, NOTFOUND, GET, OBB, MAIN_PATH, MAIN_MD5SUM, MAIN_FILESIZE, MAIN_FILENAME, PATCH_PATH, PATCH_MD5SUM, PATCH_FILESIZE, PATCH_FILENAME;
public static Elements lookup(String element) {
try {
return Elements.valueOf(element);
} catch (Exception e) {
return Elements.NOTFOUND;
}
}
}
HashMap<String, String> app;
ArrayList<String> servers = new ArrayList<>();
StringBuilder sb = new StringBuilder();
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
sb.setLength(0);
switch (Elements.lookup(localName.toUpperCase().trim())) {
case GETAPP:
app = new HashMap<>();
break;
case NEWSERVER:
break;
default:
break;
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
super.characters(ch, start, length);
sb.append(ch, start, length);
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
switch (Elements.lookup(localName.toUpperCase().trim())) {
case GET:
app.put("path", sb.toString());
break;
case GETAPP:
break;
case INTSIZE:
app.put("size", sb.toString());
break;
case MD5SUM:
app.put("md5sum", sb.toString());
break;
case MYAPP:
break;
case NAME:
app.put("name", sb.toString());
break;
case NEWSERVER:
break;
case NOTFOUND:
break;
case PNAME:
app.put("apkid", sb.toString());
break;
case SERVER:
servers.add(sb.toString());
break;
case OBB:
break;
case MAIN_PATH:
app.put("main_path", sb.toString());
break;
case MAIN_MD5SUM:
app.put("main_md5sum", sb.toString());
break;
case MAIN_FILESIZE:
app.put("main_filesize", sb.toString());
break;
case MAIN_FILENAME:
app.put("main_filename", sb.toString());
break;
case PATCH_PATH:
app.put("patch_path", sb.toString());
break;
case PATCH_MD5SUM:
app.put("patch_md5sum", sb.toString());
break;
case PATCH_FILESIZE:
app.put("patch_filesize", sb.toString());
break;
case PATCH_FILENAME:
app.put("patch_filename", sb.toString());
break;
default:
break;
}
super.endElement(uri, localName, qName);
}
public HashMap<String, String> getApp() {
return app;
}
public ArrayList<String> getServers() {
return servers;
}
}