diff --git a/src/main/java/org/fcrepo/migration/OcflSessionFactoryFactoryBean.java b/src/main/java/org/fcrepo/migration/OcflSessionFactoryFactoryBean.java index 6628db6..dc16ffc 100644 --- a/src/main/java/org/fcrepo/migration/OcflSessionFactoryFactoryBean.java +++ b/src/main/java/org/fcrepo/migration/OcflSessionFactoryFactoryBean.java @@ -22,6 +22,7 @@ import com.github.benmanes.caffeine.cache.Caffeine; import io.ocfl.api.OcflConfig; import io.ocfl.api.model.DigestAlgorithm; +import io.ocfl.api.DigestAlgorithmRegistry; import io.ocfl.core.OcflRepositoryBuilder; import io.ocfl.core.extension.storage.layout.config.HashedNTupleLayoutConfig; import io.ocfl.core.path.mapper.LogicalPathMappers; @@ -93,7 +94,8 @@ public OcflSessionFactoryFactoryBean(final Path ocflRoot, final String user, final String userUri, final boolean disableChecksumValidation) { - this(ocflRoot, stagingDir, migrationType, user, userUri, DigestAlgorithm.sha512, disableChecksumValidation); + this(ocflRoot, stagingDir, migrationType, user, userUri, + DigestAlgorithmRegistry.sha512, disableChecksumValidation); } @Override diff --git a/src/main/java/org/fcrepo/migration/handlers/ocfl/ArchiveGroupHandler.java b/src/main/java/org/fcrepo/migration/handlers/ocfl/ArchiveGroupHandler.java index b78285c..d963c9a 100644 --- a/src/main/java/org/fcrepo/migration/handlers/ocfl/ArchiveGroupHandler.java +++ b/src/main/java/org/fcrepo/migration/handlers/ocfl/ArchiveGroupHandler.java @@ -276,8 +276,7 @@ public void processObjectVersions(final Iterable version final var datastreamHeaders = createDatastreamHeaders(dv, f6DsId, f6ObjectId, filename, mimeType, createDate); - - binaryMeta.put(f6DsId, new BinaryMeta(datastreamFilename, mimeType, dv.getLabel())); + binaryMeta.put(f6DsId, new BinaryMeta(filename, mimeType, dv.getLabel())); if (externalHandlingMap.containsKey(dv.getDatastreamInfo().getControlGroup())) { InputStream content = null; @@ -492,7 +491,8 @@ private void updateFilenames(final Set toUpdate, final var origHeaders = session.readHeaders(id); final var filename = filenameMap.get(id); if (StringUtils.isNotBlank(filename)) { - final var newHeaders = ResourceHeaders.builder(origHeaders).withFilename(filename).build(); + final var newHeaders = ResourceHeaders.builder(origHeaders). + withContentPath(filename).withFilename(filename).build(); session.writeHeaders(newHeaders); } }); @@ -673,6 +673,7 @@ private ResourceHeaders createDatastreamHeaders(final DatastreamVersion dv, headers.withArchivalGroupId(f6ObjectId); } headers.withFilename(filename); + //headers.withContentPath(filename); headers.withCreatedDate(Instant.parse(createDate)); headers.withLastModifiedDate(lastModified); headers.withLastModifiedBy(user); diff --git a/src/main/java/org/fcrepo/migration/handlers/ocfl/OcflObjectSessionWrapper.java b/src/main/java/org/fcrepo/migration/handlers/ocfl/OcflObjectSessionWrapper.java index 0beae3b..fd01f44 100644 --- a/src/main/java/org/fcrepo/migration/handlers/ocfl/OcflObjectSessionWrapper.java +++ b/src/main/java/org/fcrepo/migration/handlers/ocfl/OcflObjectSessionWrapper.java @@ -45,6 +45,7 @@ public class OcflObjectSessionWrapper implements OcflObjectSession { private static final Timer deleteResourceTimer = Metrics.timer(METRIC_NAME, OPERATION, "deleteResource"); private static final Timer readHeadersTimer = Metrics.timer(METRIC_NAME, OPERATION, "readHeaders"); private static final Timer readContentTimer = Metrics.timer(METRIC_NAME, OPERATION, "readContent"); + private static final Timer readRangeTimer = Metrics.timer(METRIC_NAME, OPERATION, "readRange"); private static final Timer listVersionsTimer = Metrics.timer(METRIC_NAME, OPERATION, "listVersions"); private static final Timer containsResourceTimer = Metrics.timer(METRIC_NAME, OPERATION, "containsResource"); private static final Timer commitTimer = Metrics.timer(METRIC_NAME, OPERATION, "commit"); @@ -111,6 +112,17 @@ public ResourceContent readContent(final String resourceId, final String version return readContentTimer.record(() -> inner.readContent(resourceId, versionNumber)); } + @Override + public ResourceContent readRange(final String resourceId, final long start, final long end) { + return readRangeTimer.record(() -> inner.readRange(resourceId, start, end)); + } + + @Override + public ResourceContent readRange(final String resourceId, final String versionNumber, + final long start, final long end) { + return readRangeTimer.record(() -> inner.readRange(resourceId, versionNumber, start, end)); + } + @Override public List listVersions(final String resourceId) { return listVersionsTimer.record(() -> inner.listVersions(resourceId)); diff --git a/src/main/java/org/fcrepo/migration/handlers/ocfl/PlainOcflObjectSession.java b/src/main/java/org/fcrepo/migration/handlers/ocfl/PlainOcflObjectSession.java index 3285911..0033978 100644 --- a/src/main/java/org/fcrepo/migration/handlers/ocfl/PlainOcflObjectSession.java +++ b/src/main/java/org/fcrepo/migration/handlers/ocfl/PlainOcflObjectSession.java @@ -253,6 +253,17 @@ public ResourceContent readContent(final String resourceId, final String version throw new UnsupportedOperationException("Not implemented"); } + @Override + public ResourceContent readRange(final String resourceId, final long start, final long end) { + throw new UnsupportedOperationException("Not implemented"); + } + + @Override + public ResourceContent readRange(final String resourceId, final String versionNumber, + final long start, final long end) { + throw new UnsupportedOperationException("Not implemented"); + } + @Override public List listVersions(final String resourceId) { throw new UnsupportedOperationException("Not implemented"); diff --git a/src/test/java/org/fcrepo/migration/handlers/ocfl/ArchiveGroupHandlerTest.java b/src/test/java/org/fcrepo/migration/handlers/ocfl/ArchiveGroupHandlerTest.java index d84b583..06da0d3 100644 --- a/src/test/java/org/fcrepo/migration/handlers/ocfl/ArchiveGroupHandlerTest.java +++ b/src/test/java/org/fcrepo/migration/handlers/ocfl/ArchiveGroupHandlerTest.java @@ -249,7 +249,8 @@ public void updateFilenameFromRelsInt() throws IOException { final var pid = "obj2"; final var dsId1 = "ds3"; - final var ds1V1 = datastreamVersion(dsId1, true, MANAGED, "application/xml", "

hello

", null); + final var ds1V1 = datastreamVersion(dsId1, true, true, MANAGED, "application/xml", + "

hello

", DS_ACTIVE, null, null); final var relsIntV1 = datastreamVersion(RELS_INT, true, MANAGED, "application/rdf+xml", "\n" + @@ -287,18 +288,19 @@ public void filenameRemovedFromRelsInt() throws IOException { final var pid = "obj2"; final var dsId1 = "ds3"; - final var ds1V1 = datastreamVersion(dsId1, true, MANAGED, "application/xml", "

hello

", null); - final var relsIntV1 = datastreamVersion(RELS_INT, true, MANAGED, "application/rdf+xml", + final var ds1V1 = datastreamVersion(dsId1, true, true, MANAGED, "application/xml", + "

hello

", DS_ACTIVE, null, "example.xml"); + final var relsIntV1 = datastreamVersion(RELS_INT, true, false, MANAGED, "application/rdf+xml", "\n" + "\t\n" + "\t\texample.xml\n" + "\t\n" + - "", null); - final var relsIntV2 = datastreamVersion(RELS_INT, false, MANAGED, "application/rdf+xml", + "
", DS_ACTIVE, null, RELS_INT ); + final var relsIntV2 = datastreamVersion(RELS_INT, false, false, MANAGED, "application/rdf+xml", "\n" + - "", null); + "", DS_ACTIVE, null, RELS_INT ); handler.processObjectVersions(List.of( objectVersionReference(pid, true, List.of(ds1V1)), @@ -313,7 +315,7 @@ public void filenameRemovedFromRelsInt() throws IOException { verifyObjectHeaders(session, ocflObjectId); verifyBinary(contentVersionToString(session, ocflObjectId, dsId1, "v1"), ds1V1); - verifyHeaders(session, ocflObjectId, dsId1, ds1V1, "v1"); + verifyHeaders(session, ocflObjectId, dsId1, ds1V1, "v1", "example.xml"); verifyDescRdf(session, ocflObjectId, dsId1, ds1V1, "v1"); verifyDescHeaders(session, ocflObjectId, dsId1, "v1"); @@ -323,7 +325,7 @@ public void filenameRemovedFromRelsInt() throws IOException { verifyDescHeaders(session, ocflObjectId, dsId1, "v2"); verifyBinary(contentVersionToString(session, ocflObjectId, dsId1, "v3"), ds1V1); - verifyHeaders(session, ocflObjectId, dsId1, ds1V1, "v3", "ds3-label"); + verifyHeaders(session, ocflObjectId, dsId1, ds1V1, "v3", "example.xml"); verifyDescRdf(session, ocflObjectId, dsId1, ds1V1, "v3"); verifyDescHeaders(session, ocflObjectId, dsId1, "v3"); } @@ -364,7 +366,7 @@ public void filenameRemovedFromRelsIntAndLabelChanged() throws IOException { verifyObjectHeaders(session, ocflObjectId); verifyBinary(contentVersionToString(session, ocflObjectId, dsId1, "v1"), ds1V1); - verifyHeaders(session, ocflObjectId, dsId1, ds1V1, "v1", "ds3-label.xml"); + verifyHeaders(session, ocflObjectId, dsId1, ds1V1, "v1", "ds3.xml"); verifyDescRdf(session, ocflObjectId, dsId1, ds1V1, "v1"); verifyDescHeaders(session, ocflObjectId, dsId1, "v1"); @@ -483,12 +485,12 @@ public void processObjectMultipleVersionsWithDeletedDsF6Format() throws IOExcept final var dsId2 = "ds4"; final var ds1V1 = datastreamVersion(dsId1, true, true, MANAGED, "application/xml", "

hello

", - DS_INACTIVE, null, dsId1 + "-label"); + DS_INACTIVE, null, dsId1); final var ds2V1 = datastreamVersion(dsId2, true, false, MANAGED, "text/plain", "goodbye", - DS_DELETED, null, dsId2 + "-label"); + DS_DELETED, null, dsId2); final var ds2V2 = datastreamVersion(dsId2, false, true, MANAGED, "text/plain", "fedora", - DS_DELETED, null, dsId2 + "-label"); + DS_DELETED, null, dsId2); handler.processObjectVersions(List.of( objectVersionReference(pid, true, List.of(ds1V1, ds2V1)), @@ -529,12 +531,12 @@ public void processObjectMultipleVersionsAndDeleteInactiveF6Format() throws IOEx final var dsId2 = "ds4"; final var ds1V1 = datastreamVersion(dsId1, true, true, MANAGED, "application/xml", "

hello

", - DS_INACTIVE, null, dsId1 + "-label"); + DS_INACTIVE, null, dsId1); final var ds2V1 = datastreamVersion(dsId2, true, false, MANAGED, "text/plain", "goodbye", - DS_DELETED, null, dsId2 + "-label"); + DS_DELETED, null, dsId2); final var ds2V2 = datastreamVersion(dsId2, false, true, MANAGED, "text/plain", "fedora", - DS_DELETED, null, dsId2 + "-label"); + DS_DELETED, null, dsId2); handler.processObjectVersions(List.of( objectVersionReference(pid, true, List.of(ds1V1, ds2V1)), @@ -717,10 +719,10 @@ public void processObjectMultipleVersionsWithDeletedDsPlainFormat() throws IOExc final var ds1V1 = datastreamVersion(dsId1, true, MANAGED, "application/xml", "

hello

", null); final var ds2V1 = datastreamVersion(dsId2, true, false, MANAGED, "text/plain", "goodbye", - DS_DELETED, null, dsId2 + "-label"); + DS_DELETED, null, dsId2); final var ds2V2 = datastreamVersion(dsId2, false, true, MANAGED, "text/plain", "fedora", - DS_DELETED, null, dsId2 + "-label"); + DS_DELETED, null, dsId2); handler.processObjectVersions(List.of( objectVersionReference(pid, true, List.of(ds1V1, ds2V1)), @@ -848,17 +850,17 @@ public void processObjectSingleVersionF6FormatWithExtensions() throws IOExceptio verifyObjectHeaders(session, ocflObjectId); verifyBinary(contentToString(session, ocflObjectId, dsId1), ds1); - verifyHeaders(session, ocflObjectId, dsId1, ds1, "v1", "ds1-label.txt"); + verifyHeaders(session, ocflObjectId, dsId1, ds1, "v1", "ds1.txt"); verifyDescRdf(session, ocflObjectId, dsId1, ds1); verifyDescHeaders(session, ocflObjectId, dsId1); verifyBinary(contentToString(session, ocflObjectId, dsId2), ds2); - verifyHeaders(session, ocflObjectId, dsId2, ds2, "v1", "ds2-label.rdf"); + verifyHeaders(session, ocflObjectId, dsId2, ds2, "v1", "ds2.rdf"); verifyDescRdf(session, ocflObjectId, dsId2, ds2); verifyDescHeaders(session, ocflObjectId, dsId2); verifyBinary(contentToString(session, ocflObjectId, dsId3), ds3); - verifyHeaders(session, ocflObjectId, dsId3, ds3, "v1", "ds3-label.jpg"); + verifyHeaders(session, ocflObjectId, dsId3, ds3, "v1", "ds3.jpg"); verifyDescRdf(session, ocflObjectId, dsId3, ds3); verifyDescHeaders(session, ocflObjectId, dsId3); } @@ -1021,7 +1023,7 @@ private void verifyHeaders(final OcflObjectSession session, final String dsId, final DatastreamVersion datastreamVersion, final String versionNumber) { - verifyHeaders(session, ocflObjectId, dsId, datastreamVersion, versionNumber, dsId + "-label"); + verifyHeaders(session, ocflObjectId, dsId, datastreamVersion, versionNumber, dsId); } private void verifyHeaders(final OcflObjectSession session, @@ -1301,7 +1303,7 @@ private DatastreamVersion datastreamVersion(final String datastreamId, final String content, final String externalUrl) { return datastreamVersion(datastreamId, isFirst, false, controlGroup, mimeType, - content, DS_ACTIVE, externalUrl, datastreamId + "-label"); + content, DS_ACTIVE, externalUrl, datastreamId ); } private DatastreamVersion datastreamVersion(final String datastreamId, @@ -1312,7 +1314,7 @@ private DatastreamVersion datastreamVersion(final String datastreamId, final String content, final String externalUrl) { return datastreamVersion(datastreamId, isFirst, isLast, controlGroup, mimeType, - content, DS_ACTIVE, externalUrl, datastreamId + "-label"); + content, DS_ACTIVE, externalUrl, datastreamId ); } private DatastreamVersion datastreamVersion(final String datastreamId, diff --git a/src/test/java/org/fcrepo/migration/pidlist/HeadOnlyIT.java b/src/test/java/org/fcrepo/migration/pidlist/HeadOnlyIT.java index 9c17e8c..1a83751 100644 --- a/src/test/java/org/fcrepo/migration/pidlist/HeadOnlyIT.java +++ b/src/test/java/org/fcrepo/migration/pidlist/HeadOnlyIT.java @@ -10,6 +10,7 @@ import io.ocfl.api.OcflRepository; import io.ocfl.api.model.DigestAlgorithm; +import io.ocfl.api.DigestAlgorithmRegistry; import io.ocfl.api.model.FileDetails; import io.ocfl.api.model.ObjectDetails; import io.ocfl.core.OcflRepositoryBuilder; @@ -43,7 +44,7 @@ public class HeadOnlyIT { private final boolean disableChecksum = false; private final boolean disableDc = false; - private final DigestAlgorithm digestAlgorithm = DigestAlgorithm.sha512; + private final DigestAlgorithm digestAlgorithm = DigestAlgorithmRegistry.sha512; private final MigrationType migrationType = MigrationType.FEDORA_OCFL; private LegacyFSIDResolver idResolver;