3 |
3 |
* Purpose: A Class that implements a metadata catalog as a java Servlet
|
4 |
4 |
* Copyright: 2000 Regents of the University of California and the
|
5 |
5 |
* National Center for Ecological Analysis and Synthesis
|
6 |
|
* Authors: Matt Jones, Dan Higgins
|
|
6 |
* Authors: Matt Jones, Dan Higgins, Jivka Bojilova
|
7 |
7 |
*
|
8 |
8 |
* '$Author$'
|
9 |
9 |
* '$Date$'
|
... | ... | |
79 |
79 |
|
80 |
80 |
private ServletConfig config = null;
|
81 |
81 |
private ServletContext context = null;
|
82 |
|
private Connection conn = null;
|
83 |
|
private DBQuery queryobj = null;
|
84 |
|
private DBReader docreader = null;
|
85 |
|
private DBTransform dbt = null;
|
86 |
|
private DBUtil dbutil = null;
|
|
82 |
private Hashtable connectionPool = new Hashtable();
|
|
83 |
//private connection conn = null;
|
|
84 |
//private DBQuery queryobj = null;
|
|
85 |
//private DBReader docreader = null;
|
|
86 |
//private DBTransform dbt = null;
|
|
87 |
//private DBUtil dbutil = null;
|
87 |
88 |
private String resultStyleURL = null;
|
88 |
89 |
private String xmlcatalogfile = null;
|
89 |
90 |
private String saxparser = null;
|
90 |
|
private String defaultdatapath = null;
|
|
91 |
private String defaultdatapath = null;
|
91 |
92 |
// path to directory where data files
|
92 |
93 |
// that can be downloaded will be stored
|
93 |
|
private String executescript = null;
|
|
94 |
private String executescript = null;
|
94 |
95 |
// script to get data file and put it
|
95 |
|
// in defaultdocpath dir
|
|
96 |
// in defaultdocpath dir
|
96 |
97 |
private PropertyResourceBundle options = null;
|
97 |
98 |
|
98 |
99 |
private MetaCatUtil util = null;
|
... | ... | |
117 |
118 |
executescript = util.getOption("executescript");
|
118 |
119 |
|
119 |
120 |
try {
|
|
121 |
// Open a pool of db connections
|
|
122 |
connectionPool = util.getConnectionPool();
|
|
123 |
} catch (Exception e) {
|
|
124 |
System.err.println("Error creating pool of database connections");
|
|
125 |
System.err.println(e.getMessage());
|
|
126 |
}
|
|
127 |
/*
|
|
128 |
try {
|
120 |
129 |
// Open a connection to the database
|
121 |
130 |
conn = util.openDBConnection();
|
122 |
131 |
|
... | ... | |
126 |
135 |
dbutil = new DBUtil(conn);
|
127 |
136 |
|
128 |
137 |
} catch (Exception e) {
|
129 |
|
System.err.println("Error opening database connection");
|
|
138 |
System.err.println("Error creating pool of database connections");
|
|
139 |
System.err.println(e.getMessage());
|
130 |
140 |
}
|
|
141 |
*/
|
131 |
142 |
} catch ( ServletException ex ) {
|
132 |
143 |
throw ex;
|
133 |
144 |
}
|
... | ... | |
156 |
167 |
HttpServletResponse response)
|
157 |
168 |
throws ServletException, IOException {
|
158 |
169 |
|
|
170 |
if ( util == null ) {
|
|
171 |
util = new MetaCatUtil();
|
|
172 |
}
|
|
173 |
if ( connectionPool == null ) {
|
|
174 |
try {
|
|
175 |
// Open a pool of db connections
|
|
176 |
connectionPool = util.getConnectionPool();
|
|
177 |
} catch (Exception e) {
|
|
178 |
System.err.println("Error creating pool of database connections");
|
|
179 |
System.err.println(e.getMessage());
|
|
180 |
}
|
|
181 |
}
|
|
182 |
/*
|
159 |
183 |
if (conn == null) {
|
160 |
184 |
System.err.println("Connection to database lost. Reopening...");
|
161 |
185 |
try {
|
... | ... | |
171 |
195 |
System.err.println("Error opening database connection");
|
172 |
196 |
}
|
173 |
197 |
}
|
174 |
|
|
|
198 |
*/
|
175 |
199 |
// Get a handle to the output stream back to the client
|
176 |
200 |
PrintWriter out = response.getWriter();
|
177 |
201 |
//response.setContentType("text/html");
|
... | ... | |
346 |
370 |
String[] doctypeArr = null;
|
347 |
371 |
String doctype = null;
|
348 |
372 |
Reader xmlquery = null;
|
|
373 |
Connection conn = null;
|
349 |
374 |
|
350 |
375 |
// Run the query if it is a structured query
|
351 |
376 |
// or, if it is a free-text, simple query,
|
... | ... | |
368 |
393 |
System.err.println("Error handling query -- illegal action value");
|
369 |
394 |
}
|
370 |
395 |
|
|
396 |
try {
|
|
397 |
conn = util.getConnection();
|
|
398 |
DBQuery queryobj = new DBQuery(conn, saxparser);
|
|
399 |
doclist = queryobj.findDocuments(xmlquery);
|
|
400 |
} catch (Exception e) {
|
|
401 |
response.setContentType("text/html");
|
|
402 |
out.println(e.getMessage());
|
|
403 |
return;
|
|
404 |
} finally {
|
|
405 |
if ( conn != null ) { util.returnConnection(conn); }
|
|
406 |
}
|
|
407 |
/*
|
371 |
408 |
if (queryobj != null) {
|
372 |
409 |
doclist = queryobj.findDocuments(xmlquery);
|
373 |
410 |
} else {
|
374 |
411 |
out.println("Query Object Init failed.");
|
375 |
412 |
return;
|
376 |
413 |
}
|
377 |
|
|
|
414 |
*/
|
378 |
415 |
// Create a buffer to hold the xml result
|
379 |
416 |
StringBuffer resultset = new StringBuffer();
|
380 |
417 |
|
... | ... | |
427 |
464 |
String docidstr = null;
|
428 |
465 |
String docid = null;
|
429 |
466 |
String doc = null;
|
|
467 |
Connection conn = null;
|
|
468 |
|
430 |
469 |
try {
|
431 |
470 |
// Find the document id number
|
432 |
471 |
docidstr = ((String[])params.get("docid"))[0];
|
433 |
472 |
//docid = (new Long(docidstr)).longValue();
|
434 |
473 |
docid = docidstr;
|
435 |
474 |
|
|
475 |
conn = util.getConnection();
|
|
476 |
DBReader docreader = new DBReader(conn);
|
|
477 |
DBTransform dbt = new DBTransform(conn);
|
|
478 |
|
436 |
479 |
// Get the document indicated fromthe db
|
437 |
480 |
doc = docreader.readXMLDocument(docid);
|
438 |
|
} catch (NullPointerException npe) {
|
439 |
|
response.setContentType("text/html");
|
440 |
|
out.println("Error getting document ID: " + docidstr +" (" + docid + ")");
|
441 |
|
}
|
442 |
481 |
|
443 |
482 |
// Return the document in XML or HTML format
|
444 |
483 |
String qformat = ((String[])params.get("qformat"))[0];
|
... | ... | |
456 |
495 |
// Transform the document to the new doctype
|
457 |
496 |
dbt.transformXMLDocument(doc, sourcetype, "-//W3C//HTML//EN", out);
|
458 |
497 |
}
|
|
498 |
} catch (NullPointerException npe) {
|
|
499 |
response.setContentType("text/html");
|
|
500 |
out.println("Error getting document ID: " + docidstr +" (" + docid + ")");
|
|
501 |
} catch (Exception e) {
|
|
502 |
response.setContentType("text/html");
|
|
503 |
out.println(e.getMessage());
|
|
504 |
} finally {
|
|
505 |
if ( conn != null ) { util.returnConnection(conn); }
|
|
506 |
}
|
|
507 |
|
459 |
508 |
}
|
460 |
509 |
|
461 |
510 |
/**
|
... | ... | |
465 |
514 |
private void handleInsertOrUpdateAction(PrintWriter out, Hashtable params,
|
466 |
515 |
HttpServletResponse response) {
|
467 |
516 |
|
|
517 |
Connection conn = null;
|
|
518 |
|
468 |
519 |
try {
|
469 |
520 |
// Get the document indicated
|
470 |
521 |
String[] doctext = (String[])params.get("doctext");
|
... | ... | |
483 |
534 |
doAction = "UPDATE";
|
484 |
535 |
}
|
485 |
536 |
|
486 |
|
// write the document to the database
|
487 |
|
DBWriter dbw = new DBWriter(conn, saxparser);
|
488 |
|
|
489 |
537 |
try {
|
490 |
|
String accNumber = docid[0];
|
491 |
|
if (accNumber.equals("")) {
|
492 |
|
accNumber = null;
|
493 |
|
}
|
494 |
|
newdocid = dbw.write(xml, doAction, accNumber);
|
495 |
|
} catch (NullPointerException npe) {
|
496 |
|
newdocid = dbw.write(xml, doAction, null);
|
497 |
|
}
|
|
538 |
// get a connection from the pool
|
|
539 |
conn = util.getConnection();
|
|
540 |
// write the document to the database
|
|
541 |
DBWriter dbw = new DBWriter(conn, saxparser);
|
498 |
542 |
|
|
543 |
try {
|
|
544 |
String accNumber = docid[0];
|
|
545 |
if (accNumber.equals("")) {
|
|
546 |
accNumber = null;
|
|
547 |
}
|
|
548 |
newdocid = dbw.write(xml, doAction, accNumber);
|
|
549 |
} catch (NullPointerException npe) {
|
|
550 |
newdocid = dbw.write(xml, doAction, null);
|
|
551 |
}
|
|
552 |
} catch (Exception e) {
|
|
553 |
response.setContentType("text/html");
|
|
554 |
out.println(e.getMessage());
|
|
555 |
} finally {
|
|
556 |
if ( conn != null ) { util.returnConnection(conn); }
|
|
557 |
}
|
|
558 |
|
499 |
559 |
// set content type and other response header fields first
|
500 |
560 |
response.setContentType("text/xml");
|
501 |
561 |
out.println("<?xml version=\"1.0\"?>");
|
... | ... | |
534 |
594 |
HttpServletResponse response) {
|
535 |
595 |
|
536 |
596 |
String[] docid = (String[])params.get("docid");
|
|
597 |
Connection conn = null;
|
537 |
598 |
|
538 |
599 |
// delete the document from the database
|
539 |
600 |
try {
|
|
601 |
// get a connection from the pool
|
|
602 |
conn = util.getConnection();
|
540 |
603 |
DBWriter dbw = new DBWriter(conn, saxparser);
|
541 |
604 |
// NOTE -- NEED TO TEST HERE
|
542 |
605 |
// FOR EXISTENCE OF PARAM
|
... | ... | |
562 |
625 |
out.println("<error>");
|
563 |
626 |
out.println(e.getMessage());
|
564 |
627 |
out.println("</error>");
|
565 |
|
}
|
|
628 |
} finally {
|
|
629 |
if ( conn != null ) { util.returnConnection(conn); }
|
|
630 |
}
|
566 |
631 |
}
|
567 |
632 |
|
568 |
633 |
/**
|
... | ... | |
573 |
638 |
|
574 |
639 |
// Get the document indicated
|
575 |
640 |
String valtext = null;
|
|
641 |
|
576 |
642 |
try {
|
577 |
643 |
valtext = ((String[])params.get("valtext"))[0];
|
578 |
644 |
} catch (Exception nullpe) {
|
579 |
645 |
|
|
646 |
Connection conn = null;
|
580 |
647 |
String docid = null;
|
581 |
648 |
try {
|
582 |
649 |
// Find the document id number
|
583 |
650 |
docid = ((String[])params.get("docid"))[0];
|
584 |
|
|
585 |
|
// Get the document indicated fromthe db
|
|
651 |
|
|
652 |
// get a connection from the pool
|
|
653 |
conn = util.getConnection();
|
|
654 |
DBReader docreader = new DBReader(conn);
|
|
655 |
// Get the document indicated from the db
|
586 |
656 |
valtext = docreader.readXMLDocument(docid);
|
587 |
657 |
|
588 |
658 |
} catch (NullPointerException npe) {
|
589 |
659 |
response.setContentType("text/xml");
|
590 |
660 |
out.println("<error>Error getting document ID: " + docid + "</error>");
|
591 |
|
}
|
|
661 |
return; // Jivka added
|
|
662 |
} catch (Exception e) {
|
|
663 |
response.setContentType("text/html");
|
|
664 |
out.println(e.getMessage());
|
|
665 |
} finally {
|
|
666 |
if ( conn != null ) { util.returnConnection(conn); }
|
|
667 |
}
|
592 |
668 |
}
|
593 |
669 |
|
|
670 |
Connection conn = null;
|
594 |
671 |
try {
|
|
672 |
// get a connection from the pool
|
|
673 |
conn = util.getConnection();
|
595 |
674 |
DBValidate valobj = new DBValidate(saxparser,conn);
|
596 |
675 |
boolean valid = valobj.validateString(valtext);
|
597 |
676 |
|
... | ... | |
603 |
682 |
// set content type and other response header fields first
|
604 |
683 |
response.setContentType("text/xml");
|
605 |
684 |
out.println("<error>Error validating document.</error>");
|
606 |
|
}
|
|
685 |
} catch (Exception e) {
|
|
686 |
response.setContentType("text/html");
|
|
687 |
out.println(e.getMessage());
|
|
688 |
} finally {
|
|
689 |
if ( conn != null ) { util.returnConnection(conn); }
|
|
690 |
}
|
607 |
691 |
}
|
608 |
692 |
|
609 |
693 |
/**
|
... | ... | |
669 |
753 |
private void handleGetDoctypesAction(PrintWriter out, Hashtable params,
|
670 |
754 |
HttpServletResponse response) {
|
671 |
755 |
|
|
756 |
Connection conn = null;
|
|
757 |
|
672 |
758 |
try {
|
673 |
759 |
|
|
760 |
// get connection from the pool
|
|
761 |
conn = util.getConnection();
|
|
762 |
DBUtil dbutil = new DBUtil(conn);
|
674 |
763 |
String doctypes = dbutil.readDoctypes();
|
675 |
764 |
out.println(doctypes);
|
676 |
765 |
|
... | ... | |
679 |
768 |
out.println("<error>");
|
680 |
769 |
out.println(e.getMessage());
|
681 |
770 |
out.println("</error>");
|
682 |
|
}
|
|
771 |
} finally {
|
|
772 |
if ( conn != null ) { util.returnConnection(conn); }
|
|
773 |
}
|
683 |
774 |
|
684 |
775 |
}
|
685 |
776 |
|
... | ... | |
691 |
782 |
private void handleGetDataGuideAction(PrintWriter out, Hashtable params,
|
692 |
783 |
HttpServletResponse response) {
|
693 |
784 |
|
|
785 |
Connection conn = null;
|
|
786 |
|
694 |
787 |
try {
|
695 |
788 |
|
|
789 |
// get connection from the pool
|
|
790 |
conn = util.getConnection();
|
|
791 |
DBUtil dbutil = new DBUtil(conn);
|
696 |
792 |
String dataguide = dbutil.readDataGuide("");
|
697 |
793 |
out.println(dataguide);
|
698 |
794 |
|
... | ... | |
701 |
797 |
out.println("<error>");
|
702 |
798 |
out.println(e.getMessage());
|
703 |
799 |
out.println("</error>");
|
704 |
|
}
|
|
800 |
} finally {
|
|
801 |
if ( conn != null ) { util.returnConnection(conn); }
|
|
802 |
}
|
705 |
803 |
|
706 |
804 |
}
|
707 |
805 |
|
... | ... | |
709 |
807 |
|
710 |
808 |
/**
|
711 |
809 |
* '$Log$
|
|
810 |
* 'Revision 1.54 2000/07/27 23:12:21 bojilova
|
|
811 |
* 'Added "getdoctypes" and "getdataguide" action handlers
|
|
812 |
* '
|
712 |
813 |
* 'Revision 1.53 2000/07/26 20:48:29 bojilova
|
713 |
814 |
* 'Added "Login Client" action for login from the Desktop Client
|
714 |
815 |
* '
|
added Pool of Connections
DBQuery, DBReader, DBTransform, DBUtil are created on every request and use the connections from the Pool
same with DBWriter and DBValidate