annotate servlet3/src/main/java/digilib/servlet/Scaler.java @ 1158:2ee261676828 default tip

better out-of-the box experience: * digilib works without config files using sensible defaults * new sample images folder used by default * config files moved to templates
author robcast
date Tue, 19 Feb 2013 17:32:25 +0100
parents 4e368c85cce4
children
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
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
3 import java.io.File;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
4 import java.io.IOException;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
5 import java.util.List;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
6
804
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 802
diff changeset
7 import javax.servlet.AsyncContext;
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
8 import javax.servlet.ServletConfig;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
9 import javax.servlet.ServletContext;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
10 import javax.servlet.ServletException;
804
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 802
diff changeset
11 import javax.servlet.annotation.WebServlet;
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
12 import javax.servlet.http.HttpServlet;
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
13 import javax.servlet.http.HttpServletRequest;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
14 import javax.servlet.http.HttpServletResponse;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
15
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
16 import org.apache.log4j.Logger;
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
17
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
18 import digilib.auth.AuthOpException;
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
19 import digilib.auth.AuthOps;
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 542
diff changeset
20 import digilib.image.DocuImage;
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
21 import digilib.image.ImageJobDescription;
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
22 import digilib.image.ImageOpException;
86
997ba69afb81 New version 1.8b1.
robcast
parents: 85
diff changeset
23 import digilib.io.DocuDirCache;
335
9bce7008a514 Servlet version 1.5.3b
robcast
parents: 303
diff changeset
24 import digilib.io.DocuDirectory;
588
aee436f0549d more work on stream input
robcast
parents: 577
diff changeset
25 import digilib.io.ImageInput;
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
26 import digilib.util.DigilibJobCenter;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
27
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
28 @WebServlet(name = "Scaler", urlPatterns = { "/Scaler", "/servlet/Scaler/*" }, asyncSupported = true)
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
29 public class Scaler extends HttpServlet {
263
e16d132aa6f6 Servlet version 1.21b1
robcast
parents: 253
diff changeset
30
804
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 802
diff changeset
31 private static final long serialVersionUID = 5289386646192471549L;
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 802
diff changeset
32
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
33 /** digilib servlet version (for all components) */
1158
2ee261676828 better out-of-the box experience:
robcast
parents: 1032
diff changeset
34 public static final String version = "2.1b3 async";
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
35
558
2e971b9f3022 added some enums
robcast
parents: 557
diff changeset
36 /** servlet error codes */
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
37 public static enum Error {
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
38 UNKNOWN, AUTH, FILE, IMAGE
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
39 };
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
40
558
2e971b9f3022 added some enums
robcast
parents: 557
diff changeset
41 /** type of error message */
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
42 public static enum ErrMsg {
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
43 IMAGE, TEXT, CODE
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
44 };
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
45
867
987cfe401970 add default error message type config.
robcast
parents: 865
diff changeset
46 /** default error message type */
987cfe401970 add default error message type config.
robcast
parents: 865
diff changeset
47 public static ErrMsg defaultErrMsgType = ErrMsg.IMAGE;
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
48
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
49 /** logger for accounting requests */
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
50 protected static Logger accountlog = Logger.getLogger("account.request");
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
51
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
52 /** gengeral logger for this class */
572
800f2bb57f1f slightly better logging
robcast
parents: 571
diff changeset
53 protected static Logger logger = Logger.getLogger("digilib.scaler");
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
54
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
55 /** logger for authentication related */
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
56 protected static Logger authlog = Logger.getLogger("digilib.auth");
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
57
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
58 /** DocuDirCache instance */
837
e718f3441d39 small cleanup
robcast
parents: 836
diff changeset
59 protected DocuDirCache dirCache;
161
ace2a4a0ba74 servlet version 1.16a4
robcast
parents: 156
diff changeset
60
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 542
diff changeset
61 /** Image executor */
837
e718f3441d39 small cleanup
robcast
parents: 836
diff changeset
62 protected DigilibJobCenter<DocuImage> imageJobCenter;
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 542
diff changeset
63
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
64 /** authentication error image file */
837
e718f3441d39 small cleanup
robcast
parents: 836
diff changeset
65 public static File denyImgFile;
298
1ecaf9c1fd8a Servlet version 1.5.0b -- the beginning of the next generation :-)
robcast
parents: 288
diff changeset
66
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
67 /** image error image file */
837
e718f3441d39 small cleanup
robcast
parents: 836
diff changeset
68 public static File errorImgFile;
298
1ecaf9c1fd8a Servlet version 1.5.0b -- the beginning of the next generation :-)
robcast
parents: 288
diff changeset
69
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
70 /** not found error image file */
837
e718f3441d39 small cleanup
robcast
parents: 836
diff changeset
71 public static File notfoundImgFile;
298
1ecaf9c1fd8a Servlet version 1.5.0b -- the beginning of the next generation :-)
robcast
parents: 288
diff changeset
72
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
73 /** send files as is? */
837
e718f3441d39 small cleanup
robcast
parents: 836
diff changeset
74 protected boolean sendFileAllowed = true;
298
1ecaf9c1fd8a Servlet version 1.5.0b -- the beginning of the next generation :-)
robcast
parents: 288
diff changeset
75
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
76 /** DigilibConfiguration instance */
837
e718f3441d39 small cleanup
robcast
parents: 836
diff changeset
77 protected DigilibConfiguration dlConfig;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
78
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
79 /** use authorization database */
837
e718f3441d39 small cleanup
robcast
parents: 836
diff changeset
80 protected boolean useAuthorization = true;
298
1ecaf9c1fd8a Servlet version 1.5.0b -- the beginning of the next generation :-)
robcast
parents: 288
diff changeset
81
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
82 /** AuthOps instance */
837
e718f3441d39 small cleanup
robcast
parents: 836
diff changeset
83 protected AuthOps authOp;
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
84
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
85 /**
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
86 * Initialisation on first run.
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
87 *
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
88 * @throws ServletException
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
89 *
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
90 * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
91 */
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
92 public void init(ServletConfig config) throws ServletException {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
93 super.init(config);
181
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 177
diff changeset
94
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
95 System.out
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
96 .println("***** Digital Image Library Image Scaler Servlet (version "
563
686086d6e6d6 more refactoring and rearranging
robcast
parents: 558
diff changeset
97 + version + ") *****");
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
98 // say hello in the log file
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
99 logger.info("***** Digital Image Library Image Scaler Servlet (version "
563
686086d6e6d6 more refactoring and rearranging
robcast
parents: 558
diff changeset
100 + version + ") *****");
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
101
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
102 // get our ServletContext
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
103 ServletContext context = config.getServletContext();
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
104 // see if there is a Configuration instance
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
105 dlConfig = (DigilibConfiguration) context
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
106 .getAttribute("digilib.servlet.configuration");
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
107 if (dlConfig == null) {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
108 // no Configuration
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
109 throw new ServletException("No Configuration!");
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
110 }
1032
4e368c85cce4 CLOSED - # 22: wrong contrast setting. dito #23 (at least on OSX 10.7)
robcast
parents: 960
diff changeset
111 // log DocuImage version
4e368c85cce4 CLOSED - # 22: wrong contrast setting. dito #23 (at least on OSX 10.7)
robcast
parents: 960
diff changeset
112 logger.info("Scaler uses " + dlConfig.getValue("servlet.docuimage.version"));
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
113 // set our AuthOps
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
114 useAuthorization = dlConfig.getAsBoolean("use-authorization");
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
115 authOp = (AuthOps) dlConfig.getValue("servlet.auth.op");
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
116
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
117 // DocuDirCache instance
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
118 dirCache = (DocuDirCache) dlConfig.getValue("servlet.dir.cache");
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
119
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
120 // Executor
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
121 imageJobCenter = (DigilibJobCenter<DocuImage>) dlConfig
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
122 .getValue("servlet.worker.imageexecutor");
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
123
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
124 denyImgFile = ServletOps.getFile(
806
d811204ce5a4 Initialiser is now a ServletContextListener (doesn't need web.xml).
robcast
parents: 804
diff changeset
125 (File) dlConfig.getValue("denied-image"), context);
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
126 errorImgFile = ServletOps.getFile(
806
d811204ce5a4 Initialiser is now a ServletContextListener (doesn't need web.xml).
robcast
parents: 804
diff changeset
127 (File) dlConfig.getValue("error-image"), context);
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
128 notfoundImgFile = ServletOps.getFile(
806
d811204ce5a4 Initialiser is now a ServletContextListener (doesn't need web.xml).
robcast
parents: 804
diff changeset
129 (File) dlConfig.getValue("notfound-image"), context);
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
130 sendFileAllowed = dlConfig.getAsBoolean("sendfile-allowed");
867
987cfe401970 add default error message type config.
robcast
parents: 865
diff changeset
131 try {
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
132 defaultErrMsgType = ErrMsg.valueOf(dlConfig
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
133 .getAsString("default-errmsg-type"));
867
987cfe401970 add default error message type config.
robcast
parents: 865
diff changeset
134 } catch (Exception e) {
987cfe401970 add default error message type config.
robcast
parents: 865
diff changeset
135 // nothing to do
987cfe401970 add default error message type config.
robcast
parents: 865
diff changeset
136 }
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
137 }
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
138
821
6c752969f9e8 more tries and catches...
robcast
parents: 819
diff changeset
139 /**
6c752969f9e8 more tries and catches...
robcast
parents: 819
diff changeset
140 * Returns modification time relevant to the request for caching.
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
141 *
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
142 * @see javax.servlet.http.HttpServlet#getLastModified(javax.servlet.http.HttpServletRequest)
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
143 */
750
4f5aaa0de456 removed synchronized from some methods
robcast
parents: 594
diff changeset
144 public long getLastModified(HttpServletRequest request) {
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
145 accountlog.debug("GetLastModified from " + request.getRemoteAddr()
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
146 + " for " + request.getQueryString());
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
147 long mtime = -1;
821
6c752969f9e8 more tries and catches...
robcast
parents: 819
diff changeset
148 try {
833
8ee72433bb8f logs more request and response headers.
robcast
parents: 831
diff changeset
149 // create new digilib request
903
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents: 892
diff changeset
150 DigilibServletRequest dlReq = new DigilibServletRequest(request);
821
6c752969f9e8 more tries and catches...
robcast
parents: 819
diff changeset
151 DocuDirectory dd = dirCache.getDirectory(dlReq.getFilePath());
6c752969f9e8 more tries and catches...
robcast
parents: 819
diff changeset
152 if (dd != null) {
6c752969f9e8 more tries and catches...
robcast
parents: 819
diff changeset
153 mtime = dd.getDirMTime() / 1000 * 1000;
6c752969f9e8 more tries and catches...
robcast
parents: 819
diff changeset
154 }
6c752969f9e8 more tries and catches...
robcast
parents: 819
diff changeset
155 } catch (Exception e) {
6c752969f9e8 more tries and catches...
robcast
parents: 819
diff changeset
156 logger.error("error in getLastModified: " + e.getMessage());
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
157 }
821
6c752969f9e8 more tries and catches...
robcast
parents: 819
diff changeset
158 logger.debug(" returns " + mtime);
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
159 return mtime;
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
160 }
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
161
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
162 /*
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
163 * (non-Javadoc)
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
164 *
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
165 * @see
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
166 * javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
167 * , javax.servlet.http.HttpServletResponse)
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
168 */
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
169 public void doGet(HttpServletRequest request, HttpServletResponse response)
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
170 throws ServletException {
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
171 accountlog.info("GET from " + request.getRemoteAddr());
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
172 this.processRequest(request, response);
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
173 }
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
174
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
175 /*
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
176 * (non-Javadoc)
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
177 *
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
178 * @see
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
179 * javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
180 * , javax.servlet.http.HttpServletResponse)
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
181 */
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
182 public void doPost(HttpServletRequest request, HttpServletResponse response)
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
183 throws ServletException {
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
184 accountlog.info("POST from " + request.getRemoteAddr());
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
185 this.processRequest(request, response);
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
186 }
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
187
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
188 protected void doHead(HttpServletRequest req, HttpServletResponse resp)
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
189 throws ServletException, IOException {
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
190 logger.debug("HEAD from " + req.getRemoteAddr());
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
191 super.doHead(req, resp);
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
192 }
750
4f5aaa0de456 removed synchronized from some methods
robcast
parents: 594
diff changeset
193
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
194 protected void doOptions(HttpServletRequest req, HttpServletResponse resp)
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
195 throws ServletException, IOException {
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
196 logger.debug("OPTIONS from " + req.getRemoteAddr());
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
197 super.doOptions(req, resp);
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
198 }
750
4f5aaa0de456 removed synchronized from some methods
robcast
parents: 594
diff changeset
199
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
200 /**
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
201 * Service this request using the response.
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
202 *
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
203 * @param request
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
204 * @param response
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
205 * @throws ServletException
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
206 */
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
207 public void processRequest(HttpServletRequest request,
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
208 HttpServletResponse response) throws ServletException {
487
6c01d283e90e Servlet version 1.16.1
robcast
parents: 478
diff changeset
209
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
210 if (dlConfig == null) {
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
211 logger.error("ERROR: No Configuration!");
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
212 throw new ServletException("NO VALID digilib CONFIGURATION!");
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
213 }
502
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
214
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
215 accountlog.debug("request: " + request.getQueryString());
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
216 logger.debug("request: " + request.getQueryString());
833
8ee72433bb8f logs more request and response headers.
robcast
parents: 831
diff changeset
217 logger.debug("headers: " + ServletOps.headersToString(request));
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
218 // logger.debug("response:"+ response + " committed=" +
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
219 // response.isCommitted());
804
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 802
diff changeset
220 final long startTime = System.currentTimeMillis();
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
221
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
222 // parse request
903
7779b37d1d05 refactored into maven modules per servlet type.
robcast
parents: 892
diff changeset
223 DigilibServletRequest dlRequest = new DigilibServletRequest(request);
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
224 // extract the job information
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
225 final ImageJobDescription jobTicket = ImageJobDescription.getInstance(
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
226 dlRequest, dlConfig);
502
157d4c7d2343 readded support for direct sending of image files
cmielack
parents: 501
diff changeset
227
558
2e971b9f3022 added some enums
robcast
parents: 557
diff changeset
228 // type of error reporting
867
987cfe401970 add default error message type config.
robcast
parents: 865
diff changeset
229 ErrMsg errMsgType = defaultErrMsgType;
987cfe401970 add default error message type config.
robcast
parents: 865
diff changeset
230 if (dlRequest.hasOption("errimg")) {
987cfe401970 add default error message type config.
robcast
parents: 865
diff changeset
231 errMsgType = ErrMsg.IMAGE;
987cfe401970 add default error message type config.
robcast
parents: 865
diff changeset
232 } else if (dlRequest.hasOption("errtxt")) {
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
233 errMsgType = ErrMsg.TEXT;
558
2e971b9f3022 added some enums
robcast
parents: 557
diff changeset
234 } else if (dlRequest.hasOption("errcode")) {
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
235 errMsgType = ErrMsg.CODE;
558
2e971b9f3022 added some enums
robcast
parents: 557
diff changeset
236 }
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
237
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
238 try {
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
239 /*
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
240 * check if we can fast-track without scaling
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
241 */
593
7768ea8f59cf more work on stream input -- cleaning up references to files
robcast
parents: 588
diff changeset
242 ImageInput fileToLoad = (ImageInput) jobTicket.getInput();
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
243
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
244 // check permissions
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
245 if (useAuthorization) {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
246 // get a list of required roles (empty if no restrictions)
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
247 List<String> rolesRequired = authOp.rolesForPath(
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
248 jobTicket.getFilePath(), request);
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
249 if (rolesRequired != null) {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
250 authlog.debug("Role required: " + rolesRequired);
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
251 authlog.debug("User: " + request.getRemoteUser());
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
252 // is the current request/user authorized?
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
253 if (!authOp.isRoleAuthorized(rolesRequired, request)) {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
254 // send deny answer and abort
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
255 throw new AuthOpException();
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
256 }
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
257 }
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
258 }
79
63c8186455c1 Servlet version 1.6b. Further cleanup and new functionality:
robcast
parents: 73
diff changeset
259
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
260 // if requested, send image as a file
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
261 if (sendFileAllowed && jobTicket.getSendAsFile()) {
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
262 String mt = null;
547
e1094c5ec032 more cleanup and refactoring
robcast
parents: 544
diff changeset
263 if (jobTicket.hasOption("rawfile")) {
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
264 mt = "application/octet-stream";
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
265 }
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
266 logger.debug("Sending RAW File as is.");
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
267 ServletOps.sendFile(fileToLoad.getFile(), mt, null, response,
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
268 logger);
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
269 logger.info("Done in "
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
270 + (System.currentTimeMillis() - startTime) + "ms");
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
271 return;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
272 }
487
6c01d283e90e Servlet version 1.16.1
robcast
parents: 478
diff changeset
273
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
274 // if possible, send the image without actually having to transform
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
275 // it
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
276 if (!jobTicket.isTransformRequired()) {
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
277 logger.debug("Sending File as is.");
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
278 ServletOps.sendFile(fileToLoad.getFile(), null, null, response,
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
279 logger);
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
280 logger.info("Done in "
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
281 + (System.currentTimeMillis() - startTime) + "ms");
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
282 return;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
283 }
181
afe7ff98bb71 Servlet version 1.18b1
robcast
parents: 177
diff changeset
284
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
285 // check load of workers
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
286 if (imageJobCenter.isBusy()) {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
287 logger.error("Servlet overloaded!");
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
288 response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
289 return;
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
290 }
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
291
804
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 802
diff changeset
292 // worker job is done asynchronously
925
66f1ba72d07b added timeout-parameter and timeout-handler to AsyncServletWorker.
robcast
parents: 910
diff changeset
293 AsyncContext asyncCtx = request.startAsync(request, response);
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
294 // create job
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
295 AsyncServletWorker job = new AsyncServletWorker(dlConfig,
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
296 jobTicket, asyncCtx, errMsgType, startTime);
925
66f1ba72d07b added timeout-parameter and timeout-handler to AsyncServletWorker.
robcast
parents: 910
diff changeset
297 // AsyncServletWorker is its own AsyncListener
66f1ba72d07b added timeout-parameter and timeout-handler to AsyncServletWorker.
robcast
parents: 910
diff changeset
298 asyncCtx.addListener(job);
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
299 // submit job
804
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 802
diff changeset
300 imageJobCenter.submit(job);
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 802
diff changeset
301 // we're done for now
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
302
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
303 } catch (ImageOpException e) {
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
304 logger.error(e.getClass() + ": " + e.getMessage());
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
305 digilibError(errMsgType, Error.IMAGE, null, response);
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
306 } catch (IOException e) {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
307 logger.error(e.getClass() + ": " + e.getMessage());
558
2e971b9f3022 added some enums
robcast
parents: 557
diff changeset
308 digilibError(errMsgType, Error.FILE, null, response);
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
309 } catch (AuthOpException e) {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
310 logger.error(e.getClass() + ": " + e.getMessage());
558
2e971b9f3022 added some enums
robcast
parents: 557
diff changeset
311 digilibError(errMsgType, Error.AUTH, null, response);
821
6c752969f9e8 more tries and catches...
robcast
parents: 819
diff changeset
312 } catch (Exception e) {
6c752969f9e8 more tries and catches...
robcast
parents: 819
diff changeset
313 logger.error("Other Exception: ", e);
6c752969f9e8 more tries and catches...
robcast
parents: 819
diff changeset
314 // TODO: should we rethrow or swallow?
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
315 // throw new ServletException(e);
543
919e008ab1fb more steps towards more standard java.util.concurrent design
robcast
parents: 542
diff changeset
316 }
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
317 }
298
1ecaf9c1fd8a Servlet version 1.5.0b -- the beginning of the next generation :-)
robcast
parents: 288
diff changeset
318
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
319 /**
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
320 * Sends an error to the client as text or image.
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
321 *
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
322 * @param type
558
2e971b9f3022 added some enums
robcast
parents: 557
diff changeset
323 * @param error
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
324 * @param msg
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
325 * @param response
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
326 */
804
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 802
diff changeset
327 public static void digilibError(ErrMsg type, Error error, String msg,
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
328 HttpServletResponse response) {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
329 try {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
330 File img = null;
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
331 int status = 0;
558
2e971b9f3022 added some enums
robcast
parents: 557
diff changeset
332 if (error == Error.AUTH) {
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
333 if (msg == null) {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
334 msg = "ERROR: Unauthorized access!";
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
335 }
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
336 img = denyImgFile;
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
337 status = HttpServletResponse.SC_FORBIDDEN;
558
2e971b9f3022 added some enums
robcast
parents: 557
diff changeset
338 } else if (error == Error.FILE) {
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
339 if (msg == null) {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
340 msg = "ERROR: Image file not found!";
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
341 }
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
342 img = notfoundImgFile;
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
343 status = HttpServletResponse.SC_NOT_FOUND;
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
344 } else {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
345 if (msg == null) {
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
346 msg = "ERROR: Other image error!";
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
347 }
804
587c90bc5976 first version using officially approved Servlet 3.0 async support.
robcast
parents: 802
diff changeset
348 img = errorImgFile;
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
349 status = HttpServletResponse.SC_BAD_REQUEST;
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
350 }
803
225054177f67 remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents: 752
diff changeset
351 if (response.isCommitted()) {
225054177f67 remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents: 752
diff changeset
352 // response already committed
930
333e60e5cae9 new counter for open requests.
robcast
parents: 925
diff changeset
353 logger.warn("Response committed for error " + msg);
803
225054177f67 remove all ServletOutputStream.flush(). (stupid me ;-)
robcast
parents: 752
diff changeset
354 }
558
2e971b9f3022 added some enums
robcast
parents: 557
diff changeset
355 if (type == ErrMsg.TEXT) {
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
356 ServletOps.htmlMessage(msg, response);
558
2e971b9f3022 added some enums
robcast
parents: 557
diff changeset
357 } else if (type == ErrMsg.CODE) {
557
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
358 response.sendError(status, msg);
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
359 } else if (img != null) {
0885f5ca5b24 more refactoring and rearranging
robcast
parents: 552
diff changeset
360 // default: image
572
800f2bb57f1f slightly better logging
robcast
parents: 571
diff changeset
361 ServletOps.sendFile(img, null, null, response, logger);
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
362 }
570
fd2ef7e46119 more cleanup, set version to 1.8.2
robcast
parents: 563
diff changeset
363 } catch (Exception e) {
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
364 logger.error("Error sending error!", e);
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
365 }
298
1ecaf9c1fd8a Servlet version 1.5.0b -- the beginning of the next generation :-)
robcast
parents: 288
diff changeset
366
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
367 }
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
368
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
369 public static String getVersion() {
563
686086d6e6d6 more refactoring and rearranging
robcast
parents: 558
diff changeset
370 return version;
544
5ff500d6812a more steps towards more standard java.util.concurrent design
robcast
parents: 543
diff changeset
371 }
489
882ee6a055bd try to fix small problem with version number display
robcast
parents: 487
diff changeset
372
500
b2325b33b77b completely restructured the scaler
cmielack
parents: 1
diff changeset
373 }