annotate servlet/src/digilib/servlet/PDFCache.java @ 552:785fc58b68b1 digilibPDF

more cleanup and refactoring
author robcast
date Wed, 15 Dec 2010 08:58:01 +0100
parents f9a4288fc7c4
children 88ed97d08b97
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
1 package digilib.servlet;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
2
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
3 import java.io.BufferedInputStream;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
4 import java.io.File;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
5 import java.io.FileInputStream;
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
6 import java.io.FileNotFoundException;
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
7 import java.io.FileOutputStream;
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
8 import java.io.IOException;
546
e7c29b587829 more work on util.concurrent compliant structure
casties
parents: 542
diff changeset
9 import java.io.OutputStream;
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
10 import java.util.concurrent.Future;
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
11
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
12 import javax.servlet.RequestDispatcher;
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
13 import javax.servlet.ServletConfig;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
14 import javax.servlet.ServletContext;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
15 import javax.servlet.ServletException;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
16 import javax.servlet.ServletOutputStream;
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
17 import javax.servlet.http.HttpServletRequest;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
18 import javax.servlet.http.HttpServletResponse;
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
19
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
20 import digilib.image.DocuImage;
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
21
509
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
22 /**
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
23 * A class for handling user requests for pdf documents from digilib images.
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
24 *
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
25 * If a document does not already exist, it will be enqueued for generation; if it does exist, it is sent
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
26 * to the user.
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
27 *
509
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
28 * @author cmielack
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
29 *
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
30 */
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
31
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
32 @SuppressWarnings("serial")
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
33 public class PDFCache extends RequestHandler {
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
34
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
35 private DigilibConfiguration dlConfig = null;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
36
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
37 public static String instanceKey = "digilib.servlet.PDFCache";
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
38
546
e7c29b587829 more work on util.concurrent compliant structure
casties
parents: 542
diff changeset
39 private DigilibJobCenter<OutputStream> pdfJobCenter = null;
e7c29b587829 more work on util.concurrent compliant structure
casties
parents: 542
diff changeset
40
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
41 private DigilibJobCenter<DocuImage> pdfImageJobCenter = null;
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
42
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
43 private File cache_directory = new File("cache");
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
44
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
45 private File temp_directory = new File("pdf_temp");
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
46
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
47 private static String JSP_WIP = "/pdf/wip.jsp";
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
48
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
49 private static String JSP_ERROR = "/pdf/error.jsp";
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
50
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
51 public static Integer STATUS_DONE = 0; // document exists in cache
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
52
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
53 public static Integer STATUS_WIP = 1; // document is "work in progress"
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
54
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
55 public static Integer STATUS_NONEXISTENT = 2; // document does not exist in cache and is not in progress
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
56
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
57 public static Integer STATUS_ERROR = 3; // an error occurred while processing the request
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
58
550
f9a4288fc7c4 more refactoring and cleanup
robcast
parents: 549
diff changeset
59 public static String version = "0.3a";
509
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
60
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
61 // TODO ? functionality for the pre-generation of complete books/chapters using default values
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
62
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
63
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
64 public void init(ServletConfig config) throws ServletException {
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
65 super.init(config);
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
66
531
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
67 System.out.println("***** Digital Image Library Image PDF-Cache Servlet (version "
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
68 + version + ") *****");
546
e7c29b587829 more work on util.concurrent compliant structure
casties
parents: 542
diff changeset
69 // say hello in the log file
531
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
70 logger.info("***** Digital Image Library Image PDF-Cache Servlet (version "
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
71 + version + ") *****");
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
72
552
785fc58b68b1 more cleanup and refactoring
robcast
parents: 550
diff changeset
73 ServletContext context = getServletContext();
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
74 dlConfig = (DigilibConfiguration) context.getAttribute("digilib.servlet.configuration");
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
75 if (dlConfig == null) {
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
76 // no Configuration
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
77 throw new ServletException("No Configuration!");
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
78 }
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
79
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
80 String temp_fn = dlConfig.getAsString("pdf-temp-dir");
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
81 temp_directory = new File(temp_fn);
550
f9a4288fc7c4 more refactoring and cleanup
robcast
parents: 549
diff changeset
82 if (!temp_directory.exists()) {
f9a4288fc7c4 more refactoring and cleanup
robcast
parents: 549
diff changeset
83 // try to create
f9a4288fc7c4 more refactoring and cleanup
robcast
parents: 549
diff changeset
84 temp_directory.mkdirs();
f9a4288fc7c4 more refactoring and cleanup
robcast
parents: 549
diff changeset
85 }
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
86 if (!temp_directory.isDirectory()) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
87 throw new ServletException("Configuration error: problem with pdf-temp-dir="+temp_fn);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
88 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
89 // rid the temporary directory of possible incomplete document files
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
90 emptyDirectory(temp_directory);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
91
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
92 String cache_fn = dlConfig.getAsString("pdf-cache-dir");
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
93 cache_directory = new File(cache_fn);
550
f9a4288fc7c4 more refactoring and cleanup
robcast
parents: 549
diff changeset
94 if (!cache_directory.exists()) {
f9a4288fc7c4 more refactoring and cleanup
robcast
parents: 549
diff changeset
95 // try to create
f9a4288fc7c4 more refactoring and cleanup
robcast
parents: 549
diff changeset
96 cache_directory.mkdirs();
f9a4288fc7c4 more refactoring and cleanup
robcast
parents: 549
diff changeset
97 }
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
98 if (!cache_directory.isDirectory()) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
99 throw new ServletException("Configuration error: problem with pdf-cache-dir="+cache_fn);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
100 }
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
101
546
e7c29b587829 more work on util.concurrent compliant structure
casties
parents: 542
diff changeset
102 pdfJobCenter = (DigilibJobCenter<OutputStream>) dlConfig.getValue("servlet.worker.pdfexecutor");
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
103 pdfImageJobCenter = (DigilibJobCenter<DocuImage>) dlConfig.getValue("servlet.worker.pdfimageexecutor");
546
e7c29b587829 more work on util.concurrent compliant structure
casties
parents: 542
diff changeset
104
509
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
105 // register this instance globally
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
106 context.setAttribute(instanceKey, this);
509
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
107
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
108 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
109
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
110 /**
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
111 * clean up any broken and unfinished files from the temporary directory.
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
112 */
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
113 public void emptyDirectory(File temp_dir){
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
114 File[] temp_files = temp_dir.listFiles();
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
115
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
116 for (File f: temp_files){
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
117 f.delete();
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
118 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
119 }
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
120
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
121
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
122 public void processRequest(HttpServletRequest request,
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
123 HttpServletResponse response) {
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
124
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
125 // evaluate request ( make a PDFJobDeclaration , get the DocumentId)
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
126 PDFJobDescription pdfji = new PDFJobDescription(request, dlConfig);
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
127
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
128 String docid = pdfji.getDocumentId();
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
129
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
130 // if some invalid data has been entered ...
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
131 if(!pdfji.checkValidity()) {
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
132 notifyUser(STATUS_ERROR, docid, request, response);
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
133 return;
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
134 }
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
135
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
136 int status = getStatus(docid);
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
137
531
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
138 if (status == STATUS_NONEXISTENT) {
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
139 // not there -- start creation
549
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
140 try {
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
141 createNewPdfDocument(pdfji, docid);
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
142 notifyUser(status, docid, request, response);
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
143 } catch (FileNotFoundException e) {
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
144 // error in pdf creation
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
145 logger.error(e.getMessage());
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
146 notifyUser(STATUS_ERROR, docid, request, response);
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
147 }
531
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
148 } else if (status == STATUS_DONE) {
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
149 // pdf created -- send it
531
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
150 try {
542
e2ff961001af first step towards more standard java.util.concurrent design
robcast
parents: 533
diff changeset
151 sendFile(docid, getDownloadFilename(pdfji), response);
531
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
152 } catch (IOException e) {
549
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
153 // sending didn't work
531
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
154 logger.error(e.getMessage());
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
155 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
156 } else {
549
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
157 // should be work in progress
531
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
158 notifyUser(status, docid, request, response);
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
159 }
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
160 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
161
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
162 /**
549
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
163 * depending on the documents status, redirect the user to the appropriate waiting or download page.
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
164 *
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
165 * @param status
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
166 * @param documentid
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
167 * @param request
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
168 * @param response
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
169 */
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
170 public void notifyUser(int status, String documentid, HttpServletRequest request, HttpServletResponse response){
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
171
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
172 String jsp=null;
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
173
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
174 if(status == STATUS_NONEXISTENT){
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
175 // tell the user that the document has to be created before he/she can download it
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
176 logger.debug("PDFCache: "+documentid+" has STATUS_NONEXISTENT.");
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
177 jsp = JSP_WIP;
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
178 } else if(status == STATUS_WIP){
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
179 logger.debug("PDFCache: "+documentid+" has STATUS_WIP.");
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
180 jsp = JSP_WIP;
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
181
549
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
182 // TODO: estimate remaining work time
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
183 // TODO: tell the user he/she has to wait
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
184 } else if(status == STATUS_DONE){
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
185 logger.debug("PDFCache: "+documentid+" has STATUS_DONE.");
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
186 } else {
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
187 logger.debug("PDFCache: "+documentid+" has STATUS_ERROR.");
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
188 jsp = JSP_ERROR;
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
189 }
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
190
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
191 try {
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
192 // forward to the relevant jsp
552
785fc58b68b1 more cleanup and refactoring
robcast
parents: 550
diff changeset
193 ServletContext context = getServletContext();
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
194 RequestDispatcher dispatch = context.getRequestDispatcher(jsp);
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
195 dispatch.forward(request, response);
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
196 } catch (ServletException e) {
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
197 logger.debug(e.getMessage());
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
198 e.printStackTrace();
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
199 } catch (IOException e) {
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
200 logger.debug(e.getMessage());
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
201 e.printStackTrace();
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
202 }
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
203
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
204 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
205
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
206
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
207 /** check the status of the document corresponding to the documentid */
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
208 public Integer getStatus(String documentid){
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
209 // looks into the cache and temp directory in order to find out the status of the document
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
210 File cached = new File(cache_directory, documentid);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
211 File wip = new File(temp_directory, documentid);
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
212 if(cached.exists()){
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
213 return STATUS_DONE;
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
214 } else if (wip.exists()){
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
215 return STATUS_WIP;
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
216 } else {
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
217 return STATUS_NONEXISTENT;
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
218 }
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
219 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
220
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
221 /**
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
222 * create new thread for pdf generation.
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
223 *
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
224 * @param pdfji
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
225 * @param filename
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
226 * @return
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
227 * @throws FileNotFoundException
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
228 */
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
229 public Future<OutputStream> createNewPdfDocument(PDFJobDescription pdfji, String filename) throws FileNotFoundException{
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
230 // start new worker
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
231 File of = this.getTempFile(filename);
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
232 OutputStream os = new FileOutputStream(of);
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
233 PDFStreamWorker job = new PDFStreamWorker(dlConfig, os, pdfji, pdfImageJobCenter);
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
234 // start job
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
235 Future<OutputStream> jobTicket = pdfJobCenter.submit(job);
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
236 // what do we do with the result?
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
237 return jobTicket;
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
238 /* PDFMaker pdf_maker = new PDFMaker(context, pdfji,filename);
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
239 new Thread(pdf_maker, "PDFMaker").start();*/
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
240 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
241
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
242
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
243 /**
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
244 * generate the filename the user is going to receive the pdf as
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
245 *
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
246 * @param pdfji
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
247 * @return
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
248 */
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
249 public String getDownloadFilename(PDFJobDescription pdfji){
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
250 // filename example: digilib_example_pgs1-3.pdf
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
251 String filename;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
252 filename = "digilib_";
552
785fc58b68b1 more cleanup and refactoring
robcast
parents: 550
diff changeset
253 filename += pdfji.getAsString("fn");
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
254 filename += "_pgs" + pdfji.getAsString("pgs");
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
255 filename += ".pdf";
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
256
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
257 return filename;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
258 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
259
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
260 /**
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
261 * sends a document to the user
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
262 *
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
263 * @param cachefile The filename of the document in cache.
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
264 * @param filename The filename used for downloading.
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
265 * @param response
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
266 * @throws IOException
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
267 */
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
268 public void sendFile(String cachefile, String filename, HttpServletResponse response) throws IOException{
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
269 File cached_file = null;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
270 FileInputStream fis = null;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
271 ServletOutputStream sos = null;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
272 BufferedInputStream bis = null;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
273
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
274 try {
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
275 // get file handle
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
276 cached_file = new File(cache_directory, cachefile);
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
277 // create necessary streams
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
278 fis = new FileInputStream(cached_file);
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
279 sos = response.getOutputStream();
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
280 bis = new BufferedInputStream(fis);
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
281
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
282 int bytes = 0;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
283
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
284 // set http headers
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
285 response.setContentType("application/pdf");
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
286 response.addHeader("Content-Disposition", "attachment; filename="+filename);
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
287 response.setContentLength( (int) cached_file.length());
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
288
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
289 // send the bytes
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
290 while ((bytes = bis.read()) != -1){
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
291 sos.write(bytes);
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
292 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
293 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
294 catch(Exception e){
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
295 logger.error(e.getMessage());
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
296 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
297 finally{
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
298 // close all streams
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
299 if (fis != null)
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
300 fis.close();
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
301 if (bis != null)
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
302 bis.close();
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
303 if (sos != null)
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
304 sos.close();
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
305 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
306
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
307 }
509
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
308
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
309 public File getCacheDirectory(){
509
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
310 return cache_directory;
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
311 }
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
312
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
313 public File getTempDirectory(){
509
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
314 return temp_directory;
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
315 }
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
316
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
317 /**
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
318 * returns a File object based on filename in the temp directory.
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
319 * @param filename
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
320 * @return
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
321 */
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
322 public File getTempFile(String filename) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
323 return new File(temp_directory, filename);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
324 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
325
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
326 /**
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
327 * returns a File object based on filename in the cache directory.
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
328 * @param filename
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
329 * @return
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
330 */
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
331 public File getCacheFile(String filename) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
332 return new File(cache_directory, filename);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
333 }
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
334 }