in taverna-prov/src/main/java/org/apache/taverna/prov/Saver.java [185:238]
private Path writeIfLocal(List<ExternalReferenceSPI> externalReferences,
Path file, String mimeType) throws IOException {
ValueCarryingExternalReference<?> valRef = null;
for (ExternalReferenceSPI ref : externalReferences) {
if (ref instanceof ValueCarryingExternalReference) {
valRef = (ValueCarryingExternalReference<?>) ref;
break;
}
}
if (valRef == null) {
return null;
}
String fileExtension;
try {
fileExtension = MimeTypes.getDefaultMimeTypes().forName(mimeType)
.getExtension();
} catch (MimeTypeException e1) {
fileExtension = "";
}
Path targetFile = file.resolveSibling(file.getFileName()
+ fileExtension);
MessageDigest sha = null;
MessageDigest sha512 = null;
OutputStream output = Files.newOutputStream(targetFile);
try {
try {
sha = MessageDigest.getInstance("SHA");
output = new DigestOutputStream(output, sha);
sha512 = MessageDigest.getInstance("SHA-512");
output = new DigestOutputStream(output, sha512);
} catch (NoSuchAlgorithmException e) {
logger.info("Could not find digest", e);
}
IOUtils.copyLarge(valRef.openStream(getContext()), output);
} finally {
output.close();
}
if (sha != null) {
getSha1sums().put(targetFile.toRealPath(), hexOfDigest(sha));
}
if (sha512 != null) {
sha512.digest();
getSha512sums().put(targetFile.toRealPath(), hexOfDigest(sha512));
}
return targetFile;
}