annotate servlet/src/digilib/io/XMLMetaLoader.java @ 531:9cedd170b581 digilibPDF

* PDF generation works now even with subdirectories * genericsification and clean up
author robcast
date Fri, 05 Feb 2010 20:58:38 +0100
parents
children e758a49258e8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
531
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
1 /* XMLMetaLoader -- Load an XML format metadata into a Hashtable
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
2
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
3 Digital Image Library servlet components
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
4
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
5 Copyright (C) 2003 Robert Casties (robcast@mail.berlios.de)
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
6
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
7 This program is free software; you can redistribute it and/or modify it
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
9 Free Software Foundation; either version 2 of the License, or (at your
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
10 option) any later version.
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
11
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
12 Please read license.txt for the full details. A copy of the GPL
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
13 may be found at http://www.gnu.org/copyleft/lgpl.html
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
14
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
15 You should have received a copy of the GNU General Public License
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
16 along with this program; if not, write to the Free Software
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
18
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
19 */
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
20
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
21 package digilib.io;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
22
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
23 import java.io.IOException;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
24 import java.util.HashMap;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
25 import java.util.LinkedList;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
26 import java.util.Map;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
27
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
28 import javax.xml.parsers.ParserConfigurationException;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
29 import javax.xml.parsers.SAXParser;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
30 import javax.xml.parsers.SAXParserFactory;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
31
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
32 import org.apache.log4j.Logger;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
33 import org.xml.sax.Attributes;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
34 import org.xml.sax.SAXException;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
35 import org.xml.sax.helpers.DefaultHandler;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
36
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
37 public class XMLMetaLoader {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
38
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
39 private Logger logger = Logger.getLogger(this.getClass());
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
40 private String metaTag = "meta";
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
41 private String fileTag = "file";
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
42 private String fileNameTag = "name";
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
43 private String filePathTag = "path";
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
44 private String imgTag = "img";
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
45 private String collectTag = "context";
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
46
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
47 public XMLMetaLoader() {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
48 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
49
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
50 /**
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
51 * inner class XMLMetaParser to be called by the parser
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
52 */
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
53 private class XMLMetaParser extends DefaultHandler {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
54
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
55 private LinkedList<String> tags;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
56 private Map<String, MetadataMap> files;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
57 private MetadataMap meta;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
58 private StringBuffer content;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
59 private boolean collecting;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
60 private StringBuffer collectedContent;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
61 private String fileName;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
62 private String filePath;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
63
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
64 /**
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
65 * extracts the elements name from either localName ln or qName qn.
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
66 *
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
67 * @param ln localName
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
68 * @param qn qName
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
69 * @return element name
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
70 */
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
71 private String getName(String ln, String qn) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
72 if (ln != null) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
73 if (ln.length() > 0) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
74 return ln;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
75 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
76 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
77 // else it's qName (or nothing)
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
78 return qn;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
79 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
80
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
81 /**
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
82 * returns all attributes as a String
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
83 *
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
84 * @param attrs
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
85 * @return
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
86 */
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
87 private String getAttrString(Attributes attrs) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
88 StringBuffer s = new StringBuffer();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
89 for (int i = 0; i < attrs.getLength(); i++) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
90 String key = getName(attrs.getLocalName(i), attrs.getQName(i));
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
91 s.append(" "+key+"=\""+attrs.getValue(i)+"\"");
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
92 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
93 return s.toString();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
94 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
95
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
96
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
97 // Parser calls this once at the beginning of a document
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
98 public void startDocument() throws SAXException {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
99 tags = new LinkedList<String>();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
100 files = new HashMap<String, MetadataMap>();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
101 collecting = false;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
102 collectedContent = null;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
103 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
104
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
105 // Parser calls this for each element in a document
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
106 public void startElement(
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
107 String namespaceURI,
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
108 String localName,
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
109 String qName,
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
110 Attributes atts)
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
111 throws SAXException {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
112
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
113 String name = getName(localName, qName);
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
114 // open a new tag
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
115 tags.addLast(name);
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
116 // start new content (no nesting of tags and content)
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
117 content = new StringBuffer();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
118
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
119 if (name.equals(metaTag)) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
120 // new meta tag
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
121 meta = new MetadataMap();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
122 collectedContent = new StringBuffer();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
123 } else if (name.equals(fileTag)) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
124 // new file tag
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
125 fileName = null;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
126 filePath = null;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
127 meta = new MetadataMap();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
128 collectedContent = new StringBuffer();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
129 } else if (name.equals(collectTag)) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
130 // start collecting
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
131 collecting = true;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
132 if (collectedContent == null) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
133 collectedContent = new StringBuffer();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
134 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
135 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
136
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
137 // record mode
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
138 if (collecting) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
139 collectedContent.append("<"+name);
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
140 collectedContent.append(getAttrString(atts));
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
141 collectedContent.append(">");
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
142 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
143 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
144
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
145 // parser calls this for all tag content (possibly more than once)
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
146 public void characters(char[] ch, int start, int length)
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
147 throws SAXException {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
148 // append data to current string buffer
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
149 if (content == null) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
150 content = new StringBuffer();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
151 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
152 content.append(ch, start, length);
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
153 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
154
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
155 // parser calls this at the end of each element
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
156 public void endElement(
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
157 String namespaceURI,
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
158 String localName,
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
159 String qName)
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
160 throws SAXException {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
161
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
162 String name = getName(localName, qName);
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
163 // exit the tag
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
164 tags.removeLast();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
165 String lastTag = (tags.isEmpty()) ? "" : tags.getLast();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
166
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
167 // was it a file/name tag?
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
168 if (name.equals(fileNameTag) && lastTag.equals(fileTag)) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
169 // save name as filename
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
170 if ((content != null) && (content.length() > 0)) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
171 fileName = content.toString().trim();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
172 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
173 content = null;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
174 return;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
175 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
176
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
177 // was it a file/path tag?
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
178 if (name.equals(filePathTag) && lastTag.equals(fileTag)) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
179 // save path as filepath
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
180 if ((content != null) && (content.length() > 0)) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
181 filePath = content.toString().trim();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
182 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
183 content = null;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
184 return;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
185 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
186
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
187 // was it a file tag?
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
188 if (name.equals(fileTag)) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
189 // is there meta to save?
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
190 if ((meta != null) && (meta.size() > 0)) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
191 // file name is (optional file/path) / file/name
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
192 String fn = null;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
193
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
194 if (fileName != null) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
195 if (filePath != null) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
196 fn = filePath + "/" + fileName;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
197 } else {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
198 fn = fileName;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
199 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
200 } else {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
201 // no file name, no file
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
202 content = null;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
203 return;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
204 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
205 // save meta in file list
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
206 files.put(fn, meta);
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
207 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
208 content = null;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
209 return;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
210 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
211
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
212 // was it a meta tag outside a file tag?
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
213 if (name.equals(metaTag) && !tags.contains(fileTag)) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
214 // save meta as dir meta
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
215 if ((meta != null) && (meta.size() > 0)) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
216 files.put("", meta);
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
217 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
218 content = null;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
219 return;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
220 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
221
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
222 // is this inside an digilib info (=img) tag?
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
223 if (lastTag.equals(imgTag)) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
224 // then add whatever this is
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
225 if ((content != null) && (content.length() > 0)) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
226 meta.put(name, content.toString().trim());
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
227 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
228 content = null;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
229 return;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
230 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
231
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
232 // is this the end of collectTag?
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
233 if (name.equals(collectTag)) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
234 collecting = false;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
235 collectedContent.append("</"+collectTag+">\n");
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
236 // store collected stuff
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
237 meta.put(collectTag, collectedContent.toString());
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
238 //logger.debug("collected: '"+collectedContent+"'");
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
239 content = null;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
240 return;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
241 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
242
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
243 // write collected content
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
244 if (collecting) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
245 String s = "";
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
246 if ((content != null) && (content.length() > 0)) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
247 s = content.toString().trim();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
248 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
249 //logger.debug("collect:"+name+" = "+s);
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
250 collectedContent.append(s);
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
251 collectedContent.append("</"+name+">\n");
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
252 content = null;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
253 return;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
254 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
255 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
256
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
257 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
258
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
259 /**
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
260 * load and parse a file (as URL)
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
261 * returns HashMap with list data
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
262 */
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
263 public Map<String, MetadataMap> loadURL(String path) throws SAXException, IOException {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
264 logger.debug("loading meta: "+path);
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
265 // Create a JAXP SAXParserFactory and configure it
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
266 SAXParserFactory spf = SAXParserFactory.newInstance();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
267 spf.setNamespaceAware(true);
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
268
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
269 SAXParser parser = null;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
270 try {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
271 // Create a JAXP SAXParser
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
272 parser = spf.newSAXParser();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
273
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
274 } catch (ParserConfigurationException e) {
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
275 throw new SAXException(e);
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
276 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
277
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
278 // create a list parser (keeps the data!)
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
279 XMLMetaParser listParser = new XMLMetaParser();
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
280
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
281 // Tell the SAXParser to parse the XML document
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
282 parser.parse(path, listParser);
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
283
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
284 return listParser.files;
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
285 }
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
286
9cedd170b581 * PDF generation works now even with subdirectories
robcast
parents:
diff changeset
287 }