fedora.server.storage.translation
Class METSLikeDODeserializer

java.lang.Object
  extended by org.xml.sax.helpers.DefaultHandler
      extended by fedora.server.storage.translation.METSLikeDODeserializer
All Implemented Interfaces:
DODeserializer, org.xml.sax.ContentHandler, org.xml.sax.DTDHandler, org.xml.sax.EntityResolver, org.xml.sax.ErrorHandler

public class METSLikeDODeserializer
extends org.xml.sax.helpers.DefaultHandler
implements DODeserializer

Deserializes XML digital object encoded in accordance with the Fedora extension of the METS schema defined at: http://www.fedora.info/definitions/1/0/mets-fedora-ext.xsd. The METS XML is parsed using SAX and is instantiated into a Fedora digital object in memory (see fedora.server.types.DigitalObject).

Version:
$Id: METSLikeDODeserializer.java 7438 2008-07-08 06:41:33Z pangloss $
Author:
cwilper@cs.cornell.edu, payette@cs.cornell.edu

Field Summary
static int QUERY_ALWAYS
          For non-inline datastreams, always query the server to get values for Content-length and Content-type.
static int QUERY_IF_UNDEFINED
          For non-inline datastreams, conditionally query the server to get values for Content-length and Content-type (if either are undefined).
static int QUERY_NEVER
          For non-inline datastreams, never query the server to get values for Content-length and Content-type
static java.lang.String RDF_NS
           
static java.lang.String RDF_PREFIX
          Namespace declarations for RDF
static java.lang.String RDFS_NS
           
static java.lang.String RDFS_PREFIX
           
static java.lang.String RELS_NS
           
static java.lang.String RELS_PREFIX
           
 
Constructor Summary
METSLikeDODeserializer()
           
METSLikeDODeserializer(java.lang.String characterEncoding)
          Initializes by setting up a parser that doesn't validate and never queries the server for values of DSSize and DSMIME.
METSLikeDODeserializer(java.lang.String characterEncoding, boolean validate, int queryBehavior)
          Initializes by setting up a parser that validates only if validate=true.
 
Method Summary
 void characters(char[] ch, int start, int length)
           
 void deserialize(java.io.InputStream in, DigitalObject obj, java.lang.String encoding, int transContext)
           
 void endElement(java.lang.String uri, java.lang.String localName, java.lang.String qName)
           
 void endPrefixMapping(java.lang.String prefix)
           
 DODeserializer getInstance()
           
 void startElement(java.lang.String uri, java.lang.String localName, java.lang.String qName, org.xml.sax.Attributes a)
           
 void startPrefixMapping(java.lang.String prefix, java.lang.String uri)
           
 
Methods inherited from class org.xml.sax.helpers.DefaultHandler
endDocument, error, fatalError, ignorableWhitespace, notationDecl, processingInstruction, resolveEntity, setDocumentLocator, skippedEntity, startDocument, unparsedEntityDecl, warning
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

RDF_PREFIX

public static final java.lang.String RDF_PREFIX
Namespace declarations for RDF

See Also:
Constant Field Values

RDF_NS

public static final java.lang.String RDF_NS
See Also:
Constant Field Values

RDFS_PREFIX

public static final java.lang.String RDFS_PREFIX
See Also:
Constant Field Values

RDFS_NS

public static final java.lang.String RDFS_NS
See Also:
Constant Field Values

RELS_PREFIX

public static final java.lang.String RELS_PREFIX
See Also:
Constant Field Values

RELS_NS

public static final java.lang.String RELS_NS
See Also:
Constant Field Values

QUERY_NEVER

public static int QUERY_NEVER
For non-inline datastreams, never query the server to get values for Content-length and Content-type


QUERY_IF_UNDEFINED

public static int QUERY_IF_UNDEFINED
For non-inline datastreams, conditionally query the server to get values for Content-length and Content-type (if either are undefined).


QUERY_ALWAYS

public static int QUERY_ALWAYS
For non-inline datastreams, always query the server to get values for Content-length and Content-type.

