# HG changeset patch # User robcast # Date 1292250925 -3600 # Node ID bc919634718848ae551b648274dbe1b3491637f2 # Parent e1094c5ec0323c43f2051cec709038bc91cbbaaf more refactoring and cleanup diff -r e1094c5ec032 -r bc9196347188 client/digitallibrary/dlInfo-js.jsp --- a/client/digitallibrary/dlInfo-js.jsp Fri Dec 10 09:35:09 2010 +0100 +++ b/client/digitallibrary/dlInfo-js.jsp Mon Dec 13 15:35:25 2010 +0100 @@ -19,7 +19,7 @@ %> // Automatically generated JavaScript snippet with parameters <% - Object[] keys = dlRequest.keySet().toArray(); + Object[] keys = dlRequest.getParams().keySet().toArray(); java.util.Arrays.sort(keys); int l = keys.length; for (int i = 0; i < l; i++) { diff -r e1094c5ec032 -r bc9196347188 client/digitallibrary/dlInfo-xml.jsp --- a/client/digitallibrary/dlInfo-xml.jsp Fri Dec 10 09:35:09 2010 +0100 +++ b/client/digitallibrary/dlInfo-xml.jsp Mon Dec 13 15:35:25 2010 +0100 @@ -23,7 +23,7 @@ %> <% - Object[] keys = dlRequest.keySet().toArray(); + Object[] keys = dlRequest.getParams.keySet().toArray(); java.util.Arrays.sort(keys); int l = keys.length; for (int i = 0; i < l; i++) { diff -r e1094c5ec032 -r bc9196347188 client/digitallibrary/server/dlConfig.jsp --- a/client/digitallibrary/server/dlConfig.jsp Fri Dec 10 09:35:09 2010 +0100 +++ b/client/digitallibrary/server/dlConfig.jsp Mon Dec 13 15:35:25 2010 +0100 @@ -42,7 +42,7 @@ <% - Object[] keys = dlConfig.keySet().toArray(); + Object[] keys = dlConfig.getParams().keySet().toArray(); java.util.Arrays.sort(keys); int l = keys.length; for (int i = 0; i < l; i++) { diff -r e1094c5ec032 -r bc9196347188 client/digitallibrary/server/dlRequest.jsp --- a/client/digitallibrary/server/dlRequest.jsp Fri Dec 10 09:35:09 2010 +0100 +++ b/client/digitallibrary/server/dlRequest.jsp Mon Dec 13 15:35:25 2010 +0100 @@ -93,7 +93,7 @@
<% - Object[] keys = dlRequest.keySet().toArray(); + Object[] keys = dlRequest.getParams().keySet().toArray(); java.util.Arrays.sort(keys); int l = keys.length; for (int i = 0; i < l; i++) { diff -r e1094c5ec032 -r bc9196347188 servlet/src/digilib/servlet/DigilibPDFWorker.java --- a/servlet/src/digilib/servlet/DigilibPDFWorker.java Fri Dec 10 09:35:09 2010 +0100 +++ b/servlet/src/digilib/servlet/DigilibPDFWorker.java Mon Dec 13 15:35:25 2010 +0100 @@ -51,9 +51,9 @@ private File outputfile = null; - private PDFJobInformation job_info = null; + private PDFJobDescription job_info = null; - public DigilibPDFWorker(DigilibConfiguration dlConfig, PDFJobInformation pdfji, File outputfile) { + public DigilibPDFWorker(DigilibConfiguration dlConfig, PDFJobDescription pdfji, File outputfile) { super(); // TODO dlConfig this.dlConfig = dlConfig; @@ -165,7 +165,7 @@ ImageJobDescription iji = job_info.getImageJobInformation(); iji.setValue("pn", pn); // create image worker - DigilibImageWorker1 image_worker = new DigilibImageWorker1(dlConfig, null, iji); + /* FIXME: DigilibImageWorker1 image_worker = new DigilibImageWorker1(dlConfig, null, iji); try { DocuImage img = image_worker.render(); @@ -194,6 +194,7 @@ logger.error(e.getMessage()); e.printStackTrace(); } + */ } diff -r e1094c5ec032 -r bc9196347188 servlet/src/digilib/servlet/Initialiser.java --- a/servlet/src/digilib/servlet/Initialiser.java Fri Dec 10 09:35:09 2010 +0100 +++ b/servlet/src/digilib/servlet/Initialiser.java Mon Dec 13 15:35:25 2010 +0100 @@ -46,6 +46,7 @@ * @author casties * */ +@SuppressWarnings("serial") public class Initialiser extends HttpServlet { /** servlet version */ @@ -61,13 +62,13 @@ DigilibConfiguration dlConfig; /** Executor for digilib image jobs */ - DigilibJobCenter imageEx; + DigilibJobCenter imageEx; /** Executor for PDF jobs */ - DigilibJobCenter pdfEx; + DigilibJobCenter pdfEx; /** Executor for PDF image jobs */ - DigilibJobCenter pdfImageEx; + DigilibJobCenter pdfImageEx; /** * Initialisation on first run. @@ -144,7 +145,7 @@ int pmt = dlConfig.getAsInt("pdf-max-waiting-threads"); pdfEx = new DigilibJobCenter(pnt, pmt, true); dlConfig.setValue("servlet.worker.pdfexecutor", pdfEx); - // digilib worker threads + // PDF image worker threads int pint = dlConfig.getAsInt("pdf-image-worker-threads"); int pimt = dlConfig.getAsInt("pdf-image-max-waiting-threads"); pdfImageEx = new DigilibJobCenter(pint, pimt, true); diff -r e1094c5ec032 -r bc9196347188 servlet/src/digilib/servlet/PDFCache.java --- a/servlet/src/digilib/servlet/PDFCache.java Fri Dec 10 09:35:09 2010 +0100 +++ b/servlet/src/digilib/servlet/PDFCache.java Mon Dec 13 15:35:25 2010 +0100 @@ -3,8 +3,11 @@ import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; +import java.util.concurrent.Future; import javax.servlet.RequestDispatcher; import javax.servlet.ServletConfig; @@ -14,6 +17,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import digilib.image.DocuImage; + /** * A class for handling user requests for pdf documents from digilib images. * @@ -33,6 +38,8 @@ private DigilibJobCenter pdfJobCenter = null; + private DigilibJobCenter pdfImageJobCenter = null; + private File cache_directory = new File("cache"); private File temp_directory = new File("pdf_temp"); @@ -57,7 +64,7 @@ // TODO ? functionality for the pre-generation of complete books/chapters using default values - public void init(ServletConfig config) throws ServletException{ + public void init(ServletConfig config) throws ServletException { super.init(config); System.out.println("***** Digital Image Library Image PDF-Cache Servlet (version " @@ -88,6 +95,7 @@ } pdfJobCenter = (DigilibJobCenter) dlConfig.getValue("servlet.worker.pdfexecutor"); + pdfImageJobCenter = (DigilibJobCenter) dlConfig.getValue("servlet.worker.pdfimageexecutor"); // register this instance globally context.setAttribute(instanceKey, this); @@ -106,14 +114,11 @@ } - - @Override public void processRequest(HttpServletRequest request, HttpServletResponse response) { // evaluate request ( make a PDFJobDeclaration , get the DocumentId) - PDFJobInformation pdfji = new PDFJobInformation(dlConfig); - pdfji.setWithRequest(request); + PDFJobDescription pdfji = new PDFJobDescription(request, dlConfig); String docid = pdfji.getDocumentId(); @@ -126,9 +131,11 @@ int status = getStatus(docid); if (status == STATUS_NONEXISTENT) { + // not there -- start creation createNewPdfDocument(pdfji, docid); notifyUser(status, docid, request, response); } else if (status == STATUS_DONE) { + // pdf created -- send it try { sendFile(docid, getDownloadFilename(pdfji), response); } catch (IOException e) { @@ -169,9 +176,9 @@ jsp = JSP_ERROR; } - RequestDispatcher dispatch = context.getRequestDispatcher(jsp); - try { + // forward to the relevant jsp + RequestDispatcher dispatch = context.getRequestDispatcher(jsp); dispatch.forward(request, response); } catch (ServletException e) { logger.debug(e.getMessage()); @@ -203,11 +210,20 @@ * * @param pdfji * @param filename + * @return + * @throws FileNotFoundException */ - public void createNewPdfDocument(PDFJobInformation pdfji, String filename){ + public Future createNewPdfDocument(PDFJobDescription pdfji, String filename) throws FileNotFoundException{ // start new worker - PDFMaker pdf_maker = new PDFMaker(context, pdfji,filename); - new Thread(pdf_maker, "PDFMaker").start(); + File of = this.getTempFile(filename); + OutputStream os = new FileOutputStream(of); + PDFStreamWorker job = new PDFStreamWorker(dlConfig, os, pdfji, pdfImageJobCenter); + // start job + Future jobTicket = pdfJobCenter.submit(job); + // what do we do with the result? + return jobTicket; + /* PDFMaker pdf_maker = new PDFMaker(context, pdfji,filename); + new Thread(pdf_maker, "PDFMaker").start();*/ } @@ -217,7 +233,7 @@ * @param pdfji * @return */ - public String getDownloadFilename(PDFJobInformation pdfji){ + public String getDownloadFilename(PDFJobDescription pdfji){ // filename example: digilib_example_pgs1-3.pdf String filename; filename = "digilib_"; diff -r e1094c5ec032 -r bc9196347188 servlet/src/digilib/servlet/PDFFileWorker.java --- a/servlet/src/digilib/servlet/PDFFileWorker.java Fri Dec 10 09:35:09 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -package digilib.servlet; - -import java.io.OutputStream; -import java.util.concurrent.Callable; - -import digilib.image.DocuImage; - -public class PDFFileWorker extends PDFStreamWorker implements Callable { - - public PDFFileWorker(DigilibConfiguration dlConfig, - OutputStream outputfile, PDFJobInformation job_info, - DigilibJobCenter imageJobCenter) { - super(dlConfig, outputfile, job_info, imageJobCenter); - // TODO Auto-generated constructor stub - } - -} diff -r e1094c5ec032 -r bc9196347188 servlet/src/digilib/servlet/PDFJobDescription.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/servlet/src/digilib/servlet/PDFJobDescription.java Mon Dec 13 15:35:25 2010 +0100 @@ -0,0 +1,150 @@ +package digilib.servlet; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.ArrayList; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.log4j.Logger; + +import digilib.io.DocuDirectory; +import digilib.io.FileOps; + + +/** + * A container class for storing a set of instruction parameters + * used for content generator classes like MakePDF. + * + * + * @author cmielack, casties + * + */ +public class PDFJobDescription extends ParameterMap { + + String[] parameter_list = {"pgs"}; // all other parameters get passed into an extra ImageJobInformation + // (this should be redesigned later...) + + + ImageJobDescription image_info = null; + DigilibConfiguration dlConfig = null; + NumRange pages = null; + /** gengeral logger for this class */ + protected static Logger logger = Logger.getLogger("digilib.servlet"); + + + /** + * Initialize the PDFJobInformation + * + * @param dlcfg + * The DigilibConfiguration. + */ + public PDFJobDescription(DigilibConfiguration dlcfg) { + super(30); + + // page numbers + newParameter("pgs", "", null, 's'); + dlConfig = dlcfg; + + } + + /** + * Initialize the PDFJobInformation with a request. + * + * @param dlcfg The DigilibConfiguration. + * @param request + */ + public PDFJobDescription(HttpServletRequest request, DigilibConfiguration dlcfg) { + super(30); + dlConfig = dlcfg; + this.setWithRequest(request); + } + + + /** + * 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)); + } + } + // process parameters + try { + pages = new NumRange(getAsString("pgs")); + DocuDirectory dir = image_info.getFileDirectory(); + int dirsize = dir.size(FileOps.CLASS_IMAGE); + pages.setMaxnum(dirsize); + } catch (Exception e) { + logger.warn("Problem with parsing page numbers: "+e.toString()); + } + } + + + /** + * Generate the filename of the pdf to be created. + * + * @return + */ + public String getDocumentId(){ + String id; + + // 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"); + + 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(); + } + } + else { + id = null; + } + + return id; + } + + + public ImageJobDescription getImageJobInformation(){ + ImageJobDescription new_image_info = new ImageJobDescription(image_info, dlConfig); + return new_image_info; + } + + + public NumRange getPages() { + return pages; + } + + + /** + * Check parameters for validity. + * Returns true if no errors are found. + * + * @return + */ + public boolean checkValidity(){ + if (pages != null) { + return true; + } + return false; + } + + public DigilibConfiguration getDlConfig(){ + return dlConfig; + } + +} \ No newline at end of file diff -r e1094c5ec032 -r bc9196347188 servlet/src/digilib/servlet/PDFJobInformation.java --- a/servlet/src/digilib/servlet/PDFJobInformation.java Fri Dec 10 09:35:09 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,139 +0,0 @@ -package digilib.servlet; - -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; -import java.util.ArrayList; - -import javax.servlet.http.HttpServletRequest; - -import org.apache.log4j.Logger; - -import digilib.io.DocuDirectory; -import digilib.io.FileOps; - - -/** - * A container class for storing a set of instruction parameters - * used for content generator classes like MakePDF. - * - * - * @author cmielack - * - */ -@SuppressWarnings("serial") -public class PDFJobInformation extends ParameterMap { - - String[] parameter_list = {"pgs"}; // all other parameters get passed into an extra ImageJobInformation - // (this should be redesigned later...) - - - ImageJobDescription image_info = null; - DigilibConfiguration dlConfig = null; - NumRange pages = null; - /** gengeral logger for this class */ - protected static Logger logger = Logger.getLogger("digilib.servlet"); - - - /** - * Initialize the PDFJobInformation - * - * @param dlcfg - * The DigilibConfiguration. - */ - public PDFJobInformation(DigilibConfiguration dlcfg) { - super(30); - - // page numbers - newParameter("pgs", "", null, 's'); - dlConfig = dlcfg; - - } - - - /** - * 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)); - } - } - // process parameters - try { - pages = new NumRange(getAsString("pgs")); - DocuDirectory dir = image_info.getFileDirectory(); - int dirsize = dir.size(FileOps.CLASS_IMAGE); - pages.setMaxnum(dirsize); - } catch (Exception e) { - logger.warn("Problem with parsing page numbers: "+e.toString()); - } - } - - - /** - * Generate the filename of the pdf to be created. - * - * @return - */ - public String getDocumentId(){ - String id; - - // 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"); - - 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(); - } - } - else { - id = null; - } - - return id; - } - - - public ImageJobDescription getImageJobInformation(){ - ImageJobDescription new_image_info = new ImageJobDescription(image_info, dlConfig); - return new_image_info; - } - - - public NumRange getPages() { - return pages; - } - - - /** - * Check parameters for validity. - * Returns true if no errors are found. - * - * @return - */ - public boolean checkValidity(){ - if (pages != null) { - return true; - } - return false; - } - - public DigilibConfiguration getDlConfig(){ - return dlConfig; - } - -} \ No newline at end of file diff -r e1094c5ec032 -r bc9196347188 servlet/src/digilib/servlet/PDFMaker.java --- a/servlet/src/digilib/servlet/PDFMaker.java Fri Dec 10 09:35:09 2010 +0100 +++ b/servlet/src/digilib/servlet/PDFMaker.java Mon Dec 13 15:35:25 2010 +0100 @@ -22,7 +22,7 @@ public static String version = "0.1"; - private PDFJobInformation job_info = null; + private PDFJobDescription job_info = null; private String filename = null; private DigilibConfiguration dlConfig = null; private ServletContext context = null; @@ -32,7 +32,7 @@ - public PDFMaker(ServletContext context, PDFJobInformation pdfji, String filename){ + public PDFMaker(ServletContext context, PDFJobDescription pdfji, String filename){ this.job_info = pdfji; this.filename = filename; this.dlConfig = pdfji.getDlConfig(); diff -r e1094c5ec032 -r bc9196347188 servlet/src/digilib/servlet/PDFStreamWorker.java --- a/servlet/src/digilib/servlet/PDFStreamWorker.java Fri Dec 10 09:35:09 2010 +0100 +++ b/servlet/src/digilib/servlet/PDFStreamWorker.java Mon Dec 13 15:35:25 2010 +0100 @@ -18,17 +18,17 @@ public class PDFStreamWorker implements Callable { - private static Logger logger = Logger.getLogger(PDFStreamWorker.class); + protected static Logger logger = Logger.getLogger(PDFStreamWorker.class); - private DigilibConfiguration dlConfig = null; + protected DigilibConfiguration dlConfig = null; - private Document doc = null; + protected Document doc = null; - private OutputStream outstream = null; + protected OutputStream outstream = null; - private PDFJobInformation job_info = null; + protected PDFJobDescription job_info = null; - private DigilibJobCenter imageJobCenter = null; + protected DigilibJobCenter imageJobCenter = null; /** * @param dlConfig @@ -36,7 +36,7 @@ * @param job_info */ public PDFStreamWorker(DigilibConfiguration dlConfig, OutputStream outputfile, - PDFJobInformation job_info, + PDFJobDescription job_info, DigilibJobCenter imageJobCenter) { super(); this.dlConfig = dlConfig; @@ -45,7 +45,6 @@ this.imageJobCenter = imageJobCenter; } - @Override public OutputStream call() throws Exception { outstream = renderPDF(); return outstream; @@ -77,7 +76,6 @@ + (System.currentTimeMillis() - start_time) + "ms)"); start_time = System.currentTimeMillis(); - // Integer[] pgs = job_info.getPageNrs();//get_pgs(); NumRange pgs = job_info.getPages(); for (int p : pgs) { @@ -139,16 +137,16 @@ throws InterruptedException, ExecutionException, IOException, DocumentException { // create image worker - ImageWorker image_worker = new ImageWorker(dlConfig, iji); + ImageWorker job = new ImageWorker(dlConfig, iji); // submit - Future jobTicket = imageJobCenter.submit(image_worker); + Future jobTicket = imageJobCenter.submit(job); // wait for result DocuImage img = jobTicket.get(); // scale the image Image pdfimg = Image.getInstance(img.getAwtImage(), null); float docW = PageSize.A4.getWidth() - 2 * PageSize.A4.getBorder(); float docH = PageSize.A4.getHeight() - 2 * PageSize.A4.getBorder(); - // TODO: do we really want to scale this again? + // TODO: do we really scale this again? pdfimg.scaleToFit(docW, docH); // add to PDF doc.add(pdfimg); diff -r e1094c5ec032 -r bc9196347188 servlet/src/digilib/servlet/PDFTitlePage.java --- a/servlet/src/digilib/servlet/PDFTitlePage.java Fri Dec 10 09:35:09 2010 +0100 +++ b/servlet/src/digilib/servlet/PDFTitlePage.java Mon Dec 13 15:35:25 2010 +0100 @@ -23,7 +23,7 @@ */ public class PDFTitlePage { - private PDFJobInformation job_info = null; + private PDFJobDescription job_info = null; private DigilibInfoReader info_reader= null; private DocuDirCache dirCache = null; protected static Logger logger = Logger.getLogger("digilib.servlet"); @@ -33,7 +33,7 @@ * Initialize a TitlePage * @param pdfji */ - public PDFTitlePage(PDFJobInformation pdfji){ + public PDFTitlePage(PDFJobDescription pdfji){ job_info = pdfji; dirCache = (DocuDirCache) job_info.getDlConfig().getValue("servlet.dir.cache"); diff -r e1094c5ec032 -r bc9196347188 servlet/src/digilib/servlet/ParameterMap.java --- a/servlet/src/digilib/servlet/ParameterMap.java Fri Dec 10 09:35:09 2010 +0100 +++ b/servlet/src/digilib/servlet/ParameterMap.java Mon Dec 13 15:35:25 2010 +0100 @@ -270,4 +270,20 @@ public boolean hasOption(String opt) { return options.hasOption(opt); } + + public HashMap getParams() { + return params; + } + + public void setParams(HashMap params) { + this.params = params; + } + + public OptionsSet getOptions() { + return options; + } + + public void setOptions(OptionsSet options) { + this.options = options; + } }