Mercurial > hg > digilib-old
diff servlet3/src/main/java/digilib/servlet/DigilibServletConfiguration.java @ 903:7779b37d1d05
refactored into maven modules per servlet type.
can build servlet-api 2.3 and 3.0 via profile now!
author | robcast |
---|---|
date | Tue, 26 Apr 2011 20:24:31 +0200 |
parents | |
children | 0cea7e608080 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/servlet3/src/main/java/digilib/servlet/DigilibServletConfiguration.java Tue Apr 26 20:24:31 2011 +0200 @@ -0,0 +1,234 @@ +/* + * DigilibConfiguration -- Holding all parameters for digilib servlet. + * + * Digital Image Library servlet components + * + * Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de) + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + * + * Please read license.txt for the full details. A copy of the GPL may be found + * at http://www.gnu.org/copyleft/lgpl.html + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +package digilib.servlet; + +import java.io.File; +import java.util.Map; +import java.util.Map.Entry; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; + +import digilib.image.DocuImageImpl; +import digilib.io.FileOps; +import digilib.util.Parameter; +import digilib.util.XMLListLoader; + +/** + * Class to hold the digilib servlet configuration parameters. The parameters + * can be read from the digilib-config file and be passed to other servlets or + * beans. <br>errorImgFileName: image file to send in case of error. <br> + * denyImgFileName: image file to send if access is denied. <br>baseDirs: + * array of base directories in order of preference (prescaled versions first). + * <br>useAuth: use authentication information. <br>authConfPath: + * authentication configuration file. <br>... <br> + * + * @author casties + * + */ +public class DigilibServletConfiguration extends DigilibConfiguration { + + /** + * Definition of parameters and default values. + */ + protected void initParams() { + /* + * Definition of parameters and default values. System parameters that + * are not read from config file have a type 's'. + */ + + // digilib servlet version + newParameter( + "servlet.version", + digilib.servlet.Scaler.getVersion(), + null, + 's'); + // configuration file location + newParameter("servlet.config.file", null, null, 's'); + // DocuDirCache instance + newParameter("servlet.dir.cache", null, null, 's'); + // DocuImage class instance + newParameter( + "servlet.docuimage.class", + digilib.image.JAIDocuImage.class, + null, + 's'); + // AuthOps instance for authentication + newParameter("servlet.auth.op", null, null, 's'); + // Executor for image operations + newParameter("servlet.worker.imageexecutor", null, null, 's'); + // Executor for PDF operations + newParameter("servlet.worker.pdfexecutor", null, null, 's'); + // Executor for PDF-image operations + newParameter("servlet.worker.pdfimageexecutor", null, null, 's'); + + /* + * parameters that can be read from config file have a type 'f' + */ + + // image file to send in case of error + newParameter( + "error-image", + new File("img/digilib-error.png"), + null, + 'f'); + // image file to send if access is denied + newParameter( + "denied-image", + new File("img/digilib-denied.png"), + null, + 'f'); + // image file to send if image file not found + newParameter( + "notfound-image", + new File("img/digilib-notfound.png"), + null, + 'f'); + // base directories in order of preference (prescaled versions last) + String[] bd = { "/docuserver/images", "/docuserver/scaled/small" }; + newParameter("basedir-list", bd, null, 'f'); + // use authentication information + newParameter("use-authorization", Boolean.FALSE, null, 'f'); + // authentication configuration file + newParameter("auth-file", new File("digilib-auth.xml"), null, 'f'); + // sending image files as-is allowed + newParameter("sendfile-allowed", Boolean.TRUE, null, 'f'); + // Type of DocuImage instance + newParameter( + "docuimage-class", + "digilib.image.JAIDocuImage", + null, + 'f'); + // part of URL used to indicate authorized access + newParameter("auth-url-path", "authenticated/", null, 'f'); + // degree of subsampling on image load + newParameter("subsample-minimum", new Float(2f), null, 'f'); + // default scaling quality + newParameter("default-quality", new Integer(1), null, 'f'); + // use mapping file to translate paths + newParameter("use-mapping", Boolean.FALSE, null, 'f'); + // mapping file location + newParameter("mapping-file", new File("digilib-map.xml"), null, 'f'); + // log4j config file location + newParameter("log-config-file", new File("log4j-config.xml"), null, 'f'); + // maximum destination image size (0 means no limit) + newParameter("max-image-size", new Integer(0), null, 'f'); + // number of working threads + newParameter("worker-threads", new Integer(1), null, 'f'); + // max number of waiting threads + newParameter("max-waiting-threads", new Integer(20), null, 'f'); + // number of pdf-generation threads + newParameter("pdf-worker-threads", new Integer(1), null, 'f'); + // max number of waiting pdf-generation threads + newParameter("pdf-max-waiting-threads", new Integer(20), null, 'f'); + // number of pdf-image generation threads + newParameter("pdf-image-worker-threads", new Integer(1), null, 'f'); + // max number of waiting pdf-image generation threads + newParameter("pdf-image-max-waiting-threads", new Integer(10), null, 'f'); + // PDF generation temp directory + newParameter("pdf-temp-dir", "pdf_temp", null, 'f'); + // PDF generation cache directory + newParameter("pdf-cache-dir", "pdf_cache", null, 'f'); + // allow image toolkit to use disk cache + newParameter("img-diskcache-allowed", Boolean.TRUE, null, 'f'); + // default type of error message (image, text, code) + newParameter("default-errmsg-type", "image", null, 'f'); + } + + /** + * Constructor taking a ServletConfig. Reads the config file location from + * an init parameter and loads the config file. Calls <code>readConfig()</code>. + * + * @see readConfig() + */ + public DigilibServletConfiguration(ServletContext c) throws Exception { + readConfig(c); + } + + /** + * read parameter list from the XML file in init parameter "config-file" + * or file digilib-config.xml + */ + @SuppressWarnings("unchecked") + public void readConfig(ServletContext c) throws Exception { + + /* + * Get config file name. The file name is first looked for as an init + * parameter, then in a fixed location in the webapp. + */ + if (c == null) { + // no config no file... + return; + } + String fn = c.getInitParameter("config-file"); + if (fn == null) { + fn = ServletOps.getConfigFile("digilib-config.xml", c); + if (fn == null) { + logger.fatal("readConfig: no param config-file"); + throw new ServletException("ERROR: no digilib config file!"); + } + } + File f = new File(fn); + // setup config file list reader + XMLListLoader lilo = + new XMLListLoader("digilib-config", "parameter", "name", "value"); + // read config file into HashMap + Map<String,String> confTable = lilo.loadURL(f.toURL().toString()); + + // set config file path parameter + setValue("servlet.config.file", f.getCanonicalPath()); + + /* + * read parameters + */ + + for (Entry<String, String> confEntry: confTable.entrySet()) { + Parameter p = get(confEntry.getKey()); + if (p != null) { + if (p.getType() == 's') { + // type 's' Parameters are not overwritten. + continue; + } + if (!p.setValueFromString(confEntry.getValue())) { + /* + * automatic conversion failed -- try special cases + */ + + // basedir-list + if (confEntry.getKey().equals("basedir-list")) { + // split list into directories + String[] sa = FileOps.pathToArray(confEntry.getValue()); + if (sa != null) { + p.setValue(sa); + } + } + } + } else { + // parameter unknown -- just add + newParameter(confEntry.getKey(), null, confEntry.getValue(), 'f'); + } + } + // initialise static DocuImage class instance + DigilibServletConfiguration.docuImageClass = (Class<DocuImageImpl>) Class.forName(getAsString("docuimage-class")); + } + +}