package com.sun.msv.reader; import org.xml.sax.InputSource; import org.xml.sax.ErrorHandler; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.xml.sax.Locator; import org.xml.sax.helpers.LocatorImpl; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; /** * Internal view of GrammarReaderController. * * This class wraps a GrammarReaderController and * adds several convenient methods for the caller. */ public class Controller implements GrammarReaderController,ErrorHandler { /** Controller works as a wrapper to this object. */ private final GrammarReaderController core; public GrammarReaderController getCore() { return core; } /** This flag will be set to true in case of any error. */ private boolean _hadError = false; /** Returns true if an error had been reported. */ public boolean hadError() { return _hadError; } /** Force set the error flag to true. */ public final void setErrorFlag() { _hadError=true; } public Controller( GrammarReaderController _core ) { this.core = _core; } public InputSource resolveEntity( String p, String s ) throws SAXException, IOException { return core.resolveEntity(p,s); } public void warning( Locator[] locs, String errorMessage ) { core.warning(locs,errorMessage); } public void error( Locator[] locs, String errorMessage, Exception nestedException ) { setErrorFlag(); core.error(locs,errorMessage,nestedException); } public void fatalError( SAXParseException spe ) { error(spe); } public void error( SAXParseException spe ) { error( getLocator(spe), spe.getMessage(), spe.getException() ); } public void warning( SAXParseException spe ) { warning( getLocator(spe), spe.getMessage() ); } public void error( IOException e, Locator source ) { error( new Locator[]{source}, e.getMessage(), e ); } public void error( SAXException e, Locator source ) { // if a nested exception is a RuntimeException, // this shouldn't be handled. if( e.getException() instanceof RuntimeException ) throw (RuntimeException)e.getException(); if(e instanceof SAXParseException) error( (SAXParseException)e ); else error( new Locator[]{source}, e.getMessage(), e ); } public void error( ParserConfigurationException e, Locator source ) { error( new Locator[]{source}, e.getMessage(), e ); } protected Locator[] getLocator( SAXParseException spe ) { LocatorImpl loc = new LocatorImpl(); loc.setColumnNumber( spe.getColumnNumber() ); loc.setLineNumber( spe.getLineNumber() ); loc.setSystemId( spe.getSystemId() ); loc.setPublicId( spe.getPublicId() ); return new Locator[]{loc}; } }