903
|
1 /*
|
|
2 * DigilibRequest.java
|
|
3 *
|
|
4 * lightweight class carrying all parameters for a request to digilib
|
|
5 *
|
|
6
|
|
7 Digital Image Library servlet components
|
|
8
|
|
9 Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de),
|
|
10 Christian Luginbuehl
|
|
11
|
|
12 This program is free software; you can redistribute it and/or modify it
|
|
13 under the terms of the GNU General Public License as published by the
|
|
14 Free Software Foundation; either version 2 of the License, or (at your
|
|
15 option) any later version.
|
|
16
|
|
17 Please read license.txt for the full details. A copy of the GPL
|
|
18 may be found at http://www.gnu.org/copyleft/lgpl.html
|
|
19
|
|
20 You should have received a copy of the GNU General Public License
|
|
21 along with this program; if not, write to the Free Software
|
|
22 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
23
|
|
24 * Created on 27. August 2002, 19:43
|
|
25 */
|
|
26
|
|
27 package digilib.servlet;
|
|
28
|
|
29 import java.io.UnsupportedEncodingException;
|
|
30 import java.net.URLDecoder;
|
|
31 import java.util.StringTokenizer;
|
|
32
|
|
33 import javax.servlet.http.HttpServletRequest;
|
|
34
|
|
35 import digilib.image.DocuImage;
|
|
36 import digilib.io.FileOps;
|
|
37 import digilib.util.OptionsSet;
|
|
38 import digilib.util.Parameter;
|
|
39 import digilib.util.ParameterMap;
|
|
40
|
|
41 /**
|
|
42 * Class holding the parameters of a digilib user request. The parameters are
|
|
43 * mostly named like the servlet parameters: <br>
|
|
44 * request_path: url of the page/document. <br>
|
|
45 * fn: url of the page/document. <br>
|
|
46 * pn: page number. <br>
|
|
47 * dw: width of result window in pixels. <br>
|
|
48 * dh: height of result window in pixels. <br>
|
|
49 * wx: left edge of image area (float from 0 to 1). <br>
|
|
50 * wy: top edge of image area (float from 0 to 1). <br>
|
|
51 * ww: width of image area(float from 0 to 1). <br>
|
|
52 * wh: height of image area(float from 0 to 1). <br>
|
|
53 * ws: scale factor. <br>
|
|
54 * mo: special options like 'fit' for gifs. <br>
|
|
55 * mk: list of marks. <br>
|
|
56 * pt: total number of pages (generated by sevlet). <br>
|
|
57 * baseURL: base URL (from http:// to below /servlet). <br>
|
|
58 * ...et alii
|
|
59 *
|
|
60 * @author casties
|
|
61 *
|
|
62 */
|
|
63 public abstract class DigilibRequest extends ParameterMap {
|
|
64
|
|
65 protected DocuImage image; // internal DocuImage instance for this request
|
|
66
|
|
67 public DigilibRequest() {
|
|
68 super(30);
|
|
69 }
|
|
70
|
|
71 /** set up parameters.
|
|
72 *
|
|
73 */
|
|
74 protected void initParams() {
|
|
75 /*
|
|
76 * Definition of parameters and default values. Parameter of type 's'
|
|
77 * are for the servlet.
|
|
78 */
|
|
79
|
|
80 // url of the page/document (second part)
|
|
81 newParameter("fn", "", null, 's');
|
|
82 // page number
|
|
83 newParameter("pn", new Integer(1), null, 's');
|
|
84 // width of client in pixels
|
|
85 newParameter("dw", new Integer(0), null, 's');
|
|
86 // height of client in pixels
|
|
87 newParameter("dh", new Integer(0), null, 's');
|
|
88 // left edge of image (float from 0 to 1)
|
|
89 newParameter("wx", new Float(0), null, 's');
|
|
90 // top edge in image (float from 0 to 1)
|
|
91 newParameter("wy", new Float(0), null, 's');
|
|
92 // width of image (float from 0 to 1)
|
|
93 newParameter("ww", new Float(1), null, 's');
|
|
94 // height of image (float from 0 to 1)
|
|
95 newParameter("wh", new Float(1), null, 's');
|
|
96 // scale factor
|
|
97 newParameter("ws", new Float(1), null, 's');
|
|
98 // special options like 'fit' for gifs
|
|
99 newParameter("mo", this.options, null, 's');
|
|
100 // rotation angle (degree)
|
|
101 newParameter("rot", new Float(0), null, 's');
|
|
102 // contrast enhancement factor
|
|
103 newParameter("cont", new Float(0), null, 's');
|
|
104 // brightness enhancement factor
|
|
105 newParameter("brgt", new Float(0), null, 's');
|
|
106 // color multiplicative factors
|
|
107 newParameter("rgbm", "0/0/0", null, 's');
|
|
108 // color additive factors
|
|
109 newParameter("rgba", "0/0/0", null, 's');
|
|
110 // display dpi resolution (total)
|
|
111 newParameter("ddpi", new Float(0), null, 's');
|
|
112 // display dpi X resolution
|
|
113 newParameter("ddpix", new Float(0), null, 's');
|
|
114 // display dpi Y resolution
|
|
115 newParameter("ddpiy", new Float(0), null, 's');
|
|
116 // scale factor for mo=ascale
|
|
117 newParameter("scale", new Float(1), null, 's');
|
|
118 // color conversion operation
|
|
119 newParameter("colop", "", null, 's');
|
|
120
|
|
121 /*
|
|
122 * Parameters of type 'i' are not exchanged between client and server,
|
|
123 * but are for the servlets or JSPs internal use.
|
|
124 */
|
|
125
|
|
126 // url of the page/document (first part, may be empty)
|
|
127 newParameter("request.path", "", null, 'i');
|
|
128 // base URL (from http:// to below /servlet)
|
|
129 newParameter("base.url", null, null, 'i');
|
|
130 // DocuImage instance for this request
|
|
131 newParameter("docu.image", image, null, 'i');
|
|
132 image = null;
|
|
133 /*
|
|
134 * Parameters of type 'c' are for the clients use
|
|
135 */
|
|
136
|
|
137 // "real" filename
|
|
138 newParameter("img.fn", "", null, 'c');
|
|
139 // image dpi x
|
|
140 newParameter("img.dpix", new Integer(0), null, 'c');
|
|
141 // image dpi y
|
|
142 newParameter("img.dpiy", new Integer(0), null, 'c');
|
|
143 // hires image size x
|
|
144 newParameter("img.pix_x", new Integer(0), null, 'c');
|
|
145 // hires image size y
|
|
146 newParameter("img.pix_y", new Integer(0), null, 'c');
|
|
147 // total number of pages
|
|
148 newParameter("pt", new Integer(0), null, 'c');
|
|
149 // display level of digilib (0 = just image, 1 = one HTML page
|
|
150 // 2 = in frameset, 3 = XUL-'frameset'
|
|
151 // 4 = XUL-Sidebar )
|
|
152 newParameter("lv", new Integer(2), null, 'c');
|
|
153 // marks
|
|
154 newParameter("mk", "", null, 'c');
|
|
155 }
|
|
156
|
|
157 /* (non-Javadoc)
|
|
158 * @see digilib.servlet.ParameterMap#initOptions()
|
|
159 */
|
|
160 @Override
|
|
161 protected void initOptions() {
|
|
162 options = (OptionsSet) getValue("mo");
|
|
163 }
|
|
164
|
|
165 /**
|
|
166 * Return the request parameters as a String in the parameter form
|
|
167 * 'fn=/icons&pn=1'. Empty (undefined) fields are not included.
|
|
168 *
|
|
169 * @return String of request parameters in parameter form.
|
|
170 */
|
|
171 public String getAsString() {
|
|
172 return getAsString(0);
|
|
173 }
|
|
174
|
|
175 /**
|
|
176 * Return the request parameters of a given type type as a String in the
|
|
177 * parameter form 'fn=/icons&pn=1'. Empty (undefined) fields are not
|
|
178 * included.
|
|
179 *
|
|
180 * @return String of request parameters in parameter form.
|
|
181 */
|
|
182 public String getAsString(int type) {
|
|
183 StringBuffer s = new StringBuffer(50);
|
|
184 // go through all values
|
|
185 for (Parameter p: params.values()) {
|
|
186 if ((type > 0) && (p.getType() != type)) {
|
|
187 // skip the wrong types
|
|
188 continue;
|
|
189 }
|
|
190 String name = p.getName();
|
|
191 /*
|
|
192 * handling special cases
|
|
193 */
|
|
194 // request_path adds to fn
|
|
195 if (name.equals("fn")) {
|
|
196 s.append("&fn=" + getAsString("request.path")
|
|
197 + getAsString("fn"));
|
|
198 continue;
|
|
199 }
|
|
200 /*
|
|
201 * the rest is sent with its name
|
|
202 */
|
|
203 // parameters that are not set or internal are not sent
|
|
204 if ((!p.hasValue()) || (p.getType() == 'i')) {
|
|
205 continue;
|
|
206 }
|
|
207 s.append("&" + name + "=" + p.getAsString());
|
|
208 }
|
|
209 // kill first "&"
|
|
210 s.deleteCharAt(0);
|
|
211 return s.toString();
|
|
212 }
|
|
213
|
|
214 /**
|
|
215 * Set request parameters from query string. Uses the separator string qs to
|
|
216 * get 'fn=foo' style parameters.
|
|
217 *
|
|
218 * @param qs
|
|
219 * query string
|
|
220 * @param sep
|
|
221 * parameter-separator string
|
|
222 */
|
|
223 public void setWithParamString(String qs, String sep) {
|
|
224 // go through all request parameters
|
|
225 String[] qa = qs.split(sep);
|
|
226 for (int i = 0; i < qa.length; i++) {
|
|
227 // split names and values on "="
|
|
228 String[] nv = qa[i].split("=");
|
|
229 try {
|
|
230 String name = URLDecoder.decode(nv[0], "UTF-8");
|
|
231 String val = URLDecoder.decode(nv[1], "UTF-8");
|
|
232 // is this a known parameter?
|
|
233 if (params.containsKey(name)) {
|
|
234 Parameter p = (Parameter) this.get(name);
|
|
235 // internal parameters are not set
|
|
236 if (p.getType() == 'i') {
|
|
237 continue;
|
|
238 }
|
|
239 p.setValueFromString(val);
|
|
240 continue;
|
|
241 }
|
|
242 // unknown parameters are just added with type 'r'
|
|
243 newParameter(name, null, val, 'r');
|
|
244 } catch (UnsupportedEncodingException e) {
|
|
245 // this shouldn't happen anyway
|
|
246 e.printStackTrace();
|
|
247 }
|
|
248 }
|
|
249 }
|
|
250
|
|
251 /**
|
|
252 * Test if option string <code>opt</code> is set. Checks if the substring
|
|
253 * <code>opt</code> is contained in the options string <code>param</code>.
|
|
254 * Deprecated! use hasOption(String opt) for "mo"-options.
|
|
255 *
|
|
256 * @param opt
|
|
257 * Option string to be tested.
|
|
258 * @return boolean
|
|
259 */
|
|
260 public boolean hasOption(String param, String opt) {
|
|
261 String s = getAsString(param);
|
|
262 if (s != null) {
|
|
263 StringTokenizer i = new StringTokenizer(s, ",");
|
|
264 while (i.hasMoreTokens()) {
|
|
265 if (i.nextToken().equals(opt)) {
|
|
266 return true;
|
|
267 }
|
|
268 }
|
|
269 }
|
|
270 return false;
|
|
271 }
|
|
272
|
|
273 /**
|
|
274 * The image file path to be accessed.
|
|
275 *
|
|
276 * The mage file path is assembled from the servlets RequestPath and
|
|
277 * Parameter fn and normalized.
|
|
278 *
|
|
279 * @return String the effective filepath.
|
|
280 */
|
|
281 public String getFilePath() {
|
|
282 String s = getAsString("request.path");
|
|
283 s += getAsString("fn");
|
|
284 return FileOps.normalName(s);
|
|
285 }
|
|
286
|
|
287 /**
|
|
288 * Returns the image.
|
|
289 *
|
|
290 * @return DocuImage
|
|
291 */
|
|
292 public DocuImage getImage() {
|
|
293 return image;
|
|
294 }
|
|
295
|
|
296 /**
|
|
297 * Sets the image.
|
|
298 *
|
|
299 * @param image
|
|
300 * The image to set
|
|
301 */
|
|
302 public void setImage(DocuImage image) {
|
|
303 this.image = image;
|
|
304 setValue("docu.image", image);
|
|
305 }
|
|
306
|
|
307 public HttpServletRequest getServletRequest() {
|
|
308 // TODO Auto-generated method stub
|
|
309 return null;
|
|
310 }
|
|
311
|
|
312 }
|