package com.sun.msv.writer;
import org.xml.sax.DocumentHandler;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributeListImpl;
import org.xml.sax.helpers.LocatorImpl;
/**
* Helper class that wraps {@link DocumentHandler} and provides utility methods.
*
* <p>
* Note that this class uses DocumentHandler, not ContentHandler.
* This generally allows the caller better control.
*
* <p>
* This class throws {@link SAXRuntimeException}, instead of SAXException.
*/
public class XMLWriter
{
protected DocumentHandler handler;
/** this DocumentHandler will receive XML. */
public void setDocumentHandler( DocumentHandler handler ) {
this.handler = handler;
}
public DocumentHandler getDocumentHandler() { return handler; }
public void element( String name ) {
element( name, new String[0] );
}
public void element( String name, String[] attributes ) {
start(name,attributes);
end(name);
}
public void start( String name ) {
start(name, new String[0] );
}
public void start( String name, String[] attributes ) {
// create attributes.
AttributeListImpl as = new AttributeListImpl();
for( int i=0; i<attributes.length; i+=2 )
as.addAttribute( attributes[i], "", attributes[i+1] );
try {
handler.startElement( name, as );
} catch( SAXException e ) {
throw new SAXRuntimeException(e);
}
}
public void end( String name ) {
try {
handler.endElement( name );
} catch( SAXException e ) {
throw new SAXRuntimeException(e);
}
}
public void characters( String str ) {
try {
handler.characters( str.toCharArray(), 0, str.length() );
} catch( SAXException e ) {
throw new SAXRuntimeException(e);
}
}
}