annotate servlet/src/digilib/servlet/Scaler.java @ 503:fdb824bd57ab digilibPDF

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