private void save()

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();
	}