private Path writeIfLocal()

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