annotate pdf/src/main/java/digilib/servlet/PDFCache.java @ 1153:dcf55ac4ed4e

add autozoom on click (from regions plugin)
author hertzhaft
date Tue, 27 Nov 2012 14:42:18 +0100
parents 7779b37d1d05
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
903
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
1 package digilib.servlet;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
2
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
3 import java.io.File;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
4 import java.io.FileNotFoundException;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
5 import java.io.IOException;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
6 import java.util.concurrent.Future;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
7
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
8 import javax.servlet.RequestDispatcher;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
9 import javax.servlet.ServletConfig;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
10 import javax.servlet.ServletContext;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
11 import javax.servlet.ServletException;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
12 import javax.servlet.http.HttpServlet;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
13 import javax.servlet.http.HttpServletRequest;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
14 import javax.servlet.http.HttpServletResponse;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
15
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
16 import org.apache.log4j.Logger;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
17
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
18 import digilib.image.DocuImage;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
19 import digilib.pdf.PDFFileWorker;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
20 import digilib.util.DigilibJobCenter;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
21
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
22 /**
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
23 * A class for handling user requests for pdf documents made from digilib images.
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
24 *
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
25 * If a document does not already exist, it will be enqueued for generation; if it does exist, it is sent
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
26 * to the user.
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
27 *
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
28 * @author cmielack
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
29 *
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
30 */
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
31
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
32 @SuppressWarnings("serial")
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
33 public class PDFCache extends HttpServlet {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
34
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
35 public static String version = "0.3a";
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
36
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
37 /** logger for accounting requests */
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
38 protected static Logger accountlog = Logger.getLogger("account.pdf.request");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
39
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
40 /** gengeral logger for this class */
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
41 protected static Logger logger = Logger.getLogger("digilib.pdfcache");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
42
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
43 /** logger for authentication related */
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
44 protected static Logger authlog = Logger.getLogger("digilib.pdf.auth");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
45
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
46 private DigilibConfiguration dlConfig = null;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
47
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
48 public static String instanceKey = "digilib.servlet.PDFCache";
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
49
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
50 private DigilibJobCenter<File> pdfJobCenter = null;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
51
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
52 private DigilibJobCenter<DocuImage> pdfImageJobCenter = null;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
53
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
54 private File cache_directory = new File("cache");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
55
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
56 private File temp_directory = new File("pdf_temp");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
57
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
58 private static String JSP_WIP = "/pdf/wip.jsp";
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
59
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
60 private static String JSP_ERROR = "/pdf/error.jsp";
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
61
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
62 /** document status.
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
63 * DONE: document exists in cache
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
64 * WIP: document is "work in progress"
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
65 * NONEXISTENT: document does not exist in cache and is not in progress
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
66 * ERROR: an error occurred while processing the request
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
67 */
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
68 public static enum PDFStatus {DONE, WIP, NONEXISTENT, ERROR};
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
69
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
70
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
71 public void init(ServletConfig config) throws ServletException {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
72 super.init(config);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
73
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
74 System.out.println("***** Digital Image Library Image PDF-Cache Servlet (version "
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
75 + version + ") *****");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
76 // say hello in the log file
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
77 logger.info("***** Digital Image Library Image PDF-Cache Servlet (version "
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
78 + version + ") *****");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
79
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
80 ServletContext context = getServletContext();
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
81 dlConfig = (DigilibConfiguration) context.getAttribute("digilib.servlet.configuration");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
82 if (dlConfig == null) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
83 // no Configuration
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
84 throw new ServletException("No Configuration!");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
85 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
86
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
87 String temp_fn = dlConfig.getAsString("pdf-temp-dir");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
88 temp_directory = new File(temp_fn);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
89 if (!temp_directory.exists()) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
90 // try to create
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
91 temp_directory.mkdirs();
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
92 } else {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
93 // rid the temporary directory of possible incomplete document files
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
94 emptyDirectory(temp_directory);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
95 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
96 if (!temp_directory.isDirectory()) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
97 throw new ServletException("Configuration error: problem with pdf-temp-dir="+temp_fn);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
98 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
99
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
100 String cache_fn = dlConfig.getAsString("pdf-cache-dir");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
101 cache_directory = new File(cache_fn);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
102 if (!cache_directory.exists()) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
103 // try to create
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
104 cache_directory.mkdirs();
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
105 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
106 if (!cache_directory.isDirectory()) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
107 throw new ServletException("Configuration error: problem with pdf-cache-dir="+cache_fn);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
108 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
109
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
110 pdfJobCenter = (DigilibJobCenter<File>) dlConfig.getValue("servlet.worker.pdfexecutor");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
111 pdfImageJobCenter = (DigilibJobCenter<DocuImage>) dlConfig.getValue("servlet.worker.pdfimageexecutor");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
112
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
113 // register this instance globally
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
114 context.setAttribute(instanceKey, this);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
115
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
116 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
117
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
118 /* (non-Javadoc)
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
119 * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
120 */
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
121 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
122 accountlog.info("GET from " + request.getRemoteAddr());
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
123 this.processRequest(request, response);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
124 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
125
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
126
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
127 /* (non-Javadoc)
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
128 * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
129 */
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
130 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
131 accountlog.info("POST from " + request.getRemoteAddr());
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
132 this.processRequest(request, response);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
133 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
134
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
135 /**
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
136 * clean up any broken and unfinished files from the temporary directory.
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
137 */
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
138 public void emptyDirectory(File dir){
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
139 File[] temp_files = dir.listFiles();
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
140 for (File f: temp_files){
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
141 f.delete();
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
142 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
143 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
144
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
145
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
146 public void processRequest(HttpServletRequest request,
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
147 HttpServletResponse response) throws ServletException {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
148
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
149 if (dlConfig == null) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
150 logger.error("ERROR: No Configuration!");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
151 throw new ServletException("NO VALID digilib CONFIGURATION!");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
152 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
153
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
154 String docid = "";
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
155 try {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
156 // evaluate request ( make a PDFJobDeclaration , get the DocumentId)
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
157 PDFRequest pdfji = new PDFRequest(request, dlConfig);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
158
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
159 docid = pdfji.getDocumentId();
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
160
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
161 // if some invalid data has been entered ...
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
162 if(!pdfji.checkValidity()) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
163 notifyUser(PDFStatus.ERROR, docid, request, response);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
164 return;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
165 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
166
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
167 PDFStatus status = getStatus(docid);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
168
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
169 if (status == PDFStatus.NONEXISTENT) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
170 // not there -- start creation
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
171 try {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
172 createNewPdfDocument(pdfji, docid);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
173 notifyUser(status, docid, request, response);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
174 return;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
175 } catch (FileNotFoundException e) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
176 // error in pdf creation
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
177 logger.error(e.getMessage());
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
178 notifyUser(PDFStatus.ERROR, docid, request, response);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
179 return;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
180 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
181 } else if (status == PDFStatus.DONE) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
182 // pdf created -- send it
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
183 try {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
184 ServletOps.sendFile(getCacheFile(docid), "application/pdf", getDownloadFilename(pdfji), response, logger);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
185 return;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
186 } catch (Exception e) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
187 // sending didn't work
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
188 logger.error(e.getMessage());
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
189 return;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
190 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
191 } else {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
192 // should be work in progress
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
193 notifyUser(status, docid, request, response);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
194 return;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
195 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
196 } catch (Exception e) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
197 // error in pdf creation
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
198 logger.error(e.getMessage());
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
199 notifyUser(PDFStatus.ERROR, docid, request, response);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
200 return;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
201 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
202 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
203
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
204 /**
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
205 * depending on the documents status, redirect the user to the appropriate
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
206 * waiting or download page.
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
207 *
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
208 * @param status
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
209 * @param documentid
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
210 * @param request
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
211 * @param response
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
212 */
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
213 public void notifyUser(PDFStatus status, String documentid,
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
214 HttpServletRequest request, HttpServletResponse response) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
215
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
216 String jsp = null;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
217
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
218 if (status == PDFStatus.NONEXISTENT) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
219 // tell the user that the document has to be created before he/she
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
220 // can download it
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
221 logger.debug("PDFCache: " + documentid + " has STATUS_NONEXISTENT.");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
222 jsp = JSP_WIP;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
223 } else if (status == PDFStatus.WIP) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
224 logger.debug("PDFCache: " + documentid + " has STATUS_WIP.");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
225 jsp = JSP_WIP;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
226
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
227 // TODO: estimate remaining work time
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
228 // TODO: tell the user he/she has to wait
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
229 } else if (status == PDFStatus.DONE) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
230 logger.debug("PDFCache: " + documentid + " has STATUS_DONE.");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
231 } else {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
232 logger.debug("PDFCache: " + documentid + " has STATUS_ERROR.");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
233 jsp = JSP_ERROR;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
234 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
235
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
236 try {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
237 // forward to the relevant jsp
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
238 ServletContext context = getServletContext();
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
239 RequestDispatcher dispatch = context.getRequestDispatcher(jsp);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
240 dispatch.forward(request, response);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
241 } catch (ServletException e) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
242 logger.debug(e.getMessage());
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
243 e.printStackTrace();
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
244 } catch (IOException e) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
245 logger.debug(e.getMessage());
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
246 e.printStackTrace();
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
247 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
248
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
249 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
250
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
251
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
252 /** check the status of the document corresponding to the documentid */
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
253 public PDFStatus getStatus(String documentid){
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
254 // looks into the cache and temp directory in order to find out the status of the document
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
255 File cached = getCacheFile(documentid);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
256 File wip = getTempFile(documentid);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
257 if(cached.exists()){
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
258 return PDFStatus.DONE;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
259 } else if (wip.exists()){
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
260 return PDFStatus.WIP;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
261 } else {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
262 return PDFStatus.NONEXISTENT;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
263 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
264 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
265
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
266 /**
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
267 * create new thread for pdf generation.
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
268 *
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
269 * @param pdfji
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
270 * @param filename
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
271 * @return
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
272 * @throws FileNotFoundException
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
273 */
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
274 public Future<File> createNewPdfDocument(PDFRequest pdfji, String filename) throws FileNotFoundException{
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
275 // start new worker
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
276 File tempf = this.getTempFile(filename);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
277 File finalf = this.getCacheFile(filename);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
278 PDFFileWorker job = new PDFFileWorker(dlConfig, tempf, finalf, pdfji, pdfImageJobCenter);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
279 // start job
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
280 Future<File> jobTicket = pdfJobCenter.submit(job);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
281 return jobTicket;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
282 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
283
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
284
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
285 /**
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
286 * generate the filename the user is going to receive the pdf as
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
287 *
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
288 * @param pdfji
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
289 * @return
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
290 */
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
291 public String getDownloadFilename(PDFRequest pdfji){
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
292 // filename example: digilib_example_pgs1-3.pdf
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
293 String filename;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
294 filename = "digilib_";
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
295 filename += pdfji.getAsString("fn");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
296 filename += "_pgs" + pdfji.getAsString("pgs");
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
297 filename += ".pdf";
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
298
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
299 return filename;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
300 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
301
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
302 public File getCacheDirectory(){
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
303 return cache_directory;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
304 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
305
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
306 public File getTempDirectory(){
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
307 return temp_directory;
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
308 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
309
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
310 /**
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
311 * returns a File object based on filename in the temp directory.
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
312 * @param filename
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
313 * @return
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
314 */
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
315 public File getTempFile(String filename) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
316 return new File(temp_directory, filename);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
317 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
318
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
319 /**
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
320 * returns a File object based on filename in the cache directory.
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
321 * @param filename
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
322 * @return
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
323 */
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
324 public File getCacheFile(String filename) {
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
325 return new File(cache_directory, filename);
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
326 }
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents:
diff changeset
327 }