annotate servlet/src/digilib/io/XMLListLoader.java @ 59:8d9a0abf3626

Utils now has a setter for debugLevel. DocumentBean now properly sets the debug level. New class DigilibRequest as an object to represent a request. Mostly for use in JSP as a local object. (ROC)
author robcast
date Wed, 28 Aug 2002 20:00:21 +0200
parents 2ea78a56ecf8
children 398d39ee1014
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
1 /* XMLListLoader -- Load an XML list into a Hashtable
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
2
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
3 Digital Image Library servlet components
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
4
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
5 Copyright (C) 2001, 2002 Robert Casties (robcast@mail.berlios.de)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
6
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
7 This program is free software; you can redistribute it and/or modify it
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
9 Free Software Foundation; either version 2 of the License, or (at your
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
10 option) any later version.
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
11
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
12 Please read license.txt for the full details. A copy of the GPL
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
13 may be found at http://www.gnu.org/copyleft/lgpl.html
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
14
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
15 You should have received a copy of the GNU General Public License
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
16 along with this program; if not, write to the Free Software
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
18
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
19 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
20
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
21 package digilib.io;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
22
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
23 // JAXP packages
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
24 import javax.xml.parsers.*;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
25 import org.xml.sax.*;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
26 import org.xml.sax.helpers.*;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
27
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
28 import java.util.*;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
29 import java.io.*;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
30
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
31 public class XMLListLoader {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
32
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
33 private String listTag = "list";
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
34 private String entryTag = "entry";
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
35 private String keyAtt = "key";
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
36 private String valueAtt = "value";
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
37
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
38 public XMLListLoader() {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
39 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
40
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
41 public XMLListLoader(String list_tag, String entry_tag, String key_att, String value_att) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
42 //System.out.println("xmlListLoader("+list_tag+","+entry_tag+","+key_att+","+value_att+")");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
43 listTag = list_tag;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
44 entryTag = entry_tag;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
45 keyAtt = key_att;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
46 valueAtt = value_att;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
47 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
48
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
49 /**
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
50 * inner class XMLListParser to be called by the parser
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
51 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
52 private class XMLListParser extends DefaultHandler {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
53
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
54 private Hashtable listData;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
55 private Stack nameSpace;
56
2ea78a56ecf8 Use system specific pathSeparator for documents paths (; on Win).
robcast
parents: 1
diff changeset
56
1
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
57 public Hashtable getData() {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
58 return listData;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
59 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
60
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
61 // Parser calls this once at the beginning of a document
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
62 public void startDocument() throws SAXException {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
63 listData = new Hashtable();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
64 nameSpace = new Stack();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
65 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
66
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
67 // Parser calls this for each element in a document
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
68 public void startElement(String namespaceURI, String localName,
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
69 String qName, Attributes atts)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
70 throws SAXException
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
71 {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
72 //System.out.println("<"+qName);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
73 // open a new namespace
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
74 nameSpace.push(qName);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
75
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
76 // ist it an entry tag?
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
77 if (qName.equals(entryTag)) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
78 // is it inside a list tag?
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
79 if ((listTag.length() > 0)&&(nameSpace.search(listTag) < 0)) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
80 System.out.println("BOO: Entry "+entryTag+" not inside list "+listTag);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
81 throw new SAXParseException("Entry "+entryTag+" not inside list "+listTag, null);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
82 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
83 // get the attributes
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
84 String key = atts.getValue(keyAtt);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
85 String val = atts.getValue(valueAtt);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
86 if ((key == null)||(val == null)) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
87 System.out.println("BOO: Entry "+entryTag+" does not have Attributes "+keyAtt+", "+valueAtt);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
88 throw new SAXParseException("Entry "+entryTag+" does not have Attributes "+keyAtt+", "+valueAtt, null);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
89 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
90 // add the values
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
91 //System.out.println("DATA: "+key+" = "+val);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
92 listData.put(key, val);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
93 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
94 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
95
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
96 public void endElement(String namespaceURI, String localName,
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
97 String qName)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
98 throws SAXException
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
99 {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
100 // exit the namespace
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
101 nameSpace.pop();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
102 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
103
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
104 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
105
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
106
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
107 /**
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
108 * load and parse a file (as URL)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
109 * returns Hashtable with list data
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
110 */
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
111 public Hashtable loadURL(String path) throws SAXException, IOException {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
112 //System.out.println("loadurl ("+path+")");
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
113 // Create a JAXP SAXParserFactory and configure it
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
114 SAXParserFactory spf = SAXParserFactory.newInstance();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
115 //spf.setNamespaceAware(true);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
116
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
117 XMLReader xmlReader = null;
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
118 try {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
119 // Create a JAXP SAXParser
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
120 SAXParser saxParser = spf.newSAXParser();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
121
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
122 // Get the encapsulated SAX XMLReader
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
123 xmlReader = saxParser.getXMLReader();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
124 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
125 catch (ParserConfigurationException e) {
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
126 throw new SAXException(e);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
127 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
128
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
129 // create a list parser (keeps the data!)
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
130 XMLListParser listParser = new XMLListParser();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
131
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
132 // Set the ContentHandler of the XMLReader
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
133 xmlReader.setContentHandler(listParser);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
134
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
135 // Tell the XMLReader to parse the XML document
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
136 xmlReader.parse(path);
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
137
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
138 return listParser.getData();
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
139 }
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
140
0ff3ede32060 Initial revision
robcast
parents:
diff changeset
141 }