protected void freezeVersion(BlobAccessor accessor, Document doc) { Blob blob = accessor.getBlob(); DocumentBlobProvider blobProvider = getDocumentBlobProvider(blob); if (blobProvider == null) { return; } try { Blob newBlob = blobProvider.freezeVersion((ManagedBlob) blob, doc); if (newBlob != null) { accessor.setBlob(newBlob); } } catch (IOException e) { throw new RuntimeException(e); } }
protected void checkBlob(Document doc, BlobAccessor accessor) { Blob blob = accessor.getBlob(); if (!(blob instanceof ManagedBlob)) { return; } // compare current provider with expected String expectedProviderId = getProviderId(doc, blob, accessor.getXPath()); if (((ManagedBlob) blob).getProviderId().equals(expectedProviderId)) { return; } // re-write blob // TODO add APIs so that blob providers can copy blobs efficiently from each other Blob newBlob; try (InputStream in = blob.getStream()) { newBlob = Blobs.createBlob(in, blob.getMimeType(), blob.getEncoding()); newBlob.setFilename(blob.getFilename()); newBlob.setDigest(blob.getDigest()); } catch (IOException e) { throw new RuntimeException(e); } accessor.setBlob(newBlob); }