if (isContentBundle)
{
Div div = new Div();
div.setID(gensym("div"));
div.setTYPE("DSpace Content Bitstream");
Fptr fptr = new Fptr();
fptr.setFILEID(fileID);
div.getContent().add(fptr);
contentDivs.add(div);
}
file.setSEQ(bitstreams[bits].getSequenceID());
String groupID = "GROUP_" + xmlIDstart + sid;
/*
* If we're in THUMBNAIL or TEXT bundles, the bitstream is
* extracted text or a thumbnail, so we use the name to work
* out which bitstream to be in the same group as
*/
if ((bundles[i].getName() != null)
&& (bundles[i].getName().equals("THUMBNAIL") ||
bundles[i].getName().startsWith("TEXT")))
{
// Try and find the original bitstream, and chuck the
// derived bitstream in the same group
Bitstream original = findOriginalBitstream(item,
bitstreams[bits]);
if (original != null)
{
groupID = "GROUP_" + xmlIDstart
+ original.getSequenceID();
}
}
file.setGROUPID(groupID);
file.setMIMETYPE(bitstreams[bits].getFormat().getMIMEType());
// FIXME: CREATED: no date
file.setSIZE(auth ? bitstreams[bits].getSize() : 0);
// translate checksum and type to METS, if available.
String csType = bitstreams[bits].getChecksumAlgorithm();
String cs = bitstreams[bits].getChecksum();
if (auth && cs != null && csType != null)
{
try
{
file.setCHECKSUMTYPE(Checksumtype.parse(csType));
file.setCHECKSUM(cs);
}
catch (MetsException e)
{
log.warn("Cannot set bitstream checksum type="+csType+" in METS.");
}
}
// FLocat: filename is MD5 checksum
FLocat flocat = new FLocat();
flocat.setLOCTYPE(Loctype.URL);
flocat.setXlinkHref(makeBitstreamName(bitstreams[bits]));
// Make bitstream techMD metadata, add to file.
String techID = "techMd_for_bitstream_"+bitstreams[bits].getSequenceID();
AmdSec fAmdSec = new AmdSec();
fAmdSec.setID(techID);
TechMD techMd = new TechMD();
techMd.setID(gensym("tech"));
MdWrap mdWrap = new MdWrap();
setMdType(mdWrap, metsName);
XmlData xmlData = new XmlData();
mdWrap.getContent().add(xmlData);
techMd.getContent().add(mdWrap);
fAmdSec.getContent().add(techMd);
mets.getContent().add(fAmdSec);
crosswalkToMets(xwalk, bitstreams[bits], xmlData);
file.setADMID(techID);
// Add FLocat to File, and File to FileGrp
file.getContent().add(flocat);
fileGrp.getContent().add(file);
}
// Add fileGrp to fileSec
fileSec.getContent().add(fileGrp);
}
// Add fileSec to document
mets.getContent().add(fileSec);
// Create simple structMap: initial div represents the Item,
// and user-visible content bitstreams are in its child divs.
StringBuffer dmdIds = new StringBuffer();
for (int i = 0; i < dmdId.length; ++i)
dmdIds.append(" "+dmdId[i]);
StructMap structMap = new StructMap();
structMap.setID(gensym("struct"));
structMap.setTYPE("LOGICAL");
structMap.setLABEL("DSpace");
Div div0 = new Div();
div0.setID(gensym("div"));
div0.setTYPE("DSpace Item");
div0.setDMDID(dmdIds.substring(1));
if (licenseID != null)
div0.setADMID(licenseID);
// if there is a primary bitstream, add FPTR to it.
if (primaryBitstreamFileID != null)
{
Fptr fptr = new Fptr();
fptr.setFILEID(primaryBitstreamFileID);
div0.getContent().add(fptr);
}
// add DIV for each content bitstream
div0.getContent().addAll(contentDivs);