1 |
dpavlin |
237 |
<%-- |
2 |
|
|
openisis - an open implementation of the ISIS database |
3 |
|
|
Version 0.8.x (microversion see file Version) |
4 |
|
|
Copyright (C) 2001-2002 by Erik Grziwotz, erik@openisis.org |
5 |
|
|
|
6 |
|
|
This library is free software; you can redistribute it and/or |
7 |
|
|
modify it under the terms of the GNU Lesser General Public |
8 |
|
|
License as published by the Free Software Foundation; either |
9 |
|
|
version 2.1 of the License, or (at your option) any later version. |
10 |
|
|
|
11 |
|
|
This library is distributed in the hope that it will be useful, |
12 |
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 |
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 |
|
|
Lesser General Public License for more details. |
15 |
|
|
|
16 |
|
|
You should have received a copy of the GNU Lesser General Public |
17 |
|
|
License along with this library; if not, write to the Free Software |
18 |
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
19 |
|
|
|
20 |
|
|
This software is dedicated to the memory of Eckart Dietrich. |
21 |
|
|
|
22 |
|
|
This software is inspired by (but contains no code of) the iAPI |
23 |
|
|
Copyright (C) 2000 by Robert Janusz, rj@jezuici.krakow.pl. |
24 |
|
|
See iAPI.txt for what it contains. |
25 |
|
|
EOH |
26 |
|
|
--%><%@page |
27 |
|
|
import="org.openisis.*,java.io.IOException,java.util.*,java.net.URLEncoder" |
28 |
|
|
contentType="text/html; charset=iso-8859-1" |
29 |
|
|
%><%! |
30 |
|
|
static final String ID = "$Id: idm.jsp,v 1.4 2002/12/13 21:30:27 kripke Exp $"; |
31 |
|
|
static final String EMPTY = ""; |
32 |
|
|
static Db db; |
33 |
|
|
static String dberr = EMPTY; |
34 |
|
|
static String me = "idm"; |
35 |
|
|
static { |
36 |
|
|
try { |
37 |
|
|
String[] args = new String[] { "-v", "info", "-encoding", "Cp850" }; |
38 |
|
|
db = Db.open( "/var/db/idm/doku", args ); |
39 |
|
|
} catch (IOException e) { |
40 |
|
|
e.printStackTrace(); |
41 |
|
|
dberr = e.toString(); |
42 |
|
|
} |
43 |
|
|
}; |
44 |
|
|
static String NV ( String x ) { return null==x ? EMPTY : x; } |
45 |
|
|
static int ROWS = 10; // number of rows to show at once |
46 |
|
|
static int TERMS = 50; // number of terms to show at once |
47 |
|
|
static int[] tag = { |
48 |
|
|
100, 101, 200, 201, |
49 |
|
|
301, 302, 430, 435, |
50 |
|
|
28, 450, 800, 18 |
51 |
|
|
}; |
52 |
|
|
static String[] t = { |
53 |
|
|
"Autor(en)", "author", // 100 |
54 |
|
|
"weitere Personen", "other contributors", // 101 |
55 |
|
|
"Körperschaft als Hrsg.", "corporate body as editor", // 200 |
56 |
|
|
"weitere Körperschaften", "other corporate bodies", // 201 |
57 |
|
|
"Titel ohne Autorennennung", "title (without indiv. author)", // 301 |
58 |
|
|
"Titel mit Autor", "title (with author)", // 302 |
59 |
|
|
"Erscheinungsvermerk", "publisher: name and place", // 430 |
60 |
|
|
"Erscheinungsjahr", "year of publication", // 435 |
61 |
|
|
"Erscheinungsland", "country of publication", // 28 |
62 |
|
|
"Ges.Titel/Ser.Titel/Bandnr.", "series title", // 450 |
63 |
|
|
"Schlagworte", "keywords", // 800 |
64 |
|
|
"Dokument Nr.", "no of document", // 18 |
65 |
|
|
// unused fields: |
66 |
|
|
"Universitätseinrichtung (10):", EMPTY, |
67 |
|
|
"Projekt (12):", EMPTY, |
68 |
|
|
"Erfassungsdatum (16):", EMPTY, |
69 |
|
|
"Dokumententyp (22):", EMPTY, |
70 |
|
|
"Physikalische Form (24):", EMPTY, |
71 |
|
|
"Sprache des Dokumentes (26):", EMPTY, |
72 |
|
|
"Physische Form (440):", EMPTY, |
73 |
|
|
"Quelle (Zeitschrift) (480):", EMPTY, |
74 |
|
|
"Quelle (Monographie) (490):", EMPTY, |
75 |
|
|
"ISBN (600):", EMPTY, |
76 |
|
|
"Abstract (900):", EMPTY, |
77 |
|
|
EMPTY, EMPTY, |
78 |
|
|
EMPTY, EMPTY, |
79 |
|
|
// 50: other texts |
80 |
|
|
"Dokumentations-Datenbank des IDM der Universität Bielefeld", |
81 |
|
|
"documentation database of the IDM at the university of Bielefeld", |
82 |
|
|
"Suchen", "search", |
83 |
|
|
"English", "Deutsch", //54 |
84 |
|
|
"?", "?", |
85 |
|
|
"weiter", "more", |
86 |
|
|
"allen Feldern", "all fields", //60 |
87 |
|
|
// the ops |
88 |
|
|
"und","and", |
89 |
|
|
"oder","or", |
90 |
|
|
"ohne","without", |
91 |
|
|
"zurücksetzen","reset", |
92 |
|
|
"Name","Surname",//70 |
93 |
|
|
"Vorname","Given name", |
94 |
|
|
"Institut","Institution", |
95 |
|
|
"Strasse","Street", |
96 |
|
|
"Ort","City", |
97 |
|
|
"Land","Country", // 80 |
98 |
|
|
"Postleitzahl","Zip code", |
99 |
|
|
"Bestellen", "order", |
100 |
|
|
"Abschicken", "Submit", |
101 |
|
|
"Einträge", "rows", |
102 |
|
|
"bis", "to", // 90 |
103 |
|
|
"von", "of", |
104 |
|
|
"für", "for", |
105 |
|
|
"Indexeinträge beginnend mit", "terms starting with ", |
106 |
|
|
"neue Suche", "new Query", |
107 |
|
|
// 100: hilfe |
108 |
|
|
"<h4>Willkommen bei der Dokumentations-Datenbank des\n" |
109 |
|
|
+" IDM der Universität Bielefeld</h4>\n" |
110 |
|
|
+" Sie können bis zu drei Suchbegriffe verknüpfen.\n" |
111 |
|
|
+" Jeder Suchbegriff kann auf ein Feld eingeschränkt werden.<br>\n" |
112 |
|
|
+" Die ?-Funktion zeigt Ihnen alle Suchbegriffe,\n" |
113 |
|
|
+" die mit dem Feldinhalt beginnen, ggf. auf mehreren Seiten.\n" |
114 |
|
|
+" Diese Werte können per Klick übernommen werden.<br><br>\n" |
115 |
|
|
+" Mit 'Suchen' wird die Anfrage ausgelöst.\n" |
116 |
|
|
+" Es werden jeweils "+ROWS+" Sätze angezeigt.<br><br>\n" |
117 |
|
|
+" Kopien von Titeln können gegen Kostenerstattung bestellt werden.<br>\n" |
118 |
|
|
+" <h4>Suchtipps</h4>\n" |
119 |
|
|
+" Für Prefixsuche beenden Sie den Begriff mit * oder $.<br>\n" |
120 |
|
|
+" Die Suche wird auf jeweils 1000 Treffer eingeschränkt.\n" |
121 |
|
|
+" Bei sehr häufigen Suchbegriffen, etwa 'a$', gibt es in jedem Satz\n" |
122 |
|
|
+" mehrere Treffer, sodass weniger als 1000 Sätze gefunden werden.<br>\n" |
123 |
|
|
+" \n" |
124 |
|
|
+" Eine engere Suche, etwa durch Einschränkung auf ein Feld,\n" |
125 |
|
|
+" kann in einem solchen Fall u.U. mehr Sätze finden!<br>\n" |
126 |
|
|
+" Verwenden Sie bei mehreren Begriffen den präzisesten zuerst.<br>\n" |
127 |
|
|
+" \n" |
128 |
|
|
+" <h4>Cookies</h4>\n" |
129 |
|
|
+" Die Funktion ist stark beeinträchtigt,\n" |
130 |
|
|
+" falls Sie das Session-Cookie ablehnen.<br>\n" |
131 |
|
|
+" Ein Session-Cookie wird nicht auf Ihrer Festplatte gespeichert,\n" |
132 |
|
|
+" sondern verschwindet beim Schließen des Browsers.\n" |
133 |
|
|
+" \n" |
134 |
|
|
, |
135 |
|
|
// 101: help |
136 |
|
|
"<h4>welcome to the documentation database of the" |
137 |
|
|
+" IDM at the university of Bielefeld</h4>" |
138 |
|
|
+" Up to three search terms may be combined.\n" |
139 |
|
|
+" Each term can be restricted to a specific database field.<br>\n" |
140 |
|
|
+" Use the ? beneath a field to display all entries in the index\n" |
141 |
|
|
+" starting with the currently entered term.\n" |
142 |
|
|
+" Click them for use in your query.<br><br>\n" |
143 |
|
|
+" The 'search' button starts the query.\n" |
144 |
|
|
+" Up to "+ROWS+" records are displayed at once.<br><br>\n" |
145 |
|
|
+" You can order copies of each article for a nominal fee.<br>\n" |
146 |
|
|
+" <h4>search tips</h4>\n" |
147 |
|
|
+" Use a trailing * or $ to search by prefix.<br>\n" |
148 |
|
|
+" The query will be restricted to 1000 hits.\n" |
149 |
|
|
+" Very frequent terms like 'a$' will have several hits within\n" |
150 |
|
|
+" each record, giving less than 1000 records total.<br>\n" |
151 |
|
|
+" Restricting the query, e.g. by choosing a database field,\n" |
152 |
|
|
+" may thus find more records!<br>\n" |
153 |
|
|
+" When combining multiple terms, use the most specific one first\n" |
154 |
|
|
+" for best results.<br>\n" |
155 |
|
|
+" \n" |
156 |
|
|
+" <h4>Cookies</h4>\n" |
157 |
|
|
+" This page will not work properly,\n" |
158 |
|
|
+" if you do not accept the session cookie.<br>\n" |
159 |
|
|
+" This is not stored on your hard disc,\n" |
160 |
|
|
+" but deleted after you quit your browser.\n" |
161 |
|
|
, |
162 |
|
|
"entfernen", "remove", |
163 |
|
|
"E-Mail", "e mail", |
164 |
|
|
"Telefon", "phone", |
165 |
|
|
"bitte füllen Sie die markierten Felder aus", |
166 |
|
|
"please fill in all marked fields", |
167 |
|
|
// 110 |
168 |
|
|
"Ihre Bestellung wurde abgeschickt. Vielen Dank", |
169 |
|
|
"Your order has been submitted. Thank you", |
170 |
|
|
"Ihre Bestellung konnte leider nicht abgeschickt werden." |
171 |
|
|
+" Bitte versuchen Sie es später", |
172 |
|
|
"Your order could not be submitted. Please try again later", |
173 |
|
|
}; |
174 |
|
|
static final String[] ORDER = { |
175 |
|
|
"Xlastname", "firstname", "institution", "Xstreet", |
176 |
|
|
"Xcity", "country", "Xzip", "mail", "phone", |
177 |
|
|
}; |
178 |
|
|
static final int[] ORDERT = { 70,72,74,76, 78,80,82,104,106 }; |
179 |
|
|
|
180 |
|
|
// check button value independet of language used |
181 |
|
|
static boolean chkbutton ( int n, String param ) { |
182 |
|
|
return t[n].equals( param ) || t[n+1].equals( param ); |
183 |
|
|
} |
184 |
|
|
static int chkint ( int min, int max, int def, String param ) { |
185 |
|
|
if ( null != param ) try { |
186 |
|
|
int j = Integer.parseInt(param); |
187 |
|
|
if ( min <= j && j <= max ) |
188 |
|
|
return j; |
189 |
|
|
} catch (Exception e) { |
190 |
|
|
} |
191 |
|
|
return def; |
192 |
|
|
} |
193 |
|
|
|
194 |
|
|
static final int OP_AND = 0; |
195 |
|
|
static final int OP_OR = 1; |
196 |
|
|
static final int OP_NOT = 2; |
197 |
|
|
static final char[] OP = { '*', '+', '^' }; |
198 |
|
|
|
199 |
|
|
static final String ORDERMAIL = "idmdoku@openisis.org"; |
200 |
|
|
static final String[] MAILHEADERS = { |
201 |
|
|
Mail.TO, ORDERMAIL, |
202 |
|
|
Mail.FROM, "Online-Katalog <server@openisis.org>", |
203 |
|
|
Mail.SUBJECT, "online Bestellung", |
204 |
|
|
}; |
205 |
|
|
|
206 |
|
|
static final int LINES = 3; |
207 |
|
|
|
208 |
|
|
static class Ses { |
209 |
|
|
int l; // lang, 0 or 1 |
210 |
|
|
int off = 0; |
211 |
|
|
int rows = ROWS; |
212 |
|
|
int view; // last seen view |
213 |
|
|
int idx; // field to save index into |
214 |
|
|
int msec; // |
215 |
|
|
|
216 |
|
|
String qry; |
217 |
|
|
int[] set; |
218 |
|
|
int len; |
219 |
|
|
|
220 |
|
|
// form content: |
221 |
|
|
String[] t = new String[LINES]; |
222 |
|
|
String[] o = new String[ORDER.length]; // order data |
223 |
|
|
int[] f = new int[LINES]; // 0 or 1+index of selected tag |
224 |
|
|
int[] op = new int[LINES]; |
225 |
|
|
|
226 |
|
|
Iterator i; |
227 |
|
|
String term = EMPTY; |
228 |
|
|
ArrayList orders; |
229 |
|
|
|
230 |
|
|
public Ses () { |
231 |
|
|
for ( int i=0; i<LINES; i++ ) |
232 |
|
|
t[i] = EMPTY; |
233 |
|
|
} |
234 |
|
|
|
235 |
|
|
public String mkqry () |
236 |
|
|
{ |
237 |
|
|
StringBuffer q = new StringBuffer(); |
238 |
|
|
boolean had = false; |
239 |
|
|
for ( int i=0; i<LINES; i++ ) { |
240 |
|
|
String v = t[i]; |
241 |
|
|
int l = v.length(); |
242 |
|
|
if ( 0 == l ) |
243 |
|
|
continue; |
244 |
|
|
if ( had ) |
245 |
|
|
q.append(' ').append(OP[op[i]]).append(' '); |
246 |
|
|
had = true; |
247 |
|
|
boolean blank = 0 <= v.indexOf(' '); |
248 |
|
|
if ( blank ) |
249 |
|
|
q.append('"'); |
250 |
|
|
if ( '*' == v.charAt(l-1) ) |
251 |
|
|
q.append( v.substring(0,l-1) ).append('$'); |
252 |
|
|
else |
253 |
|
|
q.append( v ); |
254 |
|
|
if ( blank ) |
255 |
|
|
q.append('"'); |
256 |
|
|
if ( 0 < f[i] && f[i] <= tag.length ) |
257 |
|
|
q.append('/').append(tag[f[i]-1]); |
258 |
|
|
} |
259 |
|
|
return qry = q.toString(); |
260 |
|
|
} // mkqry |
261 |
|
|
}; |
262 |
|
|
|
263 |
|
|
// tasks: what to do |
264 |
|
|
static final int DO_HELP = 0; // default: display help |
265 |
|
|
static final int DO_QUERY = 1; // new search |
266 |
|
|
static final int DO_QUERYN = 2; // next results |
267 |
|
|
static final int DO_INDEX = 3; // display index |
268 |
|
|
static final int DO_INDEXN = 4; // next index terms |
269 |
|
|
static final int DO_ORDER = 5; // display order form |
270 |
|
|
static final int DO_ORDERS = 6; // submit order form |
271 |
|
|
static final int DO_LANG = 7; // toggle language |
272 |
|
|
static final int DO_BLANK = 8; // empty search |
273 |
|
|
|
274 |
|
|
// views: what to display |
275 |
|
|
static final int VW_HELP = 0; // default: display help |
276 |
|
|
static final int VW_QUERY = 1; // query results |
277 |
|
|
static final int VW_INDEX = 2; // index terms |
278 |
|
|
static final int VW_ORDER = 3; // order form |
279 |
|
|
|
280 |
|
|
%><% |
281 |
|
|
Ses s; |
282 |
|
|
try { |
283 |
|
|
s = (Ses) session.getAttribute( me ); |
284 |
|
|
} catch ( Exception e ) { s = null; } |
285 |
|
|
if ( null == s ) |
286 |
|
|
session.setAttribute( me, s = new Ses() ); |
287 |
|
|
|
288 |
|
|
int task = DO_HELP; |
289 |
|
|
String order = null; |
290 |
|
|
|
291 |
|
|
// figure out, what to do |
292 |
|
|
String wants = request.getParameter( "do" ); |
293 |
|
|
if ( chkbutton( 52, wants ) ) |
294 |
|
|
task = DO_QUERY; |
295 |
|
|
else if ( chkbutton( 54, wants ) ) |
296 |
|
|
task = DO_LANG; |
297 |
|
|
else if ( "order".equals( wants ) ) |
298 |
|
|
task = DO_ORDER; |
299 |
|
|
else if ( chkbutton( 86, wants ) ) |
300 |
|
|
task = DO_ORDERS; |
301 |
|
|
else if ( "more".equals( wants ) ) |
302 |
|
|
task = DO_INDEXN; |
303 |
|
|
else if ( "new".equals( wants ) ) |
304 |
|
|
task = DO_BLANK; |
305 |
|
|
else if ( null != request.getParameter( "off" ) ) |
306 |
|
|
task = DO_QUERYN; |
307 |
|
|
else // check "index" buttons i0, i1 ... |
308 |
|
|
for ( int i=0; i<LINES; i++ ) |
309 |
|
|
if ( chkbutton( 56, request.getParameter("i"+i) ) ) { |
310 |
|
|
task = DO_INDEX; |
311 |
|
|
s.idx = i; |
312 |
|
|
break; |
313 |
|
|
} |
314 |
|
|
|
315 |
|
|
// save common form data |
316 |
|
|
for ( int i=0; i<LINES; i++ ) { |
317 |
|
|
String p; |
318 |
|
|
s.f[i] = chkint( 0, tag.length, s.f[i], request.getParameter( "f"+i ) ); |
319 |
|
|
s.op[i] = chkint( 0, OP.length-1, s.op[i], request.getParameter( "op"+i ) ); |
320 |
|
|
if ( null != (p = request.getParameter( "t"+i )) ) |
321 |
|
|
s.t[i] = p.trim(); |
322 |
|
|
if ( DO_HELP == task && chkbutton( 56, request.getParameter("i"+i) ) ) { |
323 |
|
|
task = DO_INDEX; |
324 |
|
|
s.idx = i; |
325 |
|
|
} |
326 |
|
|
} |
327 |
|
|
s.rows = chkint( 1, 5*ROWS, s.rows, request.getParameter( "rows" ) ); |
328 |
|
|
s.off = chkint( 0, s.len-1, s.off, request.getParameter( "off" ) ); |
329 |
|
|
for ( int i=0; i<ORDER.length; i++ ) { |
330 |
|
|
String v = request.getParameter( ORDER[i] ); |
331 |
|
|
if ( null != v ) |
332 |
|
|
s.o[i] = v; |
333 |
|
|
} |
334 |
|
|
|
335 |
|
|
switch ( task ) { |
336 |
|
|
case DO_BLANK: |
337 |
|
|
for ( int i=0; i<LINES; i++ ) { |
338 |
|
|
s.f[i] = s.op[i] = 0; |
339 |
|
|
s.t[i] = EMPTY; |
340 |
|
|
} |
341 |
|
|
s.len = 0; |
342 |
|
|
s.i = null; |
343 |
|
|
s.set = null; |
344 |
|
|
case DO_HELP: |
345 |
|
|
s.view = VW_HELP; |
346 |
|
|
break; |
347 |
|
|
case DO_QUERY: |
348 |
|
|
long then = System.currentTimeMillis(); |
349 |
|
|
s.set = db.search( s.mkqry(), Db.QRY_SIMPLE ); |
350 |
|
|
long now = System.currentTimeMillis(); |
351 |
|
|
s.len = null == s.set ? 0 : s.set.length; |
352 |
|
|
s.off = 0; |
353 |
|
|
s.msec = (int)(now - then); |
354 |
|
|
case DO_QUERYN: |
355 |
|
|
s.view = VW_QUERY; |
356 |
|
|
break; |
357 |
|
|
case DO_INDEX: |
358 |
|
|
String term = s.t[ s.idx ]; |
359 |
|
|
/* |
360 |
|
|
if ( 0 == term.length() ) { |
361 |
|
|
s.view = VW_HELP; |
362 |
|
|
break; |
363 |
|
|
} |
364 |
|
|
*/ |
365 |
|
|
if ( term.endsWith("*") || term.endsWith("$") ) |
366 |
|
|
term=term.substring(0,term.length()-1); |
367 |
|
|
s.i = db.terms( s.term = term ); |
368 |
|
|
case DO_INDEXN: |
369 |
|
|
s.view = VW_INDEX; |
370 |
|
|
break; |
371 |
|
|
case DO_LANG: |
372 |
|
|
s.l = 1 - s.l; // don't change view |
373 |
|
|
break; |
374 |
|
|
case DO_ORDER: |
375 |
|
|
String id = request.getParameter("id"); |
376 |
|
|
if ( null != id ) { |
377 |
|
|
if ( null == s.orders ) |
378 |
|
|
s.orders = new ArrayList(); |
379 |
|
|
boolean isnew = true; |
380 |
|
|
for ( int i=0; i<s.orders.size(); i++ ) { |
381 |
|
|
String[] o = (String[])s.orders.get(i); |
382 |
|
|
if ( id.equals( o[0] ) ) { |
383 |
|
|
isnew = false; |
384 |
|
|
break; |
385 |
|
|
} |
386 |
|
|
} |
387 |
|
|
if ( isnew ) |
388 |
|
|
s.orders.add( new String[] { |
389 |
|
|
id, NV(request.getParameter("ti")) } ); |
390 |
|
|
} |
391 |
|
|
if ( null != s.orders ) { |
392 |
|
|
int sz = s.orders.size()-1; |
393 |
|
|
int rm = chkint( 0, sz, -1, request.getParameter("rm") ); |
394 |
|
|
if ( 0 <= rm ) { |
395 |
|
|
s.orders.remove( rm ); |
396 |
|
|
if ( 0 == sz ) |
397 |
|
|
s.orders = null; |
398 |
|
|
} |
399 |
|
|
} |
400 |
|
|
if ( null == s.orders ) |
401 |
|
|
task = DO_HELP; |
402 |
|
|
break; |
403 |
|
|
case DO_ORDERS: |
404 |
|
|
if ( null == s.orders ) { |
405 |
|
|
task = DO_HELP; |
406 |
|
|
break; |
407 |
|
|
} |
408 |
|
|
StringBuffer o = new StringBuffer(); |
409 |
|
|
int i = 0; |
410 |
|
|
for ( ; i<ORDER.length; i++ ) { |
411 |
|
|
String v = s.o[i]; |
412 |
|
|
if ( null == v ) |
413 |
|
|
v = EMPTY; |
414 |
|
|
if ( 0 == v.length() && 'X' == ORDER[i].charAt(0) ) { |
415 |
|
|
order = t[108+s.l]; // required field missing |
416 |
|
|
task = DO_ORDER; |
417 |
|
|
break; |
418 |
|
|
} |
419 |
|
|
o.append( t[ORDERT[i]] ).append( ": " ).append( v ).append( '\n' ); |
420 |
|
|
} |
421 |
|
|
if ( ORDER.length == i ) { // survived |
422 |
|
|
o.append( "\nbestellt:\n\n" ); |
423 |
|
|
for ( i=0; i<s.orders.size(); i++ ) { |
424 |
|
|
String[] p = (String[])s.orders.get(i); |
425 |
|
|
o.append( p[0] ).append( ": " ).append( p[1] ).append( '\n' ); |
426 |
|
|
} |
427 |
|
|
try { |
428 |
|
|
(new Mail.Smtp( ORDERMAIL )).put( |
429 |
|
|
Mail.message( MAILHEADERS, o.toString() ) |
430 |
|
|
); |
431 |
|
|
order = o.append("\n\n").append(t[110+s.l]).toString(); |
432 |
|
|
s.orders = null; |
433 |
|
|
} catch (Exception e) { |
434 |
|
|
order = o.append("\n\n") |
435 |
|
|
.append( "<h2>" ) |
436 |
|
|
.append(t[112+s.l]) |
437 |
|
|
.append( "</h2>\n<!--" ) |
438 |
|
|
.append( e.getMessage() ) |
439 |
|
|
.append( "-->\n" ) |
440 |
|
|
.toString(); |
441 |
|
|
task = DO_ORDER; |
442 |
|
|
} |
443 |
|
|
} |
444 |
|
|
s.view = VW_ORDER; |
445 |
|
|
} |
446 |
|
|
int maxrow = s.off + s.rows; |
447 |
|
|
if ( maxrow >= s.len ) |
448 |
|
|
maxrow = s.len; |
449 |
|
|
|
450 |
|
|
%><html> |
451 |
|
|
<head> |
452 |
|
|
<title><%=t[50+s.l]%></title> |
453 |
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> |
454 |
|
|
<meta name="description" content=""> |
455 |
|
|
<meta http-equiv="Cache-Control" content="no-cache"> |
456 |
|
|
<meta http-equiv="Pragmas" content="no-cache"> |
457 |
|
|
<meta http-equiv="Robots" content="index,nofollow"> |
458 |
|
|
<link href="http://purl.org/dc" rel="schema.DC"> |
459 |
|
|
<meta name="DC.Title" content="IDM - documentation database"> |
460 |
|
|
<meta name="DC.Subject" content=""> |
461 |
|
|
<meta name="DC.Description" content=""> |
462 |
|
|
<meta name="DC.Creator" content="idm openisis"> |
463 |
|
|
<meta name="DC.Publisher" content="University of Bielefeld"> |
464 |
|
|
<meta name="DC.Date" content="2002-11-30" scheme="W3CDTF"> |
465 |
|
|
<meta name="DC.Type" content="Text" scheme="DCMIType"> |
466 |
|
|
<meta name="DC.Format" content="text/html"> |
467 |
|
|
<meta name="DC.Identifier" content="http://openisis.org/openisis/idm"> |
468 |
|
|
<link href="http://www.uni-bielefeld.de/icons/uni-logo-icon-16.png" type="image/png" rel="icon"> |
469 |
|
|
<link href="http://www.uni-bielefeld.de/css/unistandard.css" type="text/css" rel="stylesheet"> |
470 |
|
|
<!-- |
471 |
|
|
<style TYPE="text/css"> |
472 |
|
|
td { |
473 |
|
|
font-family: Verdana, Arial, Helvetica, Geneva, sans-serif; |
474 |
|
|
font-size: 12px |
475 |
|
|
} |
476 |
|
|
</style> |
477 |
|
|
--> |
478 |
|
|
</head> |
479 |
|
|
<body bgcolor="#ffffff"> |
480 |
|
|
<!-- heading table: useless but nice ;) --> |
481 |
|
|
<table width="100%" cols="1" cellpadding="0" border="0" cellspacing="0"> |
482 |
|
|
<tr> |
483 |
|
|
<td align="center"> |
484 |
|
|
<a href="http://www.uni-bielefeld.de/idm/service/dokument.html"> |
485 |
|
|
<img src="/img/idm/service.gif" width="472" height="34" |
486 |
|
|
alt="service" border="0"> |
487 |
|
|
</a> |
488 |
|
|
<a href="http://www.uni-bielefeld.de/"> |
489 |
|
|
<img src="/img/idm/siegel.gif" width="27" height="27" |
490 |
|
|
vspace="10" hspace="0" |
491 |
|
|
alt="Universität Bielefeld" border="0"> |
492 |
|
|
</a> |
493 |
|
|
</td> |
494 |
|
|
</tr> |
495 |
|
|
<tr> |
496 |
|
|
<td align="center"> |
497 |
|
|
<img src="/img/idm/1pixgrau.gif" width="575" |
498 |
|
|
vspace="0" hspace="0" height="3" |
499 |
|
|
alt="================================================="> |
500 |
|
|
<br></td> |
501 |
|
|
</tr> |
502 |
|
|
<tr> |
503 |
|
|
<td width="470" height="25" bgcolor="#9DCCE6"> |
504 |
|
|
<a href="http://www.uni-bielefeld.de/idm/service/dokument.html"> |
505 |
|
|
<b> <%=t[50+s.l]%></b> |
506 |
|
|
</a> |
507 |
|
|
</td> |
508 |
|
|
</tr> |
509 |
|
|
</table> |
510 |
|
|
|
511 |
|
|
<!-- form table: either query or order form --> |
512 |
|
|
<form action="<%=me%>" method="GET"> |
513 |
|
|
<% |
514 |
|
|
if ( DO_ORDER == task ) { |
515 |
|
|
%> |
516 |
|
|
<table width="575" cellpadding="0" border="0" cellspacing="0"> |
517 |
|
|
<% |
518 |
|
|
for ( int i=0; i<ORDER.length; i++ ) { |
519 |
|
|
String lbl = t[ORDERT[i]+s.l], nm = ORDER[i]; |
520 |
|
|
String req = 'X' == nm.charAt(0) ? "*" : ""; |
521 |
|
|
String v = null == s.o[i] ? "" : Field.html(s.o[i]); |
522 |
|
|
%> |
523 |
|
|
<tr><td><%=lbl%></td> |
524 |
|
|
<td><input name="<%=nm%>" value="<%=v%>" size="40"><%=req%></td><tr> |
525 |
|
|
<% |
526 |
|
|
} |
527 |
|
|
for(int i=0;i<s.orders.size();i++) { |
528 |
|
|
String[] o = (String[])s.orders.get(i); |
529 |
|
|
%> |
530 |
|
|
<tr> |
531 |
|
|
<td><%=Field.html(o[0])%></td> |
532 |
|
|
<td><%=Field.html(o[1])%> |
533 |
|
|
(<a class="intern" href="<%=me%>?do=order&rm=<%=i%>"><%=t[102+s.l]%></a>) |
534 |
|
|
</td> |
535 |
|
|
</tr> |
536 |
|
|
<% |
537 |
|
|
} |
538 |
|
|
%> |
539 |
|
|
<tr> |
540 |
|
|
<td colspan="2" align="center"> |
541 |
|
|
<img src="/img/idm/1pixgrau.gif" width="575" |
542 |
|
|
vspace="0" hspace="0" height="1" |
543 |
|
|
alt="-------------------------------------------------"> |
544 |
|
|
<br></td> |
545 |
|
|
</tr> |
546 |
|
|
</table> |
547 |
|
|
<input type="submit" name="do" value="<%=t[86+s.l]%>"> |
548 |
|
|
<% |
549 |
|
|
} else { |
550 |
|
|
%> |
551 |
|
|
<table width="100%" cols="3" cellpadding="0" border="0" cellspacing="0"> |
552 |
|
|
<% |
553 |
|
|
for ( int l=0; l<LINES; l++ ) { |
554 |
|
|
%> |
555 |
|
|
<tr valign="top" height="33"> |
556 |
|
|
<td> |
557 |
|
|
<% |
558 |
|
|
if ( 0 < l ) for ( int o=0; o<OP.length; o++ ) { |
559 |
|
|
String checked = o == s.op[l] ? " checked" : ""; |
560 |
|
|
%> |
561 |
|
|
<input type="radio" name="op<%=l%>"<%=checked%> value="<%=o%>"/> |
562 |
|
|
<%=t[62+2*o+s.l] %> |
563 |
|
|
<% |
564 |
|
|
} // for ops |
565 |
|
|
%> |
566 |
|
|
</td> |
567 |
|
|
<td> |
568 |
|
|
<input type="text" name="t<%=l%>" size="24" |
569 |
|
|
value="<%=Field.html(s.t[l])%>"/> |
570 |
|
|
<input type="submit" name="i<%=l%>" |
571 |
|
|
value="<%=t[56+s.l]%>"/> |
572 |
|
|
</td> |
573 |
|
|
<td align="left"> |
574 |
|
|
in <select name="f<%=l%>" size=1> |
575 |
|
|
<option value="0"<%=(0==s.f[l])?" selected":""%> |
576 |
|
|
><%=t[60+s.l]%></option> |
577 |
|
|
<% |
578 |
|
|
for(int i=0; i<tag.length;i++) { |
579 |
|
|
%> |
580 |
|
|
<option value="<%=i+1%>"<%=(i+1==s.f[l])?" selected":""%> |
581 |
|
|
><%=t[2*i+s.l]%></option> |
582 |
|
|
<% |
583 |
|
|
} // for fields |
584 |
|
|
%> |
585 |
|
|
</select> |
586 |
|
|
</td> |
587 |
|
|
</tr> |
588 |
|
|
<% |
589 |
|
|
} // for lines |
590 |
|
|
%> |
591 |
|
|
|
592 |
|
|
<tr> |
593 |
|
|
<td colspan="3" align="center" valign="center" height="7"> |
594 |
|
|
<img src="/img/idm/1pixgrau.gif" width="575" |
595 |
|
|
vspace="3" hspace="0" height="1" |
596 |
|
|
alt="-------------------------------------------------"> |
597 |
|
|
<br></td> |
598 |
|
|
</tr> |
599 |
|
|
|
600 |
|
|
</table> |
601 |
|
|
<!-- <%= dberr %> --> |
602 |
|
|
<input type="submit" name="do" value="<%=t[52+s.l]%>"/> |
603 |
|
|
<input type="reset" name="reset" value="<%=t[68+s.l] %>"/> |
604 |
|
|
<%-- |
605 |
|
|
<input type="text" name="rows" size="2" value="<%=s.rows%>"/> rows at once |
606 |
|
|
--%> |
607 |
|
|
<input type="submit" name="do" value="<%=t[54+s.l]%>"/> |
608 |
|
|
<% |
609 |
|
|
} // query form |
610 |
|
|
|
611 |
|
|
if ( VW_QUERY == s.view && 0 < s.len ) { |
612 |
|
|
if ( 0 < s.off ) { |
613 |
|
|
int boff = s.off-s.rows; |
614 |
|
|
if ( boff < 0 ) boff = 0; |
615 |
|
|
%> |
616 |
|
|
<a class="intern" href="<%=me%>?off=<%=boff%>"> |
617 |
|
|
<b><<</b><%=t[88+s.l]%> <%=boff+1%> |
618 |
|
|
<%=t[90+s.l]%> <%=boff+s.rows%></a> |
619 |
|
|
<% |
620 |
|
|
} |
621 |
|
|
if ( maxrow < s.len ) { |
622 |
|
|
int nmax = maxrow+s.rows; |
623 |
|
|
if ( nmax > s.len ) |
624 |
|
|
nmax = s.len; |
625 |
|
|
%> |
626 |
|
|
<a class="intern" href="<%=me%>?off=<%=maxrow%>"> |
627 |
|
|
<%=t[88+s.l]%> <%=maxrow+1%> |
628 |
|
|
<%=t[90+s.l]%> <%=nmax%><b>>></b></a> |
629 |
|
|
<% |
630 |
|
|
} |
631 |
|
|
} |
632 |
|
|
|
633 |
|
|
%> |
634 |
|
|
<a class="intern" href="<%=me%>?do=new"><%=t[98+s.l]%></a> |
635 |
|
|
</form> |
636 |
|
|
<hr> |
637 |
|
|
<!-- switch view: help, query, index or order --> |
638 |
|
|
<% |
639 |
|
|
switch ( s.view ) { |
640 |
|
|
default: |
641 |
|
|
case VW_HELP: |
642 |
|
|
%> |
643 |
|
|
<%=t[100+s.l]%> |
644 |
|
|
<% |
645 |
|
|
break; |
646 |
|
|
case VW_QUERY: |
647 |
|
|
if ( 0 == s.len ) { |
648 |
|
|
%> |
649 |
|
|
0 <%=t[88+s.l]%> <%=t[94+s.l]%> '<%=s.qry%>' |
650 |
|
|
<% |
651 |
|
|
} else { |
652 |
|
|
%> |
653 |
|
|
<h4> <%=t[88+s.l]%> <%=s.off+1%> |
654 |
|
|
<%=t[90+s.l]%> <%=maxrow%> |
655 |
|
|
<%=t[92+s.l]%> <%=s.len%> |
656 |
|
|
<%=t[94+s.l]%> '<%=s.qry%>' </h4> |
657 |
|
|
|
658 |
|
|
<%-- start output --%> |
659 |
|
|
<table cols="2" width="100%"> |
660 |
|
|
<% |
661 |
|
|
for ( int i=s.off; i<maxrow; i++ ) { |
662 |
|
|
Rec r = db.readRow( s.set[i] ); |
663 |
|
|
if ( null == r ) continue; |
664 |
|
|
%> |
665 |
|
|
<tr><td colspan="2"><hr></td></tr> |
666 |
|
|
<% |
667 |
|
|
for ( int j=0; j<tag.length; j++ ) { |
668 |
|
|
out.println( r.v( |
669 |
|
|
"<tr><td valign=\"top\" width=\"150\">"+t[2*j+s.l] |
670 |
|
|
+"</td><td valign=\"top\">", |
671 |
|
|
null, // cond,repeated prefix |
672 |
|
|
tag[j], Db.MDL|Db.PS|Db.HTI, 0, 0, // tag and mode, len, off |
673 |
|
|
";<br>","</td></tr>") |
674 |
|
|
); |
675 |
|
|
} |
676 |
|
|
String ti = r.v("",301,Db.MDL, 0, 0,""); |
677 |
|
|
if ( null == ti || 0 == ti.length() ) |
678 |
|
|
ti = r.v("",302,Db.MDL, 0, 0,""); |
679 |
|
|
String link = me+"?do=order" |
680 |
|
|
+ "&id=" + URLEncoder.encode( r.v("",18,Db.MDL, 0, 0,"") ) |
681 |
|
|
+ "&ti=" + URLEncoder.encode( ti ); |
682 |
|
|
%> |
683 |
|
|
<tr><td colspan="2" align="right"> |
684 |
|
|
<a class="intern" href="<%=link%>"><b>>></b> <%=t[84+s.l]%></a> |
685 |
|
|
</td></tr> |
686 |
|
|
<% |
687 |
|
|
} |
688 |
|
|
%> |
689 |
|
|
</table> |
690 |
|
|
<% |
691 |
|
|
} |
692 |
|
|
break; // case VW_QUERY |
693 |
|
|
case VW_INDEX: |
694 |
|
|
%> |
695 |
|
|
<h4><%=t[96+s.l]%> '<%=Field.html(s.term)%>'</h4> |
696 |
|
|
<% |
697 |
|
|
if ( null == s.i || ! s.i.hasNext() ) { |
698 |
|
|
} else { |
699 |
|
|
int i = TERMS; |
700 |
|
|
while ( 0 < i-- && s.i.hasNext() ) { |
701 |
|
|
String ix = (String)s.i.next(); |
702 |
|
|
if ( 0 == ix.length() ) continue; |
703 |
|
|
String u = URLEncoder.encode( ix ); |
704 |
|
|
%> |
705 |
|
|
<a class="intern" href="<%=me%>?t<%=s.idx%>=<%=u%>"><%=Field.html(ix)%></a><br> |
706 |
|
|
<% |
707 |
|
|
} |
708 |
|
|
if ( 0 > i ) { // more |
709 |
|
|
%> |
710 |
|
|
<p align = "right"> |
711 |
|
|
<a class="intern" href="<%=me%>?do=more"><b>>></b> <%=t[58+s.l]%></a><br> |
712 |
|
|
</p> |
713 |
|
|
<% |
714 |
|
|
} else |
715 |
|
|
s.i = null; |
716 |
|
|
} |
717 |
|
|
break; // case VW_INDEX |
718 |
|
|
case VW_ORDER: |
719 |
|
|
%> |
720 |
|
|
<pre> |
721 |
|
|
<%= order %> |
722 |
|
|
</pre> |
723 |
|
|
<% |
724 |
|
|
} // switch |
725 |
|
|
%> |
726 |
|
|
<!-- <%= ID %> --> |
727 |
|
|
</body></html> |