/* * $Id$ * Copyright (C) 2001 The Apache Software Foundation. All rights reserved. * For details on use and redistribution please refer to the * LICENSE file included with these sources. */ package org.apache.fop.configuration; // sax import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.XMLReader; import org.xml.sax.SAXException; import java.io.IOException; import org.xml.sax.InputSource; // fop import org.apache.fop.apps.Driver; import org.apache.fop.messaging.MessageHandler; import org.apache.fop.apps.FOPException; import org.apache.fop.configuration.Configuration; /** * entry class for reading configuration from file and creating a configuration * class. typical use looks like that:
* * ConfigurationReader reader = new ConfigurationReader ("config.xml","standard"); * try { * reader.start(); * } catch (org.apache.fop.apps.FOPException error) { * reader.dumpError(error); * } * * Once the configuration has been setup, the information can be accessed with * the methods of StandardConfiguration. */ public class ConfigurationReader { /** * show a full dump on error */ private static boolean errorDump = false; /** * inputsource for configuration file */ private InputSource filename; /** * creates a configuration reader * @param filename the file which contains the configuration information */ public ConfigurationReader(InputSource filename) { this.filename = filename; } /** * intantiates parser and starts parsing of config file */ public void start() throws FOPException { XMLReader parser = createParser(); // setting the parser features try { parser.setFeature("http://xml.org/sax/features/namespace-prefixes", false); } catch (SAXException e) { throw new FOPException("You need a parser which supports SAX version 2", e); } ConfigurationParser configurationParser = new ConfigurationParser(); parser.setContentHandler(configurationParser); try { parser.parse(filename); } catch (SAXException e) { if (e.getException() instanceof FOPException) { throw (FOPException)e.getException(); } else { throw new FOPException(e); } } catch (IOException e) { throw new FOPException(e); } } /** * creates a SAX parser, using the value of org.xml.sax.parser * defaulting to org.apache.xerces.parsers.SAXParser * * @return the created SAX parser */ public static XMLReader createParser() throws FOPException { String parserClassName = Driver.getParserClassName(); if (errorDump) { MessageHandler.logln("configuration reader using SAX parser " + parserClassName); } try { return (XMLReader)Class.forName(parserClassName).newInstance(); } catch (ClassNotFoundException e) { throw new FOPException("Could not find " + parserClassName, e); } catch (InstantiationException e) { throw new FOPException("Could not instantiate " + parserClassName, e); } catch (IllegalAccessException e) { throw new FOPException("Could not access " + parserClassName, e); } catch (ClassCastException e) { throw new FOPException(parserClassName + " is not a SAX driver", e); } } /** * Dumps an error */ public void dumpError(Exception e) { if (errorDump) { if (e instanceof SAXException) { e.printStackTrace(); if (((SAXException)e).getException() != null) { ((SAXException)e).getException().printStackTrace(); } } else { e.printStackTrace(); } } } /** * long or short error messages * */ public void setDumpError(boolean dumpError) { errorDump = dumpError; } }