//(C) Copyright 2003-2012 Hewlett-Packard Development Company, L.P.
package com.hp.alm.ali.idea.model.parser;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Characters;
import javax.xml.stream.events.EndDocument;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
import java.io.InputStream;
import java.util.ArrayList;
public abstract class AbstractList<E> extends ArrayList<E> {
protected XMLEventReader reader;
protected AbstractList() {
}
protected void initNoEx(InputStream is) {
try {
init(is);
} catch (XMLStreamException e) {
throw new RuntimeException(e);
}
}
protected void init(InputStream is) throws XMLStreamException {
XMLInputFactory factory = XMLInputFactory.newInstance();
reader = factory.createXMLEventReader(is);
while(true) {
XMLEvent event = reader.nextEvent();
if(event instanceof EndDocument) {
reader.close();
break;
}
if(event instanceof StartElement) {
onStartElement((StartElement)event);
}
if(event instanceof EndElement) {
onEndElement((EndElement)event);
}
}
}
protected AbstractList(InputStream is) throws XMLStreamException {
init(is);
}
protected String readNextValue() throws XMLStreamException {
return readNextValue(reader);
}
protected E getLast() {
return get(size() - 1);
}
public static String readNextValue(XMLEventReader reader) throws XMLStreamException {
StringBuffer buf = new StringBuffer();
while(reader.peek() instanceof Characters) {
buf.append(((Characters)reader.nextEvent()).getData());
}
return buf.toString();
}
protected abstract void onStartElement(StartElement element) throws XMLStreamException;
protected void onEndElement(EndElement element) throws XMLStreamException {
}
}