spepping 2004/07/09 10:27:12
Modified: src/java/org/apache/fop/apps CommandLineOptions.java
FOUserAgent.java
src/java/org/apache/fop/area RenderPagesModel.java
src/java/org/apache/fop/fonts FontSetup.java
src/java/org/apache/fop/pdf PDFFilterList.java
src/java/org/apache/fop/render AbstractRenderer.java
src/java/org/apache/fop/render/pdf PDFRenderer.java
src/java/org/apache/fop/render/ps PSRenderer.java
Log:
Implementing user configuration file.
Adding debug logging for user configuration, user PDF filters and user
fonts.
Adding reporting of mime type to renderers.
Revision Changes Path
1.24 +36 -1 xml-fop/src/java/org/apache/fop/apps/CommandLineOptions.java
Index: CommandLineOptions.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/apps/CommandLineOptions.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- CommandLineOptions.java 26 Jun 2004 19:37:13 -0000 1.23
+++ CommandLineOptions.java 9 Jul 2004 17:27:12 -0000 1.24
@@ -20,15 +20,26 @@
// java
import java.io.File;
import java.io.FileNotFoundException;
+import java.io.IOException;
import java.util.Locale;
import java.util.Vector;
import org.apache.fop.fo.Constants;
+// commons logging
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.impl.SimpleLog;
+// SAX
+import org.xml.sax.XMLReader;
+import org.xml.sax.SAXException;
+
+// avalon configuration
+import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+
/**
* Options parses the commandline arguments
*/
@@ -66,7 +77,7 @@
* @throws FileNotFoundException if an input file wasn't found.
*/
public CommandLineOptions(String[] args)
- throws FOPException, FileNotFoundException {
+ throws FOPException, FileNotFoundException, IOException {
log = LogFactory.getLog("FOP");
@@ -81,6 +92,7 @@
dumpConfiguration();
}
checkSettings();
+ createUserConfig();
}
} catch (FOPException e) {
printUsage();
@@ -412,6 +424,29 @@
}
} // end checkSettings
+
+ /**
+ * Create the user configuration.
+ * @throws FOPException if creating the user configuration fails
+ * @throws IOException
+ */
+ private void createUserConfig() throws FOPException, IOException {
+ if (userConfigFile == null) {
+ return;
+ }
+ XMLReader parser = FOFileHandler.createParser();
+ DefaultConfigurationBuilder configBuilder
+ = new DefaultConfigurationBuilder(parser);
+ Configuration userConfig = null;
+ try {
+ userConfig = configBuilder.buildFromFile(userConfigFile);
+ } catch (SAXException e) {
+ throw new FOPException(e);
+ } catch (ConfigurationException e) {
+ throw new FOPException(e);
+ }
+ foUserAgent.setUserConfig(userConfig);
+ }
/**
* @return the type chosen renderer
1.13 +55 -2 xml-fop/src/java/org/apache/fop/apps/FOUserAgent.java
Index: FOUserAgent.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/apps/FOUserAgent.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- FOUserAgent.java 27 Jun 2004 13:29:32 -0000 1.12
+++ FOUserAgent.java 9 Jul 2004 17:27:12 -0000 1.13
@@ -25,6 +25,14 @@
import java.io.IOException;
import java.io.InputStream;
+// avalon configuration
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+
+// commons logging
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
// FOP
import org.apache.fop.pdf.PDFEncryptionParams;
import org.apache.fop.render.Renderer;
@@ -61,7 +69,10 @@
private HashMap rendererOptions = new java.util.HashMap();
private InputHandler inputHandler = null;
private Renderer rendererOverride = null;
-
+ /* user configuration */
+ private Configuration userConfig = null;
+ private Log log = LogFactory.getLog("FOP");
+
/** Producer: Metadata element for the system/software that produces
* the document. (Some renderers can store this in the document.)
*/
@@ -164,6 +175,48 @@
*/
public HashMap getRendererOptions() {
return rendererOptions;
+ }
+
+ /**
+ * Set the user configuration.
+ * @return the user configuration
+ */
+ public void setUserConfig(Configuration userConfig) {
+ this.userConfig = userConfig;
+ }
+
+ /**
+ * Get the user configuration.
+ * @return the user configuration
+ */
+ public Configuration getUserConfig() {
+ return userConfig;
+ }
+
+ public Configuration getUserRendererConfig (String mimeType) {
+
+ if (userConfig == null || mimeType == null) {
+ return null;
+ }
+
+ Configuration userRendererConfig = null;
+
+ Configuration[] cfgs
+ = userConfig.getChild("renderers").getChildren("renderer");
+ for (int i = 0; i < cfgs.length; ++i) {
+ Configuration cfg = cfgs[i];
+ try {
+ if (cfg.getAttribute("mime").equals(mimeType)) {
+ userRendererConfig = cfg;
+ break;
+ }
+ } catch (ConfigurationException e) {
+ // silently pass over configurations without mime type
+ }
+ }
+ log.debug((userRendererConfig==null ? "No u" : "U")
+ + "ser configuration found for MIME type " + mimeType);
+ return userRendererConfig;
}
/**
1.4 +24 -5 xml-fop/src/java/org/apache/fop/area/RenderPagesModel.java
Index: RenderPagesModel.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/area/RenderPagesModel.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- RenderPagesModel.java 7 Jul 2004 01:51:50 -0000 1.3
+++ RenderPagesModel.java 9 Jul 2004 17:27:12 -0000 1.4
@@ -27,12 +27,17 @@
// XML
import org.xml.sax.SAXException;
+// avalon configuration
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+
// FOP
import org.apache.fop.apps.FOPException;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.fo.Constants;
import org.apache.fop.fonts.FontInfo;
import org.apache.fop.render.Renderer;
+import org.apache.fop.render.AbstractRenderer;
/**
* This uses the store pages model to store the pages
@@ -69,8 +74,22 @@
if (userAgent.getRendererOverride() != null) {
renderer = userAgent.getRendererOverride();
} else {
- renderer = createRenderer(renderType);
- renderer.setUserAgent(userAgent);
+ AbstractRenderer rend = createRenderer(renderType);
+ rend.setUserAgent(userAgent);
+ String mimeType = rend.getMimeType();
+ Configuration userRendererConfig = null;
+ if (mimeType != null) {
+ userRendererConfig
+ = userAgent.getUserRendererConfig(mimeType);
+ }
+ if (userRendererConfig != null) {
+ try {
+ rend.configure(userRendererConfig);
+ } catch (ConfigurationException e) {
+ throw new FOPException(e);
+ }
+ }
+ renderer = rend;
}
try {
@@ -87,12 +106,12 @@
}
/**
- * Creates a Renderer object based on render-type desired
+ * Creates an AbstractRenderer object based on render-type desired
* @param renderType the type of renderer to use
- * @return Renderer the new Renderer instance
+ * @return AbstractRenderer the new Renderer instance
* @throws IllegalArgumentException if an unsupported renderer type was
requested
*/
- private Renderer createRenderer(int renderType) throws IllegalArgumentException
{
+ private AbstractRenderer createRenderer(int renderType) throws
IllegalArgumentException {
switch (renderType) {
case Constants.RENDER_PDF:
1.6 +24 -2 xml-fop/src/java/org/apache/fop/fonts/FontSetup.java
Index: FontSetup.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fonts/FontSetup.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- FontSetup.java 22 Apr 2004 21:56:09 -0000 1.5
+++ FontSetup.java 9 Jul 2004 17:27:12 -0000 1.6
@@ -34,6 +34,11 @@
import org.apache.fop.fonts.base14.Symbol;
import org.apache.fop.fonts.base14.ZapfDingbats;
+// commons logging
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+// Avalon
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
@@ -50,6 +55,11 @@
public class FontSetup {
/**
+ * logging instance
+ */
+ protected static Log log = LogFactory.getLog("org.apache.fop.fonts");
+
+ /**
* Sets up the font info object.
*
* Adds metrics for basic fonts and useful family-style-weight
@@ -210,7 +220,7 @@
public static List buildFontListFromConfiguration(Configuration cfg)
throws ConfigurationException {
List fontList = new java.util.ArrayList();
- Configuration[] font = cfg.getChildren("font");
+ Configuration[] font = cfg.getChild("fonts").getChildren("font");
for (int i = 0; i < font.length; i++) {
Configuration[] triple = font[i].getChildren("font-triplet");
List tripleList = new java.util.ArrayList();
@@ -224,6 +234,18 @@
efi = new EmbedFontInfo(font[i].getAttribute("metrics-url"),
font[i].getAttributeAsBoolean("kerning", false),
tripleList, font[i].getAttribute("embed-url",
null));
+
+ if (log.isDebugEnabled()) {
+ log.debug("Adding font " + efi.getEmbedFile()
+ + ", metric file " + efi.getMetricsFile());
+ for (int j = 0; j < tripleList.size(); ++j) {
+ FontTriplet triplet = (FontTriplet) tripleList.get(j);
+ log.debug("Font triplet "
+ + triplet.getName() + ", "
+ + triplet.getWeight() + ", "
+ + triplet.getStyle());
+ }
+ }
fontList.add(efi);
}
1.4 +26 -0 xml-fop/src/java/org/apache/fop/pdf/PDFFilterList.java
Index: PDFFilterList.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/pdf/PDFFilterList.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- PDFFilterList.java 27 Feb 2004 17:50:31 -0000 1.3
+++ PDFFilterList.java 9 Jul 2004 17:27:12 -0000 1.4
@@ -23,6 +23,11 @@
import java.util.List;
import java.util.Map;
+// commons logging
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+// Avalon
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
@@ -48,6 +53,11 @@
private boolean ignoreASCIIFilters = false;
/**
+ * logging instance
+ */
+ protected static Log logger = LogFactory.getLog("org.apache.fop.render");
+
+ /**
* Default constructor.
* <p>
* The flag for ignoring ASCII filters defaults to false.
@@ -276,6 +286,22 @@
if (type == null) {
type = PDFFilterList.DEFAULT_FILTER;
}
+
+ if (!filterList.isEmpty() && logger.isDebugEnabled()) {
+ StringBuffer debug = new StringBuffer("Adding PDF filter");
+ if (filterList.size() != 1) {
+ debug.append("s");
+ }
+ debug.append(" for type ").append(type).append(": ");
+ for (int j = 0; j < filterList.size(); j++) {
+ if (j != 0) {
+ debug.append(", ");
+ }
+ debug.append(filterList.get(j));
+ }
+ logger.debug(debug.toString());
+ }
+
if (filterMap.get(type) != null) {
throw new ConfigurationException("A filterList of type '"
+ type + "' has already been defined");
1.31 +10 -1 xml-fop/src/java/org/apache/fop/render/AbstractRenderer.java
Index: AbstractRenderer.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/AbstractRenderer.java,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- AbstractRenderer.java 23 Jun 2004 00:25:27 -0000 1.30
+++ AbstractRenderer.java 9 Jul 2004 17:27:12 -0000 1.31
@@ -87,7 +87,7 @@
/**
* logging instance
*/
- protected static Log logger = LogFactory.getLog("FOP");
+ protected static Log logger = LogFactory.getLog("org.apache.fop.render");
/**
* block progression position
@@ -723,6 +723,15 @@
getLogger().warn("Some XML content will be ignored. "
+ "No handler defined for XML: " + namespace);
}
+ }
+
+ /**
+ * Get the MIME type of the renderer.
+ *
+ * @return The MIME type of the renderer
+ */
+ public String getMimeType() {
+ return null;
}
}
1.46 +5 -0 xml-fop/src/java/org/apache/fop/render/pdf/PDFRenderer.java
Index: PDFRenderer.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/pdf/PDFRenderer.java,v
retrieving revision 1.45
retrieving revision 1.46
diff -u -r1.45 -r1.46
--- PDFRenderer.java 23 Jun 2004 00:25:27 -0000 1.45
+++ PDFRenderer.java 9 Jul 2004 17:27:12 -0000 1.46
@@ -1343,5 +1343,10 @@
beginTextObject();
super.renderLeader(area);
}
+
+ /** @see org.apache.fop.render.AbstractRenderer */
+ public String getMimeType() {
+ return MIME_TYPE;
+ }
}
1.30 +5 -0 xml-fop/src/java/org/apache/fop/render/ps/PSRenderer.java
Index: PSRenderer.java
===================================================================
RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/render/ps/PSRenderer.java,v
retrieving revision 1.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- PSRenderer.java 23 Jun 2004 00:25:27 -0000 1.29
+++ PSRenderer.java 9 Jul 2004 17:27:12 -0000 1.30
@@ -838,4 +838,9 @@
renderXML(userAgent, context, doc, ns);
}
+ /** @see org.apache.fop.render.AbstractRenderer */
+ public String getMimeType() {
+ return MIME_TYPE;
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]