diff servlet2/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/servlet2/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"));
+	}
+
+}