annotate servlet/src/digilib/servlet/Scaler.java @ 511:e706a777798b digilibPDF

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