package de.tu.darmstadt.seemoo.ansian.tools.morse; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import android.content.res.AssetManager; import android.util.Log; import de.tu.darmstadt.seemoo.ansian.MainActivity; public class Parser extends DefaultHandler { private List<MorseCodeCharacter> tempMorseCharacters; private MorseCodeCharacter tempMorseCharacter; private boolean letter, code; public Parser() { tempMorseCharacters = new ArrayList<MorseCodeCharacter>(); letter = false; code = false; } public List<MorseCodeCharacter> parseDocument(String pathToDocument) { InputSource is = null; try { AssetManager assetManager = MainActivity.instance.getAssets(); InputStream inputStream = assetManager.open(pathToDocument); Log.d("Parser", pathToDocument); Reader reader = new InputStreamReader(inputStream, "UTF-8"); is = new InputSource(reader); is.setEncoding("UTF-8"); } catch (Exception e) { e.printStackTrace(); } SAXParserFactory spf = SAXParserFactory.newInstance(); try { SAXParser sp = spf.newSAXParser(); sp.parse(is, this); } catch (Exception e) { e.printStackTrace(); } return tempMorseCharacters; } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if (qName.equalsIgnoreCase("morsecharacter")) { tempMorseCharacter = new MorseCodeCharacter(); } else if (qName.equalsIgnoreCase("letter")) { letter = true; } else if (qName.equalsIgnoreCase("code")) { code = true; } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { } @Override public void characters(char ch[], int start, int length) throws SAXException { if (letter) { tempMorseCharacter.setLetter(new String(ch, start, length)); letter = false; } else if (code) { tempMorseCharacter.setCode(new String(ch, start, length)); code = false; tempMorseCharacters.add(tempMorseCharacter); } } }