Dépôt officiel du code source de l'ERP OpenConcerto
Blame | Last modification | View Log | RSS feed
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright 2011 OpenConcerto, by ILM Informatique. All rights reserved.
*
* The contents of this file are subject to the terms of the GNU General Public License Version 3
* only ("GPL"). You may not use this file except in compliance with the License. You can obtain a
* copy of the License at http://www.gnu.org/licenses/gpl-3.0.html See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each file.
*/
package org.openconcerto.xml;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
/**
* To decode using {@link XMLStreamReader}.
*
* @author Sylvain CUAZ
*/
public final class XMLDecoderStAX extends AbstractXMLDecoder<XMLStreamReader, XMLStreamException> {
@Override
protected String getAttributeValue(XMLStreamReader elem, String attrName) {
return elem.getAttributeValue(null, attrName);
}
@Override
protected String getLocalName(XMLStreamReader elem) {
return elem.getLocalName();
}
@Override
protected String getElementText(XMLStreamReader elem) throws XMLStreamException {
return elem.getElementText();
}
@Override
protected XMLStreamReader getFirstChild(XMLStreamReader reader) {
try {
reader.nextTag();
} catch (XMLStreamException e) {
throw new IllegalStateException("Couldn't advance to first child", e);
}
return reader;
}
@Override
protected void preEval(XMLStreamReader reader) throws XMLStreamException {
assert reader.isStartElement();
}
@Override
protected void nullDecoded(XMLStreamReader reader) throws XMLStreamException {
reader.nextTag();
}
@Override
protected void idRefDecoded(XMLStreamReader reader) throws XMLStreamException {
reader.nextTag();
}
@Override
protected void postEval(XMLStreamReader reader, final Object res) throws XMLStreamException {
assert reader.isEndElement();
reader.nextTag();
}
@Override
protected String toString(XMLStreamReader elem) {
return elem.getLocation().toString();
}
@Override
protected Children<XMLStreamReader> createChildren(final XMLStreamReader reader) throws XMLStreamException {
if (!reader.isStartElement())
throw new IllegalStateException("Not at a start of an element : " + reader.getLocation());
final String localName = reader.getLocalName();
// move from START parent to either :
// 1. END parent if no children, or
// 2. START child
reader.nextTag();
return new Children<XMLStreamReader>() {
@Override
public XMLStreamReader getNextChild() {
if (reader.isEndElement() && reader.getLocalName().equals(localName)) {
return null;
}
return reader;
}
};
}
protected XMLDecoderStAX() {
}
}