* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
+ *
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
- *
+ *
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
- *
+ *
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ */
package org.apache.fop.apps;
//FOP
public class AWTStarter extends CommandLineStarter {
private PreviewDialog frame;
private Translator translator;
- private Driver driver;
+ private Session session;
private XMLReader parser;
/**
AWTRenderer renderer = new AWTRenderer(translator);
frame = createPreviewDialog(renderer, translator);
renderer.setComponent(frame);
- driver = new Driver();
- driver.setRenderer(renderer);
+ session = new Session();
+ session.setRenderer(renderer);
parser = inputHandler.getParser();
if (parser == null) {
throw new FOPException("Unable to create SAX parser");
* @throws FOPException FIXME should not happen.
*/
public void run() throws FOPException {
- driver.reset();
+ session.reset();
try {
frame.setStatus(translator.getString("Status.Build.FO.tree"));
- driver.render(parser, inputHandler.getInputSource());
+ session.render(parser, inputHandler.getInputSource());
frame.setStatus(translator.getString("Status.Show"));
frame.showPage();
} catch (Exception e) {
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
+ *
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
- *
+ *
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
- *
+ *
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ */
package org.apache.fop.apps;
// java
/**
* parses the commandline arguments
- * @return true if parse was successful and processing can continue, false
+ * @return true if parse was successful and processing can continue, false
* if processing should stop
* @exception FOPException if there was an error in the format of the options
*/
case NOT_SET:
throw new FOPException("Renderer has not been set!");
case PDF_OUTPUT:
- return Driver.RENDER_PDF;
+ return Session.RENDER_PDF;
case AWT_OUTPUT:
- return Driver.RENDER_AWT;
+ return Session.RENDER_AWT;
case MIF_OUTPUT:
- return Driver.RENDER_MIF;
+ return Session.RENDER_MIF;
case PRINT_OUTPUT:
- return Driver.RENDER_PRINT;
+ return Session.RENDER_PRINT;
case PCL_OUTPUT:
- return Driver.RENDER_PCL;
+ return Session.RENDER_PCL;
case PS_OUTPUT:
- return Driver.RENDER_PS;
+ return Session.RENDER_PS;
case TXT_OUTPUT:
- return Driver.RENDER_TXT;
+ return Session.RENDER_TXT;
case SVG_OUTPUT:
- return Driver.RENDER_SVG;
+ return Session.RENDER_SVG;
case AREA_OUTPUT:
rendererOptions.put("fineDetail", isCoarseAreaXml());
- return Driver.RENDER_XML;
+ return Session.RENDER_XML;
case RTF_OUTPUT:
- return Driver.RENDER_RTF;
+ return Session.RENDER_RTF;
default:
throw new FOPException("Invalid Renderer setting!");
}
+ " Fop foo.fo -print or Fop -print foo.fo \n"
+ " Fop foo.fo -awt \n");
}
-
+
/**
* shows the options for print output
*/
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
+ *
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
- *
+ *
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
- *
+ *
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ */
package org.apache.fop.apps;
// SAX
XMLReader parser = inputHandler.getParser();
setParserFeatures(parser);
- Driver driver = new Driver();
- setupLogger(driver);
- driver.initialize();
+ Session session = new Session();
+ setupLogger(session);
+ session.initialize();
try {
- driver.setRenderer(commandLineOptions.getRenderer());
+ session.setRenderer(commandLineOptions.getRenderer());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(
commandLineOptions.getOutputFile()));
try {
- driver.setOutputStream(bos);
- if (driver.getRenderer() != null) {
- driver.getRenderer().setOptions(
+ session.setOutputStream(bos);
+ if (session.getRenderer() != null) {
+ session.getRenderer().setOptions(
commandLineOptions.getRendererOptions());
}
- driver.render(parser, inputHandler.getInputSource());
+ session.render(parser, inputHandler.getInputSource());
} finally {
bos.close();
}
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
+ *
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
- *
+ *
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
- *
+ *
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ */
package org.apache.fop.apps;
// FOP
* driver.setRenderer(new org.apache.fop.render.awt.AWTRenderer(translator));
* driver.render(parser, fileInputSource(args[0]));
* </PRE>
+ *
+ * @deprecated This class is replaced by {@link Session}. See {@link
+ * CommandLineStarter#run for a usage example.
*/
public class Driver implements LogEnabled {
}
/**
- * Provide the Driver instance with a logger. More information on Avalon
- * logging can be found at the
+ * Provide the Driver instance with a logger. More information on Avalon
+ * logging can be found at the
* <a href="http://avalon.apache.org">Avalon site</a>.
*
* @param log the logger. Must not be <code>null</code>.
}
/**
- * Provide the Driver instance with a logger.
+ * Provide the Driver instance with a logger.
* @param log the logger. Must not be <code>null</code>.
* @deprecated Use #enableLogging(Logger) instead.
*/
// add mappings from available services
Iterator providers =
- Service.providers(org.apache.fop.fo.ElementMapping.class);
+ Session.providers(org.apache.fop.fo.ElementMapping.class);
if (providers != null) {
while (providers.hasNext()) {
String str = (String)providers.next();
* @param rendererClassName the fully qualified classname of the renderer
* class to use.
* @param version version number
- * @deprecated use renderer.setProducer(version) + setRenderer(renderer) or
+ * @deprecated use renderer.setProducer(version) + setRenderer(renderer) or
* just setRenderer(rendererType) which will use the default producer string.
* @see #setRenderer(int)
* @see #setRenderer(Renderer)
initialize();
}
validateOutputStream();
-
+
// TODO: - do this stuff in a better way
// PIJ: I guess the structure handler should be created by the renderer.
if (rendererType == RENDER_MIF) {
}
}
-
-// code stolen from org.apache.batik.util and modified slightly
-// does what sun.misc.Service probably does, but it cannot be relied on.
-// hopefully will be part of standard jdk sometime.
-
-/**
- * This class loads services present in the class path.
- */
-class Service {
-
- private static Map providerMap = new java.util.Hashtable();
-
- public static synchronized Iterator providers(Class cls) {
- ClassLoader cl = cls.getClassLoader();
- // null if loaded by bootstrap class loader
- if (cl == null) {
- cl = ClassLoader.getSystemClassLoader();
- }
- String serviceFile = "META-INF/services/" + cls.getName();
-
- // getLogger().debug("File: " + serviceFile);
-
- List lst = (List)providerMap.get(serviceFile);
- if (lst != null) {
- return lst.iterator();
- }
-
- lst = new java.util.Vector();
- providerMap.put(serviceFile, lst);
-
- Enumeration e;
- try {
- e = cl.getResources(serviceFile);
- } catch (IOException ioe) {
- return lst.iterator();
- }
-
- while (e.hasMoreElements()) {
- try {
- java.net.URL u = (java.net.URL)e.nextElement();
- //getLogger().debug("URL: " + u);
-
- InputStream is = u.openStream();
- Reader r = new InputStreamReader(is, "UTF-8");
- BufferedReader br = new BufferedReader(r);
-
- String line = br.readLine();
- while (line != null) {
- try {
- // First strip any comment...
- int idx = line.indexOf('#');
- if (idx != -1) {
- line = line.substring(0, idx);
- }
-
- // Trim whitespace.
- line = line.trim();
-
- // If nothing left then loop around...
- if (line.length() == 0) {
- line = br.readLine();
- continue;
- }
- // getLogger().debug("Line: " + line);
-
- // Try and load the class
- // Object obj = cl.loadClass(line).newInstance();
- // stick it into our vector...
- lst.add(line);
- } catch (Exception ex) {
- // Just try the next line
- }
-
- line = br.readLine();
- }
- } catch (Exception ex) {
- // Just try the next file...
- }
-
- }
- return lst.iterator();
- }
-
-}
-
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
+ *
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
- *
+ *
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
- *
+ *
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ */
package org.apache.fop.apps;
// Imported SAX classes
* Manages input if it is an XSL-FO file.
*/
public class FOInputHandler extends InputHandler {
-
+
private File fofile = null;
private URL foURL = null;
this.foURL = url;
}
-
+
/**
* @see org.apache.fop.apps.InputHandler#getInputSource()
*/
}
/**
- * @see org.apache.fop.apps.InputHandler#run(Driver)
+ * @see org.apache.fop.apps.InputHandler#run(Session)
*/
- public void run(Driver driver) throws FOPException {
+ public void run(Session session) throws FOPException {
throw new FOPException("not implemented: FOInputHandler.run(Driver)");
}
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
+ *
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
- *
+ *
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
- *
+ *
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ */
package org.apache.fop.apps;
// SAX
throw new FOPException("Coudn't create XMLReader", pce);
}
}
-
+
/**
- * Runs this InputHandler through the Driver.
- * @param driver Driver instance to use
+ * Runs this InputHandler through the Session.
+ * @param session Session instance to use
* @throws FOPException if processing this InputHandler fails
*/
- public abstract void run(Driver driver) throws FOPException;
-
+ public abstract void run(Session session) throws FOPException;
+
}
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
+ *
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
- *
+ *
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
- *
+ *
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ */
package org.apache.fop.apps;
/*
* @see org.apache.fop.apps.Starter#run()
*/
public void run() throws FOPException {
- Driver driver = new Driver();
+ Session session = new Session();
String version = Version.getVersion();
//log.debug(version);
//renderer.setCopies(copies);
try {
- driver.setRenderer(renderer);
- driver.render(parser, inputHandler.getInputSource());
+ session.setRenderer(renderer);
+ session.render(parser, inputHandler.getInputSource());
} catch (Exception e) {
if (e instanceof FOPException) {
throw (FOPException)e;
printerJob.print();
} catch (PrinterException e) {
e.printStackTrace();
- throw new IOException("Unable to print: "
+ throw new IOException("Unable to print: "
+ e.getClass().getName()
+ ": " + e.getMessage());
}
--- /dev/null
+/*
+ * $Id$
+ * ============================================================================
+ * The Apache Software License, Version 1.1
+ * ============================================================================
+ *
+ * Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modifica-
+ * tion, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if any, must
+ * include the following acknowledgment: "This product includes software
+ * developed by the Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself, if
+ * and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "FOP" and "Apache Software Foundation" must not be used to
+ * endorse or promote products derived from this software without prior
+ * written permission. For written permission, please contact
+ * apache@apache.org.
+ *
+ * 5. Products derived from this software may not be called "Apache", nor may
+ * "Apache" appear in their name, without prior written permission of the
+ * Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+ * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU-
+ * DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ============================================================================
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * on behalf of the Apache Software Foundation and was originally created by
+ * James Tauber <jtauber@jtauber.com>. For more information on the Apache
+ * Software Foundation, please see <http://www.apache.org/>.
+ */
+package org.apache.fop.apps;
+
+// FOP
+import org.apache.fop.fo.ElementMapping;
+import org.apache.fop.fo.FOTreeBuilder;
+import org.apache.fop.fo.FOUserAgent;
+import org.apache.fop.render.Renderer;
+import org.apache.fop.tools.DocumentInputSource;
+import org.apache.fop.tools.DocumentReader;
+
+
+// Avalon
+import org.apache.avalon.framework.logger.ConsoleLogger;
+import org.apache.avalon.framework.logger.LogEnabled;
+import org.apache.avalon.framework.logger.Logger;
+
+// DOM
+import org.w3c.dom.Document;
+
+// SAX
+import org.xml.sax.ContentHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParserFactory;
+
+// Java
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.Reader;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Primary class that drives overall FOP process.
+ * <P>
+ * The simplest way to use this is to instantiate it with the
+ * InputSource and OutputStream, then set the renderer desired, and
+ * calling run();
+ * <P>
+ * Here is an example use of Session which outputs PDF:
+ *
+ * <PRE>
+ * Session session = new Session(new InputSource (args[0]),
+ * new FileOutputStream(args[1]));
+ * session.enableLogging(myLogger); //optional
+ * session.setRenderer(RENDER_PDF);
+ * session.run();
+ * </PRE>
+ * If neccessary, calling classes can call into the lower level
+ * methods to setup and
+ * render. Methods can be called to set the
+ * Renderer to use, the (possibly multiple) ElementMapping(s) to
+ * use and the OutputStream to use to output the results of the
+ * rendering (where applicable). In the case of the Renderer and
+ * ElementMapping(s), the Session may be supplied either with the
+ * object itself, or the name of the class, in which case Session will
+ * instantiate the class itself. The advantage of the latter is it
+ * enables runtime determination of Renderer and ElementMapping(s).
+ * <P>
+ * Once the Session is set up, the render method
+ * is called. Depending on whether DOM or SAX is being used, the
+ * invocation of the method is either render(Document) or
+ * buildFOTree(Parser, InputSource) respectively.
+ * <P>
+ * A third possibility may be used to build the FO Tree, namely
+ * calling getContentHandler() and firing the SAX events yourself.
+ * <P>
+ * Once the FO Tree is built, the format() and render() methods may be
+ * called in that order.
+ * <P>
+ * Here is an example use of Session which outputs to AWT:
+ *
+ * <PRE>
+ * Session session = new Session();
+ * session.enableLogging(myLogger); //optional
+ * session.setRenderer(new org.apache.fop.render.awt.AWTRenderer(translator));
+ * session.render(parser, fileInputSource(args[0]));
+ * </PRE>
+ */
+public class Session implements LogEnabled {
+
+ /**
+ * Render to PDF. OutputStream must be set
+ */
+ public static final int RENDER_PDF = 1;
+
+ /**
+ * Render to a GUI window. No OutputStream neccessary
+ */
+ public static final int RENDER_AWT = 2;
+
+ /**
+ * Render to MIF. OutputStream must be set
+ */
+ public static final int RENDER_MIF = 3;
+
+ /**
+ * Render to XML. OutputStream must be set
+ */
+ public static final int RENDER_XML = 4;
+
+ /**
+ * Render to PRINT. No OutputStream neccessary
+ */
+ public static final int RENDER_PRINT = 5;
+
+ /**
+ * Render to PCL. OutputStream must be set
+ */
+ public static final int RENDER_PCL = 6;
+
+ /**
+ * Render to Postscript. OutputStream must be set
+ */
+ public static final int RENDER_PS = 7;
+
+ /**
+ * Render to Text. OutputStream must be set
+ */
+ public static final int RENDER_TXT = 8;
+
+ /**
+ * Render to SVG. OutputStream must be set
+ */
+ public static final int RENDER_SVG = 9;
+
+ /**
+ * Render to RTF. OutputStream must be set
+ */
+ public static final int RENDER_RTF = 10;
+
+ /**
+ * the FO tree builder
+ */
+ private FOTreeBuilder treeBuilder;
+
+ /**
+ * the renderer type code given by setRenderer
+ */
+ private int rendererType;
+
+ /**
+ * the renderer to use to output the area tree
+ */
+ private Renderer renderer;
+
+ /**
+ * the structure handler
+ */
+ private StructureHandler structHandler;
+
+ /**
+ * the source of the FO file
+ */
+ private InputSource source;
+
+ /**
+ * the stream to use to output the results of the renderer
+ */
+ private OutputStream stream;
+
+ /**
+ * The XML parser to use when building the FO tree
+ */
+ private XMLReader reader;
+
+ /**
+ * the system resources that FOP will use
+ */
+ private Logger log = null;
+ private FOUserAgent userAgent = null;
+
+ /**
+ * Returns the fully qualified classname of the standard XML parser for FOP
+ * to use.
+ * @return the XML parser classname
+ */
+ public static final String getParserClassName() {
+ try {
+ return javax.xml.parsers.SAXParserFactory.newInstance()
+ .newSAXParser().getXMLReader().getClass().getName();
+ } catch (javax.xml.parsers.ParserConfigurationException e) {
+ return null;
+ } catch (org.xml.sax.SAXException e) {
+ return null;
+ }
+ }
+
+ /**
+ * Main constructor for the Session class.
+ */
+ public Session() {
+ stream = null;
+ }
+
+ /**
+ * Convenience constructor for directly setting input and output.
+ * @param source InputSource to take the XSL-FO input from
+ * @param stream Target output stream
+ */
+ public Session(InputSource source, OutputStream stream) {
+ this();
+ this.source = source;
+ this.stream = stream;
+ }
+
+ private boolean isInitialized() {
+ return (treeBuilder != null);
+ }
+
+ /**
+ * Initializes the Session object.
+ */
+ public void initialize() {
+ if (isInitialized()) {
+ throw new IllegalStateException("Session already initialized");
+ }
+ treeBuilder = new FOTreeBuilder();
+ treeBuilder.setUserAgent(getUserAgent());
+ setupDefaultMappings();
+ }
+
+ /**
+ * Optionally sets the FOUserAgent instance for FOP to use. The Session
+ * class sets up its own FOUserAgent if none is set through this method.
+ * @param agent FOUserAgent to use
+ */
+ public void setUserAgent(FOUserAgent agent) {
+ userAgent = agent;
+ }
+
+ private FOUserAgent getUserAgent() {
+ if (userAgent == null) {
+ userAgent = new FOUserAgent();
+ userAgent.enableLogging(getLogger());
+ userAgent.setBaseURL("");
+ }
+ return userAgent;
+ }
+
+ /**
+ * Provide the Session instance with a logger. More information on Avalon
+ * logging can be found at the
+ * <a href="http://avalon.apache.org">Avalon site</a>.
+ *
+ * @param log the logger. Must not be <code>null</code>.
+ * @see org.apache.avalon.framework.logger.LogEnabled#enableLogging(Logger)
+ */
+ public void enableLogging(Logger log) {
+ if (this.log == null) {
+ this.log = log;
+ } else {
+ getLogger().warn("Logger is already set! Won't use the new logger.");
+ }
+ }
+
+ /**
+ * Provide the Session instance with a logger.
+ * @param log the logger. Must not be <code>null</code>.
+ * @deprecated Use #enableLogging(Logger) instead.
+ */
+ public void setLogger(Logger log) {
+ enableLogging(log);
+ }
+
+
+ /**
+ * Returns the logger for use by FOP.
+ * @return the logger
+ * @see #enableLogging(Logger)
+ */
+ protected Logger getLogger() {
+ if (this.log == null) {
+ this.log = new ConsoleLogger(ConsoleLogger.LEVEL_INFO);
+ this.log.error("Logger not set. Using ConsoleLogger as default.");
+ }
+
+ return this.log;
+ }
+
+ /**
+ * Resets the Session so it can be reused. Property and element
+ * mappings are reset to defaults.
+ * The output stream is cleared. The renderer is cleared.
+ */
+ public synchronized void reset() {
+ source = null;
+ stream = null;
+ reader = null;
+ treeBuilder.reset();
+ }
+
+ /**
+ * Indicates whether FOP has already received input data.
+ * @return true, if input data was received
+ */
+ public boolean hasData() {
+ return (treeBuilder.hasData());
+ }
+
+ /**
+ * Set the OutputStream to use to output the result of the Renderer
+ * (if applicable)
+ * @param stream the stream to output the result of rendering to
+ */
+ public void setOutputStream(OutputStream stream) {
+ this.stream = stream;
+ }
+
+ private void validateOutputStream() {
+ if (this.stream == null) {
+ throw new IllegalStateException("OutputStream has not been set");
+ }
+ }
+
+ /**
+ * Set the source for the FO document. This can be a normal SAX
+ * InputSource, or an DocumentInputSource containing a DOM document.
+ * @see DocumentInputSource
+ */
+ public void setInputSource(InputSource source) {
+ this.source = source;
+ }
+
+ /**
+ * Sets the reader used when reading in the source. If not set,
+ * this defaults to a basic SAX parser.
+ * @param reader the reader to use.
+ */
+ public void setXMLReader(XMLReader reader) {
+ this.reader = reader;
+ }
+
+ /**
+ * Sets all the element and property list mappings to their default values.
+ *
+ */
+ public void setupDefaultMappings() {
+ addElementMapping("org.apache.fop.fo.FOElementMapping");
+ addElementMapping("org.apache.fop.svg.SVGElementMapping");
+ addElementMapping("org.apache.fop.extensions.ExtensionElementMapping");
+
+ // add mappings from available services
+ Iterator providers =
+ providers(org.apache.fop.fo.ElementMapping.class);
+ if (providers != null) {
+ while (providers.hasNext()) {
+ String str = (String)providers.next();
+ try {
+ addElementMapping(str);
+ } catch (IllegalArgumentException e) {
+ getLogger().warn("Error while adding element mapping", e);
+ }
+
+ }
+ }
+ }
+
+ /**
+ * Shortcut to set the rendering type to use. Must be one of
+ * <ul>
+ * <li>RENDER_PDF</li>
+ * <li>RENDER_AWT</li>
+ * <li>RENDER_MIF</li>
+ * <li>RENDER_XML</li>
+ * <li>RENDER_PCL</li>
+ * <li>RENDER_PS</li>
+ * <li>RENDER_TXT</li>
+ * <li>RENDER_SVG</li>
+ * <li>RENDER_RTF</li>
+ * </ul>
+ * @param renderer the type of renderer to use
+ * @throws IllegalArgumentException if an unsupported renderer type was required.
+ */
+ public void setRenderer(int renderer) throws IllegalArgumentException {
+ rendererType = renderer;
+ switch (renderer) {
+ case RENDER_PDF:
+ setRenderer("org.apache.fop.render.pdf.PDFRenderer");
+ break;
+ case RENDER_AWT:
+ throw new IllegalArgumentException("Use renderer form of setRenderer() for AWT");
+ case RENDER_PRINT:
+ throw new IllegalArgumentException("Use renderer form of setRenderer() for PRINT");
+ case RENDER_PCL:
+ setRenderer("org.apache.fop.render.pcl.PCLRenderer");
+ break;
+ case RENDER_PS:
+ setRenderer("org.apache.fop.render.ps.PSRenderer");
+ break;
+ case RENDER_TXT:
+ setRenderer("org.apache.fop.render.txt.TXTRenderer()");
+ break;
+ case RENDER_MIF:
+ //structHandler will be set later
+ break;
+ case RENDER_XML:
+ setRenderer("org.apache.fop.render.xml.XMLRenderer");
+ break;
+ case RENDER_SVG:
+ setRenderer("org.apache.fop.render.svg.SVGRenderer");
+ break;
+ case RENDER_RTF:
+ //structHandler will be set later
+ break;
+ default:
+ throw new IllegalArgumentException("Unknown renderer type");
+ }
+ }
+
+ /**
+ * Set the Renderer to use.
+ * @param renderer the renderer instance to use (Note: Logger must be set at this point)
+ */
+ public void setRenderer(Renderer renderer) {
+ renderer.setUserAgent(getUserAgent());
+ this.renderer = renderer;
+ }
+
+ /**
+ * Returns the currently active renderer.
+ * @return the renderer
+ */
+ public Renderer getRenderer() {
+ return renderer;
+ }
+
+ /**
+ * Sets the renderer.
+ * @param rendererClassName the fully qualified classname of the renderer
+ * class to use.
+ * @param version version number
+ * @deprecated use renderer.setProducer(version) + setRenderer(renderer) or
+ * just setRenderer(rendererType) which will use the default producer string.
+ * @see #setRenderer(int)
+ * @see #setRenderer(Renderer)
+ */
+ public void setRenderer(String rendererClassName, String version) {
+ setRenderer(rendererClassName);
+ }
+
+ /**
+ * Set the class name of the Renderer to use as well as the
+ * producer string for those renderers that can make use of it.
+ * @param rendererClassName classname of the renderer to use such as
+ * "org.apache.fop.render.pdf.PDFRenderer"
+ * @exception IllegalArgumentException if the classname was invalid.
+ * @see #setRenderer(int)
+ */
+ public void setRenderer(String rendererClassName)
+ throws IllegalArgumentException {
+ try {
+ renderer =
+ (Renderer)Class.forName(rendererClassName).newInstance();
+ if (renderer instanceof LogEnabled) {
+ ((LogEnabled)renderer).enableLogging(getLogger());
+ }
+ renderer.setProducer(Version.getVersion());
+ renderer.setUserAgent(getUserAgent());
+ } catch (ClassNotFoundException e) {
+ throw new IllegalArgumentException("Could not find "
+ + rendererClassName);
+ } catch (InstantiationException e) {
+ throw new IllegalArgumentException("Could not instantiate "
+ + rendererClassName);
+ } catch (IllegalAccessException e) {
+ throw new IllegalArgumentException("Could not access "
+ + rendererClassName);
+ } catch (ClassCastException e) {
+ throw new IllegalArgumentException(rendererClassName
+ + " is not a renderer");
+ }
+ }
+
+ /**
+ * Add the given element mapping.
+ * An element mapping maps element names to Java classes.
+ *
+ * @param mapping the element mappingto add
+ */
+ public void addElementMapping(ElementMapping mapping) {
+ mapping.addToBuilder(treeBuilder);
+ }
+
+ /**
+ * Add the element mapping with the given class name.
+ * @param mappingClassName the class name representing the element mapping.
+ * @throws IllegalArgumentException if there was not such element mapping.
+ */
+ public void addElementMapping(String mappingClassName)
+ throws IllegalArgumentException {
+ try {
+ ElementMapping mapping =
+ (ElementMapping)Class.forName(mappingClassName).newInstance();
+ addElementMapping(mapping);
+ } catch (ClassNotFoundException e) {
+ throw new IllegalArgumentException("Could not find "
+ + mappingClassName);
+ } catch (InstantiationException e) {
+ throw new IllegalArgumentException("Could not instantiate "
+ + mappingClassName);
+ } catch (IllegalAccessException e) {
+ throw new IllegalArgumentException("Could not access "
+ + mappingClassName);
+ } catch (ClassCastException e) {
+ throw new IllegalArgumentException(mappingClassName
+ + " is not an ElementMapping");
+ }
+ }
+
+ /**
+ * Returns the tree builder (a SAX ContentHandler).
+ *
+ * Used in situations where SAX is used but not via a FOP-invoked
+ * SAX parser. A good example is an XSLT engine that fires SAX
+ * events but isn't a SAX Parser itself.
+ * @return a content handler for handling the SAX events.
+ */
+ public ContentHandler getContentHandler() {
+ if (!isInitialized()) {
+ initialize();
+ }
+ validateOutputStream();
+
+ // TODO: - do this stuff in a better way
+ // PIJ: I guess the structure handler should be created by the renderer.
+ if (rendererType == RENDER_MIF) {
+ structHandler = new org.apache.fop.mif.MIFHandler(stream);
+ } else if (rendererType == RENDER_RTF) {
+ structHandler = new org.apache.fop.rtf.renderer.RTFHandler(stream);
+ } else {
+ if (renderer == null) {
+ throw new IllegalStateException(
+ "Renderer not set when using standard structHandler");
+ }
+ structHandler = new LayoutHandler(stream, renderer, true);
+ }
+
+ structHandler.enableLogging(getLogger());
+
+ treeBuilder.setUserAgent(getUserAgent());
+ treeBuilder.setStructHandler(structHandler);
+
+ return treeBuilder;
+ }
+
+ /**
+ * Render the FO document read by a SAX Parser from an InputSource.
+ * @param parser the SAX parser.
+ * @param source the input source the parser reads from.
+ * @throws FOPException if anything goes wrong.
+ */
+ public synchronized void render(XMLReader parser, InputSource source)
+ throws FOPException {
+ if (!isInitialized()) {
+ initialize();
+ }
+ parser.setContentHandler(getContentHandler());
+ try {
+ parser.parse(source);
+ } catch (SAXException e) {
+ if (e.getException() instanceof FOPException) {
+ // Undo exception tunneling.
+ throw (FOPException)e.getException();
+ } else {
+ throw new FOPException(e);
+ }
+ } catch (IOException e) {
+ throw new FOPException(e);
+ }
+ }
+
+ /**
+ * Render the FO ducument represented by a DOM Document.
+ * @param document the DOM document to read from
+ * @throws FOPException if anything goes wrong.
+ */
+ public synchronized void render(Document document)
+ throws FOPException {
+ if (!isInitialized()) {
+ initialize();
+ }
+ try {
+ DocumentInputSource source = new DocumentInputSource(document);
+ DocumentReader reader = new DocumentReader();
+ reader.setContentHandler(getContentHandler());
+ reader.parse(source);
+ } catch (SAXException e) {
+ if (e.getException() instanceof FOPException) {
+ // Undo exception tunneling.
+ throw (FOPException)e.getException();
+ } else {
+ throw new FOPException(e);
+ }
+ } catch (IOException e) {
+ throw new FOPException(e);
+ }
+
+ }
+
+ /**
+ * Runs the formatting and renderering process using the previously set
+ * parser, input source, renderer and output stream.
+ * If the renderer was not set, default to PDF.
+ * If no parser was set, and the input source is not a dom document,
+ * get a default SAX parser.
+ * @throws IOException in case of IO errors.
+ * @throws FOPException if anything else goes wrong.
+ */
+ public synchronized void run() throws IOException, FOPException {
+ if (!isInitialized()) {
+ initialize();
+ }
+ if (renderer == null) {
+ setRenderer(RENDER_PDF);
+ }
+
+ if (source == null) {
+ throw new FOPException("InputSource is not set.");
+ }
+
+ if (reader == null) {
+ if (!(source instanceof DocumentInputSource)) {
+ try {
+ SAXParserFactory spf = javax.xml.parsers.SAXParserFactory.newInstance();
+ spf.setNamespaceAware(true);
+ reader = spf.newSAXParser().getXMLReader();
+ } catch (SAXException e) {
+ throw new FOPException(e);
+ } catch (ParserConfigurationException e) {
+ throw new FOPException(e);
+ }
+ }
+ }
+
+ if (source instanceof DocumentInputSource) {
+ render(((DocumentInputSource)source).getDocument());
+ } else {
+ render(reader, source);
+ }
+ }
+
+/* Following code was stolen from org.apache.batik.util and modified slightly.
+ It does what sun.misc.Service probably does, but it cannot be relied on.
+ Hopefully, it will be part of standard jdk sometime.
+ This code was formerly part of a "Service" class, the contents of which have
+ been extracted here so that they can be used by both Session and the now-
+ deprecated Driver class.
+*/
+
+ /**
+ * Map of services in the classpath
+ */
+ private static Map providerMap = new java.util.Hashtable();
+
+ /**
+ * Loads services present in the class path.
+ */
+ public static synchronized Iterator providers(Class cls) {
+ ClassLoader cl = cls.getClassLoader();
+ // null if loaded by bootstrap class loader
+ if (cl == null) {
+ cl = ClassLoader.getSystemClassLoader();
+ }
+ String serviceFile = "META-INF/services/" + cls.getName();
+
+ // getLogger().debug("File: " + serviceFile);
+
+ List lst = (List)providerMap.get(serviceFile);
+ if (lst != null) {
+ return lst.iterator();
+ }
+
+ lst = new java.util.Vector();
+ providerMap.put(serviceFile, lst);
+
+ Enumeration e;
+ try {
+ e = cl.getResources(serviceFile);
+ } catch (IOException ioe) {
+ return lst.iterator();
+ }
+
+ while (e.hasMoreElements()) {
+ try {
+ java.net.URL u = (java.net.URL)e.nextElement();
+ //getLogger().debug("URL: " + u);
+
+ InputStream is = u.openStream();
+ Reader r = new InputStreamReader(is, "UTF-8");
+ BufferedReader br = new BufferedReader(r);
+
+ String line = br.readLine();
+ while (line != null) {
+ try {
+ // First strip any comment...
+ int idx = line.indexOf('#');
+ if (idx != -1) {
+ line = line.substring(0, idx);
+ }
+
+ // Trim whitespace.
+ line = line.trim();
+
+ // If nothing left then loop around...
+ if (line.length() == 0) {
+ line = br.readLine();
+ continue;
+ }
+ // getLogger().debug("Line: " + line);
+
+ // Try and load the class
+ // Object obj = cl.loadClass(line).newInstance();
+ // stick it into our vector...
+ lst.add(line);
+ } catch (Exception ex) {
+ // Just try the next line
+ }
+
+ line = br.readLine();
+ }
+ } catch (Exception ex) {
+ // Just try the next file...
+ }
+
+ }
+ return lst.iterator();
+ }
+
+}
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
+ *
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
- *
+ *
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
- *
+ *
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ */
package org.apache.fop.apps;
// Imported java.io classes
import org.xml.sax.XMLFilter;
/**
- * XSLTInputHandler basically takes an XML file and transforms it with an
+ * XSLTInputHandler basically takes an XML file and transforms it with an
* XSLT file and the resulting XSL-FO document is input for FOP.
*/
public class TraxInputHandler extends InputHandler {
/**
* Constructor with files as input.
- * @param xmlfile XML file
+ * @param xmlfile XML file
* @param xsltfile XSLT file
* @throws FOPException if initializing the Transformer fails
*/
* @param xsltSource XSLT InputSource
* @throws FOPException if initializing the Transformer fails
*/
- public TraxInputHandler(InputSource xmlSource, InputSource xsltSource)
+ public TraxInputHandler(InputSource xmlSource, InputSource xsltSource)
throws FOPException {
this.xmlSource = new StreamSource(xmlSource.getByteStream(),
xmlSource.getSystemId());
xsltSource.getSystemId());
initTransformer();
}
-
+
private void initTransformer() throws FOPException {
try {
- this.transformer =
+ this.transformer =
TransformerFactory.newInstance().newTransformer(xsltSource);
} catch (Exception ex) {
throw new FOPException(ex);
}
/**
- * Overwrites this method of the super class and returns an XMLFilter
+ * Overwrites this method of the super class and returns an XMLFilter
* instead of a simple XMLReader which allows chaining of transformations.
* @see org.apache.fop.apps.InputHandler#getParser()
*/
* during the conversion of the xml file + xslt stylesheet the resulting
* data is fed into Fop. This should help to avoid memory problems
* @param xsltSource An xslt stylesheet
- * @return an XMLFilter which can be chained together with other
+ * @return an XMLFilter which can be chained together with other
* XMLReaders or XMLFilters
* @throws FOPException if setting up the XMLFilter fails
*/
}
/**
- * @see org.apache.fop.apps.InputHandler#run(Driver)
+ * @see org.apache.fop.apps.InputHandler#run(Session)
*/
- public void run(Driver driver) throws FOPException {
+ public void run(Session session) throws FOPException {
try {
transformer.transform(xmlSource,
- new SAXResult(driver.getContentHandler()));
+ new SAXResult(session.getContentHandler()));
} catch (Exception ex) {
throw new FOPException(ex);
}
}
/**
- * @see org.apache.fop.apps.InputHandler#run(Driver)
+ * @see org.apache.fop.apps.InputHandler#run(Session)
*/
- public void run(Driver driver) throws FOPException {
- traxInputHandler.run(driver);
+ public void run(Session session) throws FOPException {
+ traxInputHandler.run(session);
}
/**
import org.w3c.dom.Document;
// FOP
-import org.apache.fop.apps.Driver;
+import org.apache.fop.apps.Session;
/**
* This is an implementation for XML-based images such as SVG.
* @return the created SAX parser
*/
public static String getParserName() {
- String parserClassName = Driver.getParserClassName();
+ String parserClassName = Session.getParserClassName();
return parserClassName;
}
import org.apache.avalon.framework.logger.Logger;
// FOP
-import org.apache.fop.apps.Driver;
+import org.apache.fop.apps.Session;
import org.apache.fop.apps.FOPException;
import org.apache.fop.area.PageViewport;
import org.apache.fop.apps.XSLTInputHandler;
public void renderFO(InputSource foFile,
HttpServletResponse response) throws ServletException {
try {
- Driver driver = new Driver(foFile, null);
+ Session session = new Session(foFile, null);
PrinterJob pj = PrinterJob.getPrinterJob();
PrintRenderer renderer = new PrintRenderer(pj);
- driver.enableLogging(log);
- driver.setRenderer(renderer);
- driver.run();
+ session.enableLogging(log);
+ session.setRenderer(renderer);
+ session.run();
reportOK (response);
} catch (Exception ex) {
public void renderXML(XSLTInputHandler input,
HttpServletResponse response) throws ServletException {
try {
- Driver driver = new Driver();
+ Session session = new Session();
PrinterJob pj = PrinterJob.getPrinterJob();
PrintRenderer renderer = new PrintRenderer(pj);
pj.setCopies(1);
- driver.enableLogging(log);
- driver.setRenderer(renderer);
- driver.render(input.getParser(), input.getInputSource());
+ session.enableLogging(log);
+ session.setRenderer(renderer);
+ session.render(input.getParser(), input.getInputSource());
reportOK (response);
} catch (Exception ex) {
import org.apache.avalon.framework.logger.Logger;
//FOP
-import org.apache.fop.apps.Driver;
+import org.apache.fop.apps.Session;
import org.apache.fop.apps.FOPException;
/**
throws FOPException, TransformerException {
//Setup FOP
- Driver driver = new Driver();
- driver.enableLogging(this.log);
- driver.setRenderer(Driver.RENDER_PDF);
- driver.initialize();
+ Session session = new Session();
+ session.enableLogging(this.log);
+ session.setRenderer(Session.RENDER_PDF);
+ session.initialize();
//Setup output
ByteArrayOutputStream out = new ByteArrayOutputStream();
- driver.setOutputStream(out);
+ session.setOutputStream(out);
//Make sure the XSL transformation's result is piped through to FOP
- Result res = new SAXResult(driver.getContentHandler());
+ Result res = new SAXResult(session.getContentHandler());
//Start the transformation and rendering process
transformer.transform(src, res);
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
+ *
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
- *
+ *
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
- *
+ *
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ */
package org.apache.fop.svg;
import java.util.HashMap;
import org.apache.fop.fo.FONode;
import org.apache.fop.fo.FOTreeBuilder;
import org.apache.fop.fo.ElementMapping;
-import org.apache.fop.apps.Driver;
+import org.apache.fop.apps.Session;
import org.apache.batik.util.XMLResourceDescriptor;
import org.apache.batik.dom.svg.SVGDOMImplementation;
// by default (SVGBrokenLinkProvider)
// normally the user agent value is used
XMLResourceDescriptor.setXMLParserClassName(
- Driver.getParserClassName());
+ Session.getParserClassName());
foObjs = new HashMap();
foObjs.put("svg", new SE());
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
+ *
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
- *
+ *
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
- *
+ *
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ */
package org.apache.fop.svg;
import org.apache.fop.fo.FOUserAgent;
* @return the XML parser class name
*/
public String getXMLParserClassName() {
- return org.apache.fop.apps.Driver.getParserClassName();
+ return org.apache.fop.apps.Session.getParserClassName();
}
/**
* ============================================================================
* The Apache Software License, Version 1.1
* ============================================================================
- *
+ *
* Copyright (C) 1999-2003 The Apache Software Foundation. All rights reserved.
- *
+ *
* Redistribution and use in source and binary forms, with or without modifica-
* tion, are permitted provided that the following conditions are met:
- *
+ *
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
- *
+ *
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
- *
+ *
* 3. The end-user documentation included with the redistribution, if any, must
* include the following acknowledgment: "This product includes software
* developed by the Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself, if
* and wherever such third-party acknowledgments normally appear.
- *
+ *
* 4. The names "FOP" and "Apache Software Foundation" must not be used to
* endorse or promote products derived from this software without prior
* written permission. For written permission, please contact
* apache@apache.org.
- *
+ *
* 5. Products derived from this software may not be called "Apache", nor may
* "Apache" appear in their name, without prior written permission of the
* Apache Software Foundation.
- *
+ *
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
* ============================================================================
- *
+ *
* This software consists of voluntary contributions made by many individuals
* on behalf of the Apache Software Foundation and was originally created by
* James Tauber <jtauber@jtauber.com>. For more information on the Apache
* Software Foundation, please see <http://www.apache.org/>.
- */
+ */
package org.apache.fop.tools;
-import org.apache.fop.apps.Driver;
+import org.apache.fop.apps.Session;
import org.apache.fop.apps.FOInputHandler;
import org.apache.fop.apps.FOPException;
import org.apache.fop.apps.InputHandler;
* pdf rendering.
*
* Modified by Mark Lillywhite mark-fop@inomial.com to use the new Driver
- * interface.
+ * (now Session) interface.
*/
public class TestConverter extends AbstractLogEnabled {
-
+
private boolean failOnly = false;
private boolean outputPDF = false;
private File destdir;
}
/**
- * Controls whether to process only the tests which are specified as fail
+ * Controls whether to process only the tests which are specified as fail
* in the test results.
* @param fail True if only fail tests should be processed
*/
if (xslNode != null) {
xsl = xslNode.getNodeValue();
}
- getLogger().debug("converting xml:" + xml + " and xsl:"
+ getLogger().debug("converting xml:" + xml + " and xsl:"
+ xsl + " to area tree");
try {
XMLReader parser = inputHandler.getParser();
setParserFeatures(parser);
- Driver driver = new Driver();
- setupLogger(driver, "fop");
- driver.initialize();
+ Session session = new Session();
+ setupLogger(session, "fop");
+ session.initialize();
FOUserAgent userAgent = new FOUserAgent();
userAgent.setBaseURL(baseURL);
- driver.setUserAgent(userAgent);
+ session.setUserAgent(userAgent);
if (outputPDF) {
- driver.setRenderer(Driver.RENDER_PDF);
+ session.setRenderer(Session.RENDER_PDF);
} else {
- driver.setRenderer(Driver.RENDER_XML);
+ session.setRenderer(Session.RENDER_XML);
}
Map rendererOptions = new java.util.HashMap();
rendererOptions.put("fineDetail", new Boolean(false));
rendererOptions.put("consistentOutput", new Boolean(true));
- driver.getRenderer().setOptions(rendererOptions);
- driver.getRenderer().setProducer("Testsuite Converter");
+ session.getRenderer().setOptions(rendererOptions);
+ session.getRenderer().setProducer("Testsuite Converter");
String outname = xmlFile.getName();
if (outname.endsWith(".xml")) {
outname = outname.substring(0, outname.length() - 4);
}
- driver.setOutputStream(new java.io.BufferedOutputStream(
+ session.setOutputStream(new java.io.BufferedOutputStream(
new java.io.FileOutputStream(new File(destdir,
outname + (outputPDF ? ".pdf" : ".at.xml")))));
getLogger().debug("ddir:" + destdir + " on:" + outname + ".pdf");
- driver.render(parser, inputHandler.getInputSource());
+ session.render(parser, inputHandler.getInputSource());
// check difference
if (compare != null) {
import org.apache.fop.apps.Starter;
import org.apache.fop.apps.InputHandler;
import org.apache.fop.apps.FOInputHandler;
-import org.apache.fop.apps.Driver;
+import org.apache.fop.apps.Session;
import org.apache.fop.apps.FOPException;
import org.apache.fop.fo.FOUserAgent;
if ((format == null)
|| format.equalsIgnoreCase("application/pdf")
|| format.equalsIgnoreCase("pdf")) {
- return Driver.RENDER_PDF;
+ return Session.RENDER_PDF;
} else if (format.equalsIgnoreCase("application/postscript")
|| format.equalsIgnoreCase("ps")) {
- return Driver.RENDER_PS;
+ return Session.RENDER_PS;
} else if (format.equalsIgnoreCase("application/vnd.mif")
|| format.equalsIgnoreCase("mif")) {
- return Driver.RENDER_MIF;
+ return Session.RENDER_MIF;
} else if (format.equalsIgnoreCase("application/msword")
|| format.equalsIgnoreCase("application/rtf")
|| format.equalsIgnoreCase("rtf")) {
- return Driver.RENDER_RTF;
+ return Session.RENDER_RTF;
} else if (format.equalsIgnoreCase("application/vnd.hp-PCL")
|| format.equalsIgnoreCase("pcl")) {
- return Driver.RENDER_PCL;
+ return Session.RENDER_PCL;
} else if (format.equalsIgnoreCase("text/plain")
|| format.equalsIgnoreCase("txt")) {
- return Driver.RENDER_TXT;
+ return Session.RENDER_TXT;
} else if (format.equalsIgnoreCase("text/xml")
|| format.equalsIgnoreCase("at")
|| format.equalsIgnoreCase("xml")) {
- return Driver.RENDER_XML;
+ return Session.RENDER_XML;
} else {
String err = "Couldn't determine renderer to use: " + format;
throw new BuildException(err);
private String determineExtension(int renderer) {
switch (renderer) {
- case Driver.RENDER_PDF:
+ case Session.RENDER_PDF:
return ".pdf";
- case Driver.RENDER_PS:
+ case Session.RENDER_PS:
return ".ps";
- case Driver.RENDER_MIF:
+ case Session.RENDER_MIF:
return ".mif";
- case Driver.RENDER_RTF:
+ case Session.RENDER_RTF:
return ".rtf";
- case Driver.RENDER_PCL:
+ case Session.RENDER_PCL:
return ".pcl";
- case Driver.RENDER_TXT:
+ case Session.RENDER_TXT:
return ".txt";
- case Driver.RENDER_XML:
+ case Session.RENDER_XML:
return ".xml";
default:
String err = "Unknown renderer: " + renderer;
}
try {
- Driver driver = new Driver();
- setupLogger(driver);
- driver.initialize();
+ Session session = new Session();
+ setupLogger(session);
+ session.initialize();
FOUserAgent userAgent = new FOUserAgent();
userAgent.setBaseURL(this.baseURL);
userAgent.enableLogging(getLogger());
- driver.setUserAgent(userAgent);
- driver.setRenderer(renderer);
- driver.setOutputStream(out);
- driver.render(parser, inputHandler.getInputSource());
+ session.setUserAgent(userAgent);
+ session.setRenderer(renderer);
+ session.setOutputStream(out);
+ session.render(parser, inputHandler.getInputSource());
} catch (Exception ex) {
throw new BuildException(ex);
} finally {