public abstract class AbstractMETSDisseminator extends AbstractPackageDisseminator
This is a generic packager framework intended to be subclassed to create packagers for more specific METS "profiles". METS is an abstract and flexible framework that can encompass many different kinds of metadata and inner package structures.
Package Parameters:
manifestOnly -- if true, generate a standalone XML
document of the METS manifest instead of a complete package. Any
other metadata (such as licenses) will be encoded inline.
Default is false.unauthorized -- this determines what is done when the
packager encounters a Bundle or Bitstream it is not authorized to
read. By default, it just quits with an AuthorizeException.
If this option is present, it must be one of the following values:
skip -- simply exclude unreadable content from package.zero -- include unreadable bitstreams as 0-length files;
unreadable Bundles will still cause authorize errors.| Modifier and Type | Class and Description |
|---|---|
protected static class |
AbstractMETSDisseminator.MdStreamCache
Wrapper for a table of streams to add to the package, such as
mdRef'd metadata.
|
| Modifier and Type | Field and Description |
|---|---|
protected AuthorizeService |
authorizeService |
protected BitstreamService |
bitstreamService |
protected ConfigurationService |
configurationService |
protected CreativeCommonsService |
creativeCommonsService |
protected static int |
DEFAULT_MODIFIED_DATE
Default date/time (in milliseconds since epoch) to set for Zip Entries
for DSpace Objects which don't have a Last Modified date.
|
protected int |
idCounter |
protected static org.jdom.output.XMLOutputter |
outputter |
protected SiteService |
siteService |
protected static String |
TEMPLATE_TYPE_SUFFIX
Suffix for Template objects (e.g.
|
communityService, itemService| Constructor and Description |
|---|
AbstractMETSDisseminator() |
| Modifier and Type | Method and Description |
|---|---|
protected String |
addAmdSec(Context context,
DSpaceObject dso,
PackageParameters params,
edu.harvard.hul.ois.mets.Mets mets,
AbstractMETSDisseminator.MdStreamCache extraStreams) |
protected void |
addBitstreamsToZip(Context context,
DSpaceObject dso,
PackageParameters params,
ZipOutputStream zip)
Add Bitstreams associated with a given DSpace Object into an
existing ZipOutputStream
|
protected void |
addLogoBitstream(Context context,
Bitstream logoBs,
edu.harvard.hul.ois.mets.FileSec fileSec,
edu.harvard.hul.ois.mets.Div div0,
PackageParameters params) |
abstract void |
addStructMap(Context context,
DSpaceObject dso,
PackageParameters params,
edu.harvard.hul.ois.mets.Mets mets)
Add any additional
structMap elements to the
METS document, as required by this subclass. |
protected void |
addToAmdSec(edu.harvard.hul.ois.mets.AmdSec fAmdSec,
String[] mdTypes,
Class mdSecClass,
Context context,
DSpaceObject dso,
PackageParameters params,
AbstractMETSDisseminator.MdStreamCache extraStreams) |
abstract String |
bundleToFileGrp(String bname)
Returns fileGrp's USE attribute value corresponding to a DSpace bundle name.
|
protected edu.harvard.hul.ois.mets.helper.MetsElement |
crosswalkToMetsElement(Context context,
DisseminationCrosswalk xwalk,
DSpaceObject dso,
edu.harvard.hul.ois.mets.helper.MetsElement me) |
void |
disseminate(Context context,
DSpaceObject dso,
PackageParameters params,
File pkgFile)
Export the object (Item, Collection, or Community) as a
"package" on the indicated OutputStream.
|
protected Bitstream |
findOriginalBitstream(Item item,
Bitstream derived)
For a bitstream that's a thumbnail or extracted text, find the
corresponding bitstream it was derived from, in the ORIGINAL bundle.
|
protected String |
gensym(String prefix)
Make a new unique ID symbol with specified prefix.
|
abstract String[] |
getDigiprovMdTypes(Context context,
DSpaceObject dso,
PackageParameters params)
Get the type string of the "digiprov" (digital provenance)
metadata to create for each object and each Bitstream in an Item.
|
abstract String[] |
getDmdTypes(Context context,
DSpaceObject dso,
PackageParameters params)
Get the types of Item-wide DMD to include in package.
|
protected String |
getHandleURN(String handle) |
String |
getMIMEType(PackageParameters params)
Identifies the MIME-type of this package, e.g.
|
String |
getObjectTypeString(DSpaceObject dso)
Build a string which will be used as the "Type" of this object in
the METS manifest.
|
String |
getParameterHelp()
Returns a user help string which should describe the
additional valid command-line options that this packager
implementation will accept when using the
-o or
--option flags with the Packager script. |
abstract String |
getProfile()
Returns name of METS profile to which this package conforms, e.g.
|
abstract String[] |
getRightsMdTypes(Context context,
DSpaceObject dso,
PackageParameters params)
Get the type string of the "rights" (permission and/or license)
metadata to create for each object and each Bitstream in an Item.
|
abstract String[] |
getSourceMdTypes(Context context,
DSpaceObject dso,
PackageParameters params)
Get the type string of the source metadata to create for each
object and each Bitstream in an Item.
|
abstract String[] |
getTechMdTypes(Context context,
DSpaceObject dso,
PackageParameters params)
Get the type string of the technical metadata to create for each
object and each Bitstream in an Item.
|
abstract boolean |
includeBundle(Bundle bundle) |
protected void |
linkLicenseRefsToBitstreams(Context context,
PackageParameters params,
DSpaceObject dso,
edu.harvard.hul.ois.mets.MdRef mdRef)
Cleanup our license file reference links, as Deposit Licenses and CC Licenses can be
added two ways (and we only want to add them to zip package *once*):
(1) Added as a normal Bitstream (assuming LICENSE and CC_LICENSE bundles will be included in pkg)
(2) Added via a 'rightsMD' crosswalk (as they are rights information/metadata on an Item)
|
String |
makeBitstreamURL(Context context,
Bitstream bitstream,
PackageParameters params)
Get the URL by which the METS manifest refers to a Bitstream
member within the same package.
|
protected edu.harvard.hul.ois.mets.Div |
makeChildDiv(String type,
DSpaceObject dso,
PackageParameters params)
Create a
<div> element with <mptr> which references a child
object via its handle (and via a local file name, when recursively disseminating
all child objects). |
protected edu.harvard.hul.ois.mets.Div |
makeFileDiv(String fileID,
String type) |
protected edu.harvard.hul.ois.mets.Mets |
makeManifest(Context context,
DSpaceObject dso,
PackageParameters params,
AbstractMETSDisseminator.MdStreamCache extraStreams)
Write out a METS manifest.
|
protected edu.harvard.hul.ois.mets.helper.MdSec |
makeMdSec(Context context,
DSpaceObject dso,
Class mdSecClass,
String typeSpec,
PackageParameters params,
AbstractMETSDisseminator.MdStreamCache extraStreams)
Create an element wrapped around a metadata reference (either mdWrap
or mdRef); i.e.
|
abstract edu.harvard.hul.ois.mets.MetsHdr |
makeMetsHdr(Context context,
DSpaceObject dso,
PackageParameters params)
Create metsHdr element - separate so subclasses can override.
|
protected String |
makePersistentID(DSpaceObject dso) |
protected void |
resetCounter()
Resets the unique ID counter used by gensym() method to
determine the @ID values of METS tags.
|
protected void |
setMdType(edu.harvard.hul.ois.mets.MdRef mdRef,
String mdtype) |
protected void |
setMdType(edu.harvard.hul.ois.mets.MdWrap mdWrap,
String mdtype) |
protected void |
writeZipPackage(Context context,
DSpaceObject dso,
PackageParameters params,
OutputStream pkg)
Make a Zipped up METS package for the given DSpace Object
|
addToPackageList, disseminateAll, getPackageListprotected static org.jdom.output.XMLOutputter outputter
protected final AuthorizeService authorizeService
protected final BitstreamService bitstreamService
protected final SiteService siteService
protected final CreativeCommonsService creativeCommonsService
protected final ConfigurationService configurationService
protected int idCounter
protected static final int DEFAULT_MODIFIED_DATE
protected static final String TEMPLATE_TYPE_SUFFIX
protected String gensym(String prefix)
prefix - the prefix of the identifier, constrained to XML ID schemaprotected void resetCounter()
public String getMIMEType(PackageParameters params)
PackageDisseminator"application/zip".
Required when sending the package via HTTP, to
provide the Content-Type header.params - Package Parameterspublic void disseminate(Context context, DSpaceObject dso, PackageParameters params, File pkgFile) throws PackageValidationException, CrosswalkException, AuthorizeException, SQLException, IOException
Use the params parameter list to adjust the way the
package is made, e.g. including a "metadataOnly"
parameter might make the package a bare manifest in XML
instead of a Zip file including manifest and contents.
Throws an exception of the chosen object is not acceptable or there is a failure creating the package.
context - DSpace context.dso - DSpace object (item, collection, etc)params - Properties-style list of options specific to this packagerpkgFile - File where export package should be writtenPackageValidationException - if package cannot be created or there
is a fatal error in creating it.CrosswalkException - if crosswalk errorAuthorizeException - if authorization errorSQLException - if database errorIOException - if IO errorprotected void writeZipPackage(Context context, DSpaceObject dso, PackageParameters params, OutputStream pkg) throws PackageValidationException, CrosswalkException, edu.harvard.hul.ois.mets.helper.MetsException, AuthorizeException, SQLException, IOException
context - DSpace Contextdso - The DSpace Objectparams - Parameters to the Packager scriptpkg - Package output streamPackageValidationException - if package validation errorCrosswalkException - if crosswalk errorAuthorizeException - if authorization erroredu.harvard.hul.ois.mets.helper.MetsException - if METS errorSQLException - if database errorIOException - if IO errorprotected void addBitstreamsToZip(Context context, DSpaceObject dso, PackageParameters params, ZipOutputStream zip) throws PackageValidationException, AuthorizeException, SQLException, IOException
context - DSpace Contextdso - The DSpace Objectparams - Parameters to the Packager scriptzip - Zip outputPackageValidationException - if validation errorAuthorizeException - if authorization errorSQLException - if database errorIOException - if IO errorprotected void setMdType(edu.harvard.hul.ois.mets.MdWrap mdWrap,
String mdtype)
protected void setMdType(edu.harvard.hul.ois.mets.MdRef mdRef,
String mdtype)
protected edu.harvard.hul.ois.mets.helper.MdSec makeMdSec(Context context, DSpaceObject dso, Class mdSecClass, String typeSpec, PackageParameters params, AbstractMETSDisseminator.MdStreamCache extraStreams) throws SQLException, PackageValidationException, CrosswalkException, IOException, AuthorizeException
context - DSpace Contextdso - DSpace Object we are generating METS manifest formdSecClass - class of mdSec (TechMD, RightsMD, DigiProvMD, etc)typeSpec - Type of metadata going into this mdSec (e.g. MODS, DC, PREMIS, etc)params - the PackageParametersextraStreams - list of extra files which need to be added to final dissemination packageSQLException - if database errorPackageValidationException - if package validation errorCrosswalkException - if crosswalk errorIOException - if IO errorAuthorizeException - if authorization errorprotected void addToAmdSec(edu.harvard.hul.ois.mets.AmdSec fAmdSec,
String[] mdTypes,
Class mdSecClass,
Context context,
DSpaceObject dso,
PackageParameters params,
AbstractMETSDisseminator.MdStreamCache extraStreams)
throws SQLException,
PackageValidationException,
CrosswalkException,
IOException,
AuthorizeException
protected String addAmdSec(Context context, DSpaceObject dso, PackageParameters params, edu.harvard.hul.ois.mets.Mets mets, AbstractMETSDisseminator.MdStreamCache extraStreams) throws SQLException, PackageValidationException, CrosswalkException, IOException, AuthorizeException
protected String makePersistentID(DSpaceObject dso)
protected edu.harvard.hul.ois.mets.Mets makeManifest(Context context, DSpaceObject dso, PackageParameters params, AbstractMETSDisseminator.MdStreamCache extraStreams) throws edu.harvard.hul.ois.mets.helper.MetsException, PackageValidationException, CrosswalkException, AuthorizeException, SQLException, IOException
context - contextdso - DSpaceObjectparams - packaging paramsextraStreams - streamsedu.harvard.hul.ois.mets.helper.MetsException - if mets errorPackageValidationException - if validation errorCrosswalkException - if crosswalk errorAuthorizeException - if authorization errorSQLException - if database errorIOException - if IO errorprotected void addLogoBitstream(Context context, Bitstream logoBs, edu.harvard.hul.ois.mets.FileSec fileSec, edu.harvard.hul.ois.mets.Div div0, PackageParameters params) throws SQLException
SQLExceptionprotected edu.harvard.hul.ois.mets.Div makeChildDiv(String type, DSpaceObject dso, PackageParameters params)
<div> element with <mptr> which references a child
object via its handle (and via a local file name, when recursively disseminating
all child objects).type - - type attr value for the <div>dso - - object for which to create the divparams - package paramsDiv with dso as child.protected Bitstream findOriginalBitstream(Item item, Bitstream derived) throws SQLException
item - the item we're dealing withderived - the derived bitstreamSQLException - if database errorprotected edu.harvard.hul.ois.mets.helper.MetsElement crosswalkToMetsElement(Context context, DisseminationCrosswalk xwalk, DSpaceObject dso, edu.harvard.hul.ois.mets.helper.MetsElement me) throws CrosswalkException, IOException, SQLException, AuthorizeException
protected void linkLicenseRefsToBitstreams(Context context, PackageParameters params, DSpaceObject dso, edu.harvard.hul.ois.mets.MdRef mdRef) throws SQLException, IOException, AuthorizeException
So, if they are being added by *both*, then we want to just link the rightsMD <mdRef> entry so
that it points to the Bitstream location. This implementation is a bit 'hackish', but it's
the best we can do, as the Harvard METS API doesn't allow us to go back and crawl an entire
METS file to look for these inconsistencies/duplications.
context - current DSpace Contextparams - current Packager Parametersdso - current DSpace ObjectmdRef - the rightsMD <mdRef> elementSQLException - if database errorIOException - if IO errorAuthorizeException - if authorization errorpublic String getObjectTypeString(DSpaceObject dso)
Default format is "DSpace [Type-as-string]".
dso - DSpaceObject to create type-string forConstantspublic String getParameterHelp()
-o or
--option flags with the Packager script.public String makeBitstreamURL(Context context, Bitstream bitstream, PackageParameters params) throws SQLException
For a manifest-only METS, this is a reference to an HTTP URL where the bitstream should be able to be downloaded from.
context - contextbitstream - the Bitstreamparams - Packager ParametersSQLException - if database errorpublic abstract edu.harvard.hul.ois.mets.MetsHdr makeMetsHdr(Context context, DSpaceObject dso, PackageParameters params) throws SQLException
context - contextdso - DSpaceObjectparams - packaging paramsSQLException - if database errorpublic abstract String getProfile()
public abstract String bundleToFileGrp(String bname)
bname - name of DSpace bundle.public abstract String[] getDmdTypes(Context context, DSpaceObject dso, PackageParameters params) throws SQLException, IOException, AuthorizeException
"DC:qualifiedDublinCore" tells it to
create a METS section with MDTYPE="DC" and use the plugin
named "qualifiedDublinCore" to obtain the data.context - contextdso - DSpaceObjectparams - the PackageParameters passed to the disseminator.IOException - if IO errorSQLException - if database errorAuthorizeException - if authorization errorpublic abstract String[] getTechMdTypes(Context context, DSpaceObject dso, PackageParameters params) throws SQLException, IOException, AuthorizeException
getDmdTypes() above.context - contextdso - DSpaceObjectparams - the PackageParameters passed to the disseminator.IOException - if IO errorSQLException - if database errorAuthorizeException - if authorization errorpublic abstract String[] getSourceMdTypes(Context context, DSpaceObject dso, PackageParameters params) throws SQLException, IOException, AuthorizeException
getDmdTypes() above.context - contextdso - DSpaceObjectparams - the PackageParameters passed to the disseminator.IOException - if IO errorSQLException - if database errorAuthorizeException - if authorization errorpublic abstract String[] getDigiprovMdTypes(Context context, DSpaceObject dso, PackageParameters params) throws SQLException, IOException, AuthorizeException
getDmdTypes() above.context - contextdso - DSpaceObjectparams - the PackageParameters passed to the disseminator.IOException - if IO errorSQLException - if database errorAuthorizeException - if authorization errorpublic abstract String[] getRightsMdTypes(Context context, DSpaceObject dso, PackageParameters params) throws SQLException, IOException, AuthorizeException
getDmdTypes() above.context - contextdso - DSpaceObjectparams - the PackageParameters passed to the disseminator.IOException - if IO errorSQLException - if database errorAuthorizeException - if authorization errorpublic abstract void addStructMap(Context context, DSpaceObject dso, PackageParameters params, edu.harvard.hul.ois.mets.Mets mets) throws SQLException, IOException, AuthorizeException, edu.harvard.hul.ois.mets.helper.MetsException
structMap elements to the
METS document, as required by this subclass. A simple default
structure map which fulfills the minimal DSpace METS DIP/SIP
requirements is already present, so this does not need to do anything.context - contextdso - DSpaceObjectmets - the METS document to which to add structMapsparams - the PackageParameters passed to the disseminator.IOException - if IO errorSQLException - if database errorAuthorizeException - if authorization erroredu.harvard.hul.ois.mets.helper.MetsException - if METS errorpublic abstract boolean includeBundle(Bundle bundle)
bundle - bundleCopyright © 2016 DuraSpace. All rights reserved.