annotate servlet/src/digilib/servlet/PDFCache.java @ 555:88ed97d08b97 digilibPDF

still refactoring
author robcast
date Thu, 16 Dec 2010 14:31:48 +0100
parents 785fc58b68b1
children 5cc180bb0a5c
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
555
88ed97d08b97 still refactoring
robcast
parents: 552
diff changeset
125 String docid = "";
88ed97d08b97 still refactoring
robcast
parents: 552
diff changeset
126 try {
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
127 // evaluate request ( make a PDFJobDeclaration , get the DocumentId)
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
128 PDFJobDescription pdfji = new PDFJobDescription(request, dlConfig);
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
129
555
88ed97d08b97 still refactoring
robcast
parents: 552
diff changeset
130 docid = pdfji.getDocumentId();
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
131
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
132 // if some invalid data has been entered ...
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
133 if(!pdfji.checkValidity()) {
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
134 notifyUser(STATUS_ERROR, docid, request, response);
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
135 return;
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
136 }
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
137
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
138 int status = getStatus(docid);
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
139
531
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
140 if (status == STATUS_NONEXISTENT) {
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
141 // not there -- start creation
549
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
142 try {
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
143 createNewPdfDocument(pdfji, docid);
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
144 notifyUser(status, docid, request, response);
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
145 } catch (FileNotFoundException e) {
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
146 // error in pdf creation
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
147 logger.error(e.getMessage());
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
148 notifyUser(STATUS_ERROR, docid, request, response);
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
149 }
531
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
150 } else if (status == STATUS_DONE) {
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
151 // pdf created -- send it
531
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
152 try {
542
e2ff961001af first step towards more standard java.util.concurrent design
robcast
parents: 533
diff changeset
153 sendFile(docid, getDownloadFilename(pdfji), response);
531
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
154 } catch (IOException e) {
549
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
155 // sending didn't work
531
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
156 logger.error(e.getMessage());
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
157 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
158 } else {
549
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
159 // should be work in progress
531
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
160 notifyUser(status, docid, request, response);
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 511
diff changeset
161 }
555
88ed97d08b97 still refactoring
robcast
parents: 552
diff changeset
162 } catch (Exception e) {
88ed97d08b97 still refactoring
robcast
parents: 552
diff changeset
163 // error in pdf creation
88ed97d08b97 still refactoring
robcast
parents: 552
diff changeset
164 logger.error(e.getMessage());
88ed97d08b97 still refactoring
robcast
parents: 552
diff changeset
165 notifyUser(STATUS_ERROR, docid, request, response);
88ed97d08b97 still refactoring
robcast
parents: 552
diff changeset
166 }
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
167 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
168
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
169 /**
549
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
170 * 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
171 *
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
172 * @param status
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
173 * @param documentid
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
174 * @param request
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
175 * @param response
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
176 */
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
177 public void notifyUser(int status, String documentid, HttpServletRequest request, HttpServletResponse response){
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
178
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
179 String jsp=null;
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
180
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
181 if(status == STATUS_NONEXISTENT){
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
182 // 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
183 logger.debug("PDFCache: "+documentid+" has STATUS_NONEXISTENT.");
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
184 jsp = JSP_WIP;
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
185 } else if(status == STATUS_WIP){
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
186 logger.debug("PDFCache: "+documentid+" has STATUS_WIP.");
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
187 jsp = JSP_WIP;
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
188
549
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
189 // TODO: estimate remaining work time
b86a7b700bc3 more cleanup and refactoring
robcast
parents: 548
diff changeset
190 // TODO: tell the user he/she has to wait
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
191 } else if(status == STATUS_DONE){
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
192 logger.debug("PDFCache: "+documentid+" has STATUS_DONE.");
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
193 } else {
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
194 logger.debug("PDFCache: "+documentid+" has STATUS_ERROR.");
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
195 jsp = JSP_ERROR;
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
196 }
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
197
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
198 try {
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
199 // forward to the relevant jsp
552
785fc58b68b1 more cleanup and refactoring
robcast
parents: 550
diff changeset
200 ServletContext context = getServletContext();
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
201 RequestDispatcher dispatch = context.getRequestDispatcher(jsp);
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
202 dispatch.forward(request, response);
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
203 } catch (ServletException e) {
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
204 logger.debug(e.getMessage());
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
205 e.printStackTrace();
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
206 } catch (IOException e) {
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
207 logger.debug(e.getMessage());
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
208 e.printStackTrace();
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
209 }
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
210
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
211 }
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
212
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
213
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
214 /** check the status of the document corresponding to the documentid */
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
215 public Integer getStatus(String documentid){
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
216 // 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
217 File cached = new File(cache_directory, documentid);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
218 File wip = new File(temp_directory, documentid);
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
219 if(cached.exists()){
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
220 return STATUS_DONE;
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
221 } else if (wip.exists()){
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
222 return STATUS_WIP;
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
223 } else {
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
224 return STATUS_NONEXISTENT;
505
06d7e8c09b11 *** empty log message ***
cmielack
parents: 503
diff changeset
225 }
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
226 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
227
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
228 /**
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
229 * create new thread for pdf generation.
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
230 *
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
231 * @param pdfji
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
232 * @param filename
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
233 * @return
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
234 * @throws FileNotFoundException
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
235 */
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
236 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
237 // start new worker
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
238 File of = this.getTempFile(filename);
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
239 OutputStream os = new FileOutputStream(of);
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
240 PDFStreamWorker job = new PDFStreamWorker(dlConfig, os, pdfji, pdfImageJobCenter);
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
241 // start job
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
242 Future<OutputStream> jobTicket = pdfJobCenter.submit(job);
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
243 // what do we do with the result?
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
244 return jobTicket;
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
245 /* PDFMaker pdf_maker = new PDFMaker(context, pdfji,filename);
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
246 new Thread(pdf_maker, "PDFMaker").start();*/
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
247 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
248
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
249
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
250 /**
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
251 * generate the filename the user is going to receive the pdf as
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
252 *
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
253 * @param pdfji
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
254 * @return
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
255 */
548
bc9196347188 more refactoring and cleanup
robcast
parents: 546
diff changeset
256 public String getDownloadFilename(PDFJobDescription pdfji){
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
257 // filename example: digilib_example_pgs1-3.pdf
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
258 String filename;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
259 filename = "digilib_";
552
785fc58b68b1 more cleanup and refactoring
robcast
parents: 550
diff changeset
260 filename += pdfji.getAsString("fn");
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
261 filename += "_pgs" + pdfji.getAsString("pgs");
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
262 filename += ".pdf";
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
263
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
264 return filename;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
265 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
266
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 * sends a document to the user
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
269 *
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
270 * @param cachefile The filename of the document in cache.
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
271 * @param filename The filename used for downloading.
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
272 * @param response
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
273 * @throws IOException
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
274 */
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
275 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
276 File cached_file = null;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
277 FileInputStream fis = null;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
278 ServletOutputStream sos = null;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
279 BufferedInputStream bis = null;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
280
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
281 try {
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
282 // get file handle
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
283 cached_file = new File(cache_directory, cachefile);
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
284 // create necessary streams
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
285 fis = new FileInputStream(cached_file);
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
286 sos = response.getOutputStream();
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
287 bis = new BufferedInputStream(fis);
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
288
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
289 int bytes = 0;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
290
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
291 // set http headers
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
292 response.setContentType("application/pdf");
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
293 response.addHeader("Content-Disposition", "attachment; filename="+filename);
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
294 response.setContentLength( (int) cached_file.length());
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
295
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 509
diff changeset
296 // send the bytes
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
297 while ((bytes = bis.read()) != -1){
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
298 sos.write(bytes);
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
299 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
300 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
301 catch(Exception e){
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
302 logger.error(e.getMessage());
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
303 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
304 finally{
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
305 // close all streams
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
306 if (fis != null)
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
307 fis.close();
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
308 if (bis != null)
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
309 bis.close();
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
310 if (sos != null)
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
311 sos.close();
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
312 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 500
diff changeset
313
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
314 }
509
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
315
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
316 public File getCacheDirectory(){
509
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
317 return cache_directory;
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
318 }
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
319
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
320 public File getTempDirectory(){
509
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
321 return temp_directory;
ab94692bff0c *** empty log message ***
cmielack
parents: 505
diff changeset
322 }
533
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
323
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 * returns a File object based on filename in the temp directory.
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
326 * @param filename
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
327 * @return
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
328 */
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
329 public File getTempFile(String filename) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
330 return new File(temp_directory, filename);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
331 }
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
332
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
333 /**
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
334 * returns a File object based on filename in the cache directory.
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
335 * @param filename
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
336 * @return
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
337 */
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
338 public File getCacheFile(String filename) {
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
339 return new File(cache_directory, filename);
87cb3dc2aa12 improved pdf generation (not done yet)
robcast
parents: 531
diff changeset
340 }
500
b2325b33b77b completely restructured the scaler
cmielack
parents:
diff changeset
341 }