Mercurial > hg > digilib-old
annotate servlet/src/digilib/servlet/Scaler.java @ 253:2adfb8bea870
servlet version 1.19b5
- filename and dpi in request
- filename and dpi in dlInfo-*
author | robcast |
---|---|
date | Wed, 25 Aug 2004 01:06:30 +0200 |
parents | aaf6eace011d |
children | e16d132aa6f6 |
rev | line source |
---|---|
181 | 1 /* |
2 * Scaler -- Scaler servlet main class | |
3 * | |
4 * Digital Image Library servlet components | |
5 * | |
6 * Copyright (C) 2001, 2002, 2003 Robert Casties (robcast@mail.berlios.de) | |
7 * | |
8 * This program is free software; you can redistribute it and/or modify it | |
9 * under the terms of the GNU General Public License as published by the Free | |
10 * Software Foundation; either version 2 of the License, or (at your option) | |
11 * any later version. | |
12 * | |
13 * Please read license.txt for the full details. A copy of the GPL may be found | |
14 * at http://www.gnu.org/copyleft/lgpl.html | |
15 * | |
16 * You should have received a copy of the GNU General Public License along with | |
17 * this program; if not, write to the Free Software Foundation, Inc., 59 Temple | |
18 * Place, Suite 330, Boston, MA 02111-1307 USA | |
19 * | |
20 */ | |
1 | 21 |
22 package digilib.servlet; | |
23 | |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
24 import java.awt.geom.AffineTransform; |
100 | 25 import java.awt.geom.NoninvertibleTransformException; |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
26 import java.awt.geom.Rectangle2D; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
27 import java.io.File; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
28 import java.io.IOException; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
29 import java.util.List; |
1 | 30 |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
31 import javax.servlet.ServletConfig; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
32 import javax.servlet.ServletContext; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
33 import javax.servlet.ServletException; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
34 import javax.servlet.http.HttpServlet; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
35 import javax.servlet.http.HttpServletRequest; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
36 import javax.servlet.http.HttpServletResponse; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
37 |
181 | 38 import org.apache.log4j.Logger; |
39 | |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
40 import digilib.auth.AuthOpException; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
41 import digilib.auth.AuthOps; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
42 import digilib.image.DocuImage; |
122 | 43 import digilib.image.DocuInfo; |
149 | 44 import digilib.image.ImageLoaderImageInfoDocuInfo; |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
45 import digilib.image.ImageOpException; |
149 | 46 import digilib.image.ImageSize; |
86 | 47 import digilib.io.DocuDirCache; |
181 | 48 import digilib.io.FileOpException; |
49 import digilib.io.FileOps; | |
161 | 50 import digilib.io.ImageFile; |
51 import digilib.io.ImageFileset; | |
1 | 52 |
64
5ea1999befd4
New JAI ImageLoader plugin. Currently uses first beta version of the plugin.
robcast
parents:
62
diff
changeset
|
53 //import tilecachetool.*; |
1 | 54 |
73 | 55 /** |
181 | 56 * @author casties |
57 */ | |
1 | 58 //public class Scaler extends HttpServlet implements SingleThreadModel { |
59 public class Scaler extends HttpServlet { | |
60 | |
73 | 61 // digilib servlet version (for all components) |
253 | 62 public static final String dlVersion = "1.19b5"; |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
63 |
181 | 64 // logger for accounting requests |
65 Logger accountlog = Logger.getLogger("account.request"); | |
66 // gengeral logger for this class | |
67 Logger logger = Logger.getLogger("digilib.servlet"); | |
68 // logger for authentication related | |
69 Logger authlog = Logger.getLogger("digilib.auth"); | |
70 | |
71 | |
73 | 72 // AuthOps instance |
73 AuthOps authOp; | |
86 | 74 // DocuDirCache instance |
75 DocuDirCache dirCache; | |
161 | 76 |
153 | 77 // deny image file |
78 File denyImgFile; | |
79 // error image file | |
80 File errorImgFile; | |
81 // subsampling before scaling | |
82 float minSubsample = 2f; | |
83 // send files as is? | |
84 boolean sendFileAllowed = true; | |
85 // default scaling quality | |
86 int defaultQuality = 1; | |
1 | 87 |
94 | 88 // DigilibConfiguration instance |
73 | 89 DigilibConfiguration dlConfig; |
1 | 90 |
73 | 91 // use authorization database |
92 boolean useAuthentication = true; | |
1 | 93 |
100 | 94 // EXPRIMENTAL |
95 // try to enlarge cropping area for "oblique" angles | |
96 boolean wholeRotArea = false; | |
97 | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
98 /** |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
99 * Initialisation on first run. |
73 | 100 * |
101 * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig) | |
102 */ | |
103 public void init(ServletConfig config) throws ServletException { | |
104 super.init(config); | |
1 | 105 |
73 | 106 // Debuggin! |
107 //TCTool tctool = new TCTool(); | |
153 | 108 |
147 | 109 System.out.println( |
189 | 110 "***** Digital Image Library Image Scaler Servlet (version " |
147 | 111 + dlVersion |
112 + ") *****"); | |
1 | 113 |
73 | 114 // get our ServletContext |
115 ServletContext context = config.getServletContext(); | |
116 // see if there is a Configuration instance | |
117 dlConfig = | |
118 (DigilibConfiguration) context.getAttribute( | |
86 | 119 "digilib.servlet.configuration"); |
73 | 120 if (dlConfig == null) { |
121 // create new Configuration | |
122 try { | |
123 dlConfig = new DigilibConfiguration(config); | |
86 | 124 context.setAttribute("digilib.servlet.configuration", dlConfig); |
73 | 125 } catch (Exception e) { |
126 throw new ServletException(e); | |
127 } | |
128 } | |
181 | 129 // say hello in the log file |
189 | 130 logger.info("***** Digital Image Library Image Scaler Servlet (version " |
181 | 131 + dlVersion |
132 + ") *****"); | |
73 | 133 // set our AuthOps |
153 | 134 useAuthentication = dlConfig.getAsBoolean("use-authorization"); |
181 | 135 // AuthOps instance |
153 | 136 authOp = (AuthOps) dlConfig.getValue("servlet.auth.op"); |
181 | 137 |
86 | 138 // DocuDirCache instance |
153 | 139 dirCache = (DocuDirCache) dlConfig.getValue("servlet.dir.cache"); |
140 denyImgFile = new File(dlConfig.getAsString("denied-image")); | |
141 errorImgFile = new File(dlConfig.getAsString("error-image")); | |
142 sendFileAllowed = dlConfig.getAsBoolean("sendfile-allowed"); | |
143 minSubsample = dlConfig.getAsFloat("subsample-minimum"); | |
144 defaultQuality = dlConfig.getAsInt("default-quality"); | |
73 | 145 } |
1 | 146 |
181 | 147 /** Process the HTTP Get request */ |
73 | 148 public void doGet(HttpServletRequest request, HttpServletResponse response) |
149 throws ServletException, IOException { | |
181 | 150 accountlog.info("GET from "+request.getRemoteAddr()); |
73 | 151 // create new request with defaults |
152 DigilibRequest dlReq = new DigilibRequest(); | |
153 // set with request parameters | |
154 dlReq.setWithRequest(request); | |
155 // add DigilibRequest to ServletRequest | |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
156 request.setAttribute("digilib.servlet.request", dlReq); |
73 | 157 // do the processing |
158 processRequest(request, response); | |
159 } | |
1 | 160 |
181 | 161 /** Process the HTTP Post request */ |
73 | 162 public void doPost( |
163 HttpServletRequest request, | |
164 HttpServletResponse response) | |
165 throws ServletException, IOException { | |
181 | 166 accountlog.info("POST from "+request.getRemoteAddr()); |
73 | 167 // create new request with defaults |
168 DigilibRequest dlReq = new DigilibRequest(); | |
169 // set with request parameters | |
170 dlReq.setWithRequest(request); | |
171 // add DigilibRequest to ServletRequest | |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
172 request.setAttribute("digilib.servlet.request", dlReq); |
73 | 173 // do the processing |
174 processRequest(request, response); | |
175 } | |
176 | |
177 /** main request handler. */ | |
178 void processRequest( | |
179 HttpServletRequest request, | |
180 HttpServletResponse response) | |
181 throws ServletException, IOException { | |
1 | 182 |
181 | 183 accountlog.debug("request: "+request.getQueryString()); |
189 | 184 logger.debug("request: "+request.getQueryString()); |
181 | 185 |
73 | 186 // time for benchmarking |
187 long startTime = System.currentTimeMillis(); | |
188 // output mime/type | |
189 String mimeType = "image/png"; | |
1 | 190 |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
191 /* parameters for a session */ |
1 | 192 |
73 | 193 // scale the image file to fit window size i.e. respect dw,dh |
194 boolean scaleToFit = true; | |
100 | 195 // scale the image by a fixed factor only |
196 boolean absoluteScale = false; | |
122 | 197 // only crop the image to fit |
198 boolean cropToFit = false; | |
149 | 199 // send the file as is |
200 boolean sendFile = false; | |
201 // use low resolution images only | |
202 boolean loresOnly = false; | |
203 // use hires images only | |
122 | 204 boolean hiresOnly = false; |
73 | 205 // interpolation to use for scaling |
153 | 206 int scaleQual = defaultQuality; |
73 | 207 // send html error message (or image file) |
208 boolean errorMsgHtml = false; | |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
209 // mirror the image |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
210 boolean doMirror = false; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
211 // angle of mirror axis |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
212 double mirrorAngle = 0; |
130 | 213 // original (hires) image resolution |
214 double origResX = 0; | |
215 double origResY = 0; | |
1 | 216 |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
217 /* request parameters */ |
73 | 218 |
219 DigilibRequest dlRequest = | |
220 (DigilibRequest) request.getAttribute("digilib.servlet.request"); | |
1 | 221 |
73 | 222 // destination image width |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
223 int paramDW = dlRequest.getAsInt("dw"); |
73 | 224 // destination image height |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
225 int paramDH = dlRequest.getAsInt("dh"); |
73 | 226 // relative area x_offset (0..1) |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
227 double paramWX = dlRequest.getAsFloat("wx"); |
73 | 228 // relative area y_offset |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
229 double paramWY = dlRequest.getAsFloat("wy"); |
73 | 230 // relative area width (0..1) |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
231 double paramWW = dlRequest.getAsFloat("ww"); |
73 | 232 // relative area height |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
233 double paramWH = dlRequest.getAsFloat("wh"); |
73 | 234 // scale factor (additional to dw/width, dh/height) |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
235 double paramWS = dlRequest.getAsFloat("ws"); |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
236 // rotation angle |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
237 double paramROT = dlRequest.getAsFloat("rot"); |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
238 // contrast enhancement |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
239 float paramCONT = dlRequest.getAsFloat("cont"); |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
240 // brightness enhancement |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
241 float paramBRGT = dlRequest.getAsFloat("brgt"); |
86 | 242 // color modification |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
243 float[] paramRGBM = null; |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
244 Parameter p = dlRequest.get("rgbm"); |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
245 if (p.hasValue() && (!p.getAsString().equals("0/0/0"))) { |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
246 paramRGBM = p.parseAsFloatArray("/"); |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
247 } |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
248 float[] paramRGBA = null; |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
249 p = dlRequest.get("rgba"); |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
250 if (p.hasValue() && (!p.getAsString().equals("0/0/0"))) { |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
251 paramRGBA = p.parseAsFloatArray("/"); |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
252 } |
130 | 253 // destination resolution (DPI) |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
254 float paramDDPIX = dlRequest.getAsFloat("ddpix"); |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
255 float paramDDPIY = dlRequest.getAsFloat("ddpiy"); |
130 | 256 if ((paramDDPIX == 0) || (paramDDPIY == 0)) { |
257 // if X or Y resolution isn't set, use DDPI | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
258 paramDDPIX = dlRequest.getAsFloat("ddpi"); |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
259 paramDDPIY = paramDDPIX; |
130 | 260 } |
1 | 261 |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
262 /* |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
263 * operation mode: "fit": always fit to page, "clip": send original |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
264 * resolution cropped, "file": send whole file (if allowed) |
73 | 265 */ |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
266 if (dlRequest.hasOption("mo", "clip")) { |
73 | 267 scaleToFit = false; |
100 | 268 absoluteScale = false; |
73 | 269 cropToFit = true; |
149 | 270 sendFile = false; |
271 hiresOnly = true; | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
272 } else if (dlRequest.hasOption("mo", "fit")) { |
73 | 273 scaleToFit = true; |
100 | 274 absoluteScale = false; |
122 | 275 cropToFit = false; |
149 | 276 sendFile = false; |
277 hiresOnly = false; | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
278 } else if (dlRequest.hasOption("mo", "osize")) { |
100 | 279 scaleToFit = false; |
280 absoluteScale = true; | |
122 | 281 cropToFit = false; |
149 | 282 sendFile = false; |
122 | 283 hiresOnly = true; |
73 | 284 } |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
285 // operation mode: "lores": try to use scaled image, "hires": use |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
286 // unscaled image |
149 | 287 // "autores": try best fitting resolution |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
288 if (dlRequest.hasOption("mo", "lores")) { |
149 | 289 loresOnly = true; |
290 hiresOnly = false; | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
291 } else if (dlRequest.hasOption("mo", "hires")) { |
149 | 292 loresOnly = false; |
293 hiresOnly = true; | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
294 } else if (dlRequest.hasOption("mo", "autores")) { |
149 | 295 loresOnly = false; |
296 hiresOnly = false; | |
297 } | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
298 // operation mode: "errtxt": error message in html, "errimg": error |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
299 // image |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
300 if (dlRequest.hasOption("mo", "errtxt")) { |
73 | 301 errorMsgHtml = true; |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
302 } else if (dlRequest.hasOption("mo", "errimg")) { |
73 | 303 errorMsgHtml = false; |
304 } | |
305 // operation mode: "q0" - "q2": interpolation quality | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
306 if (dlRequest.hasOption("mo", "q0")) { |
73 | 307 scaleQual = 0; |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
308 } else if (dlRequest.hasOption("mo", "q1")) { |
73 | 309 scaleQual = 1; |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
310 } else if (dlRequest.hasOption("mo", "q2")) { |
73 | 311 scaleQual = 2; |
312 } | |
1 | 313 |
185 | 314 // check with the maximum allowed size (if set) |
315 int maxImgSize = dlConfig.getAsInt("max-image-size"); | |
316 if (maxImgSize > 0) { | |
317 paramDW = (paramDW * paramWS > maxImgSize) ? (int)(maxImgSize / paramWS) : paramDW; | |
318 paramDH = (paramDH * paramWS > maxImgSize) ? (int)(maxImgSize / paramWS) : paramDH; | |
319 } | |
320 | |
73 | 321 //"big" try for all file/image actions |
322 try { | |
323 | |
161 | 324 // ImageFileset of the image to load |
325 ImageFileset fileset = null; | |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
326 |
122 | 327 // new DocuInfo instance |
149 | 328 DocuInfo docuInfo = new ImageLoaderImageInfoDocuInfo(); |
73 | 329 |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
330 /* find the file to load/send */ |
1 | 331 |
73 | 332 // get PathInfo |
333 String loadPathName = dlRequest.getFilePath(); | |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
334 |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
335 /* check permissions */ |
73 | 336 if (useAuthentication) { |
337 // get a list of required roles (empty if no restrictions) | |
338 List rolesRequired = authOp.rolesForPath(loadPathName, request); | |
339 if (rolesRequired != null) { | |
181 | 340 authlog.info("Role required: " + rolesRequired); |
341 authlog.info("User: " + request.getRemoteUser()); | |
73 | 342 // is the current request/user authorized? |
343 if (!authOp.isRoleAuthorized(rolesRequired, request)) { | |
344 // send deny answer and abort | |
181 | 345 authlog.error("ERROR: access denied!"); |
73 | 346 if (errorMsgHtml) { |
347 ServletOps.htmlMessage( | |
348 "ERROR: Unauthorized access!", | |
349 response); | |
350 } else { | |
181 | 351 ServletOps.sendFile(denyImgFile, null, response); |
73 | 352 } |
353 return; | |
354 } | |
355 } | |
356 } | |
1 | 357 |
122 | 358 // find the file(set) |
161 | 359 ImageFile fileToLoad; |
360 fileset = | |
361 (ImageFileset) dirCache.getFile( | |
362 loadPathName, | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
363 dlRequest.getAsInt("pn"), |
161 | 364 FileOps.CLASS_IMAGE); |
94 | 365 if (fileset == null) { |
366 throw new FileOpException( | |
367 "File " | |
368 + loadPathName | |
369 + "(" | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
370 + dlRequest.getAsInt("pn") |
94 | 371 + ") not found."); |
372 } | |
181 | 373 |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
374 /* calculate expected source image size */ |
149 | 375 ImageSize expectedSourceSize = new ImageSize(); |
122 | 376 if (scaleToFit) { |
377 double scale = (1 / Math.min(paramWW, paramWH)) * paramWS; | |
149 | 378 expectedSourceSize.setSize( |
379 (int) (paramDW * scale), | |
380 (int) (paramDH * scale)); | |
122 | 381 } else { |
382 expectedSourceSize.setSize( | |
149 | 383 (int) (paramDW * paramWS), |
384 (int) (paramDH * paramWS)); | |
100 | 385 } |
386 | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
387 /* select a resolution */ |
149 | 388 if (hiresOnly) { |
389 // get first element (= highest resolution) | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
390 fileToLoad = fileset.getBiggest(); |
149 | 391 } else if (loresOnly) { |
392 // enforced lores uses next smaller resolution | |
393 fileToLoad = | |
394 fileset.getNextSmaller(expectedSourceSize, docuInfo); | |
395 if (fileToLoad == null) { | |
396 // this is the smallest we have | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
397 fileToLoad = fileset.getSmallest(); |
149 | 398 } |
399 } else { | |
130 | 400 // autores: use next higher resolution |
122 | 401 fileToLoad = |
402 fileset.getNextBigger(expectedSourceSize, docuInfo); | |
403 if (fileToLoad == null) { | |
130 | 404 // this is the highest we have |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
405 fileToLoad = fileset.getBiggest(); |
122 | 406 } |
86 | 407 } |
181 | 408 logger.info("Loading: " + fileToLoad.getFile()); |
73 | 409 |
181 | 410 /* |
411 * send the image if its mo=(raw)file | |
412 */ | |
413 if (dlRequest.hasOption("mo", "file") | |
414 || dlRequest.hasOption("mo", "rawfile")) { | |
415 if (sendFileAllowed) { | |
416 String mt = null; | |
417 if (dlRequest.hasOption("mo", "rawfile")) { | |
418 mt = "application/octet-stream"; | |
419 } | |
420 ServletOps.sendFile(fileToLoad.getFile(), mt, response); | |
421 } | |
422 } | |
423 | |
424 /* | |
425 * prepare resolution for original size | |
426 */ | |
130 | 427 if (absoluteScale) { |
428 // get original resolution from metadata | |
429 fileset.checkMeta(); | |
430 origResX = fileset.getResX(); | |
431 origResY = fileset.getResY(); | |
139
11cfe4c89fdc
Servlet version 1.11b1 with improved original-size.
robcast
parents:
130
diff
changeset
|
432 if ((origResX == 0) || (origResY == 0)) { |
11cfe4c89fdc
Servlet version 1.11b1 with improved original-size.
robcast
parents:
130
diff
changeset
|
433 throw new ImageOpException("Missing image DPI information!"); |
11cfe4c89fdc
Servlet version 1.11b1 with improved original-size.
robcast
parents:
130
diff
changeset
|
434 } |
11cfe4c89fdc
Servlet version 1.11b1 with improved original-size.
robcast
parents:
130
diff
changeset
|
435 |
11cfe4c89fdc
Servlet version 1.11b1 with improved original-size.
robcast
parents:
130
diff
changeset
|
436 if ((paramDDPIX == 0) || (paramDDPIY == 0)) { |
11cfe4c89fdc
Servlet version 1.11b1 with improved original-size.
robcast
parents:
130
diff
changeset
|
437 throw new ImageOpException("Missing display DPI information!"); |
11cfe4c89fdc
Servlet version 1.11b1 with improved original-size.
robcast
parents:
130
diff
changeset
|
438 } |
130 | 439 } |
440 | |
86 | 441 // check the source image |
122 | 442 if (!fileToLoad.isChecked()) { |
149 | 443 docuInfo.checkFile(fileToLoad); |
122 | 444 } |
86 | 445 // get the source image type |
446 mimeType = fileToLoad.getMimetype(); | |
149 | 447 // get the source image size |
448 ImageSize imgSize = fileToLoad.getSize(); | |
449 | |
130 | 450 // decide if the image can be sent as is |
451 boolean mimetypeSendable = | |
122 | 452 mimeType.equals("image/jpeg") |
453 || mimeType.equals("image/png") | |
454 || mimeType.equals("image/gif"); | |
130 | 455 boolean imagoOptions = |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
456 dlRequest.hasOption("mo", "hmir") |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
457 || dlRequest.hasOption("mo", "vmir") |
130 | 458 || (paramROT != 0) |
459 || (paramRGBM != null) | |
460 || (paramRGBA != null) | |
461 || (paramCONT != 0) | |
462 || (paramBRGT != 0); | |
139
11cfe4c89fdc
Servlet version 1.11b1 with improved original-size.
robcast
parents:
130
diff
changeset
|
463 boolean imageSendable = mimetypeSendable && !imagoOptions; |
73 | 464 |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
465 /* |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
466 * if not autoRes and image smaller than requested size then send |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
467 * as is. if autoRes and image has requested size then send as is. |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
468 * if not autoScale and not scaleToFit nor cropToFit then send as |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
469 * is (mo=file) |
73 | 470 */ |
181 | 471 if (imageSendable |
472 && ((loresOnly | |
473 && fileToLoad.getSize().isSmallerThan(expectedSourceSize)) | |
474 || (!(loresOnly || hiresOnly) | |
475 && fileToLoad.getSize().fitsIn(expectedSourceSize)))) { | |
73 | 476 |
181 | 477 logger.debug("Sending File as is."); |
1 | 478 |
181 | 479 ServletOps.sendFile(fileToLoad.getFile(), null, response); |
480 | |
481 logger.info("Done in " | |
73 | 482 + (System.currentTimeMillis() - startTime) |
483 + "ms"); | |
484 return; | |
485 } | |
1 | 486 |
149 | 487 // new DocuImage instance |
488 DocuImage docuImage = dlConfig.getDocuImageInstance(); | |
489 if (docuImage == null) { | |
490 throw new ImageOpException("Unable to load DocuImage class!"); | |
491 } | |
492 | |
493 // set interpolation quality | |
494 docuImage.setQuality(scaleQual); | |
181 | 495 |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
496 // set missing dw or dh from aspect ratio |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
497 double imgAspect = fileToLoad.getAspect(); |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
498 if (paramDW == 0) { |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
499 paramDW = (int) Math.round(paramDH * imgAspect); |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
500 } else if (paramDH == 0) { |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
501 paramDH = (int) Math.round(paramDW / imgAspect); |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
502 } |
149 | 503 |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
504 /* crop and scale the image */ |
1 | 505 |
181 | 506 logger.debug("IMG: " + imgSize.getWidth() + "x" + imgSize.getHeight()); |
507 logger.debug("time " + (System.currentTimeMillis() - startTime) + "ms"); | |
1 | 508 |
73 | 509 // coordinates and scaling |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
510 double areaXoff; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
511 double areaYoff; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
512 double areaWidth; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
513 double areaHeight; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
514 double scaleX; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
515 double scaleY; |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
516 double scaleXY; |
1 | 517 |
100 | 518 // coordinates using Java2D |
519 // image size in pixels | |
520 Rectangle2D imgBounds = | |
149 | 521 new Rectangle2D.Double( |
522 0, | |
523 0, | |
524 imgSize.getWidth(), | |
525 imgSize.getHeight()); | |
100 | 526 // user window area in [0,1] coordinates |
527 Rectangle2D relUserArea = | |
528 new Rectangle2D.Double(paramWX, paramWY, paramWW, paramWH); | |
529 // transform from relative [0,1] to image coordinates. | |
530 AffineTransform imgTrafo = | |
149 | 531 AffineTransform.getScaleInstance( |
532 imgSize.getWidth(), | |
533 imgSize.getHeight()); | |
85 | 534 // transform user coordinate area to image coordinate area |
100 | 535 Rectangle2D userImgArea = |
536 imgTrafo.createTransformedShape(relUserArea).getBounds2D(); | |
537 | |
538 // calculate scaling factors based on inner user area | |
73 | 539 if (scaleToFit) { |
100 | 540 areaWidth = userImgArea.getWidth(); |
541 areaHeight = userImgArea.getHeight(); | |
73 | 542 scaleX = paramDW / areaWidth * paramWS; |
543 scaleY = paramDH / areaHeight * paramWS; | |
544 scaleXY = (scaleX > scaleY) ? scaleY : scaleX; | |
100 | 545 } else if (absoluteScale) { |
546 // absolute scale | |
130 | 547 scaleX = paramDDPIX / origResX; |
548 scaleY = paramDDPIY / origResY; | |
549 // currently only same scale :-( | |
550 scaleXY = scaleX; | |
551 areaWidth = paramDW / scaleXY * paramWS; | |
552 areaHeight = paramDH / scaleXY * paramWS; | |
100 | 553 // reset user area size |
554 userImgArea.setRect( | |
555 userImgArea.getX(), | |
556 userImgArea.getY(), | |
557 areaWidth, | |
558 areaHeight); | |
73 | 559 } else { |
560 // crop to fit | |
85 | 561 areaWidth = paramDW * paramWS; |
562 areaHeight = paramDH * paramWS; | |
100 | 563 // reset user area size |
564 userImgArea.setRect( | |
565 userImgArea.getX(), | |
566 userImgArea.getY(), | |
567 areaWidth, | |
568 areaHeight); | |
73 | 569 scaleX = 1f; |
570 scaleY = 1f; | |
571 scaleXY = 1f; | |
100 | 572 } |
85 | 573 |
100 | 574 // enlarge image area for rotations to cover additional pixels |
575 Rectangle2D outerUserImgArea = userImgArea; | |
576 Rectangle2D innerUserImgArea = userImgArea; | |
577 if (wholeRotArea) { | |
578 if (paramROT != 0) { | |
579 try { | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
580 // rotate user area coordinates around center of user |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
581 // area |
100 | 582 AffineTransform rotTrafo = |
583 AffineTransform.getRotateInstance( | |
584 Math.toRadians(paramROT), | |
585 userImgArea.getCenterX(), | |
586 userImgArea.getCenterY()); | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
587 // get bounds from rotated end position |
100 | 588 innerUserImgArea = |
589 rotTrafo | |
590 .createTransformedShape(userImgArea) | |
591 .getBounds2D(); | |
592 // get bounds from back-rotated bounds | |
593 outerUserImgArea = | |
594 rotTrafo | |
595 .createInverse() | |
596 .createTransformedShape(innerUserImgArea) | |
597 .getBounds2D(); | |
598 } catch (NoninvertibleTransformException e1) { | |
599 // this shouldn't happen anyway | |
600 e1.printStackTrace(); | |
601 } | |
602 } | |
73 | 603 } |
1 | 604 |
181 | 605 logger.debug("Scale " |
73 | 606 + scaleXY |
607 + "(" | |
608 + scaleX | |
609 + "," | |
610 + scaleY | |
611 + ") on " | |
100 | 612 + outerUserImgArea); |
1 | 613 |
73 | 614 // clip area at the image border |
100 | 615 outerUserImgArea = outerUserImgArea.createIntersection(imgBounds); |
85 | 616 |
100 | 617 areaWidth = outerUserImgArea.getWidth(); |
618 areaHeight = outerUserImgArea.getHeight(); | |
619 areaXoff = outerUserImgArea.getX(); | |
620 areaYoff = outerUserImgArea.getY(); | |
1 | 621 |
181 | 622 logger.debug("crop: " |
73 | 623 + areaXoff |
624 + "," | |
625 + areaYoff | |
626 + " " | |
627 + areaWidth | |
628 + "x" | |
629 + areaHeight); | |
1 | 630 |
73 | 631 // check image parameters sanity |
632 if ((areaWidth < 1) | |
633 || (areaHeight < 1) | |
634 || (scaleXY * areaWidth < 2) | |
635 || (scaleXY * areaHeight < 2)) { | |
181 | 636 logger.error("ERROR: invalid scale parameter set!"); |
73 | 637 throw new ImageOpException("Invalid scale parameter set!"); |
638 } | |
1 | 639 |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
640 /* crop and scale image */ |
85 | 641 |
642 // use subimage loading if possible | |
643 if (docuImage.isSubimageSupported()) { | |
181 | 644 logger.debug("Subimage: scale " + scaleXY + " = " + (1 / scaleXY)); |
85 | 645 double subf = 1d; |
646 double subsamp = 1d; | |
647 if (scaleXY < 1) { | |
648 subf = 1 / scaleXY; | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
649 // for higher quality reduce subsample factor by |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
650 // minSubsample |
140 | 651 if (scaleQual > 0) { |
161 | 652 subsamp = Math.max(Math.floor(subf / minSubsample), 1d); |
140 | 653 } else { |
654 subsamp = Math.floor(subf); | |
655 } | |
85 | 656 scaleXY = subsamp / subf; |
181 | 657 logger.debug("Using subsampling: " + subsamp + " rest " + scaleXY); |
85 | 658 } |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
659 |
85 | 660 docuImage.loadSubimage( |
149 | 661 fileToLoad, |
100 | 662 outerUserImgArea.getBounds(), |
85 | 663 (int) subsamp); |
664 | |
181 | 665 logger.debug("SUBSAMP: " |
85 | 666 + subsamp |
667 + " -> " | |
668 + docuImage.getWidth() | |
669 + "x" | |
670 + docuImage.getHeight()); | |
671 | |
149 | 672 docuImage.scale(scaleXY, scaleXY); |
85 | 673 |
674 } else { | |
100 | 675 // else load and crop the whole file |
149 | 676 docuImage.loadImage(fileToLoad); |
85 | 677 docuImage.crop( |
678 (int) areaXoff, | |
679 (int) areaYoff, | |
680 (int) areaWidth, | |
681 (int) areaHeight); | |
682 | |
149 | 683 docuImage.scale(scaleXY, scaleXY); |
85 | 684 } |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
685 |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
686 // mirror image |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
687 // operation mode: "hmir": mirror horizontally, "vmir": mirror |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
688 // vertically |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
689 if (dlRequest.hasOption("mo", "hmir")) { |
100 | 690 docuImage.mirror(0); |
691 } | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
692 if (dlRequest.hasOption("mo", "vmir")) { |
100 | 693 docuImage.mirror(90); |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
694 } |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
695 |
100 | 696 // rotate image |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
697 if (paramROT != 0d) { |
94 | 698 docuImage.rotate(paramROT); |
100 | 699 if (wholeRotArea) { |
700 // crop to the inner bounding box | |
701 double xcrop = | |
702 docuImage.getWidth() | |
703 - innerUserImgArea.getWidth() * scaleXY; | |
704 double ycrop = | |
705 docuImage.getHeight() | |
706 - innerUserImgArea.getHeight() * scaleXY; | |
707 if ((xcrop > 0) || (ycrop > 0)) { | |
708 // only crop smaller | |
709 xcrop = (xcrop > 0) ? xcrop : 0; | |
710 ycrop = (ycrop > 0) ? ycrop : 0; | |
711 // crop image | |
712 docuImage.crop( | |
713 (int) (xcrop / 2), | |
714 (int) (ycrop / 2), | |
715 (int) (docuImage.getWidth() - xcrop), | |
716 (int) (docuImage.getHeight() - ycrop)); | |
717 } | |
718 } | |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
719 |
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
720 } |
1 | 721 |
86 | 722 // color modification |
723 if ((paramRGBM != null) || (paramRGBA != null)) { | |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
724 // make shure we actually have two arrays |
86 | 725 if (paramRGBM == null) { |
726 paramRGBM = new float[3]; | |
727 } | |
728 if (paramRGBA == null) { | |
729 paramRGBA = new float[3]; | |
730 } | |
100 | 731 // calculate "contrast" values (c=2^x) |
86 | 732 float[] mult = new float[3]; |
733 for (int i = 0; i < 3; i++) { | |
94 | 734 mult[i] = (float) Math.pow(2, (double) paramRGBM[i]); |
86 | 735 } |
736 docuImage.enhanceRGB(mult, paramRGBA); | |
737 } | |
94 | 738 |
100 | 739 // contrast and brightness enhancement |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
740 if ((paramCONT != 0f) || (paramBRGT != 0f)) { |
100 | 741 double mult = Math.pow(2, paramCONT); |
742 docuImage.enhance((float) mult, (float) paramBRGT); | |
743 } | |
744 | |
181 | 745 logger.debug("time " + (System.currentTimeMillis() - startTime) + "ms"); |
73 | 746 |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
747 /* write the resulting image */ |
1 | 748 |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
749 // setup output -- if source is JPG then dest will be JPG else it's |
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
750 // PNG |
100 | 751 if (mimeType.equals("image/jpeg") |
752 || mimeType.equals("image/jp2")) { | |
753 mimeType = "image/jpeg"; | |
754 } else { | |
73 | 755 mimeType = "image/png"; |
756 } | |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
757 response.setContentType(mimeType); |
1 | 758 |
73 | 759 // write the image |
79
63c8186455c1
Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents:
73
diff
changeset
|
760 docuImage.writeImage(mimeType, response.getOutputStream()); |
1 | 761 |
181 | 762 logger.info("Done in " + (System.currentTimeMillis() - startTime) + "ms"); |
209 | 763 |
764 docuImage.dispose(); | |
73 | 765 |
170
d40922628e4a
Servlet Version 1.16b2 with new DigilibParameter code.
robcast
parents:
161
diff
changeset
|
766 /* error handling */ |
1 | 767 |
73 | 768 } // end of "big" try |
156 | 769 catch (IOException e) { |
197 | 770 logger.fatal("ERROR: File IO Error: "+e); |
73 | 771 try { |
772 if (errorMsgHtml) { | |
773 ServletOps.htmlMessage( | |
774 "ERROR: File IO Error: " + e, | |
775 response); | |
776 } else { | |
181 | 777 ServletOps.sendFile(errorImgFile, null, response); |
73 | 778 } |
779 } catch (FileOpException ex) { | |
780 } // so we don't get a loop | |
781 } catch (AuthOpException e) { | |
197 | 782 logger.fatal("ERROR: Authorization error: "+e); |
73 | 783 try { |
784 if (errorMsgHtml) { | |
785 ServletOps.htmlMessage( | |
786 "ERROR: Authorization error: " + e, | |
787 response); | |
788 } else { | |
181 | 789 ServletOps.sendFile(errorImgFile, null, response); |
73 | 790 } |
791 } catch (FileOpException ex) { | |
792 } // so we don't get a loop | |
793 } catch (ImageOpException e) { | |
197 | 794 logger.fatal("ERROR: Image Error: "+e); |
73 | 795 try { |
796 if (errorMsgHtml) { | |
797 ServletOps.htmlMessage( | |
798 "ERROR: Image Operation Error: " + e, | |
799 response); | |
800 } else { | |
181 | 801 ServletOps.sendFile(errorImgFile, null, response); |
73 | 802 } |
803 } catch (FileOpException ex) { | |
804 } // so we don't get a loop | |
805 } catch (RuntimeException e) { | |
806 // JAI likes to throw RuntimeExceptions ;-( | |
197 | 807 logger.fatal("ERROR: Other Image Error: "+e); |
73 | 808 try { |
809 if (errorMsgHtml) { | |
810 ServletOps.htmlMessage( | |
811 "ERROR: Other Image Operation Error: " + e, | |
812 response); | |
813 } else { | |
181 | 814 ServletOps.sendFile(errorImgFile, null, response); |
73 | 815 } |
816 } catch (FileOpException ex) { | |
817 } // so we don't get a loop | |
818 } | |
819 } | |
1 | 820 |
73 | 821 } //Scaler class |