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]

Reply via email to