package no.divvun.Analyzer.Communication; import no.divvun.Analyzer.Objects.Element; import no.divvun.Analyzer.Objects.Paradigm; import no.divvun.Analyzer.Objects.Reading; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; public class ParadigmResponseParser extends DefaultHandler { ElementContainer container; public ParadigmResponseParser(ElementContainer container) { this.container = container; } public ElementContainer getElementContainer() { return container; } public void parseResponse(StringBuilder xml, int offset) { int start=-1; int docend=offset; int end=docend; boolean responseEnd = false; while(!responseEnd) { if((start = xml.indexOf("<" + XMLTags.TAG_WORD, docend)) != -1) { docend = xml.indexOf(">", start); String xmlElement = xml.substring(start, docend+1); Paradigm paradigm = new Paradigm(); // start = xmlElement.indexOf("lemma=\""); // end = xmlElement.indexOf("\"", start+7); // String word = xmlElement.substring(start+7, end); String word = getValue(xmlElement, "lemma"); if (word != null) { paradigm.setWord(word); } container.add(paradigm); } else if((start = xml.indexOf("<" + XMLTags.TAG_SURFACE, docend)) != -1) { docend = xml.indexOf("/>", start); String xmlElement = xml.substring(start, docend+1); // start = xmlElement.indexOf("analysis=\""); // end = xmlElement.indexOf("\"", start+10); // String analysis = xmlElement.substring(start+10, end); // // start = xmlElement.indexOf("form=\""); // end = xmlElement.indexOf("\"", start+6); // String form = xmlElement.substring(start+6, end); String analysis = getValue(xmlElement, "analysis"); String form = getValue(xmlElement, "form"); if (analysis != null && form != null) { Element element = new Element(new Reading(Reading.Type.ANALYSIS, analysis)); element.getReading().setNext(new Reading(Reading.Type.FORM, form)); container.getParadigm().add(element); } } else if((start = xml.indexOf("", docend)) != -1) responseEnd = true; } } private String getValue(String xmlElement, String attribute) { int start = xmlElement.indexOf(attribute + "=\"") + attribute.length() +2; int end = xmlElement.indexOf("\"", start); String value = xmlElement.substring(start, end); return value; } public void startElement (String namespaceURI, String localName, String blockName, Attributes attributes) throws SAXException { if(blockName.equalsIgnoreCase(XMLTags.TAG_WORD)) { Paradigm paradigm = new Paradigm(); String word = attributes.getValue("lemma"); if (word != null) { paradigm.setWord(word); } container.add(paradigm); } else if(blockName.equalsIgnoreCase(XMLTags.TAG_SURFACE)) { String analysis = attributes.getValue("analysis"); String form = attributes.getValue("form"); if (analysis != null && form != null) { Element element = new Element(new Reading(Reading.Type.ANALYSIS, analysis)); element.getReading().setNext(new Reading(Reading.Type.FORM, form)); container.getParadigm().add(element); } } } }