annotate servlet/src/digilib/servlet/Scaler.java @ 531:9cedd170b581 digilibPDF

* PDF generation works now even with subdirectories * genericsification and clean up
author robcast
date Fri, 05 Feb 2010 20:58:38 +0100
parents 30a3d828a98c
children e758a49258e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
1 package digilib.servlet;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
2
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
3 import java.io.File;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
4 import java.io.IOException;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
5 import java.io.OutputStream;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
6 import java.util.List;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
7
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
8 import javax.servlet.ServletConfig;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
9 import javax.servlet.ServletContext;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
10 import javax.servlet.ServletException;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
11 import javax.servlet.http.HttpServletRequest;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
12 import javax.servlet.http.HttpServletResponse;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
13
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
14 import digilib.auth.AuthOpException;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
15 import digilib.auth.AuthOps;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
16 import digilib.image.ImageOpException;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
17 import digilib.io.DocuDirCache;
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
18 import digilib.io.DocuDirectory;
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
19 import digilib.io.DocuDirent;
502
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
20 import digilib.io.FileOpException;
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
21 import digilib.io.FileOps;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
22 import digilib.io.ImageFile;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
23
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 503
diff changeset
24
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 503
diff changeset
25 // TODO digilibError is not used anymore and may need to get reintegrated
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 503
diff changeset
26
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
27 public class Scaler extends RequestHandler {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
28
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
29 /** digilib servlet version (for all components) */
527
30a3d828a98c updating to itext-5.0
robcast
parents: 511
diff changeset
30 public static final String dlVersion = "1.8.0a";
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
31
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
32 /** general error code */
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
33 public static final int ERROR_UNKNOWN = 0;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
34
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
35 /** error code for authentication error */
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
36 public static final int ERROR_AUTH = 1;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
37
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
38 /** error code for file operation error */
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
39 public static final int ERROR_FILE = 2;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
40
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
41 /** error code for image operation error */
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
42 public static final int ERROR_IMAGE = 3;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
43
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
44 /** DocuDirCache instance */
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
45 DocuDirCache dirCache;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
46
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
47 /** authentication error image file */
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
48 File denyImgFile;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
49
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
50 /** image error image file */
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
51 File errorImgFile;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
52
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
53 /** not found error image file */
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
54 File notfoundImgFile;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
55
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
56 /** subsampling before scaling */
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
57 float minSubsample = 2f;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
58
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
59 /** send files as is? */
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
60 boolean sendFileAllowed = true;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
61
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
62 /** default scaling quality */
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
63 int defaultQuality = 1;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
64
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
65 /** DigilibConfiguration instance */
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
66 DigilibConfiguration dlConfig;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
67
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
68 /** use authorization database */
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
69 boolean useAuthorization = true;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
70
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
71 /** AuthOps instance */
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
72 AuthOps authOp;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
73
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
74 // EXPRIMENTAL
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
75 /** try to enlarge cropping area for "oblique" angles */
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
76 boolean wholeRotArea = false;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
77
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
78
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
79 protected long getLastModified(HttpServletRequest request) {
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
80 accountlog.debug("GetLastModified from " + request.getRemoteAddr()
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
81 + " for " + request.getQueryString());
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
82 long mtime = -1;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
83 // create new request with defaults
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
84 DigilibRequest dlReq = new DigilibRequest();
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
85 // set with request parameters
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
86 dlReq.setWithRequest(request);
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
87 // find the requested file
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
88 DocuDirent f = findFile(dlReq);
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
89 if (f != null) {
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
90 DocuDirectory dd = (DocuDirectory) f.getParent();
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
91 mtime = dd.getDirMTime() / 1000 * 1000;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
92 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
93 return mtime;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
94 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
95 /**
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
96 * Returns the DocuDirent corresponding to the DigilibRequest.
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
97 *
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
98 * @param dlRequest
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
99 * @return
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
100 */
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
101 public DocuDirent findFile(DigilibRequest dlRequest) {
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
102 // find the file(set)
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
103 DocuDirent f = dirCache.getFile(dlRequest.getFilePath(), dlRequest
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
104 .getAsInt("pn"), FileOps.CLASS_IMAGE);
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
105 return f;
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
106 }
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
107
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
108
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
109
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
110 /**
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
111 * Initialisation on first run.
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
112 * @throws ServletException
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
113 *
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
114 * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
115 */
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
116 public void init(ServletConfig config) throws ServletException {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
117 super.init(config);
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
118
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
119 System.out
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
120 .println("***** Digital Image Library Image Scaler Servlet (version "
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
121 + dlVersion + ") *****");
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
122 // say hello in the log file
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
123 logger
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
124 .info("***** Digital Image Library Image Scaler Servlet (version "
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
125 + dlVersion + ") *****");
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
126
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
127 // get our ServletContext
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
128 ServletContext context = config.getServletContext();
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
129 // see if there is a Configuration instance
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
130 dlConfig = (DigilibConfiguration) context
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
131 .getAttribute("digilib.servlet.configuration");
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
132 if (dlConfig == null) {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
133 // no Configuration
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
134 throw new ServletException("No Configuration!");
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
135 }
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
136 // set our AuthOps
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
137 useAuthorization = dlConfig.getAsBoolean("use-authorization");
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
138 authOp = (AuthOps) dlConfig.getValue("servlet.auth.op");
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
139
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
140 // DocuDirCache instance
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
141 dirCache = (DocuDirCache) dlConfig.getValue("servlet.dir.cache");
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
142 denyImgFile = ServletOps.getFile((File) dlConfig.getValue("denied-image"), config);
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
143 errorImgFile = ServletOps.getFile((File) dlConfig.getValue("error-image"), config);
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
144 notfoundImgFile = ServletOps.getFile((File) dlConfig.getValue("notfound-image"), config);
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
145 sendFileAllowed = dlConfig.getAsBoolean("sendfile-allowed");
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
146 minSubsample = dlConfig.getAsFloat("subsample-minimum");
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
147 defaultQuality = dlConfig.getAsInt("default-quality");
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
148 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
149
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 503
diff changeset
150
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 503
diff changeset
151
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 503
diff changeset
152
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
153 @Override
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
154 public void processRequest(HttpServletRequest request,
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
155 HttpServletResponse response) throws ServletException, ImageOpException {
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
156
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
157
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
158 if (dlConfig == null) {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
159 throw new ServletException("ERROR: No Configuration!");
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
160 }
502
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
161
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
162 accountlog.debug("request: " + request.getQueryString());
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
163 logger.debug("request: " + request.getQueryString());
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
164
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
165
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
166 // define the job information
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
167 ImageJobInformation jobdeclaration = new ImageJobInformation(dlConfig);
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
168 jobdeclaration.setWithRequest(request);
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
169
502
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
170 ImageFile fileToLoad = null;
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
171 try {
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
172 fileToLoad = jobdeclaration.get_fileToLoad();
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
173 } catch (IOException e2) {
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
174 // TODO Auto-generated catch block
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
175 e2.printStackTrace();
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
176 return;
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
177 }
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
178
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
179
502
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
180 // if requested, send image as a file
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
181 if(sendFileAllowed && jobdeclaration.checkSendAsFile()){
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
182 String mt = null;
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
183 if (jobdeclaration.hasOption("mo", "rawfile")) {
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
184 mt = "application/octet-stream";
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
185 }
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
186 logger.debug("Sending RAW File as is.");
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
187 try {
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
188 ServletOps.sendFile(fileToLoad.getFile(), mt, response);
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
189 } catch (FileOpException e) {
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
190 e.printStackTrace();
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
191 }
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
192
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
193 return;
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
194 }
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
195
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
196
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
197
502
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
198 // if possible, send the image without actually having to transform it
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
199 if(jobdeclaration.noTransformRequired()){
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
200 logger.debug("Sending File as is.");
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
201
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
202 try {
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
203 ServletOps.sendFile(fileToLoad.getFile(), null, response);
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
204 } catch (FileOpException e) {
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
205 e.printStackTrace();
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
206 }
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
207
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
208 //logger.info("Done in "
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
209 // + (System.currentTimeMillis() - startTime) + "ms");
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
210 return;
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
211 }
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
212
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
213
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
214
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
215
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
216 OutputStream outputstream = null;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
217 try {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
218 outputstream = response.getOutputStream();
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
219 } catch (IOException e1) {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
220 // TODO Auto-generated catch block
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
221 e1.printStackTrace();
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
222 logger.error(e1.getMessage());
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
223 }
502
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
224
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
225 if (! DigilibWorker.canRun()) {
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
226 logger.error("Servlet overloaded!");
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
227 try {
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
228 response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
229 } catch (IOException e) {
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
230 e.printStackTrace();
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
231 }
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
232 return;
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
233 }
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
234
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
235
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
236 DigilibWorker job=null;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
237 try {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
238
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
239 long startTime = System.currentTimeMillis();
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
240
501
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
241 /* check permissions */
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
242 if (useAuthorization) {
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
243 // get a list of required roles (empty if no restrictions)
531
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents: 527
diff changeset
244 List<String> rolesRequired;
501
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
245 try {
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
246 rolesRequired = authOp.rolesForPath(jobdeclaration.getFilePath(), request);
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
247 if (rolesRequired != null) {
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
248 authlog.debug("Role required: " + rolesRequired);
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
249 authlog.debug("User: " + request.getRemoteUser());
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
250 // is the current request/user authorized?
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
251 if (!authOp.isRoleAuthorized(rolesRequired, request)) {
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
252 // send deny answer and abort
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
253 throw new AuthOpException();
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
254 }
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
255 }
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
256
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
257 } catch (AuthOpException e) {
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
258 // TODO Auto-generated catch block
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
259 e.printStackTrace();
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
260 }
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
261 }
d960b7c68b08 added auth ops support
cmielack
parents: 500
diff changeset
262
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
263
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
264 job = new DigilibImageWorker(dlConfig, outputstream , jobdeclaration);
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
265
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
266 job.run();
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
267
503
fdb824bd57ab first functional version of PDFCache after restructuring the code
cmielack
parents: 502
diff changeset
268
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
269 if (job.hasError()) {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
270 throw new ImageOpException(job.getError().toString());
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
271 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
272
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
273 try {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
274 outputstream.flush();
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
275 logger.debug("Job Processing Time: "+ (System.currentTimeMillis()-startTime) + "ms");
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
276 } catch (IOException e) {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
277 e.printStackTrace();
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
278 logger.error(e.getMessage());
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
279 response.sendError(1);
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
280 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
281
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
282
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
283 } catch (IOException e) {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
284 e.printStackTrace();
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
285 logger.error(e.getClass()+": "+ e.getMessage());
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
286 //response.sendError(1);
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
287 } catch (ImageOpException e) {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
288 e.printStackTrace();
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
289 logger.error(e.getClass()+": "+ e.getMessage());
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
290 //response.sendError(1);
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
291 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
292
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
293
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 503
diff changeset
294 /* boolean errorMsgHtml = false;
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
295
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
296 if(jobdeclaration.hasOption("mo","errtxt")){
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
297 errorMsgHtml = true;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
298 } else if (jobdeclaration.hasOption("mo","errimg")) {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
299 errorMsgHtml = true;
511
e706a777798b documentation and comments added/cleaned up
cmielack
parents: 503
diff changeset
300 } */
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
301
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
302 }
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
303
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
304
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
305 /**
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
306 * Sends an error to the client as text or image.
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
307 *
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
308 * @param asHTML
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
309 * @param type
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
310 * @param msg
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
311 * @param response
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
312 */
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
313 public void digilibError(boolean asHTML, int type, String msg,
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
314 HttpServletResponse response) {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
315 try {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
316 File img = null;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
317 if (type == ERROR_AUTH) {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
318 if (msg == null) {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
319 msg = "ERROR: Unauthorized access!";
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
320 }
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
321 img = denyImgFile;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
322 } else if (type == ERROR_FILE) {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
323 if (msg == null) {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
324 msg = "ERROR: Image file not found!";
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
325 }
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
326 img = notfoundImgFile;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
327 } else {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
328 if (msg == null) {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
329 msg = "ERROR: Other image error!";
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
330 }
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
331 img = this.errorImgFile;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
332 }
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
333 if (asHTML && (img != null)) {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
334 ServletOps.htmlMessage(msg, response);
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
335 } else {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
336 ServletOps.sendFile(img, null, response);
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
337 }
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
338 } catch (IOException e) {
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
339 logger.error("Error sending error!", e);
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
340 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
341
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
342 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
343
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
344 public static String getVersion(){
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
345 return dlVersion;
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
346 }
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
347
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
348
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
349 }