/* © 2010 Stephan Reichholf <stephan at reichholf dot net>
*
* Licensed under the Create-Commons Attribution-Noncommercial-Share Alike 3.0 Unported
* http://creativecommons.org/licenses/by-nc-sa/3.0/
*/
package net.reichholf.dreamdroid.parsers.enigma2.saxhandler;
import net.reichholf.dreamdroid.helpers.ExtendedHashMap;
import net.reichholf.dreamdroid.helpers.enigma2.DeviceInfo;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import java.util.ArrayList;
/**
* @author sreichholf
*
*/
public class E2DeviceInfoHandler extends E2SimpleHandler {
protected static final String TAG_E2ENIGMAVERSION = "e2enigmaversion";
protected static final String TAG_E2IMAGEVERSION = "e2imageversion";
protected static final String TAG_E2WEBIFVERSION = "e2webifversion";
protected static final String TAG_E2FPVERSION = "e2fpversion";
protected static final String TAG_E2DEVICENAME = "e2devicename";
protected static final String TAG_E2FRONTEND = "e2frontend";
protected static final String TAG_E2NAME = "e2name";
protected static final String TAG_E2MODEL = "e2model";
protected static final String TAG_E2INTERFACE = "e2interface";
protected static final String TAG_E2MAC = "e2mac";
protected static final String TAG_E2DHCP = "e2dhcp";
protected static final String TAG_E2IP = "e2ip";
protected static final String TAG_E2GATEWAY = "e2gateway";
protected static final String TAG_E2NETMASK = "e2netmask";
protected static final String TAG_E2HDD = "e2hdd";
protected static final String TAG_E2CAPACITY = "e2capacity";
protected static final String TAG_E2FREE = "e2free";
private boolean inGuiV = false;
private boolean inImageV = false;
private boolean inInterfaceV = false;
private boolean inFpV = false;
private boolean inDeviceName = false;
private boolean inFrontend = false;
private boolean inName = false;
private boolean inModel = false;
private boolean inInterface = false;
private boolean inMac = false;
private boolean inDhcp = false;
private boolean inIp = false;
private boolean inGateway = false;
private boolean inNetmask = false;
private boolean inHdd = false;
private boolean inCapacity = false;
private boolean inFree = false;
private ExtendedHashMap mFrontendData;
private ExtendedHashMap mHddData;
private ExtendedHashMap mNicData;
private ArrayList<ExtendedHashMap> mFrontends;
private ArrayList<ExtendedHashMap> mHdds;
private ArrayList<ExtendedHashMap> mNics;
/*
* (non-Javadoc)
*
* @see org.xml.sax.helpers.DefaultHandler#startDocument()
*/
@Override
public void startDocument() {
mFrontends = new ArrayList<>();
mHdds = new ArrayList<>();
mNics = new ArrayList<>();
}
@Override
public void endDocument() throws SAXException {
if(!mResult.containsKey(DeviceInfo.KEY_FRONTENDS))
mResult.put(DeviceInfo.KEY_FRONTENDS, mFrontends);
if(!mResult.containsKey(DeviceInfo.KEY_HDDS))
mResult.put(DeviceInfo.KEY_HDDS, mHdds);
if(!mResult.containsKey(DeviceInfo.KEY_NICS))
mResult.put(DeviceInfo.KEY_NICS, mNics);
super.endDocument();
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String,
* java.lang.String, java.lang.String, org.xml.sax.Attributes)
*/
@Override
public void startElement(String namespaceUri, String localName, String qName, Attributes attrs) {
switch (localName) {
case TAG_E2ENIGMAVERSION:
inGuiV = true;
break;
case TAG_E2IMAGEVERSION:
inImageV = true;
break;
case TAG_E2WEBIFVERSION:
inInterfaceV = true;
break;
case TAG_E2FPVERSION:
inFpV = true;
break;
case TAG_E2DEVICENAME:
inDeviceName = true;
break;
case TAG_E2FRONTEND:
inFrontend = true;
mFrontendData = new ExtendedHashMap();
break;
case TAG_E2NAME:
inName = true;
break;
case TAG_E2MODEL:
inModel = true;
break;
case TAG_E2INTERFACE:
inInterface = true;
mNicData = new ExtendedHashMap();
break;
case TAG_E2MAC:
inMac = true;
break;
case TAG_E2DHCP:
inDhcp = true;
break;
case TAG_E2IP:
inIp = true;
break;
case TAG_E2GATEWAY:
inGateway = true;
break;
case TAG_E2NETMASK:
inNetmask = true;
break;
case TAG_E2HDD:
inHdd = true;
mHddData = new ExtendedHashMap();
break;
case TAG_E2CAPACITY:
inCapacity = true;
break;
case TAG_E2FREE:
inFree = true;
break;
}
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String,
* java.lang.String, java.lang.String)
*/
@Override
public void endElement(String namespaceURI, String localName, String qName) {
try {
switch (localName) {
case TAG_E2ENIGMAVERSION:
inGuiV = false;
break;
case TAG_E2IMAGEVERSION:
inImageV = false;
break;
case TAG_E2WEBIFVERSION:
inInterfaceV = false;
break;
case TAG_E2FPVERSION:
inFpV = false;
break;
case TAG_E2DEVICENAME:
inDeviceName = false;
break;
case TAG_E2FRONTEND:
inFrontend = false;
mFrontends.add(mFrontendData);
break;
case "e2frontends":
mResult.putOrConcat(DeviceInfo.KEY_FRONTENDS, mFrontends);
break;
case TAG_E2NAME:
inName = false;
break;
case TAG_E2MODEL:
inModel = false;
break;
case TAG_E2INTERFACE:
inInterface = false;
mNics.add(mNicData);
break;
case "e2network":
mResult.putOrConcat(DeviceInfo.KEY_NICS, mNics);
break;
case TAG_E2MAC:
inMac = false;
break;
case TAG_E2DHCP:
inDhcp = false;
break;
case TAG_E2IP:
inIp = false;
break;
case TAG_E2GATEWAY:
inGateway = false;
break;
case TAG_E2NETMASK:
inNetmask = false;
break;
case TAG_E2HDD:
inHdd = false;
mHdds.add(mHddData);
break;
case "e2hdds":
mResult.putOrConcat(DeviceInfo.KEY_HDDS, mHdds);
break;
case TAG_E2CAPACITY:
inCapacity = false;
break;
case TAG_E2FREE:
inFree = false;
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* (non-Javadoc)
*
* @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
*/
@Override
public void characters(char ch[], int start, int length) {
String value = new String(ch, start, length);
if (inGuiV) {
mResult.putOrConcat(DeviceInfo.KEY_GUI_VERSION, value.trim());
} else if (inImageV) {
mResult.putOrConcat(DeviceInfo.KEY_IMAGE_VERSION, value.trim());
} else if (inInterfaceV) {
mResult.putOrConcat(DeviceInfo.KEY_INTERFACE_VERSION, value.trim());
} else if (inFpV) {
mResult.putOrConcat(DeviceInfo.KEY_FRONT_PROCESSOR_VERSION, value.trim());
} else if (inDeviceName) {
mResult.putOrConcat(DeviceInfo.KEY_DEVICE_NAME, value.trim());
} else if (inFrontend) {
if (inName) {
mFrontendData.putOrConcat(DeviceInfo.KEY_FRONTEND_NAME, value.trim());
} else if (inModel) {
mFrontendData.putOrConcat(DeviceInfo.KEY_FRONTEND_MODEL, value.trim());
}
} else if (inInterface) {
if (inName) {
mNicData.putOrConcat(DeviceInfo.KEY_NIC_NAME, value.trim());
} else if (inMac) {
mNicData.putOrConcat(DeviceInfo.KEY_NIC_MAC, value.trim());
} else if (inDhcp) {
mNicData.putOrConcat(DeviceInfo.KEY_NIC_DHCP, value.trim());
} else if (inIp) {
mNicData.putOrConcat(DeviceInfo.KEY_NIC_IP, value.trim());
} else if (inGateway) {
mNicData.putOrConcat(DeviceInfo.KEY_NIC_GATEWAY, value.trim());
} else if (inNetmask) {
mNicData.putOrConcat(DeviceInfo.KEY_NIC_NETMASK, value.trim());
}
} else if (inHdd) {
if (inModel) {
mHddData.putOrConcat(DeviceInfo.KEY_HDD_MODEL, value.trim());
} else if (inCapacity) {
mHddData.putOrConcat(DeviceInfo.KEY_HDD_CAPACITY, value.trim());
} else if (inFree) {
mHddData.putOrConcat(DeviceInfo.KEY_HDD_FREE_SPACE, value.trim());
}
}
}
}