Hi
all,
Sorry in advance if
I'm not doing this right, it's my first official contribution (or attempt
thereof) to FOP!
I ran into issues
where my servlet was getting installed and run from a number of locations,
making the relative paths in fop-userconfig.xml not work, so I made a couple of
minor modifications to make this something the user can
configure.
1. I added
"getBasePath" and "setBasePath" methods to configuration/Configuration.java,
both in a static context
2. I updated
configuration/FontInfo.java to call these methods when returning font
paths
I also made a couple
of other mods that seemed to make sense.
3. I changed
Configuration.java to use a singleton pattern instead of static methods to make
future conf migration easier (so that the same JVM could in theory have multiple
Configurations by removing the singleton - now each Configuration can stand on
its own). I added static helper methods to ensure backwards
compatibility.
4. In
apps/Driver.java, I changed the "ERROR - no logger set" message to "ERROR - no
logger set - using System.out" just for clarity (I was confused until I saw the
source code).
I'm attaching a cvs
diff of my changes (against the fop-0_20_3 tag). I think this is the right
thing to do, let me know if it's not.
If it's useful, I
can make these changes work from the command line, or go ahead and refactor the
Options to not be JVM-global - just depends if folks are interested. I guess
this would make sense on the latest dev branch, not the 0.20.3
branch.
Brian
? bokconfdiffs.txt Index: apps/Driver.java =================================================================== RCS file: /home/cvspublic/xml-fop/src/org/apache/fop/apps/Driver.java,v retrieving revision 1.36.2.1 diff -r1.36.2.1 Driver.java 226c226 < log.error("Logger not set"); --- > log.error("Logger not set - using System.out"); Index: configuration/Configuration.java =================================================================== RCS file: /home/cvspublic/xml-fop/src/org/apache/fop/configuration/Configuration.java,v retrieving revision 1.6 diff -r1.6 Configuration.java 31,37c31,39 < /** < * stores the configuration information < */ < private static Hashtable standardConfiguration = new Hashtable(30); < ; < private static Hashtable pdfConfiguration = new Hashtable(20); < private static Hashtable awtConfiguration = new Hashtable(20); --- > /** > * base path for font paths > */ > private String basePath = null ; > > /** > * Singleton instance > */ > private static Configuration singleton = null ; 42,51c44 < private static Hashtable configuration = new Hashtable(3); < < /** < * loads the configuration types into the configuration Hashtable < */ < static { < configuration.put("standard", standardConfiguration); < configuration.put("pdf", pdfConfiguration); < configuration.put("awt", awtConfiguration); < } --- > private Hashtable configuration = null ; 52a46,70 > /** > * HashTables for each configuration type > */ > private Hashtable standardConfiguration = null ; > private Hashtable pdfConfiguration = null ; > private Hashtable awtConfiguration = null ; > > /** > * Constructor for singleton pattern > * Creates hash of hashes for different config types > */ > private Configuration() { > standardConfiguration = new Hashtable(30) ; > pdfConfiguration = new Hashtable(20) ; > awtConfiguration = new Hashtable(20) ; > > configuration = new Hashtable(3) ; > configuration.put("standard", standardConfiguration) ; > configuration.put("pdf", pdfConfiguration) ; > configuration.put("awt", awtConfiguration) ; > } > > /** > * Hashtable accessor method for singleton pattern > */ 54,55c72,115 < return configuration; < } --- > if (singleton == null) > singleton = new Configuration() ; > return singleton.getHashMap() ; > } > > /** > * Object accessor method for singleton pattern > */ > public static Configuration getInstance() { > if (singleton == null) > singleton = new Configuration() ; > return singleton ; > } > > /** > * Get base Hashtable > */ > public Hashtable getHashMap() { > return configuration ; > } > > /** > * Set the base Path for font paths > */ > public void setBasePath(String basePath) { > this.basePath = basePath ; > } > > /** > * Get the base Path for font paths > */ > public String getBasePath() { > return this.basePath ; > } > > /** > * static helper for getValue > * when caller code is changed, remove this method for the non-static > * version below (change its name to just getvalue) > * same for other static helpers > */ > public static Object getValue(String key, int role) { > return getInstance().lgetValue(key, role) ; > } 66c126 < public static Object getValue(String key, int role) { --- > public Object lgetValue(String key, int role) { 254a315,321 > /** > * static helper for setup > */ > public static void setup(int role, Hashtable config) { > getInstance().lsetup(role, config) ; > } > 259c326 < public static void setup(int role, Hashtable config) { --- > public void lsetup(int role, Hashtable config) { 262c329 < standardConfiguration = config; --- > standardConfiguration = config ; 265c332 < pdfConfiguration = config; --- > pdfConfiguration = config ; 268c335 < awtConfiguration = config; --- > awtConfiguration = config ; 274a342,348 > /** > * static helper for put > */ > public static void put(String key, Object value, int role) { > getInstance().lput(key, value, role) ; > } > 282c356 < public static void put(String key, Object value, int role) { --- > public void lput(String key, Object value, int role) { 314a389,395 > /** > * static helper for backwards compatibility > */ > public static void dumpConfiguration() { > getInstance().ldumpConfiguration() ; > } > 318c399 < public static void dumpConfiguration() { --- > public void ldumpConfiguration() { Index: configuration/FontInfo.java =================================================================== RCS file: /home/cvspublic/xml-fop/src/org/apache/fop/configuration/FontInfo.java,v retrieving revision 1.2 diff -r1.2 FontInfo.java 32c32 < return metricsFile; --- > return Configuration.getInstance().getBasePath() + metricsFile ; 36c36 < return embedFile; --- > return Configuration.getInstance().getBasePath() + embedFile ;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]