Constructor Detail

METSLikeDODeserializer

public METSLikeDODeserializer()
                       throws javax.xml.parsers.FactoryConfigurationError,
                              javax.xml.parsers.ParserConfigurationException,
                              org.xml.sax.SAXException,
                              java.io.UnsupportedEncodingException
Throws:
javax.xml.parsers.FactoryConfigurationError
javax.xml.parsers.ParserConfigurationException
org.xml.sax.SAXException
java.io.UnsupportedEncodingException

METSLikeDODeserializer

public METSLikeDODeserializer(java.lang.String characterEncoding)
                       throws javax.xml.parsers.FactoryConfigurationError,
                              javax.xml.parsers.ParserConfigurationException,
                              org.xml.sax.SAXException,
                              java.io.UnsupportedEncodingException
Initializes by setting up a parser that doesn't validate and never queries the server for values of DSSize and DSMIME.

Throws:
javax.xml.parsers.FactoryConfigurationError
javax.xml.parsers.ParserConfigurationException
org.xml.sax.SAXException
java.io.UnsupportedEncodingException

METSLikeDODeserializer

public METSLikeDODeserializer(java.lang.String characterEncoding,
                              boolean validate,
                              int queryBehavior)
                       throws javax.xml.parsers.FactoryConfigurationError,
                              javax.xml.parsers.ParserConfigurationException,
                              org.xml.sax.SAXException,
                              java.io.UnsupportedEncodingException
Initializes by setting up a parser that validates only if validate=true.

The character encoding of the XML is auto-determined by SAX, but we need it for when we set the byte[] in DatastreamXMLMetadata, so we effectively, we need to also specify the encoding of the datastreams. this could be different than how the digital object xml was encoded, and this class won't care. However, the caller should keep track of the byte[] encoding if it plans on doing any translation of that to characters (such as in xml serialization)

Throws:
javax.xml.parsers.FactoryConfigurationError
javax.xml.parsers.ParserConfigurationException
org.xml.sax.SAXException
java.io.UnsupportedEncodingException
Method Detail

getInstance

public DODeserializer getInstance()
                           throws RepositoryConfigurationException
Specified by:
getInstance in interface DODeserializer
Throws:
RepositoryConfigurationException

deserialize

public void deserialize(java.io.InputStream in,
                        DigitalObject obj,
                        java.lang.String encoding,
                        int transContext)
                 throws ObjectIntegrityException,
                        StreamIOException,
                        java.io.UnsupportedEncodingException
Specified by:
deserialize in interface DODeserializer
Throws:
ObjectIntegrityException
StreamIOException
java.io.UnsupportedEncodingException

startPrefixMapping

public void startPrefixMapping(java.lang.String prefix,
                               java.lang.String uri)
Specified by:
startPrefixMapping in interface org.xml.sax.ContentHandler
Overrides:
startPrefixMapping in class org.xml.sax.helpers.DefaultHandler

endPrefixMapping

public void endPrefixMapping(java.lang.String prefix)
Specified by:
endPrefixMapping in interface org.xml.sax.ContentHandler
Overrides:
endPrefixMapping in class org.xml.sax.helpers.DefaultHandler

startElement

public void startElement(java.lang.String uri,
                         java.lang.String localName,
                         java.lang.String qName,
                         org.xml.sax.Attributes a)
                  throws org.xml.sax.SAXException
Specified by:
startElement in interface org.xml.sax.ContentHandler
Overrides:
startElement in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException

characters

public void characters(char[] ch,
                       int start,
                       int length)
Specified by:
characters in interface org.xml.sax.ContentHandler
Overrides:
characters in class org.xml.sax.helpers.DefaultHandler

endElement

public void endElement(java.lang.String uri,
                       java.lang.String localName,
                       java.lang.String qName)
                throws org.xml.sax.SAXException
Specified by:
endElement in interface org.xml.sax.ContentHandler
Overrides:
endElement in class org.xml.sax.helpers.DefaultHandler
Throws:
org.xml.sax.SAXException