Mercurial > hg > digilib
changeset 1173:4eb69ffb8a78
working on new IndexMetaAuthLoader.
author | robcast |
---|---|
date | Tue, 02 Apr 2013 17:38:05 +0200 |
parents | d4affe13568c |
children | 4a0dd02a61b8 |
files | common/src/main/java/digilib/io/DocuDirectory.java common/src/main/java/digilib/io/DocuDirentImpl.java common/src/main/java/digilib/io/ImageFileSet.java common/src/main/java/digilib/meta/IndexMetaAuthLoader.java |
diffstat | 4 files changed, 147 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/common/src/main/java/digilib/io/DocuDirectory.java Tue Apr 02 10:34:15 2013 +0200 +++ b/common/src/main/java/digilib/io/DocuDirectory.java Tue Apr 02 17:38:05 2013 +0200 @@ -37,8 +37,9 @@ import org.xml.sax.SAXException; import digilib.io.FileOps.FileClass; +import digilib.meta.IndexMetaAuthLoader; +import digilib.meta.IndexMetaLoader; import digilib.meta.MetadataMap; -import digilib.meta.IndexMetaLoader; /** * @author casties @@ -266,7 +267,7 @@ // check for directory metadata... File mf = new File(dir, "index.meta"); if (mf.canRead()) { - IndexMetaLoader ml = new IndexMetaLoader(); + IndexMetaAuthLoader ml = new IndexMetaAuthLoader(); try { // read directory meta file Map<String, MetadataMap> fileMeta = ml.loadUri(mf.toURI()); @@ -281,8 +282,6 @@ if (fileMeta.size() > 0) { unresolvedFileMeta = fileMeta; } - } catch (SAXException e) { - logger.warn("error parsing index.meta", e); } catch (IOException e) { logger.warn("error reading index.meta", e); }
--- a/common/src/main/java/digilib/io/DocuDirentImpl.java Tue Apr 02 10:34:15 2013 +0200 +++ b/common/src/main/java/digilib/io/DocuDirentImpl.java Tue Apr 02 17:38:05 2013 +0200 @@ -31,6 +31,7 @@ import org.apache.log4j.Logger; import digilib.io.FileOps.FileClass; +import digilib.meta.IndexMetaAuthLoader; import digilib.meta.MetadataMap; import digilib.meta.IndexMetaLoader; @@ -73,7 +74,7 @@ String fn = getFile().getAbsolutePath(); File mf = new File(fn + ".meta"); if (mf.canRead()) { - IndexMetaLoader ml = new IndexMetaLoader(); + IndexMetaAuthLoader ml = new IndexMetaAuthLoader(); try { // read meta file Map<String, MetadataMap> meta = ml.loadUri(mf.toURI());
--- a/common/src/main/java/digilib/io/ImageFileSet.java Tue Apr 02 10:34:15 2013 +0200 +++ b/common/src/main/java/digilib/io/ImageFileSet.java Tue Apr 02 17:38:05 2013 +0200 @@ -31,6 +31,7 @@ import org.apache.log4j.Logger; import digilib.io.FileOps.FileClass; +import digilib.meta.IndexMetaAuthLoader; import digilib.meta.MetadataMap; import digilib.meta.IndexMetaLoader; @@ -309,7 +310,7 @@ String fn = file.getAbsolutePath(); File mf = new File(fn + ".meta"); if (mf.canRead()) { - IndexMetaLoader ml = new IndexMetaLoader(); + IndexMetaAuthLoader ml = new IndexMetaAuthLoader(); try { // read meta file Map<String, MetadataMap> meta = ml.loadUri(mf.toURI());
--- a/common/src/main/java/digilib/meta/IndexMetaAuthLoader.java Tue Apr 02 10:34:15 2013 +0200 +++ b/common/src/main/java/digilib/meta/IndexMetaAuthLoader.java Tue Apr 02 17:38:05 2013 +0200 @@ -57,34 +57,54 @@ public class IndexMetaAuthLoader { private Logger logger = Logger.getLogger(this.getClass()); - + protected String metaTag = "meta"; protected String fileTag = "file"; protected String fileNameTag = "name"; protected String filePathTag = "path"; protected String imgTag = "img"; + protected String accessTag = "access"; + protected String accessConditionsTag = "access-conditions"; private XMLStreamReader reader; private LinkedList<String> tags; private String filename; private String filepath; + protected boolean matchesPath(LinkedList<String> tags, String[] path) { + try { + for (int i = path.length - 1; i >= 0; --i) { + if (!path[i].equals(tags.get(i))) { + return false; + } + } + return true; + } catch (IndexOutOfBoundsException e) { + // nothing to do + } + return false; + } + protected boolean readToMetaTag() throws XMLStreamException { String thisTag = null; String lastTag = null; - StringBuffer text = null; + StringBuffer text = new StringBuffer(); for (int event = reader.next(); event != XMLStreamConstants.END_DOCUMENT; event = reader.next()) { if (event == XMLStreamConstants.START_ELEMENT) { + // save last tag lastTag = thisTag; + // init text content text = new StringBuffer(); - // TODO: make namespace aware + // get tag TODO: make namespace aware thisTag = reader.getLocalName(); + // save on stack + tags.push(thisTag); if (thisTag.equals(metaTag)) { return true; } - // save on stack - tags.push(thisTag); } else if (event == XMLStreamConstants.END_ELEMENT) { + // get tag TODO: make namespace aware + thisTag = reader.getLocalName(); tags.pop(); if (thisTag.equals(fileNameTag) && lastTag != null && lastTag.equals(fileTag)) { // name inside file tag -> record name @@ -92,7 +112,7 @@ } else if (thisTag.equals(filePathTag) && lastTag != null && lastTag.equals(fileTag)) { // path inside file tag -> record path filepath = text.toString(); - } + } } else if (event == XMLStreamConstants.CHARACTERS) { text.append(reader.getText()); } @@ -100,6 +120,108 @@ return false; } + protected MetadataMap readTagToMap(MetadataMap map) throws XMLStreamException { + String thisTag = null; + String outerTag = tags.peek(); + StringBuffer text = new StringBuffer(); + for (int event = reader.next(); event != XMLStreamConstants.END_DOCUMENT; event = reader.next()) { + if (event == XMLStreamConstants.START_ELEMENT) { + // init text content + text = new StringBuffer(); + // get tag TODO: make namespace aware + thisTag = reader.getLocalName(); + // save on stack + tags.push(thisTag); + } else if (event == XMLStreamConstants.CHARACTERS) { + text.append(reader.getText()); + } else if (event == XMLStreamConstants.END_ELEMENT) { + // get tag TODO: make namespace aware + thisTag = reader.getLocalName(); + tags.pop(); + if (thisTag.equals(outerTag)) { + // close outer tag + return map; + } + // put text in map under tag name + map.put(thisTag, text.toString()); + } + } + return map; + } + + protected MetadataMap readAccessConditionsToMap(MetadataMap map) throws XMLStreamException { + String thisTag = null; + String outerTag = tags.peek(); + StringBuffer text = new StringBuffer(); + String accType = null; + String accName = null; + for (int event = reader.next(); event != XMLStreamConstants.END_DOCUMENT; event = reader.next()) { + if (event == XMLStreamConstants.START_ELEMENT) { + // init text content + text = new StringBuffer(); + // get tag TODO: make namespace aware + thisTag = reader.getLocalName(); + // save on stack + tags.push(thisTag); + // save type attribute of access tag + if (thisTag.equals(accessTag)) { + accType = reader.getAttributeValue(null, "type"); + } + } else if (event == XMLStreamConstants.CHARACTERS) { + text.append(reader.getText()); + } else if (event == XMLStreamConstants.END_ELEMENT) { + // get tag TODO: make namespace aware + thisTag = reader.getLocalName(); + tags.pop(); + if (thisTag.equals(outerTag)) { + // close outer tag + return map; + } else if (thisTag.equals("name") && tags.size() > 0 && tags.peek().equals(accessTag)) { + // access/name + accName = text.toString(); + } else if (thisTag.equals(accessTag)) { + // end of access tag + if (accType == null) { + // no access type + return map; + } + + } + + // put text in map under tag name + map.put(thisTag, text.toString()); + } + } + return map; + } + + protected MetadataMap readMetaTag(MetadataMap map) throws XMLStreamException { + String thisTag = null; + for (int event = reader.next(); event != XMLStreamConstants.END_DOCUMENT; event = reader.next()) { + if (event == XMLStreamConstants.START_ELEMENT) { + // get tag TODO: make namespace aware + thisTag = reader.getLocalName(); + // save on stack + tags.push(thisTag); + if (thisTag.equals(imgTag)) { + map = readTagToMap(map); + } + if (thisTag.equals(this.accessConditionsTag)) { + map = readAccessConditionsToMap(map); + } + } else if (event == XMLStreamConstants.END_ELEMENT) { + // get tag TODO: make namespace aware + thisTag = reader.getLocalName(); + tags.pop(); + if (thisTag.equals(metaTag)) { + // close meta tag + return map; + } + } + } + return map; + } + /** * Load and parse a file (as URI). * returns HashMap with list data @@ -115,9 +237,19 @@ // start reading tags = new LinkedList<String>(); if (readToMetaTag()) { - + String fn = ""; + if (filename != null) { + if (filepath != null) { + fn = filepath + "/" + filename; + } else { + fn = filename; + } + } + MetadataMap meta = new MetadataMap(); + meta = readMetaTag(meta); + // save meta in file list + files.put(fn, meta); } - } catch (MalformedURLException e) { logger.error("Malformed URL!"); throw new IOException(e);