Browse Source

Moved user-defined ElementMapping initialization from Driver to FOUserAgent.

Moved only "string" method, the version we use internally--probably sufficient
for others' work as well.  (Note: an additional unused FOUserAgent object will
be created in driver during command-line use--cp. its no-param constructor vs.
setUserAgent() call in apps.Fop; this will need to be ironed out at some time.)


git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197794 13f79535-47bb-0310-9956-ffa450edef68
pull/30/head
Glen Mazza 20 years ago
parent
commit
27c0da6d2a

+ 3
- 61
src/java/org/apache/fop/apps/Driver.java View File

@@ -30,7 +30,6 @@ import org.xml.sax.XMLReader;

// FOP
import org.apache.fop.fo.Constants;
import org.apache.fop.fo.ElementMapping;
import org.apache.fop.fo.FOTreeBuilder;
import org.apache.fop.render.awt.AWTRenderer;

@@ -47,11 +46,7 @@ import org.apache.fop.render.awt.AWTRenderer;
* render. Methods within FOUserAgent 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
* ElementMapping(s), the Driver may be supplied either with the
* object itself, or the name of the class, in which case Driver will
* instantiate the class itself. The advantage of the latter is it
* enables runtime determination of ElementMapping(s).
* rendering (where applicable).
* <P>
* Once the Driver is set up, the render method
* is called. The invocation of the method is
@@ -67,11 +62,6 @@ import org.apache.fop.render.awt.AWTRenderer;
*/
public class Driver implements Constants {

/**
* the FO tree builder
*/
private FOTreeBuilder treeBuilder;

/**
* the render type code given by setRender
*/
@@ -91,6 +81,7 @@ public class Driver implements Constants {
* Main constructor for the Driver class.
*/
public Driver() {
foUserAgent = new FOUserAgent();
stream = null;
}

@@ -113,23 +104,6 @@ public class Driver implements Constants {
this.stream = stream;
}

private boolean isInitialized() {
return (treeBuilder != null);
}

/**
* Initializes the Driver object.
*/
private void initialize() {
if (isInitialized()) {
throw new IllegalStateException("Driver already initialized");
}
treeBuilder = new FOTreeBuilder();
if (foUserAgent == null) {
foUserAgent = new FOUserAgent();
}
}

/**
* Resets the Driver so it can be reused. Property and element
* mappings are reset to defaults.
@@ -137,9 +111,6 @@ public class Driver implements Constants {
*/
public synchronized void reset() {
stream = null;
if (treeBuilder != null) {
treeBuilder.reset();
}
}

/**
@@ -148,10 +119,6 @@ public class Driver implements Constants {
* @param agent FOUserAgent to use
*/
public void setUserAgent(FOUserAgent agent) throws FOPException {
if (foUserAgent != null) {
throw new IllegalStateException("FOUserAgent " +
"instance already set.");
}
foUserAgent = agent;
}

@@ -160,9 +127,6 @@ public class Driver implements Constants {
* @return the user agent
*/
public FOUserAgent getUserAgent() {
if (foUserAgent == null) {
foUserAgent = new FOUserAgent();
}
return foUserAgent;
}

@@ -208,24 +172,6 @@ public class Driver implements Constants {
this.renderType = renderType;
}

/**
* 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) {
treeBuilder.addElementMapping(mapping);
}

/**
* Add the element mapping with the given class name.
* @param mappingClassName the class name representing the element mapping.
*/
public void addElementMapping(String mappingClassName) {
treeBuilder.addElementMapping(mappingClassName);
}

/**
* Determines which SAX ContentHandler is appropriate for the renderType.
* Structure renderers (e.g. MIF & RTF) each have a specialized
@@ -236,16 +182,12 @@ public class Driver implements Constants {
* @throws FOPException if setting up the ContentHandler fails
*/
public ContentHandler getContentHandler() throws FOPException {
if (!isInitialized()) {
initialize();
}

if (renderType != RENDER_PRINT && renderType != RENDER_AWT) {
validateOutputStream();
}

treeBuilder.initialize(renderType, foUserAgent, stream);
return treeBuilder;
return new FOTreeBuilder(renderType, foUserAgent, stream);
}

/**

+ 23
- 0
src/java/org/apache/fop/apps/FOUserAgent.java View File

@@ -19,6 +19,7 @@
package org.apache.fop.apps;

// Java
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@@ -73,6 +74,9 @@ public class FOUserAgent {
private Configuration userConfig = null;
private Log log = LogFactory.getLog("FOP");

/* Additional fo.ElementMapping subclasses set by user */
private ArrayList additionalElementMappings = null;

/** Producer: Metadata element for the system/software that produces
* the document. (Some renderers can store this in the document.)
*/
@@ -105,6 +109,25 @@ public class FOUserAgent {
return inputHandler;
}

/**
* Add the element mapping with the given class name.
* @param mappingClassName the class name representing the element mapping.
*/
public void addElementMapping(String mappingClassName) {
if (additionalElementMappings == null) {
additionalElementMappings = new ArrayList();
}
additionalElementMappings.add(mappingClassName);
}

/**
* Returns the ArrayList of user-added ElementMapping class names
* @return ArrayList of Strings holding ElementMapping names.
*/
public ArrayList getAdditionalElementMappings() {
return additionalElementMappings;
}

/**
* Sets the producer of the document.
* @param producer source of document

+ 24
- 21
src/java/org/apache/fop/fo/FOTreeBuilder.java View File

@@ -24,6 +24,7 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
@@ -88,17 +89,12 @@ public class FOTreeBuilder extends DefaultHandler {
private Locator locator;
/**
* Default constructor
* FOTreeBuilder constructor
* @param render type as defined in Constants class
* @param foUserAgent in effect for this process
* @param stream OutputStream to direct results
*/
public FOTreeBuilder() {
setupDefaultMappings();
}

/**
* Creates the FOInputHandler object based on passed-in render type
* @param render type
*/
public void initialize(int renderType, FOUserAgent foUserAgent,
public FOTreeBuilder(int renderType, FOUserAgent foUserAgent,
OutputStream stream) throws FOPException {
if (renderType == Constants.RENDER_MIF) {
foInputHandler = new MIFHandler(foUserAgent, stream);
@@ -113,6 +109,18 @@ public class FOTreeBuilder extends DefaultHandler {
foInputHandler = new AreaTreeHandler(foUserAgent, renderType,
stream);
}
// Add standard element mappings
setupDefaultMappings();

// add additional ElementMappings defined within FOUserAgent
ArrayList addlEMs = foUserAgent.getAdditionalElementMappings();

if (addlEMs != null) {
for (int i = 0; i < addlEMs.size(); i++) {
addElementMapping((String) addlEMs.get(i));
}
}
}

/**
@@ -141,17 +149,6 @@ public class FOTreeBuilder extends DefaultHandler {
}
}

/**
* 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) {
this.fobjTable.put(mapping.getNamespaceURI(), mapping.getTable());
this.namespaces.add(mapping.getNamespaceURI().intern());
}

/**
* Add the element mapping with the given class name.
* @param mappingClassName the class name representing the element mapping.
@@ -159,6 +156,7 @@ public class FOTreeBuilder extends DefaultHandler {
*/
public void addElementMapping(String mappingClassName)
throws IllegalArgumentException {

try {
ElementMapping mapping =
(ElementMapping)Class.forName(mappingClassName).newInstance();
@@ -178,6 +176,11 @@ public class FOTreeBuilder extends DefaultHandler {
}
}

private void addElementMapping(ElementMapping mapping) {
this.fobjTable.put(mapping.getNamespaceURI(), mapping.getTable());
this.namespaces.add(mapping.getNamespaceURI().intern());
}

/**
* SAX Handler for locator
* @see org.xml.sax.ContentHandler#setDocumentLocator(Locator)

Loading…
Cancel
Save