changeset 552:785fc58b68b1 digilibPDF

more cleanup and refactoring
author robcast
date Wed, 15 Dec 2010 08:58:01 +0100
parents 6c9eba7772cf
children d3b29ccdef32
files servlet/src/digilib/servlet/DigilibConfiguration.java servlet/src/digilib/servlet/DigilibRequest.java servlet/src/digilib/servlet/ImageJobDescription.java servlet/src/digilib/servlet/PDFCache.java servlet/src/digilib/servlet/PDFJobDescription.java servlet/src/digilib/servlet/PDFStreamWorker.java servlet/src/digilib/servlet/ParameterMap.java servlet/src/digilib/servlet/Scaler.java servlet/src/digilib/servlet/Texter.java
diffstat 9 files changed, 119 insertions(+), 65 deletions(-) [+]
line wrap: on
line diff
--- a/servlet/src/digilib/servlet/DigilibConfiguration.java	Tue Dec 14 20:26:35 2010 +0100
+++ b/servlet/src/digilib/servlet/DigilibConfiguration.java	Wed Dec 15 08:58:01 2010 +0100
@@ -50,8 +50,6 @@
  */
 public class DigilibConfiguration extends ParameterMap {
 
-	private static final long serialVersionUID = -6630487070791637120L;
-
 	/** DocuImage class instance */
 	private Class<DocuImageImpl> docuImageClass = null;
 
@@ -63,11 +61,16 @@
 	 *  
 	 */
 	public DigilibConfiguration() {
-		// create HashMap(20)
 		super(20);
 		// we start with a default logger config
 		BasicConfigurator.configure();
+		initParams();
+	}
 
+	/**
+	 * 
+	 */
+	protected void initParams() {
 		/*
 		 * Definition of parameters and default values. System parameters that
 		 * are not read from config file have a type 's'.
@@ -93,6 +96,10 @@
 		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'
@@ -161,7 +168,8 @@
         newParameter("pdf-temp-dir", "pdf_temp", null, 'f');
         // PDF generation cache directory
         newParameter("pdf-cache-dir", "pdf_cache", null, 'f');
-
+        // PDF generation cache directory
+        newParameter("pdf-cache-dir", "pdf_cache", null, 'f');
 	}
 
 	/**
--- a/servlet/src/digilib/servlet/DigilibRequest.java	Tue Dec 14 20:26:35 2010 +0100
+++ b/servlet/src/digilib/servlet/DigilibRequest.java	Wed Dec 15 08:58:01 2010 +0100
@@ -65,11 +65,14 @@
 
 	protected ServletRequest servletRequest; // internal ServletRequest
 
-	/** Creates a new instance of DigilibRequest and sets default values. */
 	public DigilibRequest() {
-		// create HashMap(20)
 		super(30);
+	}
 
+	/** set up parameters.
+	 * 
+	 */
+	protected void initParams() {
 		/*
 		 * Definition of parameters and default values. Parameter of type 's'
 		 * are for the servlet.
@@ -152,7 +155,6 @@
 		newParameter("lv", new Integer(2), null, 'c');
 		// marks
 		newParameter("mk", "", null, 'c');
-
 	}
 
 	/**
@@ -162,7 +164,7 @@
 	 * @param request
 	 */
 	public DigilibRequest(ServletRequest request) {
-		this();
+		super(30);
 		setWithRequest(request);
 	}
 
--- a/servlet/src/digilib/servlet/ImageJobDescription.java	Tue Dec 14 20:26:35 2010 +0100
+++ b/servlet/src/digilib/servlet/ImageJobDescription.java	Wed Dec 15 08:58:01 2010 +0100
@@ -57,6 +57,14 @@
 	public ImageJobDescription(DigilibConfiguration dlcfg) {
 		super(30);
 		dlConfig = dlcfg;
+	}
+
+
+	/** set up Parameters
+	 * @see digilib.servlet.ParameterMap#initParams()
+	 */
+	@Override
+	protected void initParams() {
 		// url of the page/document (second part)
 		newParameter("fn", "", null, 's');
 		// page number
@@ -98,16 +106,31 @@
 	}
 
 
-	/** Constructor using another ParameterMap.
-	 * Clones internal Maps only!
-	 * @param otherMap
-	 * @param dlcfg
+	/* (non-Javadoc)
+	 * @see digilib.servlet.ParameterMap#initOptions()
 	 */
-	public ImageJobDescription(ParameterMap otherMap, DigilibConfiguration dlcfg) {
-		super(otherMap);
-		dlConfig = dlcfg;
+	@Override
+	protected void initOptions() {
+		if (options == null) {
+			String s = this.getAsString("mo");
+			options = new OptionsSet(s);
+		}
 	}
-	
+
+
+	/** Creates new ImageJobDescription by merging Parameters from another ParameterMap.
+	 * @param pm
+	 * @param dlcfg
+	 * @return
+	 */
+	public static ImageJobDescription setFrom(ParameterMap pm, DigilibConfiguration dlcfg) {
+		ImageJobDescription newMap = new ImageJobDescription(dlcfg);
+		// add all params to this map
+		newMap.params.putAll(pm.params);
+		newMap.initOptions();
+		return newMap;
+	}
+
 	
 	public String getMimeType() throws IOException {
 		if (mimeType == null) {
--- a/servlet/src/digilib/servlet/PDFCache.java	Tue Dec 14 20:26:35 2010 +0100
+++ b/servlet/src/digilib/servlet/PDFCache.java	Wed Dec 15 08:58:01 2010 +0100
@@ -70,7 +70,7 @@
         logger.info("***** Digital Image Library Image PDF-Cache Servlet (version "
                 + version + ") *****");
 
-		ServletContext context = config.getServletContext();
+		ServletContext context = getServletContext();
 		dlConfig = (DigilibConfiguration) context.getAttribute("digilib.servlet.configuration");
 		if (dlConfig == null) {
 			// no Configuration
@@ -190,7 +190,7 @@
 
 		try {
 			// forward to the relevant jsp
-			ServletContext context = request.getServletContext();
+			ServletContext context = getServletContext();
 			RequestDispatcher dispatch = context.getRequestDispatcher(jsp);
 			dispatch.forward(request, response);
 		} catch (ServletException e) {
@@ -250,7 +250,7 @@
 		// filename example: digilib_example_pgs1-3.pdf
 		String filename;
 		filename =  "digilib_";
-		filename += pdfji.getImageJobInformation().getAsString("fn");
+		filename += pdfji.getAsString("fn");
 		filename += "_pgs" + pdfji.getAsString("pgs");
 		filename += ".pdf";
 		
--- a/servlet/src/digilib/servlet/PDFJobDescription.java	Tue Dec 14 20:26:35 2010 +0100
+++ b/servlet/src/digilib/servlet/PDFJobDescription.java	Wed Dec 15 08:58:01 2010 +0100
@@ -22,10 +22,9 @@
  */
 public class PDFJobDescription extends ParameterMap {
 
-	ImageJobDescription image_info = null;
 	DigilibConfiguration dlConfig = null;
 	NumRange pages = null;
-	/** gengeral logger for this class */
+	/** general logger for this class */
 	protected static Logger logger = Logger.getLogger("digilib.servlet");
 
 	
@@ -38,14 +37,6 @@
 	public PDFJobDescription(DigilibConfiguration dlcfg) {
 		super(30);
 		dlConfig = dlcfg;
-		// page numbers
-		newParameter("pgs", "", null, 's');
-		// url of the page/document (second part)
-		newParameter("fn", "", null, 's');
-		// width of client in pixels
-		newParameter("dw", new Integer(0), null, 's');
-		// height of client in pixels
-		newParameter("dh", new Integer(0), null, 's');
 	}
 
 	/**
@@ -61,24 +52,33 @@
 	}
 
 	
+	protected void initParams() {
+		// page numbers
+		newParameter("pgs", "", null, 's');
+		// url of the page/document (second part)
+		newParameter("fn", "", null, 's');
+		// width of client in pixels
+		newParameter("dw", new Integer(0), null, 's');
+		// height of client in pixels
+		newParameter("dh", new Integer(0), null, 's');
+	}
+	
 	/**
 	 * Read in the request object.
 	 * 
 	 * @param request
 	 */
 	public void setWithRequest(HttpServletRequest request) {
-		image_info = new ImageJobDescription(dlConfig);
-		// FIXME: image_info.setWithRequest(request);
-		
-		for (String param : parameter_list){
-			if (request.getParameterMap().containsKey(param)){
-				setValueFromString(param, request.getParameter(param));
+		for (String k : params.keySet()) {
+			if (request.getParameterMap().containsKey(k)) {
+				setValueFromString(k, request.getParameter(k));
 			}
 		}
 		// process parameters
 		try {
             pages = new NumRange(getAsString("pgs"));
-            DocuDirectory dir = image_info.getFileDirectory();
+            ImageJobDescription ij = ImageJobDescription.setFrom(this, dlConfig);
+            DocuDirectory dir = ij.getFileDirectory();
             int dirsize = dir.size(FileOps.CLASS_IMAGE);
             pages.setMaxnum(dirsize);
         } catch (Exception e) {
@@ -97,31 +97,24 @@
 
 		// TODO use complete request information for id generation
 		
-		if(this.image_info!=null){
-			String fn = image_info.getAsString("fn");
-			String dh = image_info.getAsString("dh");
-			String pgs = getAsString("pgs");
+		String fn = getAsString("fn");
+		String dh = getAsString("dh");
+		String dw = getAsString("dw");
+		String pgs = getAsString("pgs");
 			
-			id = "fn=" + fn + "&dh=" + dh + "&pgs=" + pgs + ".pdf";
-			// make safe to use as filename by urlencoding
-			try {
-                id = URLEncoder.encode(id, "UTF-8");
-            } catch (UnsupportedEncodingException e) {
-                // TODO Auto-generated catch block
-                e.printStackTrace();
-            }
+		id = "fn=" + fn + "&dw=" + dw + "&dh=" + dh + "&pgs=" + pgs + ".pdf";
+		// make safe to use as filename by urlencoding
+		try {
+			id = URLEncoder.encode(id, "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			// this shouldn't happen
 		}
-		else {
-			id = null;
-		}
-		
 		return id;
 	}
 
 	
 	public ImageJobDescription getImageJobInformation(){
-		ImageJobDescription new_image_info = new ImageJobDescription(image_info, dlConfig);
-		return new_image_info;
+		return ImageJobDescription.setFrom(this, dlConfig);
 	}
 	
 	
--- a/servlet/src/digilib/servlet/PDFStreamWorker.java	Tue Dec 14 20:26:35 2010 +0100
+++ b/servlet/src/digilib/servlet/PDFStreamWorker.java	Wed Dec 15 08:58:01 2010 +0100
@@ -81,7 +81,7 @@
 		for (int p : pgs) {
 			logger.debug(" - adding Image " + p + " to " + outstream);
 			// create ImageJobInformation
-			ImageJobDescription iji = job_info.getImageJobInformation();
+			ImageJobDescription iji = ImageJobDescription.setFrom(job_info, job_info.dlConfig);
 			iji.setValue("pn", p);
 			addImage(doc, iji);
 			logger.debug(" - done adding Image " + p + " to " + outstream);
--- a/servlet/src/digilib/servlet/ParameterMap.java	Tue Dec 14 20:26:35 2010 +0100
+++ b/servlet/src/digilib/servlet/ParameterMap.java	Wed Dec 15 08:58:01 2010 +0100
@@ -22,6 +22,7 @@
 package digilib.servlet;
 
 import java.util.HashMap;
+import java.util.Map.Entry;
 
 /** HashMap of digilib.servlet.Parameter's.
  * 
@@ -42,14 +43,16 @@
 	public ParameterMap() {
 		params = new HashMap<String, Parameter>();
 		options = new OptionsSet();
+		initParams();
 	}
 
 	/** Constructor with initial size.
-	 * @param arg0
+	 * @param size
 	 */
-	public ParameterMap(int arg0) {
-		params = new HashMap<String, Parameter>(arg0);
+	public ParameterMap(int size) {
+		params = new HashMap<String, Parameter>(size);
 		options = new OptionsSet();
+		initParams();
 	}
 
 	/** Shallow copy constructor.
@@ -59,11 +62,40 @@
 	@SuppressWarnings("unchecked")
 	public static ParameterMap cloneFrom(ParameterMap pm) {
 		ParameterMap newPm = new ParameterMap();
+		// clone params to this map
 		newPm.params = (HashMap<String, Parameter>) pm.params.clone();
 		newPm.options = (OptionsSet) pm.options.clone();
 		return newPm;
 	}
 
+	
+	/** Creates new ParameterMap by merging Parameters from another ParameterMap.
+	 * @param pm
+	 * @return
+	 */
+	public static ParameterMap setFrom(ParameterMap pm) {
+		ParameterMap newPm = new ParameterMap();
+		// add all params to this map
+		newPm.params.putAll(pm.params);
+		newPm.initOptions();
+		return newPm;
+		
+	}
+	
+	/** set up parameters
+	 * 
+	 */
+	protected void initParams() {
+		// no default parameters
+	}
+	
+	/** set up options
+	 * 
+	 */
+	protected void initOptions() {
+		// no default options
+	}
+	
 	/** Get the Parameter with the corresponding key.
 	 * 
 	 * Returns null if no element is associated with key.
--- a/servlet/src/digilib/servlet/Scaler.java	Tue Dec 14 20:26:35 2010 +0100
+++ b/servlet/src/digilib/servlet/Scaler.java	Wed Dec 15 08:58:01 2010 +0100
@@ -152,7 +152,7 @@
         // parse request
         DigilibRequest dlRequest = new DigilibRequest(request);
         // extract the job information
-        ImageJobDescription jobTicket = new ImageJobDescription(dlRequest, dlConfig);
+        ImageJobDescription jobTicket = ImageJobDescription.setFrom(dlRequest, dlConfig);
 
         ImageWorker job = null;
         try {
--- a/servlet/src/digilib/servlet/Texter.java	Tue Dec 14 20:26:35 2010 +0100
+++ b/servlet/src/digilib/servlet/Texter.java	Wed Dec 15 08:58:01 2010 +0100
@@ -108,9 +108,7 @@
 	protected void doGet(HttpServletRequest request,
 			HttpServletResponse response) throws ServletException, IOException {
 		// create new request with defaults
-		DigilibRequest dlReq = new DigilibRequest();
-		// set with request parameters
-		dlReq.setWithRequest(request);
+		DigilibRequest dlReq = new DigilibRequest(request);
 		// add DigilibRequest to ServletRequest
 		request.setAttribute("digilib.servlet.request", dlReq);
 		// do the processing
@@ -126,9 +124,7 @@
 	protected void doPost(HttpServletRequest request,
 			HttpServletResponse response) throws ServletException, IOException {
 		// create new request with defaults
-		DigilibRequest dlReq = new DigilibRequest();
-		// set with request parameters
-		dlReq.setWithRequest(request);
+		DigilibRequest dlReq = new DigilibRequest(request);
 		// add DigilibRequest to ServletRequest
 		request.setAttribute("digilib.servlet.request", dlReq);
 		// do the processing