Revision 341
Added by berkley over 24 years ago
src/edu/ucsb/nceas/metacat/MetaCatServlet.java | ||
---|---|---|
21 | 21 |
import java.io.FileInputStream; |
22 | 22 |
import java.util.Enumeration; |
23 | 23 |
import java.util.Hashtable; |
24 |
import java.util.ResourceBundle; |
|
24 |
import java.util.ResourceBundle;
|
|
25 | 25 |
import java.util.PropertyResourceBundle; |
26 | 26 |
import java.net.URL; |
27 | 27 |
import java.net.MalformedURLException; |
... | ... | |
226 | 226 |
} else if (action.equals("Logout")) { |
227 | 227 |
HttpSession sess = request.getSession(false); |
228 | 228 |
if (sess != null) { sess.invalidate(); } |
229 |
response.sendRedirect("/xmltodb/login.html"); |
|
229 |
response.sendRedirect("/xmltodb/lib/login.html");
|
|
230 | 230 |
// aware of session expiration on every request |
231 | 231 |
} else { |
232 | 232 |
HttpSession sess = request.getSession(true); |
233 | 233 |
if (sess.isNew()) { |
234 | 234 |
// session expired or has not been stored b/w user requests |
235 | 235 |
// redirect to default page for query only access |
236 |
response.sendRedirect("/xmltodb/sexpire.html"); |
|
236 |
response.sendRedirect("/xmltodb/lib/sexpire.html");
|
|
237 | 237 |
} |
238 | 238 |
} |
239 | 239 |
// End of Jivka added |
... | ... | |
299 | 299 |
return; |
300 | 300 |
} else { |
301 | 301 |
response.sendRedirect( |
302 |
response.encodeRedirectUrl("/xmltodb/index.html")); |
|
302 |
response.encodeRedirectUrl("/xmltodb/lib/index.html"));
|
|
303 | 303 |
} |
304 | 304 |
} catch ( java.io.IOException ioe) { |
305 | 305 |
sess.disconnect(); |
... | ... | |
323 | 323 |
out.println("</success>"); |
324 | 324 |
} else { |
325 | 325 |
response.sendRedirect( |
326 |
response.encodeRedirectUrl("/xmltodb/metacat.html")); |
|
326 |
response.encodeRedirectUrl("/xmltodb/lib/metacat.html"));
|
|
327 | 327 |
} |
328 | 328 |
} catch ( java.io.IOException ioe) { |
329 | 329 |
sess.disconnect(); |
... | ... | |
350 | 350 |
out.println("<?xml version=\"1.0\"?>"); |
351 | 351 |
out.println("<error>"); |
352 | 352 |
out.println("SRB Connection failed. " + re.getMessage()); |
353 |
out.println("</error>"); |
|
353 |
out.println("</error>");
|
|
354 | 354 |
} |
355 | 355 |
} |
356 | 356 |
|
357 |
/** |
|
358 |
*Create the squery xml and return it as a String. |
|
359 |
* @param params is the Hashtable of parameters that should be included |
|
360 |
* in the squery. |
|
361 |
*/ |
|
362 |
private String handleSQuery(Hashtable params) |
|
363 |
{ |
|
364 |
//create the squery and return it to be processed |
|
365 |
String doctype = null; |
|
366 |
String[] doctypeArr = null; |
|
367 |
doctypeArr = (String[])params.get("doctype"); |
|
368 |
doctype = null; |
|
369 |
if (doctypeArr != null) |
|
370 |
{ |
|
371 |
doctype = ((String[])params.get("doctype"))[0]; |
|
372 |
} |
|
373 |
else |
|
374 |
{ |
|
375 |
doctype="ANY"; |
|
376 |
} |
|
377 |
return DBQuery.createSQuery(params, doctype); |
|
378 |
} |
|
379 |
|
|
380 |
/** |
|
381 |
*Create the query xml and return it as a String. |
|
382 |
* @param query is the free text query parameter returned through the CGI. |
|
383 |
* @param doctype is the doctype parameter returned through the CGI. |
|
384 |
* If no doctype filter is required, set it to null or "". |
|
385 |
*/ |
|
386 |
private String handleQuery(Hashtable params) |
|
387 |
{ |
|
388 |
String doctype=null; |
|
389 |
String[] doctypeArr=null; |
|
390 |
String query = ((String[])params.get("query"))[0]; |
|
391 |
doctypeArr = (String[])params.get("doctype"); |
|
392 |
doctype = null; |
|
393 |
if (doctypeArr != null) |
|
394 |
{ |
|
395 |
doctype = ((String[])params.get("doctype"))[0]; |
|
396 |
} |
|
397 |
else |
|
398 |
{ |
|
399 |
doctype="ANY"; |
|
400 |
} |
|
401 |
return DBQuery.createQuery(query,doctype); |
|
402 |
} |
|
403 |
|
|
404 |
/** |
|
405 |
* Run the query and return a hashtable of results. |
|
406 |
*/ |
|
407 |
private Hashtable runQuery(Reader xmlquery) |
|
408 |
{ |
|
409 |
Hashtable doclist=null; |
|
410 |
Connection conn = null; |
|
411 |
try |
|
412 |
{ |
|
413 |
conn = util.getConnection(); |
|
414 |
DBQuery queryobj = new DBQuery(conn, saxparser); |
|
415 |
doclist = queryobj.findDocuments(xmlquery); |
|
416 |
util.returnConnection(conn); |
|
417 |
return doclist; |
|
418 |
} |
|
419 |
catch (Exception e) |
|
420 |
{ |
|
421 |
if (conn != null) |
|
422 |
{ |
|
423 |
util.returnConnection(conn); |
|
424 |
} |
|
425 |
util.debugMessage("Error in runQuery: " + e.getMessage()); |
|
426 |
doclist = null; |
|
427 |
return doclist; |
|
428 |
} |
|
429 |
} |
|
430 |
|
|
431 |
private void transformDocument(Hashtable doclist, String qformat, |
|
432 |
String xmlquery, PrintWriter out, |
|
433 |
HttpServletResponse response) |
|
434 |
{ |
|
435 |
// Create a buffer to hold the xml result |
|
436 |
StringBuffer resultset = new StringBuffer(); |
|
437 |
|
|
438 |
// Print the resulting root nodes |
|
439 |
String docid = null; |
|
440 |
String document = null; |
|
441 |
resultset.append("<?xml version=\"1.0\"?>\n"); |
|
442 |
resultset.append("<resultset>\n"); |
|
443 |
resultset.append(" <query>" + xmlquery + "</query>"); |
|
444 |
Enumeration doclistkeys = doclist.keys(); |
|
445 |
while (doclistkeys.hasMoreElements()) |
|
446 |
{ |
|
447 |
docid = (String)doclistkeys.nextElement(); |
|
448 |
document = (String)doclist.get(docid); |
|
449 |
resultset.append(" <document>" + document + "</document>"); |
|
450 |
} |
|
451 |
resultset.append("</resultset>"); |
|
452 |
|
|
453 |
if(qformat.equals("xml")) |
|
454 |
{ |
|
455 |
// set content type and other response header fields first |
|
456 |
response.setContentType("text/xml"); |
|
457 |
out.println(resultset.toString()); |
|
458 |
} |
|
459 |
else if(qformat.equals("html")) |
|
460 |
{ |
|
461 |
// set content type and other response header fields first |
|
462 |
response.setContentType("text/html"); |
|
463 |
XMLDocumentFragment htmldoc = null; |
|
464 |
try |
|
465 |
{ |
|
466 |
XSLStylesheet style = new XSLStylesheet( |
|
467 |
new URL(resultStyleURL), null); |
|
468 |
htmldoc = (new XSLProcessor()).processXSL(style, |
|
469 |
(Reader)(new StringReader(resultset.toString())),null); |
|
470 |
htmldoc.print(out); |
|
471 |
} |
|
472 |
catch (Exception e) |
|
473 |
{ |
|
474 |
out.println("Error transforming document:\n" + e.getMessage()); |
|
475 |
} |
|
476 |
} |
|
477 |
} |
|
478 |
|
|
357 | 479 |
/** |
358 | 480 |
* Handle the database query request and return a result set, possibly |
359 | 481 |
* transformed from XML into HTML |
360 | 482 |
*/ |
361 | 483 |
private void handleQueryAction(PrintWriter out, Hashtable params, |
362 |
HttpServletResponse response) { |
|
484 |
HttpServletResponse response) |
|
485 |
{ |
|
363 | 486 |
String action = ((String[])params.get("action"))[0]; |
364 |
String query = ((String[])params.get("query"))[0]; |
|
365 | 487 |
Hashtable doclist = null; |
366 | 488 |
String[] doctypeArr = null; |
367 | 489 |
String doctype = null; |
368 | 490 |
Reader xmlquery = null; |
369 | 491 |
Connection conn = null; |
370 | 492 |
|
371 |
// Run the query if it is a structured query |
|
372 |
// or, if it is a free-text, simple query, |
|
373 |
// format it first as a structured query and then run it |
|
374 |
if (action.equals("query")) { |
|
375 |
doctypeArr = (String[])params.get("doctype"); |
|
376 |
doctype = null; |
|
377 |
if (doctypeArr != null) { |
|
378 |
doctype = ((String[])params.get("doctype"))[0]; |
|
379 |
} |
|
380 |
|
|
381 |
if (doctype != null) { |
|
382 |
xmlquery = new StringReader(DBQuery.createQuery(query,doctype)); |
|
383 |
} else { |
|
384 |
xmlquery = new StringReader(DBQuery.createQuery(query)); |
|
385 |
} |
|
386 |
} else if (action.equals("squery")) { |
|
387 |
xmlquery = new StringReader(query); |
|
388 |
} else { |
|
389 |
System.err.println("Error handling query -- illegal action value"); |
|
493 |
if(action.equals("query")) |
|
494 |
{ |
|
495 |
xmlquery = new StringReader(handleQuery(params)); |
|
390 | 496 |
} |
391 |
|
|
392 |
try { |
|
393 |
|
|
394 |
conn = util.getConnection(); |
|
395 |
DBQuery queryobj = new DBQuery(conn, saxparser); |
|
396 |
doclist = queryobj.findDocuments(xmlquery); |
|
397 |
util.returnConnection(conn); |
|
398 |
|
|
399 |
} catch (Exception e) { |
|
400 |
if ( conn != null ) { util.returnConnection(conn); } |
|
401 |
response.setContentType("text/html"); |
|
402 |
out.println(e.getMessage()); |
|
403 |
return; |
|
404 |
} |
|
405 |
|
|
406 |
// Create a buffer to hold the xml result |
|
407 |
StringBuffer resultset = new StringBuffer(); |
|
408 |
|
|
409 |
// Print the resulting root nodes |
|
410 |
String docid; |
|
411 |
String document = null; |
|
412 |
resultset.append("<?xml version=\"1.0\"?>\n"); |
|
413 |
//resultset.append("<!DOCTYPE resultset PUBLIC " + |
|
414 |
// "\"-//NCEAS//resultset//EN\" \"resultset.dtd\">\n"); |
|
415 |
resultset.append("<resultset>\n"); |
|
416 |
// following line removed by Dan Higgins to avoid insertion of query XML inside returned XML doc |
|
417 |
// resultset.append(" <query>" + query + "</query>"); |
|
418 |
Enumeration doclistkeys = doclist.keys(); |
|
419 |
while (doclistkeys.hasMoreElements()) { |
|
420 |
docid = (String)doclistkeys.nextElement(); |
|
421 |
document = (String)doclist.get(docid); |
|
422 |
resultset.append(" <document>" + document + "</document>"); |
|
497 |
else if(action.equals("squery")) |
|
498 |
{ |
|
499 |
xmlquery = new StringReader(handleSQuery(params)); |
|
423 | 500 |
} |
424 |
resultset.append("</resultset>"); |
|
425 |
|
|
501 |
|
|
502 |
doclist = runQuery(xmlquery); |
|
503 |
|
|
426 | 504 |
String qformat = ((String[])params.get("qformat"))[0]; |
427 |
if (qformat.equals("xml")) { |
|
428 |
// set content type and other response header fields first |
|
429 |
response.setContentType("text/xml"); |
|
430 |
out.println(resultset.toString()); |
|
431 |
} else if (qformat.equals("html")) { |
|
432 |
// set content type and other response header fields first |
|
433 |
response.setContentType("text/html"); |
|
434 |
//out.println("Converting to HTML..."); |
|
435 |
XMLDocumentFragment htmldoc = null; |
|
436 |
try { |
|
437 |
XSLStylesheet style = new XSLStylesheet( |
|
438 |
new URL(resultStyleURL), null); |
|
439 |
htmldoc = (new XSLProcessor()).processXSL(style, |
|
440 |
(Reader)(new StringReader(resultset.toString())),null); |
|
441 |
htmldoc.print(out); |
|
442 |
} catch (Exception e) { |
|
443 |
out.println("Error transforming document:\n" + e.getMessage()); |
|
444 |
} |
|
445 |
} |
|
505 |
transformDocument(doclist, qformat, xmlquery.toString(), out, response); |
|
446 | 506 |
} |
447 | 507 |
|
448 | 508 |
/** |
... | ... | |
807 | 867 |
|
808 | 868 |
/** |
809 | 869 |
* '$Log$ |
870 |
* 'Revision 1.61 2000/08/10 18:56:48 bojilova |
|
871 |
* 'added "anonymous" user connection |
|
872 |
* ' |
|
810 | 873 |
* 'Revision 1.60 2000/08/09 00:39:47 jones |
811 | 874 |
* '-Reorganized xmltodb module to support new install process for the new |
812 | 875 |
* 'linux server (dev.nceas.ucsb.edu). Added "build.sh" shell script that |
Also available in: Unified diff
broke up handleQueryAction into handleQuery, handleSQuery, runQuery and transformDocument