org.codehaus.stax2.ri.Stax2EventFactoryImpl Maven / Gradle / Ivy
package org.codehaus.stax2.ri;
import java.util.Iterator;
import javax.xml.namespace.NamespaceContext;
import javax.xml.namespace.QName;
import javax.xml.stream.*;
import javax.xml.stream.events.*;
import org.codehaus.stax2.evt.XMLEventFactory2;
import org.codehaus.stax2.evt.DTD2;
import org.codehaus.stax2.ri.evt.*;
/**
* This is an abstract almost complete plain vanilla implementation of
* {@link XMLEventFactory2}.
* It can be used as a building block for concrete implementations:
* the minimal requirement is to implement createQName
* methods.
*
* Note that due to underlying Stax factory being non-generic (it was specified
* for JDK 1.4, pre-generic), no generic typing can be added to various
* {@link java.util.Iterator}s in signatures.
*
* @author Tatu Saloranta
*
* @since 3.0
*/
public abstract class Stax2EventFactoryImpl
extends XMLEventFactory2
{
protected Location mLocation;
public Stax2EventFactoryImpl() { }
/*
/**********************************************************************
/* XMLEventFactory API
/**********************************************************************
*/
@Override
public Attribute createAttribute(QName name, String value) {
return new AttributeEventImpl(mLocation, name, value, true);
}
@Override
public Attribute createAttribute(String localName, String value) {
return new AttributeEventImpl(mLocation, localName, null, null, value, true);
}
@Override
public Attribute createAttribute(String prefix, String nsURI, String localName, String value)
{
return new AttributeEventImpl(mLocation, localName, nsURI, prefix, value, true);
}
@Override
public Characters createCData(String content) {
return new CharactersEventImpl(mLocation, content, true);
}
@Override
public Characters createCharacters(String content) {
return new CharactersEventImpl(mLocation, content, false);
}
@Override
public Comment createComment(String text) {
return new CommentEventImpl(mLocation, text);
}
/**
* Note: constructing DTD events this way means that there will be no
* internal presentation of actual DTD; no parsing is implied by
* construction.
*/
@Override
public DTD createDTD(String dtd) {
return new DTDEventImpl(mLocation, dtd);
}
@Override
public EndDocument createEndDocument() {
return new EndDocumentEventImpl(mLocation);
}
@SuppressWarnings({ "rawtypes", "unchecked" }) // due to Stax's non-generic-ness
@Override
public EndElement createEndElement(QName name, Iterator namespaces) {
return new EndElementEventImpl(mLocation, name, (Iterator) namespaces);
}
@Override
public EndElement createEndElement(String prefix, String nsURI, String localName)
{
return createEndElement(createQName(nsURI, localName, prefix), null);
}
@SuppressWarnings("rawtypes") // due to Stax's non-generic-ness
@Override
public EndElement createEndElement(String prefix, String nsURI, String localName, Iterator ns)
{
return createEndElement(createQName(nsURI, localName, prefix), ns);
}
@Override
public EntityReference createEntityReference(String name, EntityDeclaration decl)
{
return new EntityReferenceEventImpl(mLocation, decl);
}
@Override
public Characters createIgnorableSpace(String content) {
return CharactersEventImpl.createIgnorableWS(mLocation, content);
}
@Override
public Namespace createNamespace(String nsURI) {
return NamespaceEventImpl.constructDefaultNamespace(mLocation, nsURI);
}
@Override
public Namespace createNamespace(String prefix, String nsURI) {
return NamespaceEventImpl.constructNamespace(mLocation, prefix, nsURI);
}
@Override
public ProcessingInstruction createProcessingInstruction(String target, String data) {
return new ProcInstrEventImpl(mLocation, target, data);
}
@Override
public Characters createSpace(String content) {
return CharactersEventImpl.createNonIgnorableWS(mLocation, content);
}
@Override
public StartDocument createStartDocument() {
return new StartDocumentEventImpl(mLocation);
}
@Override
public StartDocument createStartDocument(String encoding) {
return new StartDocumentEventImpl(mLocation, encoding);
}
@Override
public StartDocument createStartDocument(String encoding, String version) {
return new StartDocumentEventImpl(mLocation, encoding, version);
}
@Override
public StartDocument createStartDocument(String encoding, String version, boolean standalone) {
return new StartDocumentEventImpl(mLocation, encoding, version, true, standalone);
}
@SuppressWarnings("rawtypes") // due to Stax's non-generic-ness
@Override
public StartElement createStartElement(QName name, Iterator attr, Iterator ns) {
return createStartElement(name, attr, ns, null);
}
@Override
public StartElement createStartElement(String prefix, String nsURI, String localName) {
return createStartElement(createQName(nsURI, localName, prefix),
null, null, null);
}
@SuppressWarnings("rawtypes") // due to Stax's non-generic-ness
@Override
public StartElement createStartElement(String prefix, String nsURI,
String localName, Iterator attr,
Iterator ns)
{
return createStartElement(createQName(nsURI, localName, prefix), attr, ns,
null);
}
@SuppressWarnings("rawtypes") // due to Stax's non-generic-ness
@Override
public StartElement createStartElement(String prefix, String nsURI,
String localName, Iterator attr,
Iterator ns, NamespaceContext nsCtxt)
{
return createStartElement(createQName(nsURI, localName, prefix),
attr, ns, nsCtxt);
}
@Override
public void setLocation(Location loc)
{
mLocation = loc;
}
/*
/**********************************************************************
/* XMLEventFactory2 methods
/**********************************************************************
*/
@Override
public DTD2 createDTD(String rootName, String sysId, String pubId,
String intSubset)
{
return new DTDEventImpl(mLocation, rootName, sysId, pubId, intSubset, null);
}
@Override
public DTD2 createDTD(String rootName, String sysId, String pubId,
String intSubset, Object processedDTD)
{
return new DTDEventImpl(mLocation, rootName, sysId, pubId, intSubset,
processedDTD);
}
/*
/**********************************************************************
/* Helper methods, overridable
/**********************************************************************
*/
protected abstract QName createQName(String nsURI, String localName);
protected abstract QName createQName(String nsURI, String localName, String prefix);
protected StartElement createStartElement(QName name, Iterator> attr,
Iterator> ns, NamespaceContext ctxt)
{
return StartElementEventImpl.construct(mLocation, name, attr, ns, ctxt);
}
}