in taverna-scufl2-ucfpackage/src/main/java/org/apache/taverna/scufl2/ucfpackage/impl/odfdom/pkg/OdfPackage.java [561:613]
private void save(OutputStream odfStream, String baseURI) throws Exception {
mBaseURI = baseURI;
OdfFileEntry rootEntry = getManifestEntries().get(SLASH);
if (rootEntry == null) {
rootEntry = new OdfFileEntry(SLASH, mMediaType);
mManifestList.add(0, rootEntry.getPath());
} else
rootEntry.setMediaType(mMediaType);
ZipOutputStream zos = new ZipOutputStream(odfStream);
long modTime = (new java.util.Date()).getTime();
/*
* move manifest to first place to ensure it is written first into the
* package zip file
*/
if (mPackageEntries.contains(OdfFile.MEDIA_TYPE.getPath())) {
mPackageEntries.remove(OdfFile.MEDIA_TYPE.getPath());
mPackageEntries.add(0, OdfFile.MEDIA_TYPE.getPath());
}
Iterator<String> it = mPackageEntries.iterator();
while (it.hasNext()) {
String key = it.next();
byte[] data = getBytes(key);
ZipEntry ze = mZipEntries.get(key);
if (ze == null)
ze = new ZipEntry(key);
ze.setTime(modTime);
ze.setMethod(isFileCompressed(key) ? DEFLATED : STORED);
CRC32 crc = new CRC32();
if (data != null) {
crc.update(data);
ze.setSize(data.length);
} else {
ze.setMethod(STORED);
ze.setSize(0);
}
ze.setCrc(crc.getValue());
ze.setCompressedSize(-1);
zos.putNextEntry(ze);
if (data != null)
zos.write(data, 0, data.length);
zos.closeEntry();
mZipEntries.put(key, ze);
}
zos.close();
odfStream.flush();
}